Source code for pyticketswitch.callout

from collections import OrderedDict
from pyticketswitch.mixins import JSONMixin
from pyticketswitch.debitor import Debitor


[docs]class Integration(JSONMixin, object): """Information to use when integrating payment methods into clients. Attributes: type (str): the debitor type. amount (float): the amount to be debited. amount_base (int): the precise amount. see currency for places. currency (str): the currency code. data (dict): debitor specific information. """ def __init__(self, typ, amount=None, base_amount=None, currency=None, data=None): self.type = typ self.amount = amount self.base_amount = base_amount self.currency = currency self.data = data
[docs] @classmethod def from_api_data(cls, data): """Creates a new Integration object from API data from ticketswitch. Args: data (dict): the part of the response from a ticketswitch API call that concerns the integration. Returns: :class:`Integration <pyticketswitch.callout.Integration>`: a new :class:`Integration <pyticketswitch.callout.Integration>` object populated with the data from the api. """ kwargs = { 'typ': data.get('debitor_type'), 'amount': data.get('debit_amount'), 'base_amount': data.get('debit_base_amount'), 'currency': data.get('debit_currency'), 'data': data.get('debitor_specific_data'), } return cls(**kwargs)
[docs]class Callout(JSONMixin, object): """Information about a redirection required by a 3rd party the payment provider. Attributes: code (str): the identifier for the source system of the bundle this callout will be paying for. description: the human readable description for the source system. total (float): the total amount of money that will be payable. type (str): the HTTP method that should be used to send the customer to the destination. destination (str): the destination url to send your user to. parameters (:py:class:`collections.OrderedDict`): dictionary of key value pairs that the 3rd party is expecting as query string parameters or form parameters. html (str): a blob of HTML that can be rendered to produce either the required redirect or the form to continue with the transaction. integration_data (dict): data relevant to the debitor that the customer will be redirected to. This *may* provide a opertunity to integrate directly. Consult documentation for more details. debitor (:class:`Debitor <pyticketswitch.debitor.Debitor>`): the debitor information that can be used for a front end integration. return_token (str): return token specified in the last purchase or callback call. """ def __init__(self, code=None, description=None, total=None, typ=None, destination=None, parameters=None, integration_data=None, debitor=None, currency_code=None, return_token=None): self.code = code self.description = description self.total = total self.type = typ self.destination = destination self.parameters = parameters self.integration_data = integration_data self.debitor = debitor self.currency_code = currency_code self.return_token = return_token
[docs] @classmethod def from_api_data(cls, data): """Creates a new Callout object from API data from ticketswitch. Args: data (dict): the part of the response from a ticketswitch API call that concerns a callout. Returns: :class:`Callout <pyticketswitch.callout.Callout>`: a new :class:`Callout <pyticketswitch.callout.Callout>` object populated with the data from the api. """ kwargs = { 'code': data.get('bundle_source_code'), 'description': data.get('bundle_source_desc'), 'total': data.get('bundle_total_cost'), 'destination': data.get('callout_destination_url'), 'typ': data.get('callout_type'), 'currency_code': data.get('currency_code'), 'return_token': data.get('return_token'), } integration_data = data.get('callout_integration_data') if integration_data: kwargs.update(integration_data=integration_data) raw_debitor = data.get('debitor') if raw_debitor: debitor = Debitor.from_api_data(raw_debitor) kwargs.update(debitor=debitor) raw_parameters = data.get('callout_parameters') parameter_order = data.get('callout_parameters_order') if raw_parameters: if parameter_order: ordered_parameters = ( [key, raw_parameters[key]] for key in parameter_order ) parameters = OrderedDict(ordered_parameters) else: parameters = OrderedDict(raw_parameters.items()) kwargs.update(parameters=parameters) return cls(**kwargs)
def __repr__(self): return u'<Callout {}:{}>'.format(self.code, self.return_token)