Skip to content

Commit 53468a5

Browse files
committed
MPT-16437 Reorganise resource catalog mixins structure
1 parent ae5f76d commit 53468a5

11 files changed

Lines changed: 617 additions & 567 deletions

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from mpt_api_client.resources.catalog.mixins.activatable_mixin import (
2+
ActivatableMixin,
3+
AsyncActivatableMixin,
4+
)
5+
from mpt_api_client.resources.catalog.mixins.document_mixin import (
6+
AsyncDocumentMixin,
7+
DocumentMixin,
8+
)
9+
from mpt_api_client.resources.catalog.mixins.media_mixin import (
10+
AsyncMediaMixin,
11+
MediaMixin,
12+
)
13+
from mpt_api_client.resources.catalog.mixins.publishable_mixin import (
14+
AsyncPublishableMixin,
15+
PublishableMixin,
16+
)
17+
18+
__all__ = [ # noqa: WPS410
19+
"ActivatableMixin",
20+
"AsyncActivatableMixin",
21+
"AsyncDocumentMixin",
22+
"AsyncMediaMixin",
23+
"AsyncPublishableMixin",
24+
"DocumentMixin",
25+
"MediaMixin",
26+
"PublishableMixin",
27+
]
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from mpt_api_client.models import ResourceData
2+
3+
4+
class ActivatableMixin[Model]:
5+
"""Activatable mixin adds the ability to activate and deactivate."""
6+
7+
def activate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
8+
"""Update state to Active.
9+
10+
Args:
11+
resource_id: Resource ID
12+
resource_data: Resource data will be updated
13+
"""
14+
return self._resource_action( # type: ignore[attr-defined, no-any-return]
15+
resource_id, "POST", "activate", json=resource_data
16+
)
17+
18+
def deactivate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
19+
"""Update state to Inactive.
20+
21+
Args:
22+
resource_id: Resource ID
23+
resource_data: Resource data will be updated
24+
"""
25+
return self._resource_action( # type: ignore[attr-defined, no-any-return]
26+
resource_id, "POST", "deactivate", json=resource_data
27+
)
28+
29+
30+
class AsyncActivatableMixin[Model]:
31+
"""Activatable mixin adds the ability to activate and deactivate."""
32+
33+
async def activate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
34+
"""Update state to Active.
35+
36+
Args:
37+
resource_id: Resource ID
38+
resource_data: Resource data will be updated
39+
"""
40+
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
41+
resource_id, "POST", "activate", json=resource_data
42+
)
43+
44+
async def deactivate(
45+
self, resource_id: str, resource_data: ResourceData | None = None
46+
) -> Model:
47+
"""Update state to Inactive.
48+
49+
Args:
50+
resource_id: Resource ID
51+
resource_data: Resource data will be updated
52+
"""
53+
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
54+
resource_id, "POST", "deactivate", json=resource_data
55+
)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from mpt_api_client.http.mixins import (
2+
AsyncCreateFileMixin,
3+
AsyncDownloadFileMixin,
4+
CreateFileMixin,
5+
DownloadFileMixin,
6+
)
7+
from mpt_api_client.resources.catalog.mixins.publishable_mixin import (
8+
AsyncPublishableMixin,
9+
PublishableMixin,
10+
)
11+
12+
13+
class AsyncDocumentMixin[Model](
14+
AsyncCreateFileMixin[Model],
15+
AsyncDownloadFileMixin[Model],
16+
AsyncPublishableMixin[Model],
17+
):
18+
"""Async document mixin."""
19+
20+
21+
class DocumentMixin[Model](
22+
CreateFileMixin[Model],
23+
DownloadFileMixin[Model],
24+
PublishableMixin[Model],
25+
):
26+
"""Document mixin."""
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from mpt_api_client.http.mixins import (
2+
AsyncCreateFileMixin,
3+
AsyncDownloadFileMixin,
4+
CreateFileMixin,
5+
DownloadFileMixin,
6+
)
7+
from mpt_api_client.resources.catalog.mixins.publishable_mixin import (
8+
AsyncPublishableMixin,
9+
PublishableMixin,
10+
)
11+
12+
13+
class MediaMixin[Model](
14+
CreateFileMixin[Model],
15+
DownloadFileMixin[Model],
16+
PublishableMixin[Model],
17+
):
18+
"""Media mixin."""
19+
20+
21+
class AsyncMediaMixin[Model](
22+
AsyncCreateFileMixin[Model],
23+
AsyncDownloadFileMixin[Model],
24+
AsyncPublishableMixin[Model],
25+
):
26+
"""Media mixin."""
Lines changed: 0 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
1-
from mpt_api_client.http.mixins import (
2-
AsyncCreateFileMixin,
3-
AsyncDownloadFileMixin,
4-
CreateFileMixin,
5-
DownloadFileMixin,
6-
)
71
from mpt_api_client.models import ResourceData
82

93

10-
# TODO: Consider moving publishable and activatable mixins to http/mixins
114
class PublishableMixin[Model]:
125
"""Publishable mixin adds the ability to review, publish and unpublish."""
136

@@ -80,89 +73,3 @@ async def unpublish(self, resource_id: str, resource_data: ResourceData | None =
8073
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
8174
resource_id, "POST", "unpublish", json=resource_data
8275
)
83-
84-
85-
class AsyncDocumentMixin[Model](
86-
AsyncCreateFileMixin[Model],
87-
AsyncDownloadFileMixin[Model],
88-
AsyncPublishableMixin[Model],
89-
):
90-
"""Async document mixin."""
91-
92-
93-
class DocumentMixin[Model](
94-
CreateFileMixin[Model],
95-
DownloadFileMixin[Model],
96-
PublishableMixin[Model],
97-
):
98-
"""Document mixin."""
99-
100-
101-
class MediaMixin[Model](
102-
CreateFileMixin[Model],
103-
DownloadFileMixin[Model],
104-
PublishableMixin[Model],
105-
):
106-
"""Media mixin."""
107-
108-
109-
class ActivatableMixin[Model]:
110-
"""Activatable mixin adds the ability to activate and deactivate."""
111-
112-
def activate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
113-
"""Update state to Active.
114-
115-
Args:
116-
resource_id: Resource ID
117-
resource_data: Resource data will be updated
118-
"""
119-
return self._resource_action( # type: ignore[attr-defined, no-any-return]
120-
resource_id, "POST", "activate", json=resource_data
121-
)
122-
123-
def deactivate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
124-
"""Update state to Inactive.
125-
126-
Args:
127-
resource_id: Resource ID
128-
resource_data: Resource data will be updated
129-
"""
130-
return self._resource_action( # type: ignore[attr-defined, no-any-return]
131-
resource_id, "POST", "deactivate", json=resource_data
132-
)
133-
134-
135-
class AsyncActivatableMixin[Model]:
136-
"""Activatable mixin adds the ability to activate and deactivate."""
137-
138-
async def activate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
139-
"""Update state to Active.
140-
141-
Args:
142-
resource_id: Resource ID
143-
resource_data: Resource data will be updated
144-
"""
145-
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
146-
resource_id, "POST", "activate", json=resource_data
147-
)
148-
149-
async def deactivate(
150-
self, resource_id: str, resource_data: ResourceData | None = None
151-
) -> Model:
152-
"""Update state to Inactive.
153-
154-
Args:
155-
resource_id: Resource ID
156-
resource_data: Resource data will be updated
157-
"""
158-
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
159-
resource_id, "POST", "deactivate", json=resource_data
160-
)
161-
162-
163-
class AsyncMediaMixin[Model](
164-
AsyncCreateFileMixin[Model],
165-
AsyncDownloadFileMixin[Model],
166-
AsyncPublishableMixin[Model],
167-
):
168-
"""Media mixin."""

pyproject.toml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ per-file-ignores = [
121121
"mpt_api_client/resources/accounts/*.py: WPS202 WPS215 WPS214 WPS235 WPS453",
122122
"mpt_api_client/resources/billing/*.py: WPS202 WPS204 WPS214 WPS215 WPS235 WPS110",
123123
"mpt_api_client/resources/catalog/*.py: WPS110 WPS214 WPS215 WPS235",
124-
"mpt_api_client/resources/catalog/mixins.py: WPS110 WPS202 WPS214 WPS215 WPS235",
125124
"mpt_api_client/resources/catalog/products.py: WPS204 WPS214 WPS215 WPS235",
126125
"mpt_api_client/resources/commerce/*.py: WPS235 WPS215",
127126
"mpt_api_client/rql/query_builder.py: WPS110 WPS115 WPS210 WPS214",
@@ -143,11 +142,7 @@ per-file-ignores = [
143142
"tests/unit/resources/commerce/*.py: WPS202 WPS204",
144143
"tests/unit/resources/*/test_mixins.py: WPS118 WPS202 WPS204 WPS235",
145144
"tests/unit/test_mpt_client.py: WPS235",
146-
"tests/seed/catalog/test_product.py: WPS202 WPS204 WPS219",
147145
"tests/*: WPS432 WPS202",
148-
"seed/*: WPS404",
149-
"seed/accounts/*.py: WPS204 WPS404 WPS453",
150-
"seed/catalog/product.py: WPS202 WPS204 WPS217 WPS201 WPS213 WPS404",
151146
]
152147

153148
[tool.ruff]

tests/unit/resources/catalog/mixins/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)