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
58 changes: 10 additions & 48 deletions mpt_api_client/resources/commerce/agreements.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@
AgreementsAttachmentService,
AsyncAgreementsAttachmentService,
)
from mpt_api_client.resources.commerce.mixins import (
AsyncRenderMixin,
AsyncTemplateMixin,
RenderMixin,
TemplateMixin,
)


class Agreement(Model):
Expand All @@ -25,37 +31,15 @@ class AgreementsServiceConfig:


class AgreementsService(
RenderMixin[Agreement],
TemplateMixin[Agreement],
ManagedResourceMixin[Agreement],
CollectionMixin[Agreement],
Service[Agreement],
AgreementsServiceConfig,
):
"""Agreements service."""

def template(self, agreement_id: str) -> str:
"""Renders the template for the given Agreement id.

Args:
agreement_id: Agreement ID.

Returns:
Agreement template.
"""
response = self._resource_do_request(agreement_id, action="template")
return response.text

def render(self, agreement_id: str) -> str:
"""Renders the template for the given Agreement id.

Args:
agreement_id: Agreement ID.

Returns:
Rendered Agreement.
"""
response = self._resource_do_request(agreement_id, action="render")
return response.text

def attachments(self, agreement_id: str) -> AgreementsAttachmentService:
"""Get the attachments service for the given Agreement id.

Expand All @@ -72,37 +56,15 @@ def attachments(self, agreement_id: str) -> AgreementsAttachmentService:


class AsyncAgreementsService(
AsyncRenderMixin[Agreement],
AsyncTemplateMixin[Agreement],
AsyncManagedResourceMixin[Agreement],
AsyncCollectionMixin[Agreement],
AsyncService[Agreement],
AgreementsServiceConfig,
):
"""Agreements service."""

async def template(self, agreement_id: str) -> str:
"""Renders the template for the given Agreement id.

Args:
agreement_id: Agreement ID.

Returns:
Agreement template.
"""
response = await self._resource_do_request(agreement_id, action="template")
return response.text

async def render(self, agreement_id: str) -> str:
"""Renders the template for the given Agreement id.

Args:
agreement_id: Agreement ID.

Returns:
Rendered Agreement.
"""
response = await self._resource_do_request(agreement_id, action="render")
return response.text

def attachments(self, agreement_id: str) -> AsyncAgreementsAttachmentService:
"""Get the attachments service for the given Agreement id.

Expand Down
60 changes: 10 additions & 50 deletions mpt_api_client/resources/commerce/assets.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@
UpdateMixin,
)
from mpt_api_client.models import Model
from mpt_api_client.models.model import ResourceData
from mpt_api_client.resources.commerce.mixins import (
AsyncRenderMixin,
AsyncTerminateMixin,
RenderMixin,
TerminateMixin,
)


class Asset(Model):
Expand All @@ -33,68 +38,23 @@ class AssetService(
CreateMixin[Asset],
UpdateMixin[Asset],
GetMixin[Asset],
TerminateMixin[Asset],
RenderMixin[Asset],
CollectionMixin[Asset],
Service[Asset],
AssetServiceConfig,
):
"""Assets service."""

def terminate(self, asset_id: str, resource_data: ResourceData | None = None) -> Asset:
"""Terminate the given Asset id.

Args:
asset_id: Asset ID.
resource_data: Resource data will be updated
"""
response = self._resource_do_request(asset_id, "POST", "terminate", json=resource_data)
return self._model_class.from_response(response)

def render(self, asset_id: str) -> str:
"""Renders the template for the given Asset id.

Args:
asset_id: Asset ID.

Returns:
Render asset template json.
"""
response = self._resource_do_request(asset_id, action="render")

return response.text


class AsyncAssetService(
AsyncCreateMixin[Asset],
AsyncUpdateMixin[Asset],
AsyncGetMixin[Asset],
AsyncTerminateMixin[Asset],
AsyncRenderMixin[Asset],
AsyncCollectionMixin[Asset],
AsyncService[Asset],
AssetServiceConfig,
):
"""Asynchronous Assets service."""

async def terminate(self, asset_id: str, resource_data: ResourceData | None = None) -> Asset:
"""Terminate the given Asset id.

Args:
asset_id: Asset ID.
resource_data: Resource data will be updated
"""
response = await self._resource_do_request(
asset_id, "POST", "terminate", json=resource_data
)

return self._model_class.from_response(response)

async def render(self, asset_id: str) -> str:
"""Renders the template for the given Asset id.

Args:
asset_id: Asset ID.

Returns:
Render asset template string.
"""
response = await self._resource_do_request(asset_id, action="render")

return response.text
64 changes: 64 additions & 0 deletions mpt_api_client/resources/commerce/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,38 @@ def terminate(self, resource_id: str, resource_data: ResourceData | None = None)
return self._resource_action(resource_id, "POST", "terminate", json=resource_data) # type: ignore[attr-defined, no-any-return]


class RenderMixin[Model]:
"""Render resource mixin."""

def render(self, resource_id: str) -> str:
"""Render resource.

Args:
resource_id: Resource ID

Returns:
Rendered resource.
"""
response = self._resource_do_request(resource_id, action="render") # type: ignore[attr-defined]
return response.text # type: ignore[no-any-return]


class TemplateMixin[Model]:
"""Template resource mixin."""

def template(self, resource_id: str) -> str:
"""Get resource template.

Args:
resource_id: Resource ID

Returns:
Resource template.
"""
response = self._resource_do_request(resource_id, action="template") # type: ignore[attr-defined]
return response.text # type: ignore[no-any-return]


class AsyncTerminateMixin[Model]:
"""Asynchronous terminate resource mixin."""

Expand All @@ -31,3 +63,35 @@ async def terminate(self, resource_id: str, resource_data: ResourceData | None =
Terminated resource.
"""
return await self._resource_action(resource_id, "POST", "terminate", json=resource_data) # type: ignore[attr-defined, no-any-return]


class AsyncRenderMixin[Model]:
"""Asynchronous render resource mixin."""

async def render(self, resource_id: str) -> str:
"""Render resource.

Args:
resource_id: Resource ID

Returns:
Rendered resource.
"""
response = await self._resource_do_request(resource_id, action="render") # type: ignore[attr-defined]
return response.text # type: ignore[no-any-return]


class AsyncTemplateMixin[Model]:
"""Asynchronous template resource mixin."""

async def template(self, resource_id: str) -> str:
"""Get resource template.

Args:
resource_id: Resource ID

Returns:
Resource template.
"""
response = await self._resource_do_request(resource_id, action="template") # type: ignore[attr-defined]
return response.text # type: ignore[no-any-return]
58 changes: 10 additions & 48 deletions mpt_api_client/resources/commerce/orders.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@
ManagedResourceMixin,
)
from mpt_api_client.models import Model, ResourceData
from mpt_api_client.resources.commerce.mixins import (
AsyncRenderMixin,
AsyncTemplateMixin,
RenderMixin,
TemplateMixin,
)
from mpt_api_client.resources.commerce.orders_asset import (
AsyncOrdersAssetService,
OrdersAssetService,
Expand All @@ -32,6 +38,8 @@ class OrdersServiceConfig:


class OrdersService( # noqa: WPS215 WPS214
RenderMixin[Order],
TemplateMixin[Order],
ManagedResourceMixin[Order],
CollectionMixin[Order],
Service[Order],
Expand Down Expand Up @@ -93,30 +101,6 @@ def notify(self, resource_id: str, user: ResourceData) -> None:
"""
self._resource_do_request(resource_id, "POST", "notify", json=user)

def template(self, resource_id: str) -> str:
"""Render order template.

Args:
resource_id: Order resource ID

Returns:
Order template text in markdown format.
"""
response = self._resource_do_request(resource_id, "GET", "template")
return response.text

def render(self, resource_id: str) -> str:
"""Render the order template for the given order ID.

Args:
resource_id: Order resource ID

Returns:
Rendered order as HTML.
"""
response = self._resource_do_request(resource_id, "GET", "render")
return response.text

def quote(self, resource_id: str, resource_data: ResourceData | None = None) -> Order:
"""Quote the order.

Expand Down Expand Up @@ -159,6 +143,8 @@ def assets(self, order_id: str) -> OrdersAssetService:


class AsyncOrdersService( # noqa: WPS215 WPS214
AsyncRenderMixin[Order],
AsyncTemplateMixin[Order],
AsyncManagedResourceMixin[Order],
AsyncCollectionMixin[Order],
AsyncService[Order],
Expand Down Expand Up @@ -235,30 +221,6 @@ async def notify(self, resource_id: str, resource_data: ResourceData) -> None:
"""
await self._resource_do_request(resource_id, "POST", "notify", json=resource_data)

async def template(self, resource_id: str) -> str:
"""Render order template.

Args:
resource_id: Order resource ID

Returns:
Order template text in markdown format.
"""
response = await self._resource_do_request(resource_id, "GET", "template")
return response.text

async def render(self, resource_id: str) -> str:
"""Render the order template for the given order ID.

Args:
resource_id: Order resource ID

Returns:
Rendered order as HTML.
"""
response = await self._resource_do_request(resource_id, "GET", "render")
return response.text

async def quote(self, resource_id: str, resource_data: ResourceData | None = None) -> Order:
"""Quote the order.

Expand Down
Loading