Skip to content

Commit 51555c1

Browse files
committed
MPT-12840 Add agreements assets
1 parent 371d943 commit 51555c1

18 files changed

+522
-204
lines changed

mpt_api_client/http/async_service.py

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,6 @@ async def get(self, resource_id: str, select: list[str] | str | None = None) ->
9191
select = ",".join(select) if select else None
9292
return await self._resource_action(resource_id=resource_id, query_params={"select": select})
9393

94-
async def update(self, resource_id: str, resource_data: ResourceData) -> Model:
95-
"""Update a resource using `PUT /endpoint/{resource_id}`.
96-
97-
Args:
98-
resource_id: Resource ID.
99-
resource_data: Resource data.
100-
101-
Returns:
102-
Resource object.
103-
104-
"""
105-
return await self._resource_action(resource_id, "PUT", json=resource_data)
106-
10794
async def _fetch_page_as_response(self, limit: int = 100, offset: int = 0) -> httpx.Response:
10895
"""Fetch one page of resources.
10996
@@ -119,7 +106,7 @@ async def _fetch_page_as_response(self, limit: int = 100, offset: int = 0) -> ht
119106

120107
return response
121108

122-
async def _resource_do_request(
109+
async def _resource_do_request( # noqa: WPS211
123110
self,
124111
resource_id: str,
125112
method: str = "GET",
@@ -144,7 +131,7 @@ async def _resource_do_request(
144131
Raises:
145132
HTTPError: If the action fails.
146133
"""
147-
resource_url = urljoin(f"{self._endpoint}/", resource_id)
134+
resource_url = urljoin(f"{self.endpoint}/", resource_id)
148135
url = urljoin(f"{resource_url}/", action) if action else resource_url
149136
response = await self.http_client.request(
150137
method, url, json=json, params=query_params, headers=headers

mpt_api_client/http/mixins.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,23 @@ def delete(self, resource_id: str) -> None:
3131
response.raise_for_status()
3232

3333

34+
class UpdateMixin[Model]:
35+
"""Update resource mixin."""
36+
37+
def update(self, resource_id: str, resource_data: ResourceData) -> Model:
38+
"""Update a resource using `PUT /endpoint/{resource_id}`.
39+
40+
Args:
41+
resource_id: Resource ID.
42+
resource_data: Resource data.
43+
44+
Returns:
45+
Resource object.
46+
47+
"""
48+
return self._resource_action(resource_id, "PUT", json=resource_data) # type: ignore[attr-defined, no-any-return]
49+
50+
3451
class AsyncCreateMixin[Model]:
3552
"""Create resource mixin."""
3653

@@ -58,3 +75,20 @@ async def delete(self, resource_id: str) -> None:
5875
url = urljoin(f"{self.endpoint}/", resource_id) # type: ignore[attr-defined]
5976
response = await self.http_client.delete(url) # type: ignore[attr-defined]
6077
response.raise_for_status()
78+
79+
80+
class AsyncUpdateMixin[Model]:
81+
"""Update resource mixin."""
82+
83+
async def update(self, resource_id: str, resource_data: ResourceData) -> Model:
84+
"""Update a resource using `PUT /endpoint/{resource_id}`.
85+
86+
Args:
87+
resource_id: Resource ID.
88+
resource_data: Resource data.
89+
90+
Returns:
91+
Resource object.
92+
93+
"""
94+
return await self._resource_action(resource_id, "PUT", json=resource_data) # type: ignore[attr-defined, no-any-return]

mpt_api_client/http/service.py

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,6 @@ def get(self, resource_id: str, select: list[str] | str | None = None) -> Model:
9191

9292
return self._resource_action(resource_id=resource_id, query_params={"select": select})
9393

94-
def update(self, resource_id: str, resource_data: ResourceData) -> Model:
95-
"""Update a resource using `PUT /endpoint/{resource_id}`.
96-
97-
Args:
98-
resource_id: Resource ID.
99-
resource_data: Resource data.
100-
101-
Returns:
102-
Resource object.
103-
104-
"""
105-
return self._resource_action(resource_id, "PUT", json=resource_data)
106-
10794
def _fetch_page_as_response(self, limit: int = 100, offset: int = 0) -> httpx.Response:
10895
"""Fetch one page of resources.
10996
@@ -119,7 +106,7 @@ def _fetch_page_as_response(self, limit: int = 100, offset: int = 0) -> httpx.Re
119106

120107
return response
121108

122-
def _resource_do_request(
109+
def _resource_do_request( # noqa: WPS211
123110
self,
124111
resource_id: str,
125112
method: str = "GET",

mpt_api_client/models/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from mpt_api_client.models.collection import Collection
2+
from mpt_api_client.models.download_file import DownloadFile
23
from mpt_api_client.models.meta import Meta, Pagination
34
from mpt_api_client.models.model import Model, ResourceData
4-
from mpt_api_client.models.file import File
55

6-
__all__ = ["Collection", "Meta", "Model", "Pagination", "ResourceData"] # noqa: WPS410
6+
__all__ = ["Collection", "DownloadFile", "Meta", "Model", "Pagination", "ResourceData"] # noqa: WPS410

mpt_api_client/models/file.py renamed to mpt_api_client/models/download_file.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from httpx import Response
44

55

6-
class File:
6+
class DownloadFile:
77
"""File resource."""
88

99
def __init__(self, response: Response):
@@ -32,7 +32,7 @@ def filename(self) -> str | None:
3232
return None
3333

3434
@property
35-
def content(self) -> bytes:
35+
def file_contents(self) -> bytes:
3636
"""Returns the content of the attachment.
3737
3838
Returns:
@@ -51,5 +51,5 @@ def content_type(self) -> str | None:
5151
Returns:
5252
The content type of the attachment.
5353
"""
54-
ctype = self.response.headers.get("content-type")
55-
return str(ctype) if ctype else None
54+
ctype = self.response.headers.get("content-type", "")
55+
return str(ctype)

mpt_api_client/resources/commerce/agreements.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
from mpt_api_client.http import AsyncService, Service
2+
from mpt_api_client.http.mixins import (
3+
AsyncCreateMixin,
4+
AsyncDeleteMixin,
5+
AsyncUpdateMixin,
6+
CreateMixin,
7+
DeleteMixin,
8+
UpdateMixin,
9+
)
210
from mpt_api_client.models import Model
3-
from mpt_api_client.resources.commerce.agreements_assets import (
11+
from mpt_api_client.resources.commerce.agreements_attachments import (
412
AgreementsAttachmentService,
513
AsyncAgreementsAttachmentService,
614
)
@@ -18,7 +26,13 @@ class AgreementsServiceConfig:
1826
_collection_key = "data"
1927

2028

21-
class AgreementsService(Service[Agreement], AgreementsServiceConfig):
29+
class AgreementsService( # noqa: WPS215
30+
CreateMixin[Agreement],
31+
UpdateMixin[Agreement],
32+
DeleteMixin,
33+
Service[Agreement],
34+
AgreementsServiceConfig,
35+
):
2236
"""Agreements service."""
2337

2438
def template(self, agreement_id: str) -> str:
@@ -48,7 +62,13 @@ def attachments(self, agreement_id: str) -> AgreementsAttachmentService:
4862
)
4963

5064

51-
class AsyncAgreementsService(AsyncService[Agreement], AgreementsServiceConfig):
65+
class AsyncAgreementsService( # noqa: WPS215
66+
AsyncCreateMixin[Agreement],
67+
AsyncUpdateMixin[Agreement],
68+
AsyncDeleteMixin,
69+
AsyncService[Agreement],
70+
AgreementsServiceConfig,
71+
):
5272
"""Agreements service."""
5373

5474
async def template(self, agreement_id: str) -> str:

mpt_api_client/resources/commerce/agreements_assets.py

Lines changed: 0 additions & 66 deletions
This file was deleted.

0 commit comments

Comments
 (0)