Código fonte para zoop_wrapper.wrapper.card

from typing import Union

from requests import HTTPError

from .base import BaseZoopWrapper
from ..exceptions import ValidationError, FieldError
from ..models.token import Token


[documentos]class CardWrapper(BaseZoopWrapper): """ Possui os métodos do resource :class:`.Card` .. warning:: Não importe isso diretamente! Essa classe precisa de métodos presentes em outro wrapper """
[documentos] def retrieve_card(self, identifier): """ retrieve card Args: identifier: uuid id Returns: response without instance """ url = self._construct_url(action="cards", identifier=identifier) return self._get(url)
def __add_card_token(self, card_token: Token): """ Cria um :class:`.Token` do tipo :class:`.Card` Args: card_token: instância do :class:`.Token` Returns: :class:`.ZoopResponse` com instância do :class:`.Token` """ url = self._construct_url(action="cards", subaction="tokens") return self._post_instance(url, instance=card_token)
[documentos] def add_card(self, data: Union[dict, Token], customer_identifier: str): """ Adiciona um cartão de crédito utilizando um Token de cartão de crédito Examples: >>> data = { "card_number": "foo", "expiration_month": "foo", "expiration_year": "foo", "holder_name": "foo", "security_code": "foo" } Args: data: dicionário de dados customer_identifier: uuid do consumidor (:class:`.Buyer` ou :class:`.Seller`) # noqa Returns: :class:`.ZoopResponse` com instância do :class:`.Card` """ token = Token.from_dict_or_instance(data) try: self.retrieve_buyer(customer_identifier) # type: ignore except HTTPError: try: self.retrieve_seller(customer_identifier) # type: ignore except HTTPError: raise ValidationError( self, FieldError( "customer_identifier", "Não existe Seller ou Buyer para esse identificador", ), ) token_response = self.__add_card_token(token) created_token = token_response.data data = {"customer": customer_identifier, "token": created_token["id"]} url = self._construct_url(action="cards") return self._post(url, data=data)