Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions mpt_api_client/resources/catalog/mixins/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from mpt_api_client.resources.catalog.mixins.activatable_mixin import (
ActivatableMixin,
AsyncActivatableMixin,
)
from mpt_api_client.resources.catalog.mixins.document_mixin import (
AsyncDocumentMixin,
DocumentMixin,
)
from mpt_api_client.resources.catalog.mixins.media_mixin import (
AsyncMediaMixin,
MediaMixin,
)
from mpt_api_client.resources.catalog.mixins.publishable_mixin import (
AsyncPublishableMixin,
PublishableMixin,
)

__all__ = [ # noqa: WPS410
"ActivatableMixin",
"AsyncActivatableMixin",
"AsyncDocumentMixin",
"AsyncMediaMixin",
"AsyncPublishableMixin",
"DocumentMixin",
"MediaMixin",
"PublishableMixin",
]
55 changes: 55 additions & 0 deletions mpt_api_client/resources/catalog/mixins/activatable_mixin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
from mpt_api_client.models import ResourceData


class ActivatableMixin[Model]:
"""Activatable mixin adds the ability to activate and deactivate."""

def activate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
"""Update state to Active.

Args:
resource_id: Resource ID
resource_data: Resource data will be updated
"""
return self._resource_action( # type: ignore[attr-defined, no-any-return]
resource_id, "POST", "activate", json=resource_data
)

def deactivate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
"""Update state to Inactive.

Args:
resource_id: Resource ID
resource_data: Resource data will be updated
"""
return self._resource_action( # type: ignore[attr-defined, no-any-return]
resource_id, "POST", "deactivate", json=resource_data
)


class AsyncActivatableMixin[Model]:
"""Activatable mixin adds the ability to activate and deactivate."""

async def activate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
"""Update state to Active.

Args:
resource_id: Resource ID
resource_data: Resource data will be updated
"""
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
resource_id, "POST", "activate", json=resource_data
)

async def deactivate(
self, resource_id: str, resource_data: ResourceData | None = None
) -> Model:
"""Update state to Inactive.

Args:
resource_id: Resource ID
resource_data: Resource data will be updated
"""
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
resource_id, "POST", "deactivate", json=resource_data
)
26 changes: 26 additions & 0 deletions mpt_api_client/resources/catalog/mixins/document_mixin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from mpt_api_client.http.mixins import (
AsyncCreateFileMixin,
AsyncDownloadFileMixin,
CreateFileMixin,
DownloadFileMixin,
)
from mpt_api_client.resources.catalog.mixins.publishable_mixin import (
AsyncPublishableMixin,
PublishableMixin,
)


class AsyncDocumentMixin[Model](
AsyncCreateFileMixin[Model],
AsyncDownloadFileMixin[Model],
AsyncPublishableMixin[Model],
):
"""Async document mixin."""


class DocumentMixin[Model](
CreateFileMixin[Model],
DownloadFileMixin[Model],
PublishableMixin[Model],
):
"""Document mixin."""
26 changes: 26 additions & 0 deletions mpt_api_client/resources/catalog/mixins/media_mixin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from mpt_api_client.http.mixins import (
AsyncCreateFileMixin,
AsyncDownloadFileMixin,
CreateFileMixin,
DownloadFileMixin,
)
from mpt_api_client.resources.catalog.mixins.publishable_mixin import (
AsyncPublishableMixin,
PublishableMixin,
)


class MediaMixin[Model](
CreateFileMixin[Model],
DownloadFileMixin[Model],
PublishableMixin[Model],
):
"""Media mixin."""


class AsyncMediaMixin[Model](
AsyncCreateFileMixin[Model],
AsyncDownloadFileMixin[Model],
AsyncPublishableMixin[Model],
):
"""Media mixin."""
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
from mpt_api_client.http.mixins import (
AsyncCreateFileMixin,
AsyncDownloadFileMixin,
CreateFileMixin,
DownloadFileMixin,
)
from mpt_api_client.models import ResourceData


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

Expand Down Expand Up @@ -80,89 +73,3 @@ async def unpublish(self, resource_id: str, resource_data: ResourceData | None =
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
resource_id, "POST", "unpublish", json=resource_data
)


class AsyncDocumentMixin[Model](
AsyncCreateFileMixin[Model],
AsyncDownloadFileMixin[Model],
AsyncPublishableMixin[Model],
):
"""Async document mixin."""


class DocumentMixin[Model](
CreateFileMixin[Model],
DownloadFileMixin[Model],
PublishableMixin[Model],
):
"""Document mixin."""


class MediaMixin[Model](
CreateFileMixin[Model],
DownloadFileMixin[Model],
PublishableMixin[Model],
):
"""Media mixin."""


class ActivatableMixin[Model]:
"""Activatable mixin adds the ability to activate and deactivate."""

def activate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
"""Update state to Active.

Args:
resource_id: Resource ID
resource_data: Resource data will be updated
"""
return self._resource_action( # type: ignore[attr-defined, no-any-return]
resource_id, "POST", "activate", json=resource_data
)

def deactivate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
"""Update state to Inactive.

Args:
resource_id: Resource ID
resource_data: Resource data will be updated
"""
return self._resource_action( # type: ignore[attr-defined, no-any-return]
resource_id, "POST", "deactivate", json=resource_data
)


class AsyncActivatableMixin[Model]:
"""Activatable mixin adds the ability to activate and deactivate."""

async def activate(self, resource_id: str, resource_data: ResourceData | None = None) -> Model:
"""Update state to Active.

Args:
resource_id: Resource ID
resource_data: Resource data will be updated
"""
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
resource_id, "POST", "activate", json=resource_data
)

async def deactivate(
self, resource_id: str, resource_data: ResourceData | None = None
) -> Model:
"""Update state to Inactive.

Args:
resource_id: Resource ID
resource_data: Resource data will be updated
"""
return await self._resource_action( # type: ignore[attr-defined, no-any-return]
resource_id, "POST", "deactivate", json=resource_data
)


class AsyncMediaMixin[Model](
AsyncCreateFileMixin[Model],
AsyncDownloadFileMixin[Model],
AsyncPublishableMixin[Model],
):
"""Media mixin."""
5 changes: 0 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,6 @@ per-file-ignores = [
"mpt_api_client/resources/accounts/*.py: WPS202 WPS215 WPS214 WPS235 WPS453",
"mpt_api_client/resources/billing/*.py: WPS202 WPS204 WPS214 WPS215 WPS235 WPS110",
"mpt_api_client/resources/catalog/*.py: WPS110 WPS214 WPS215 WPS235",
"mpt_api_client/resources/catalog/mixins.py: WPS110 WPS202 WPS214 WPS215 WPS235",
"mpt_api_client/resources/catalog/products.py: WPS204 WPS214 WPS215 WPS235",
"mpt_api_client/resources/commerce/*.py: WPS235 WPS215",
"mpt_api_client/rql/query_builder.py: WPS110 WPS115 WPS210 WPS214",
Expand All @@ -143,11 +142,7 @@ per-file-ignores = [
"tests/unit/resources/commerce/*.py: WPS202 WPS204",
"tests/unit/resources/*/test_mixins.py: WPS118 WPS202 WPS204 WPS235",
"tests/unit/test_mpt_client.py: WPS235",
"tests/seed/catalog/test_product.py: WPS202 WPS204 WPS219",
"tests/*: WPS432 WPS202",
"seed/*: WPS404",
"seed/accounts/*.py: WPS204 WPS404 WPS453",
"seed/catalog/product.py: WPS202 WPS204 WPS217 WPS201 WPS213 WPS404",
]

[tool.ruff]
Expand Down
Empty file.
Loading