Skip to content

Commit 4968c75

Browse files
feat(webhosting): add SyncDomainDnsRecords method (#799)
Co-authored-by: Jules Castéran <[email protected]>
1 parent 2bdbb0d commit 4968c75

File tree

12 files changed

+308
-0
lines changed

12 files changed

+308
-0
lines changed

scaleway-async/scaleway_async/secret/v1beta1/marshalling.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ def unmarshal_SecretVersion(data: Any) -> SecretVersion:
9292
else:
9393
args["updated_at"] = None
9494

95+
field = data.get("deleted_at", None)
96+
if field is not None:
97+
args["deleted_at"] = parser.isoparse(field) if isinstance(field, str) else field
98+
else:
99+
args["deleted_at"] = None
100+
95101
field = data.get("description", None)
96102
if field is not None:
97103
args["description"] = field

scaleway-async/scaleway_async/secret/v1beta1/types.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,11 @@ class SecretVersion:
192192
Last update of the version.
193193
"""
194194

195+
deleted_at: Optional[datetime]
196+
"""
197+
Date and time of the version's deletion.
198+
"""
199+
195200
description: Optional[str]
196201
"""
197202
Description of the version.

scaleway-async/scaleway_async/webhosting/v1/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from .types import CreateDatabaseRequestUser
2525
from .types import CreateHostingRequestDomainConfiguration
2626
from .types import OfferOptionRequest
27+
from .types import SyncDomainDnsRecordsRequestRecord
2728
from .types import DnsRecord
2829
from .types import Nameserver
2930
from .types import HostingUser
@@ -51,6 +52,7 @@
5152
from .types import DatabaseApiUnassignDatabaseUserRequest
5253
from .types import DnsApiCheckUserOwnsDomainRequest
5354
from .types import DnsApiGetDomainDnsRecordsRequest
55+
from .types import DnsApiSyncDomainDnsRecordsRequest
5456
from .types import DnsRecords
5557
from .types import FtpAccountApiChangeFtpAccountPasswordRequest
5658
from .types import FtpAccountApiCreateFtpAccountRequest
@@ -116,6 +118,7 @@
116118
"CreateDatabaseRequestUser",
117119
"CreateHostingRequestDomainConfiguration",
118120
"OfferOptionRequest",
121+
"SyncDomainDnsRecordsRequestRecord",
119122
"DnsRecord",
120123
"Nameserver",
121124
"HostingUser",
@@ -143,6 +146,7 @@
143146
"DatabaseApiUnassignDatabaseUserRequest",
144147
"DnsApiCheckUserOwnsDomainRequest",
145148
"DnsApiGetDomainDnsRecordsRequest",
149+
"DnsApiSyncDomainDnsRecordsRequest",
146150
"DnsRecords",
147151
"FtpAccountApiChangeFtpAccountPasswordRequest",
148152
"FtpAccountApiCreateFtpAccountRequest",

scaleway-async/scaleway_async/webhosting/v1/api.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
DatabaseApiUnassignDatabaseUserRequest,
3535
DatabaseUser,
3636
DnsApiCheckUserOwnsDomainRequest,
37+
DnsApiSyncDomainDnsRecordsRequest,
3738
DnsRecords,
3839
FtpAccount,
3940
FtpAccountApiChangeFtpAccountPasswordRequest,
@@ -59,6 +60,7 @@
5960
ResetHostingPasswordResponse,
6061
ResourceSummary,
6162
Session,
63+
SyncDomainDnsRecordsRequestRecord,
6264
Website,
6365
)
6466
from .content import (
@@ -89,6 +91,7 @@
8991
marshal_DatabaseApiCreateDatabaseUserRequest,
9092
marshal_DatabaseApiUnassignDatabaseUserRequest,
9193
marshal_DnsApiCheckUserOwnsDomainRequest,
94+
marshal_DnsApiSyncDomainDnsRecordsRequest,
9295
marshal_FtpAccountApiChangeFtpAccountPasswordRequest,
9396
marshal_FtpAccountApiCreateFtpAccountRequest,
9497
marshal_HostingApiCreateHostingRequest,
@@ -824,6 +827,61 @@ async def check_user_owns_domain(
824827
self._throw_on_error(res)
825828
return unmarshal_CheckUserOwnsDomainResponse(res.json())
826829

830+
async def sync_domain_dns_records(
831+
self,
832+
*,
833+
domain: str,
834+
update_web_records: bool,
835+
update_mail_records: bool,
836+
update_all_records: bool,
837+
region: Optional[Region] = None,
838+
custom_records: Optional[List[SyncDomainDnsRecordsRequestRecord]] = None,
839+
) -> DnsRecords:
840+
"""
841+
"Synchronize your DNS records on the Elements Console and on cPanel.".
842+
:param domain: Domain for which the DNS records will be synchronized.
843+
:param update_web_records: Whether or not to synchronize the web records.
844+
:param update_mail_records: Whether or not to synchronize the mail records.
845+
:param update_all_records: Whether or not to synchronize all types of records. This one has priority.
846+
:param region: Region to target. If none is passed will use default region from the config.
847+
:param custom_records: Custom records to synchronize.
848+
:return: :class:`DnsRecords <DnsRecords>`
849+
850+
Usage:
851+
::
852+
853+
result = await api.sync_domain_dns_records(
854+
domain="example",
855+
update_web_records=False,
856+
update_mail_records=False,
857+
update_all_records=False,
858+
)
859+
"""
860+
861+
param_region = validate_path_param(
862+
"region", region or self.client.default_region
863+
)
864+
param_domain = validate_path_param("domain", domain)
865+
866+
res = self._request(
867+
"POST",
868+
f"/webhosting/v1/regions/{param_region}/domains/{param_domain}/sync-domain-dns-records",
869+
body=marshal_DnsApiSyncDomainDnsRecordsRequest(
870+
DnsApiSyncDomainDnsRecordsRequest(
871+
domain=domain,
872+
update_web_records=update_web_records,
873+
update_mail_records=update_mail_records,
874+
update_all_records=update_all_records,
875+
region=region,
876+
custom_records=custom_records,
877+
),
878+
self.client,
879+
),
880+
)
881+
882+
self._throw_on_error(res)
883+
return unmarshal_DnsRecords(res.json())
884+
827885

828886
class WebhostingV1OfferAPI(API):
829887
"""

scaleway-async/scaleway_async/webhosting/v1/marshalling.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
DatabaseApiCreateDatabaseUserRequest,
5050
DatabaseApiUnassignDatabaseUserRequest,
5151
DnsApiCheckUserOwnsDomainRequest,
52+
SyncDomainDnsRecordsRequestRecord,
53+
DnsApiSyncDomainDnsRecordsRequest,
5254
FtpAccountApiChangeFtpAccountPasswordRequest,
5355
FtpAccountApiCreateFtpAccountRequest,
5456
CreateHostingRequestDomainConfiguration,
@@ -939,6 +941,45 @@ def marshal_DnsApiCheckUserOwnsDomainRequest(
939941
return output
940942

941943

944+
def marshal_SyncDomainDnsRecordsRequestRecord(
945+
request: SyncDomainDnsRecordsRequestRecord,
946+
defaults: ProfileDefaults,
947+
) -> Dict[str, Any]:
948+
output: Dict[str, Any] = {}
949+
950+
if request.name is not None:
951+
output["name"] = request.name
952+
953+
if request.type_ is not None:
954+
output["type"] = str(request.type_)
955+
956+
return output
957+
958+
959+
def marshal_DnsApiSyncDomainDnsRecordsRequest(
960+
request: DnsApiSyncDomainDnsRecordsRequest,
961+
defaults: ProfileDefaults,
962+
) -> Dict[str, Any]:
963+
output: Dict[str, Any] = {}
964+
965+
if request.update_web_records is not None:
966+
output["update_web_records"] = request.update_web_records
967+
968+
if request.update_mail_records is not None:
969+
output["update_mail_records"] = request.update_mail_records
970+
971+
if request.update_all_records is not None:
972+
output["update_all_records"] = request.update_all_records
973+
974+
if request.custom_records is not None:
975+
output["custom_records"] = [
976+
marshal_SyncDomainDnsRecordsRequestRecord(item, defaults)
977+
for item in request.custom_records
978+
]
979+
980+
return output
981+
982+
942983
def marshal_FtpAccountApiChangeFtpAccountPasswordRequest(
943984
request: FtpAccountApiChangeFtpAccountPasswordRequest,
944985
defaults: ProfileDefaults,

scaleway-async/scaleway_async/webhosting/v1/types.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,13 @@ class OfferOptionRequest:
274274
"""
275275

276276

277+
@dataclass
278+
class SyncDomainDnsRecordsRequestRecord:
279+
name: str
280+
281+
type_: DnsRecordType
282+
283+
277284
@dataclass
278285
class DnsRecord:
279286
name: str
@@ -859,6 +866,39 @@ class DnsApiGetDomainDnsRecordsRequest:
859866
"""
860867

861868

869+
@dataclass
870+
class DnsApiSyncDomainDnsRecordsRequest:
871+
domain: str
872+
"""
873+
Domain for which the DNS records will be synchronized.
874+
"""
875+
876+
update_web_records: bool
877+
"""
878+
Whether or not to synchronize the web records.
879+
"""
880+
881+
update_mail_records: bool
882+
"""
883+
Whether or not to synchronize the mail records.
884+
"""
885+
886+
update_all_records: bool
887+
"""
888+
Whether or not to synchronize all types of records. This one has priority.
889+
"""
890+
891+
region: Optional[Region]
892+
"""
893+
Region to target. If none is passed will use default region from the config.
894+
"""
895+
896+
custom_records: Optional[List[SyncDomainDnsRecordsRequestRecord]]
897+
"""
898+
Custom records to synchronize.
899+
"""
900+
901+
862902
@dataclass
863903
class DnsRecords:
864904
records: List[DnsRecord]

scaleway/scaleway/secret/v1beta1/marshalling.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ def unmarshal_SecretVersion(data: Any) -> SecretVersion:
9292
else:
9393
args["updated_at"] = None
9494

95+
field = data.get("deleted_at", None)
96+
if field is not None:
97+
args["deleted_at"] = parser.isoparse(field) if isinstance(field, str) else field
98+
else:
99+
args["deleted_at"] = None
100+
95101
field = data.get("description", None)
96102
if field is not None:
97103
args["description"] = field

scaleway/scaleway/secret/v1beta1/types.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,11 @@ class SecretVersion:
192192
Last update of the version.
193193
"""
194194

195+
deleted_at: Optional[datetime]
196+
"""
197+
Date and time of the version's deletion.
198+
"""
199+
195200
description: Optional[str]
196201
"""
197202
Description of the version.

scaleway/scaleway/webhosting/v1/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from .types import CreateDatabaseRequestUser
2525
from .types import CreateHostingRequestDomainConfiguration
2626
from .types import OfferOptionRequest
27+
from .types import SyncDomainDnsRecordsRequestRecord
2728
from .types import DnsRecord
2829
from .types import Nameserver
2930
from .types import HostingUser
@@ -51,6 +52,7 @@
5152
from .types import DatabaseApiUnassignDatabaseUserRequest
5253
from .types import DnsApiCheckUserOwnsDomainRequest
5354
from .types import DnsApiGetDomainDnsRecordsRequest
55+
from .types import DnsApiSyncDomainDnsRecordsRequest
5456
from .types import DnsRecords
5557
from .types import FtpAccountApiChangeFtpAccountPasswordRequest
5658
from .types import FtpAccountApiCreateFtpAccountRequest
@@ -116,6 +118,7 @@
116118
"CreateDatabaseRequestUser",
117119
"CreateHostingRequestDomainConfiguration",
118120
"OfferOptionRequest",
121+
"SyncDomainDnsRecordsRequestRecord",
119122
"DnsRecord",
120123
"Nameserver",
121124
"HostingUser",
@@ -143,6 +146,7 @@
143146
"DatabaseApiUnassignDatabaseUserRequest",
144147
"DnsApiCheckUserOwnsDomainRequest",
145148
"DnsApiGetDomainDnsRecordsRequest",
149+
"DnsApiSyncDomainDnsRecordsRequest",
146150
"DnsRecords",
147151
"FtpAccountApiChangeFtpAccountPasswordRequest",
148152
"FtpAccountApiCreateFtpAccountRequest",

scaleway/scaleway/webhosting/v1/api.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
DatabaseApiUnassignDatabaseUserRequest,
3535
DatabaseUser,
3636
DnsApiCheckUserOwnsDomainRequest,
37+
DnsApiSyncDomainDnsRecordsRequest,
3738
DnsRecords,
3839
FtpAccount,
3940
FtpAccountApiChangeFtpAccountPasswordRequest,
@@ -59,6 +60,7 @@
5960
ResetHostingPasswordResponse,
6061
ResourceSummary,
6162
Session,
63+
SyncDomainDnsRecordsRequestRecord,
6264
Website,
6365
)
6466
from .content import (
@@ -89,6 +91,7 @@
8991
marshal_DatabaseApiCreateDatabaseUserRequest,
9092
marshal_DatabaseApiUnassignDatabaseUserRequest,
9193
marshal_DnsApiCheckUserOwnsDomainRequest,
94+
marshal_DnsApiSyncDomainDnsRecordsRequest,
9295
marshal_FtpAccountApiChangeFtpAccountPasswordRequest,
9396
marshal_FtpAccountApiCreateFtpAccountRequest,
9497
marshal_HostingApiCreateHostingRequest,
@@ -824,6 +827,61 @@ def check_user_owns_domain(
824827
self._throw_on_error(res)
825828
return unmarshal_CheckUserOwnsDomainResponse(res.json())
826829

830+
def sync_domain_dns_records(
831+
self,
832+
*,
833+
domain: str,
834+
update_web_records: bool,
835+
update_mail_records: bool,
836+
update_all_records: bool,
837+
region: Optional[Region] = None,
838+
custom_records: Optional[List[SyncDomainDnsRecordsRequestRecord]] = None,
839+
) -> DnsRecords:
840+
"""
841+
"Synchronize your DNS records on the Elements Console and on cPanel.".
842+
:param domain: Domain for which the DNS records will be synchronized.
843+
:param update_web_records: Whether or not to synchronize the web records.
844+
:param update_mail_records: Whether or not to synchronize the mail records.
845+
:param update_all_records: Whether or not to synchronize all types of records. This one has priority.
846+
:param region: Region to target. If none is passed will use default region from the config.
847+
:param custom_records: Custom records to synchronize.
848+
:return: :class:`DnsRecords <DnsRecords>`
849+
850+
Usage:
851+
::
852+
853+
result = api.sync_domain_dns_records(
854+
domain="example",
855+
update_web_records=False,
856+
update_mail_records=False,
857+
update_all_records=False,
858+
)
859+
"""
860+
861+
param_region = validate_path_param(
862+
"region", region or self.client.default_region
863+
)
864+
param_domain = validate_path_param("domain", domain)
865+
866+
res = self._request(
867+
"POST",
868+
f"/webhosting/v1/regions/{param_region}/domains/{param_domain}/sync-domain-dns-records",
869+
body=marshal_DnsApiSyncDomainDnsRecordsRequest(
870+
DnsApiSyncDomainDnsRecordsRequest(
871+
domain=domain,
872+
update_web_records=update_web_records,
873+
update_mail_records=update_mail_records,
874+
update_all_records=update_all_records,
875+
region=region,
876+
custom_records=custom_records,
877+
),
878+
self.client,
879+
),
880+
)
881+
882+
self._throw_on_error(res)
883+
return unmarshal_DnsRecords(res.json())
884+
827885

828886
class WebhostingV1OfferAPI(API):
829887
"""

0 commit comments

Comments
 (0)