Source code for terminusgps.authorizenet.api.customer_profiles
from authorizenet import apicontractsv1, apicontrollers
from authorizenet.apicontrollersbase import APIOperationBase
from lxml.objectify import ObjectifiedElement
__all__ = [
"create_customer_profile",
"delete_customer_profile",
"get_customer_profile",
"get_customer_profile_ids",
"update_customer_profile",
]
[docs]
def create_customer_profile(
contract: apicontractsv1.customerProfileType,
) -> tuple[ObjectifiedElement, type[APIOperationBase]]:
"""
`createCustomerProfileRequest <https://developer.authorize.net/api/reference/index.html#customer-profiles-create-customer-profile>`_.
:param contract: A customer profile contract element.
:type contract: ~apicontractsv1.customerProfileType
:raises ValueError: If the contract didn't have at least one of ``email``, ``merchantCustomerId`` or ``description``.
:returns: A tuple containing an Authorizenet API request element and controller class.
:rtype: tuple[~lxml.objectify.ObjectifiedElement, type[~authorizenet.apicontrollersbase.APIOperationBase]]
"""
if not any(
[contract.email, contract.merchantCustomerId, contract.description]
):
raise ValueError(
"At least one of 'email', 'merchantCustomerId' or 'description' is required in contract"
)
request = apicontractsv1.createCustomerProfileRequest()
request.profile = contract
return request, apicontrollers.createCustomerProfileController
[docs]
def get_customer_profile(
customer_profile_id: int | None = None,
email: str | None = None,
merchant_id: str | None = None,
description: str | None = None,
include_issuer_info: bool = False,
unmask_expiration_date: bool = False,
) -> tuple[ObjectifiedElement, type[APIOperationBase]]:
"""
`getCustomerProfileRequest <https://developer.authorize.net/api/reference/index.html#customer-profiles-get-customer-profile>`_.
:param customer_profile_id: Authorizenet customer profile id.
:type customer_profile_id: int | None
:param email: Authorizenet customer profile email.
:type email: str | None
:param merchant_id: Authorizenet customer profile merchant id.
:type merchant_id: str | None
:param description: Authorizenet customer profile description.
:type description: str | None
:param include_issuer_info: Whether to include issuer info in the response. Default is :py:obj:`False`.
:type include_issuer_info: bool
:returns: A tuple containing an Authorizenet API request element and controller class.
:rtype: tuple[~lxml.objectify.ObjectifiedElement, type[~authorizenet.apicontrollersbase.APIOperationBase]]
"""
if not any([customer_profile_id, email, merchant_id, description]):
raise ValueError(
"At least one of 'customer_profile_id', 'email', 'merchant_id' or 'description' is required."
)
request = apicontractsv1.getCustomerProfileRequest()
request.includeIssuerInfo = str(include_issuer_info).lower()
request.unmaskExpirationDate = str(unmask_expiration_date).lower()
if customer_profile_id is not None:
request.customerProfileId = str(customer_profile_id)
if email is not None:
request.email = email
if merchant_id is not None:
request.merchantCustomerId = merchant_id
if description is not None:
request.description = description
return request, apicontrollers.getCustomerProfileController
[docs]
def get_customer_profile_ids() -> tuple[
ObjectifiedElement, type[APIOperationBase]
]:
"""
`getCustomerProfileIdsRequest <https://developer.authorize.net/api/reference/index.html#customer-profiles-get-customer-profile-ids>`_.
:returns: A tuple containing an Authorizenet API request element and controller class.
:rtype: tuple[~lxml.objectify.ObjectifiedElement, type[~authorizenet.apicontrollersbase.APIOperationBase]]
"""
request = apicontractsv1.getCustomerProfileIdsRequest()
return request, apicontrollers.getCustomerProfileIdsController
[docs]
def update_customer_profile(
contract: apicontractsv1.customerProfileExType,
) -> tuple[ObjectifiedElement, type[APIOperationBase]]:
"""
`updateCustomerProfileRequest <https://developer.authorize.net/api/reference/index.html#customer-profiles-update-customer-profile>`_.
:param contract: An Authorizenet customer profile ex contract.
:type contract: ~authorizenet.apicontractsv1.customerProfileExType
:raises TypeError: If the contract wasn't of type :py:class:`~apicontractsv1.customerProfileExType`.
:raises ValueError: If the contract didn't have all required attributes.
:returns: A tuple containing an Authorizenet API request element and controller class.
:rtype: tuple[~lxml.objectify.ObjectifiedElement, type[~authorizenet.apicontrollersbase.APIOperationBase]]
"""
if not contract.customerProfileId:
raise ValueError(
f"Invalid value for 'customerProfileId': '{contract.customerProfileId}'"
)
request = apicontractsv1.updateCustomerProfileRequest()
request.profile = contract
return request, apicontrollers.updateCustomerProfileController
[docs]
def delete_customer_profile(
customer_profile_id: int,
) -> tuple[ObjectifiedElement, type[APIOperationBase]]:
"""
`deleteCustomerProfileRequest <https://developer.authorize.net/api/reference/index.html#customer-profiles-delete-customer-profile>`_.
:param customer_profile_id: An Authorizenet customer profile id.
:type customer_profile_id: int
:returns: A tuple containing an Authorizenet API request element and controller class.
:rtype: tuple[~lxml.objectify.ObjectifiedElement, type[~authorizenet.apicontrollersbase.APIOperationBase]]
"""
request = apicontractsv1.deleteCustomerProfileRequest()
request.customerProfileId = str(customer_profile_id)
return request, apicontrollers.deleteCustomerProfileController