Skip to content

Commit 4df4aba

Browse files
author
Robert Segal
committed
Moved Render and Template to mixin
1 parent afba1b2 commit 4df4aba

File tree

11 files changed

+173
-440
lines changed

11 files changed

+173
-440
lines changed

mpt_api_client/resources/commerce/agreements.py

Lines changed: 10 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
AgreementsAttachmentService,
1111
AsyncAgreementsAttachmentService,
1212
)
13+
from mpt_api_client.resources.commerce.mixins import (
14+
AsyncRenderMixin,
15+
AsyncTemplateMixin,
16+
RenderMixin,
17+
TemplateMixin,
18+
)
1319

1420

1521
class Agreement(Model):
@@ -25,37 +31,15 @@ class AgreementsServiceConfig:
2531

2632

2733
class AgreementsService(
34+
RenderMixin[Agreement],
35+
TemplateMixin[Agreement],
2836
ManagedResourceMixin[Agreement],
2937
CollectionMixin[Agreement],
3038
Service[Agreement],
3139
AgreementsServiceConfig,
3240
):
3341
"""Agreements service."""
3442

35-
def template(self, agreement_id: str) -> str:
36-
"""Renders the template for the given Agreement id.
37-
38-
Args:
39-
agreement_id: Agreement ID.
40-
41-
Returns:
42-
Agreement template.
43-
"""
44-
response = self._resource_do_request(agreement_id, action="template")
45-
return response.text
46-
47-
def render(self, agreement_id: str) -> str:
48-
"""Renders the template for the given Agreement id.
49-
50-
Args:
51-
agreement_id: Agreement ID.
52-
53-
Returns:
54-
Rendered Agreement.
55-
"""
56-
response = self._resource_do_request(agreement_id, action="render")
57-
return response.text
58-
5943
def attachments(self, agreement_id: str) -> AgreementsAttachmentService:
6044
"""Get the attachments service for the given Agreement id.
6145
@@ -72,37 +56,15 @@ def attachments(self, agreement_id: str) -> AgreementsAttachmentService:
7256

7357

7458
class AsyncAgreementsService(
59+
AsyncRenderMixin[Agreement],
60+
AsyncTemplateMixin[Agreement],
7561
AsyncManagedResourceMixin[Agreement],
7662
AsyncCollectionMixin[Agreement],
7763
AsyncService[Agreement],
7864
AgreementsServiceConfig,
7965
):
8066
"""Agreements service."""
8167

82-
async def template(self, agreement_id: str) -> str:
83-
"""Renders the template for the given Agreement id.
84-
85-
Args:
86-
agreement_id: Agreement ID.
87-
88-
Returns:
89-
Agreement template.
90-
"""
91-
response = await self._resource_do_request(agreement_id, action="template")
92-
return response.text
93-
94-
async def render(self, agreement_id: str) -> str:
95-
"""Renders the template for the given Agreement id.
96-
97-
Args:
98-
agreement_id: Agreement ID.
99-
100-
Returns:
101-
Rendered Agreement.
102-
"""
103-
response = await self._resource_do_request(agreement_id, action="render")
104-
return response.text
105-
10668
def attachments(self, agreement_id: str) -> AsyncAgreementsAttachmentService:
10769
"""Get the attachments service for the given Agreement id.
10870

mpt_api_client/resources/commerce/assets.py

Lines changed: 10 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@
1010
UpdateMixin,
1111
)
1212
from mpt_api_client.models import Model
13-
from mpt_api_client.models.model import ResourceData
13+
from mpt_api_client.resources.commerce.mixins import (
14+
AsyncRenderMixin,
15+
AsyncTerminateMixin,
16+
RenderMixin,
17+
TerminateMixin,
18+
)
1419

1520

1621
class Asset(Model):
@@ -33,68 +38,23 @@ class AssetService(
3338
CreateMixin[Asset],
3439
UpdateMixin[Asset],
3540
GetMixin[Asset],
41+
TerminateMixin[Asset],
42+
RenderMixin[Asset],
3643
CollectionMixin[Asset],
3744
Service[Asset],
3845
AssetServiceConfig,
3946
):
4047
"""Assets service."""
4148

42-
def terminate(self, asset_id: str, resource_data: ResourceData | None = None) -> Asset:
43-
"""Terminate the given Asset id.
44-
45-
Args:
46-
asset_id: Asset ID.
47-
resource_data: Resource data will be updated
48-
"""
49-
response = self._resource_do_request(asset_id, "POST", "terminate", json=resource_data)
50-
return self._model_class.from_response(response)
51-
52-
def render(self, asset_id: str) -> str:
53-
"""Renders the template for the given Asset id.
54-
55-
Args:
56-
asset_id: Asset ID.
57-
58-
Returns:
59-
Render asset template json.
60-
"""
61-
response = self._resource_do_request(asset_id, action="render")
62-
63-
return response.text
64-
6549

6650
class AsyncAssetService(
6751
AsyncCreateMixin[Asset],
6852
AsyncUpdateMixin[Asset],
6953
AsyncGetMixin[Asset],
54+
AsyncTerminateMixin[Asset],
55+
AsyncRenderMixin[Asset],
7056
AsyncCollectionMixin[Asset],
7157
AsyncService[Asset],
7258
AssetServiceConfig,
7359
):
7460
"""Asynchronous Assets service."""
75-
76-
async def terminate(self, asset_id: str, resource_data: ResourceData | None = None) -> Asset:
77-
"""Terminate the given Asset id.
78-
79-
Args:
80-
asset_id: Asset ID.
81-
resource_data: Resource data will be updated
82-
"""
83-
response = await self._resource_do_request(
84-
asset_id, "POST", "terminate", json=resource_data
85-
)
86-
87-
return self._model_class.from_response(response)
88-
89-
async def render(self, asset_id: str) -> str:
90-
"""Renders the template for the given Asset id.
91-
92-
Args:
93-
asset_id: Asset ID.
94-
95-
Returns:
96-
Render asset template string.
97-
"""
98-
response = await self._resource_do_request(asset_id, action="render")
99-
100-
return response.text

mpt_api_client/resources/commerce/mixins.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,38 @@ def terminate(self, resource_id: str, resource_data: ResourceData | None = None)
1717
return self._resource_action(resource_id, "POST", "terminate", json=resource_data) # type: ignore[attr-defined, no-any-return]
1818

1919

20+
class RenderMixin[Model]:
21+
"""Render resource mixin."""
22+
23+
def render(self, resource_id: str) -> str:
24+
"""Render resource.
25+
26+
Args:
27+
resource_id: Resource ID
28+
29+
Returns:
30+
Rendered resource.
31+
"""
32+
response = self._resource_do_request(resource_id, action="render") # type: ignore[attr-defined]
33+
return response.text # type: ignore[no-any-return]
34+
35+
36+
class TemplateMixin[Model]:
37+
"""Template resource mixin."""
38+
39+
def template(self, resource_id: str) -> str:
40+
"""Get resource template.
41+
42+
Args:
43+
resource_id: Resource ID
44+
45+
Returns:
46+
Resource template.
47+
"""
48+
response = self._resource_do_request(resource_id, action="template") # type: ignore[attr-defined]
49+
return response.text # type: ignore[no-any-return]
50+
51+
2052
class AsyncTerminateMixin[Model]:
2153
"""Asynchronous terminate resource mixin."""
2254

@@ -31,3 +63,35 @@ async def terminate(self, resource_id: str, resource_data: ResourceData | None =
3163
Terminated resource.
3264
"""
3365
return await self._resource_action(resource_id, "POST", "terminate", json=resource_data) # type: ignore[attr-defined, no-any-return]
66+
67+
68+
class AsyncRenderMixin[Model]:
69+
"""Asynchronous render resource mixin."""
70+
71+
async def render(self, resource_id: str) -> str:
72+
"""Render resource.
73+
74+
Args:
75+
resource_id: Resource ID
76+
77+
Returns:
78+
Rendered resource.
79+
"""
80+
response = await self._resource_do_request(resource_id, action="render") # type: ignore[attr-defined]
81+
return response.text # type: ignore[no-any-return]
82+
83+
84+
class AsyncTemplateMixin[Model]:
85+
"""Asynchronous template resource mixin."""
86+
87+
async def template(self, resource_id: str) -> str:
88+
"""Get resource template.
89+
90+
Args:
91+
resource_id: Resource ID
92+
93+
Returns:
94+
Resource template.
95+
"""
96+
response = await self._resource_do_request(resource_id, action="template") # type: ignore[attr-defined]
97+
return response.text # type: ignore[no-any-return]

mpt_api_client/resources/commerce/orders.py

Lines changed: 10 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@
99
ManagedResourceMixin,
1010
)
1111
from mpt_api_client.models import Model, ResourceData
12+
from mpt_api_client.resources.commerce.mixins import (
13+
AsyncRenderMixin,
14+
AsyncTemplateMixin,
15+
RenderMixin,
16+
TemplateMixin,
17+
)
1218
from mpt_api_client.resources.commerce.orders_asset import (
1319
AsyncOrdersAssetService,
1420
OrdersAssetService,
@@ -32,6 +38,8 @@ class OrdersServiceConfig:
3238

3339

3440
class OrdersService( # noqa: WPS215 WPS214
41+
RenderMixin[Order],
42+
TemplateMixin[Order],
3543
ManagedResourceMixin[Order],
3644
CollectionMixin[Order],
3745
Service[Order],
@@ -93,30 +101,6 @@ def notify(self, resource_id: str, user: ResourceData) -> None:
93101
"""
94102
self._resource_do_request(resource_id, "POST", "notify", json=user)
95103

96-
def template(self, resource_id: str) -> str:
97-
"""Render order template.
98-
99-
Args:
100-
resource_id: Order resource ID
101-
102-
Returns:
103-
Order template text in markdown format.
104-
"""
105-
response = self._resource_do_request(resource_id, "GET", "template")
106-
return response.text
107-
108-
def render(self, resource_id: str) -> str:
109-
"""Render the order template for the given order ID.
110-
111-
Args:
112-
resource_id: Order resource ID
113-
114-
Returns:
115-
Rendered order as HTML.
116-
"""
117-
response = self._resource_do_request(resource_id, "GET", "render")
118-
return response.text
119-
120104
def quote(self, resource_id: str, resource_data: ResourceData | None = None) -> Order:
121105
"""Quote the order.
122106
@@ -159,6 +143,8 @@ def assets(self, order_id: str) -> OrdersAssetService:
159143

160144

161145
class AsyncOrdersService( # noqa: WPS215 WPS214
146+
AsyncRenderMixin[Order],
147+
AsyncTemplateMixin[Order],
162148
AsyncManagedResourceMixin[Order],
163149
AsyncCollectionMixin[Order],
164150
AsyncService[Order],
@@ -235,30 +221,6 @@ async def notify(self, resource_id: str, resource_data: ResourceData) -> None:
235221
"""
236222
await self._resource_do_request(resource_id, "POST", "notify", json=resource_data)
237223

238-
async def template(self, resource_id: str) -> str:
239-
"""Render order template.
240-
241-
Args:
242-
resource_id: Order resource ID
243-
244-
Returns:
245-
Order template text in markdown format.
246-
"""
247-
response = await self._resource_do_request(resource_id, "GET", "template")
248-
return response.text
249-
250-
async def render(self, resource_id: str) -> str:
251-
"""Render the order template for the given order ID.
252-
253-
Args:
254-
resource_id: Order resource ID
255-
256-
Returns:
257-
Rendered order as HTML.
258-
"""
259-
response = await self._resource_do_request(resource_id, "GET", "render")
260-
return response.text
261-
262224
async def quote(self, resource_id: str, resource_data: ResourceData | None = None) -> Order:
263225
"""Quote the order.
264226

0 commit comments

Comments
 (0)