import json from typing import Any, Dict from moto.core.responses import BaseResponse from moto.route53domains.models import Route53DomainsBackend, route53domains_backends from moto.route53domains.validators import Route53Domain, Route53DomainsOperation class Route53DomainsResponse(BaseResponse): def __init__(self) -> None: super().__init__(service_name="route53-domains") @property def route53domains_backend(self) -> Route53DomainsBackend: return route53domains_backends[self.current_account][self.partition] def register_domain(self) -> str: domain_name = self._get_param("DomainName") duration_in_years = self._get_int_param("DurationInYears") auto_renew = self._get_bool_param("AutoRenew", if_none=True) admin_contact = self._get_param("AdminContact") registrant_contact = self._get_param("RegistrantContact") tech_contact = self._get_param("TechContact") privacy_protection_admin_contact = self._get_bool_param( "PrivacyProtectAdminContact", if_none=True ) privacy_protection_registrant_contact = self._get_bool_param( "PrivacyProtectRegistrantContact", if_none=True ) privacy_protection_tech_contact = self._get_bool_param( "PrivacyProtectTechContact", if_none=True ) extra_params = self._get_param("ExtraParams") operation = self.route53domains_backend.register_domain( domain_name=domain_name, duration_in_years=duration_in_years, auto_renew=auto_renew, admin_contact=admin_contact, registrant_contact=registrant_contact, tech_contact=tech_contact, private_protect_admin_contact=privacy_protection_admin_contact, private_protect_registrant_contact=privacy_protection_registrant_contact, private_protect_tech_contact=privacy_protection_tech_contact, extra_params=extra_params, ) return json.dumps({"OperationId": operation.id}) def delete_domain(self) -> str: domain_name = self._get_param("DomainName") operation = self.route53domains_backend.delete_domain(domain_name) return json.dumps({"OperationId": operation.id}) def get_domain_detail(self) -> str: domain_name = self._get_param("DomainName") return json.dumps( self.route53domains_backend.get_domain(domain_name=domain_name).to_json() ) def list_domains(self) -> str: filter_conditions = self._get_param("FilterConditions") sort_condition = self._get_param("SortCondition") marker = self._get_param("Marker") max_items = self._get_param("MaxItems") domains, marker = self.route53domains_backend.list_domains( filter_conditions=filter_conditions, sort_condition=sort_condition, marker=marker, max_items=max_items, ) res = { "Domains": list(map(self.__map_domains_to_info, domains)), } if marker: res["NextPageMarker"] = marker return json.dumps(res) @staticmethod def __map_domains_to_info(domain: Route53Domain) -> Dict[str, Any]: # type: ignore[misc] return { "DomainName": domain.domain_name, "AutoRenew": domain.auto_renew, "Expiry": domain.expiration_date.timestamp(), "TransferLock": True, } def list_operations(self) -> str: submitted_since_timestamp = self._get_int_param("SubmittedSince") max_items = self._get_int_param("MaxItems") statuses = self._get_param("Status") marker = self._get_param("Marker") types = self._get_param("Type") sort_by = self._get_param("SortBy") sort_order = self._get_param("SortOrder") operations, marker = self.route53domains_backend.list_operations( submitted_since_timestamp=submitted_since_timestamp, max_items=max_items, marker=marker, statuses=statuses, types=types, sort_by=sort_by, sort_order=sort_order, ) res = { "Operations": [operation.to_json() for operation in operations], } if marker: res["NextPageMarker"] = marker return json.dumps(res) def get_operation_detail(self) -> str: operation_id = self._get_param("OperationId") operation: Route53DomainsOperation = self.route53domains_backend.get_operation( operation_id ) return json.dumps(operation.to_json()) def update_domain_nameservers(self) -> str: domain_name = self._get_param("DomainName") nameservers = self._get_param("Nameservers") operation: Route53DomainsOperation = ( self.route53domains_backend.update_domain_nameservers( domain_name=domain_name, nameservers=nameservers ) ) return json.dumps({"OperationId": operation.id})
Memory