| 
 | 1 | +from typing import Optional  | 
 | 2 | +from urllib.parse import quote  | 
 | 3 | + | 
 | 4 | +from mailtrap.http import HttpClient  | 
 | 5 | +from mailtrap.models.accounts import AccountAccess  | 
 | 6 | +from mailtrap.models.accounts import AccountAccessFilterParams  | 
 | 7 | +from mailtrap.models.common import DeletedObject  | 
 | 8 | + | 
 | 9 | + | 
 | 10 | +class AccountAccessesApi:  | 
 | 11 | +    def __init__(self, client: HttpClient) -> None:  | 
 | 12 | +        self._client = client  | 
 | 13 | + | 
 | 14 | +    def get_list(  | 
 | 15 | +        self, account_id: int, filter_params: Optional[AccountAccessFilterParams] = None  | 
 | 16 | +    ) -> list[AccountAccess]:  | 
 | 17 | +        """  | 
 | 18 | +        Get list of account accesses for which specifier_type is User or Invite.  | 
 | 19 | +        You have to have account admin/owner permissions for this endpoint to work.  | 
 | 20 | +        If you specify project_ids, inbox_ids or domain_ids, the endpoint will return  | 
 | 21 | +        account accesses for these resources.  | 
 | 22 | +        """  | 
 | 23 | +        response = self._client.get(  | 
 | 24 | +            self._api_path(account_id),  | 
 | 25 | +            params=filter_params.api_data if filter_params else None,  | 
 | 26 | +        )  | 
 | 27 | +        return [AccountAccess(**account_access) for account_access in response]  | 
 | 28 | + | 
 | 29 | +    def delete(self, account_id: int, account_access_id: int) -> DeletedObject:  | 
 | 30 | +        """  | 
 | 31 | +        If specifier type is User, it removes user permissions.  | 
 | 32 | +        If specifier type is Invite or ApiToken, it removes specifier  | 
 | 33 | +        along with permissions. You have to be an account admin/owner  | 
 | 34 | +        for this method to work.  | 
 | 35 | +        """  | 
 | 36 | +        self._client.delete(self._api_path(account_id, account_access_id))  | 
 | 37 | +        return DeletedObject(account_access_id)  | 
 | 38 | + | 
 | 39 | +    def _api_path(self, account_id: int, account_access_id: Optional[int] = None) -> str:  | 
 | 40 | +        path = f"/api/accounts/{account_id}/account_accesses"  | 
 | 41 | +        if account_access_id is not None:  | 
 | 42 | +            return f"{path}/{quote(str(account_access_id), safe='')}"  | 
 | 43 | +        return path  | 
0 commit comments