Source code for terminusgps.authorizenet.profiles.addresses
from authorizenet import apicontractsv1, apicontrollers
from terminusgps.authorizenet.profiles.base import AuthorizenetSubProfileBase
[docs]
class AddressProfile(AuthorizenetSubProfileBase):
"""An Authorizenet customer address profile."""
[docs]
def create(self, address: apicontractsv1.customerAddressType) -> int:
"""
Creates the customer shipping address profile in Authorizenet.
:param address: A customer address.
:type address: :py:obj:`~authorizenet.apicontractsv1.customerAddressType`
:returns: An address profile id.
:rtype: :py:obj:`int`
"""
return int(
self._authorizenet_create_shipping_address(address).customerAddressId
)
[docs]
def update(self, address: apicontractsv1.customerAddressType) -> None:
"""
Updates the customer shipping address to the new address in Authorizenet.
:param address: A customer address.
:type address: :py:obj:`~authorizenet.apicontractsv1.customerAddressType`
:returns: Nothing.
:rtype: :py:obj:`None`
"""
if self.id:
self._authorizenet_update_shipping_address(address)
[docs]
def delete(self) -> None:
"""
Deletes the customer address profile in Authorizenet and sets :py:attr:`id` to :py:obj:`None` if :py:attr:`id` is set.
:returns: Nothing.
:rtype: :py:obj:`None`
"""
if self.id:
self._authorizenet_delete_shipping_address()
self.id = None
[docs]
def _authorizenet_get_shipping_address(self) -> dict | None:
"""
Executes a :py:obj:`~authorizenet.apicontractsv1.getCustomerShippingAddressRequest` using the Authorizenet API.
`getCustomerShippingAddressRequest <https://developer.authorize.net/api/reference/index.html#customer-profiles-get-customer-shipping-address>`_
:raises AssertionError: If :py:attr:`id` wasn't set.
:raises AssertionError: If :py:attr:`customerProfileId` wasn't set.
:raises ControllerExecutionError: If something goes wrong during an Authorizenet API call.
:returns: An Authorizenet API response, if any.
:rtype: :py:obj:`dict` | :py:obj:`None`
"""
assert self.id, "'id' wasn't set."
assert self.customerProfileId, "'customerProfileId' wasn't set."
request = apicontractsv1.getCustomerShippingAddressRequest(
merchantAuthentication=self.merchantAuthentication,
customerProfileId=self.customerProfileId,
customerAddressId=self.id,
)
controller = apicontrollers.getCustomerShippingAddressController(request)
return self.execute_controller(controller)
[docs]
def _authorizenet_create_shipping_address(
self, address: apicontractsv1.customerAddressType
) -> dict | None:
"""
Executes a :py:obj:`~authorizenet.apicontractsv1.createCustomerShippingAddressRequest` using the Authorizenet API.
`createCustomerShippingAddressRequest <https://developer.authorize.net/api/reference/index.html#customer-profiles-create-customer-shipping-address>`_
:raises ControllerExecutionError: If something goes wrong during an Authorizenet API call.
:returns: An Authorizenet API response, if any.
:rtype: :py:obj:`dict` | :py:obj:`None`
"""
request = apicontractsv1.createCustomerShippingAddressRequest(
merchantAuthentication=self.merchantAuthentication,
customerProfileId=self.customerProfileId,
address=address,
defaultShippingAddress=self.default,
)
controller = apicontrollers.createCustomerShippingAddressController(request)
return self.execute_controller(controller)
[docs]
def _authorizenet_update_shipping_address(
self, address: apicontractsv1.customerAddressType
) -> dict | None:
"""
Executes a :py:obj:`~authorizenet.apicontractsv1.updateCustomerShippingAddressRequest` using the Authorizenet API.
`updateCustomerShippingAddressRequest <https://developer.authorize.net/api/reference/index.html#customer-profiles-update-customer-shipping-address>`_
:raises AssertionError: If :py:attr:`id` wasn't set.
:raises AssertionError: If :py:attr:`customerProfileId` wasn't set.
:raises ControllerExecutionError: If something goes wrong during an Authorizenet API call.
:returns: An Authorizenet API response, if any.
:rtype: :py:obj:`dict` | :py:obj:`None`
"""
assert self.id, "'id' wasn't set."
assert self.customerProfileId, "'customerProfileId' wasn't set."
address.customerAddressId = self.id
request = apicontractsv1.updateCustomerShippingAddressRequest(
merchantAuthentication=self.merchantAuthentication,
customerProfileId=self.customerProfileId,
address=address,
default=self.default,
)
controller = apicontrollers.updateCustomerShippingAddressController(request)
return self.execute_controller(controller)
[docs]
def _authorizenet_delete_shipping_address(self) -> dict | None:
"""
Executes a :py:obj:`~authorizenet.apicontractsv1.deleteCustomerShippingAddressRequest` using the Authorizenet API.
`deleteCustomerShippingAddressRequest <https://developer.authorize.net/api/reference/index.html#customer-profiles-delete-customer-shipping-address>`_
:raises AssertionError: If :py:attr:`id` wasn't set.
:raises AssertionError: If :py:attr:`customerProfileId` wasn't set.
:raises ControllerExecutionError: If something goes wrong during an Authorizenet API call.
:returns: An Authorizenet API response, if any.
:rtype: :py:obj:`dict` | :py:obj:`None`
"""
assert self.id, "'id' wasn't set."
assert self.customerProfileId, "'customerProfileId' wasn't set."
request = apicontractsv1.deleteCustomerShippingAddressRequest(
merchantAuthentication=self.merchantAuthentication,
customerProfileId=self.customerProfileId,
customerAddressId=self.id,
)
controller = apicontrollers.deleteCustomerShippingAddressController(request)
return self.execute_controller(controller)