Skip to content

Commit 53e625c

Browse files
authored
feat(domain): expose inbound transfer status (#1200)
1 parent f4293c4 commit 53e625c

File tree

8 files changed

+512
-0
lines changed

8 files changed

+512
-0
lines changed

scaleway-async/scaleway_async/domain/v2beta1/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from .content import DOMAIN_TRANSIENT_STATUSES
1818
from .types import HostStatus
1919
from .content import HOST_TRANSIENT_STATUSES
20+
from .types import InboundTransferStatus
2021
from .types import LinkedProduct
2122
from .types import ListContactsRequestRole
2223
from .types import ListDNSZoneRecordsRequestOrderBy
@@ -79,6 +80,7 @@
7980
from .types import DNSZoneVersion
8081
from .types import Host
8182
from .types import DomainSummary
83+
from .types import InboundTransfer
8284
from .types import RenewableDomain
8385
from .types import SSLCertificate
8486
from .types import Task
@@ -122,6 +124,7 @@
122124
from .types import ListDNSZonesResponse
123125
from .types import ListDomainHostsResponse
124126
from .types import ListDomainsResponse
127+
from .types import ListInboundTransfersResponse
125128
from .types import ListRenewableDomainsResponse
126129
from .types import ListSSLCertificatesRequest
127130
from .types import ListSSLCertificatesResponse
@@ -146,6 +149,7 @@
146149
from .types import RegistrarApiListContactsRequest
147150
from .types import RegistrarApiListDomainHostsRequest
148151
from .types import RegistrarApiListDomainsRequest
152+
from .types import RegistrarApiListInboundTransfersRequest
149153
from .types import RegistrarApiListRenewableDomainsRequest
150154
from .types import RegistrarApiListTasksRequest
151155
from .types import RegistrarApiListTldsRequest
@@ -188,6 +192,7 @@
188192
"DOMAIN_TRANSIENT_STATUSES",
189193
"HostStatus",
190194
"HOST_TRANSIENT_STATUSES",
195+
"InboundTransferStatus",
191196
"LinkedProduct",
192197
"ListContactsRequestRole",
193198
"ListDNSZoneRecordsRequestOrderBy",
@@ -250,6 +255,7 @@
250255
"DNSZoneVersion",
251256
"Host",
252257
"DomainSummary",
258+
"InboundTransfer",
253259
"RenewableDomain",
254260
"SSLCertificate",
255261
"Task",
@@ -293,6 +299,7 @@
293299
"ListDNSZonesResponse",
294300
"ListDomainHostsResponse",
295301
"ListDomainsResponse",
302+
"ListInboundTransfersResponse",
296303
"ListRenewableDomainsResponse",
297304
"ListSSLCertificatesRequest",
298305
"ListSSLCertificatesResponse",
@@ -317,6 +324,7 @@
317324
"RegistrarApiListContactsRequest",
318325
"RegistrarApiListDomainHostsRequest",
319326
"RegistrarApiListDomainsRequest",
327+
"RegistrarApiListInboundTransfersRequest",
320328
"RegistrarApiListRenewableDomainsRequest",
321329
"RegistrarApiListTasksRequest",
322330
"RegistrarApiListTldsRequest",

scaleway-async/scaleway_async/domain/v2beta1/api.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
ImportRawDNSZoneRequestAXFRSource,
5959
ImportRawDNSZoneRequestBindSource,
6060
ImportRawDNSZoneResponse,
61+
InboundTransfer,
6162
ListContactsResponse,
6263
ListDNSZoneNameserversResponse,
6364
ListDNSZoneRecordsResponse,
@@ -66,6 +67,7 @@
6667
ListDNSZonesResponse,
6768
ListDomainHostsResponse,
6869
ListDomainsResponse,
70+
ListInboundTransfersResponse,
6971
ListRenewableDomainsResponse,
7072
ListSSLCertificatesResponse,
7173
ListTasksResponse,
@@ -131,6 +133,7 @@
131133
unmarshal_ListDNSZonesResponse,
132134
unmarshal_ListDomainHostsResponse,
133135
unmarshal_ListDomainsResponse,
136+
unmarshal_ListInboundTransfersResponse,
134137
unmarshal_ListRenewableDomainsResponse,
135138
unmarshal_ListSSLCertificatesResponse,
136139
unmarshal_ListTasksResponse,
@@ -1471,6 +1474,87 @@ async def list_tasks_all(
14711474
},
14721475
)
14731476

1477+
async def list_inbound_transfers(
1478+
self,
1479+
*,
1480+
page: int,
1481+
domain: str,
1482+
page_size: Optional[int] = None,
1483+
project_id: Optional[str] = None,
1484+
organization_id: Optional[str] = None,
1485+
) -> ListInboundTransfersResponse:
1486+
"""
1487+
:param page:
1488+
:param domain:
1489+
:param page_size:
1490+
:param project_id:
1491+
:param organization_id:
1492+
:return: :class:`ListInboundTransfersResponse <ListInboundTransfersResponse>`
1493+
1494+
Usage:
1495+
::
1496+
1497+
result = await api.list_inbound_transfers(
1498+
page=1,
1499+
domain="example",
1500+
)
1501+
"""
1502+
1503+
res = self._request(
1504+
"GET",
1505+
"/domain/v2beta1/inbound-transfers",
1506+
params={
1507+
"domain": domain,
1508+
"organization_id": organization_id
1509+
or self.client.default_organization_id,
1510+
"page": page,
1511+
"page_size": page_size or self.client.default_page_size,
1512+
"project_id": project_id or self.client.default_project_id,
1513+
},
1514+
)
1515+
1516+
self._throw_on_error(res)
1517+
return unmarshal_ListInboundTransfersResponse(res.json())
1518+
1519+
async def list_inbound_transfers_all(
1520+
self,
1521+
*,
1522+
page: int,
1523+
domain: str,
1524+
page_size: Optional[int] = None,
1525+
project_id: Optional[str] = None,
1526+
organization_id: Optional[str] = None,
1527+
) -> List[InboundTransfer]:
1528+
"""
1529+
:param page:
1530+
:param domain:
1531+
:param page_size:
1532+
:param project_id:
1533+
:param organization_id:
1534+
:return: :class:`List[InboundTransfer] <List[InboundTransfer]>`
1535+
1536+
Usage:
1537+
::
1538+
1539+
result = await api.list_inbound_transfers_all(
1540+
page=1,
1541+
domain="example",
1542+
)
1543+
"""
1544+
1545+
return await fetch_all_pages_async(
1546+
type=ListInboundTransfersResponse,
1547+
key="inbound_transfers",
1548+
fetcher=self.list_inbound_transfers,
1549+
args={
1550+
"page": page,
1551+
"domain": domain,
1552+
"page_size": page_size,
1553+
"project_id": project_id,
1554+
"organization_id": organization_id,
1555+
},
1556+
)
1557+
14741558
async def buy_domains(
14751559
self,
14761560
*,

scaleway-async/scaleway_async/domain/v2beta1/marshalling.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from .types import (
1616
DomainFeatureStatus,
1717
DomainStatus,
18+
InboundTransferStatus,
1819
LinkedProduct,
1920
TaskStatus,
2021
TaskType,
@@ -78,6 +79,8 @@
7879
ListDomainHostsResponse,
7980
DomainSummary,
8081
ListDomainsResponse,
82+
InboundTransfer,
83+
ListInboundTransfersResponse,
8184
RenewableDomain,
8285
ListRenewableDomainsResponse,
8386
ListSSLCertificatesResponse,
@@ -2090,6 +2093,92 @@ def unmarshal_ListDomainsResponse(data: Any) -> ListDomainsResponse:
20902093
return ListDomainsResponse(**args)
20912094

20922095

2096+
def unmarshal_InboundTransfer(data: Any) -> InboundTransfer:
2097+
if not isinstance(data, dict):
2098+
raise TypeError(
2099+
"Unmarshalling the type 'InboundTransfer' failed as data isn't a dictionary."
2100+
)
2101+
2102+
args: Dict[str, Any] = {}
2103+
2104+
field = data.get("id", None)
2105+
if field is not None:
2106+
args["id"] = field
2107+
else:
2108+
args["id"] = None
2109+
2110+
field = data.get("project_id", None)
2111+
if field is not None:
2112+
args["project_id"] = field
2113+
else:
2114+
args["project_id"] = None
2115+
2116+
field = data.get("domain", None)
2117+
if field is not None:
2118+
args["domain"] = field
2119+
else:
2120+
args["domain"] = None
2121+
2122+
field = data.get("status", None)
2123+
if field is not None:
2124+
args["status"] = field
2125+
else:
2126+
args["status"] = InboundTransferStatus.UNKNOWN
2127+
2128+
field = data.get("message", None)
2129+
if field is not None:
2130+
args["message"] = field
2131+
else:
2132+
args["message"] = None
2133+
2134+
field = data.get("task_id", None)
2135+
if field is not None:
2136+
args["task_id"] = field
2137+
else:
2138+
args["task_id"] = None
2139+
2140+
field = data.get("created_at", None)
2141+
if field is not None:
2142+
args["created_at"] = parser.isoparse(field) if isinstance(field, str) else field
2143+
else:
2144+
args["created_at"] = None
2145+
2146+
field = data.get("last_updated_at", None)
2147+
if field is not None:
2148+
args["last_updated_at"] = (
2149+
parser.isoparse(field) if isinstance(field, str) else field
2150+
)
2151+
else:
2152+
args["last_updated_at"] = None
2153+
2154+
return InboundTransfer(**args)
2155+
2156+
2157+
def unmarshal_ListInboundTransfersResponse(data: Any) -> ListInboundTransfersResponse:
2158+
if not isinstance(data, dict):
2159+
raise TypeError(
2160+
"Unmarshalling the type 'ListInboundTransfersResponse' failed as data isn't a dictionary."
2161+
)
2162+
2163+
args: Dict[str, Any] = {}
2164+
2165+
field = data.get("total_count", None)
2166+
if field is not None:
2167+
args["total_count"] = field
2168+
else:
2169+
args["total_count"] = None
2170+
2171+
field = data.get("inbound_transfers", None)
2172+
if field is not None:
2173+
args["inbound_transfers"] = (
2174+
[unmarshal_InboundTransfer(v) for v in field] if field is not None else None
2175+
)
2176+
else:
2177+
args["inbound_transfers"] = None
2178+
2179+
return ListInboundTransfersResponse(**args)
2180+
2181+
20932182
def unmarshal_RenewableDomain(data: Any) -> RenewableDomain:
20942183
if not isinstance(data, dict):
20952184
raise TypeError(

scaleway-async/scaleway_async/domain/v2beta1/types.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,23 @@ def __str__(self) -> str:
184184
return str(self.value)
185185

186186

187+
class InboundTransferStatus(str, Enum, metaclass=StrEnumMeta):
188+
UNKNOWN = "unknown"
189+
IN_PROGRESS = "in_progress"
190+
DONE = "done"
191+
ERR_INTERNAL = "err_internal"
192+
ERR_DOMAIN_PENDING = "err_domain_pending"
193+
ERR_ALREADY_TRANSFERRING = "err_already_transferring"
194+
ERR_TRANSFER_PROHIBITED = "err_transfer_prohibited"
195+
ERR_TRANSFER_IMPOSSIBLE = "err_transfer_impossible"
196+
ERR_INVALID_AUTHCODE = "err_invalid_authcode"
197+
ERR_DOMAIN_TOO_YOUNG = "err_domain_too_young"
198+
ERR_TOO_MANY_REQUESTS = "err_too_many_requests"
199+
200+
def __str__(self) -> str:
201+
return str(self.value)
202+
203+
187204
class LinkedProduct(str, Enum, metaclass=StrEnumMeta):
188205
UNKNOWN_PRODUCT = "unknown_product"
189206
VPC = "vpc"
@@ -746,6 +763,49 @@ class DomainSummary:
746763
transfer_registration_status: Optional[DomainRegistrationStatusTransfer] = None
747764

748765

766+
@dataclass
767+
class InboundTransfer:
768+
id: str
769+
"""
770+
The unique identifier of the inbound transfer.
771+
"""
772+
773+
project_id: str
774+
"""
775+
The project ID associated with the inbound transfer.
776+
"""
777+
778+
domain: str
779+
"""
780+
The domain associated with the inbound transfer.
781+
"""
782+
783+
status: InboundTransferStatus
784+
"""
785+
Inbound transfer status.
786+
"""
787+
788+
message: str
789+
"""
790+
Human-friendly message to describe the current inbound transfer status.
791+
"""
792+
793+
task_id: str
794+
"""
795+
The unique identifier of the associated task.
796+
"""
797+
798+
created_at: Optional[datetime] = None
799+
"""
800+
The creation date of the inbound transfer.
801+
"""
802+
803+
last_updated_at: Optional[datetime] = None
804+
"""
805+
The last modification date of the inbound transfer.
806+
"""
807+
808+
749809
@dataclass
750810
class RenewableDomain:
751811
domain: str
@@ -1337,6 +1397,12 @@ class ListDomainsResponse:
13371397
domains: List[DomainSummary]
13381398

13391399

1400+
@dataclass
1401+
class ListInboundTransfersResponse:
1402+
total_count: int
1403+
inbound_transfers: List[InboundTransfer]
1404+
1405+
13401406
@dataclass
13411407
class ListRenewableDomainsResponse:
13421408
total_count: int
@@ -1540,6 +1606,15 @@ class RegistrarApiListDomainsRequest:
15401606
domain: Optional[str] = None
15411607

15421608

1609+
@dataclass
1610+
class RegistrarApiListInboundTransfersRequest:
1611+
page: int
1612+
domain: str
1613+
page_size: Optional[int] = None
1614+
project_id: Optional[str] = None
1615+
organization_id: Optional[str] = None
1616+
1617+
15431618
@dataclass
15441619
class RegistrarApiListRenewableDomainsRequest:
15451620
page: Optional[int] = None

0 commit comments

Comments
 (0)