|
| 1 | +from typing import List, cast |
| 2 | + |
| 3 | +from mailtrap.api.base import LIST_RESPONSE_TYPE, RESPONSE_TYPE, BaseHttpApiClient, HttpMethod |
| 4 | +from mailtrap.constants import MAILTRAP_HOST |
| 5 | +from mailtrap.models.common import DeletedObject |
| 6 | +from mailtrap.models.projects import Project |
| 7 | + |
| 8 | + |
| 9 | +class ProjectsApiClient(BaseHttpApiClient): |
| 10 | + |
| 11 | + def _build_url(self, account_id: str, *parts: str) -> str: |
| 12 | + base_url = f"https://{MAILTRAP_HOST}/api/accounts/{account_id}/projects" |
| 13 | + return "/".join([base_url, *parts]) |
| 14 | + |
| 15 | + def get_list(self, account_id: str) -> List[Project]: |
| 16 | + response: LIST_RESPONSE_TYPE = cast(LIST_RESPONSE_TYPE, self._request( |
| 17 | + HttpMethod.GET, |
| 18 | + self._build_url(account_id) |
| 19 | + )) |
| 20 | + return [Project.from_dict(proj) for proj in response] |
| 21 | + |
| 22 | + def get_by_id(self, account_id: str, project_id: str) -> Project: |
| 23 | + response: RESPONSE_TYPE = cast(RESPONSE_TYPE, self._request( |
| 24 | + HttpMethod.GET, |
| 25 | + self._build_url(account_id, project_id) |
| 26 | + )) |
| 27 | + return Project.from_dict(response) |
| 28 | + |
| 29 | + def create(self, account_id: str, name: str) -> Project: |
| 30 | + response: RESPONSE_TYPE = cast(RESPONSE_TYPE, self._request( |
| 31 | + HttpMethod.POST, |
| 32 | + self._build_url(account_id), |
| 33 | + json={"project": {"name": name}}, |
| 34 | + )) |
| 35 | + return Project.from_dict(response) |
| 36 | + |
| 37 | + def update(self, account_id: str, project_id: str, name: str) -> Project: |
| 38 | + response: RESPONSE_TYPE = cast(RESPONSE_TYPE, self._request( |
| 39 | + HttpMethod.PATCH, |
| 40 | + self._build_url(account_id, project_id), |
| 41 | + json={"project": {"name": name}}, |
| 42 | + )) |
| 43 | + return Project.from_dict(response) |
| 44 | + |
| 45 | + def delete(self, account_id: str, project_id: str) -> DeletedObject: |
| 46 | + response: RESPONSE_TYPE = cast(RESPONSE_TYPE, self._request( |
| 47 | + HttpMethod.DELTE, |
| 48 | + self._build_url(account_id, project_id), |
| 49 | + )) |
| 50 | + return DeletedObject(response["id"]) |
0 commit comments