Source code for pyticketswitch.bundle

from pyticketswitch.order import Order
from pyticketswitch.mixins import JSONMixin
from pyticketswitch.debitor import Debitor
from pyticketswitch.purchase_result import PurchaseResult


[docs]class Bundle(JSONMixin, object): """A collection of orders into the same backend system Attributes: source_code (str): the identifier of the backend system. orders (list): the orders. description (str): description of the backend system. total_seatprice (float): the total cost of the seats/tickets in the bundle. total_surcharge (float): the total additional charges for the bundle. total_send_cost (float): the total postage fee for the bundle. total (float): the total amount of money required to purchase this bundle. currency_code (str): the currency that the prices are in. debitor (:class:`Debitor <pyticketswitch.debitor.Debitor>`): information about an external debitor that will be used to take payment for this bundle. When you are selling on credit, or the source system is taking payment, this will be :obj:`None`. terms_and_conditions (str): supplier terms and conditions. Only availabile when requested with the optional ``source_info`` flag. purchase_result (:class:`PurchaseResult <pyticketswitch.purchase_result. PurchaseResult>`): the result of the purchase attempt for the bundle send_cost_tax_component (float): tax of send cost. total_combined_tax_component (float): total tax. total_surcharge_tax_sub_component (float): total surcharge tax. """ def __init__( self, source_code, orders=None, description=None, total_seatprice=None, total_surcharge=None, total_send_cost=None, total=None, currency_code=None, debitor=None, terms_and_conditions=None, purchase_result=None, send_cost_tax_component=None, total_combined_tax_component=None, total_surcharge_tax_sub_component=None, ): self.source_code = source_code self.orders = orders self.description = description self.total_seatprice = total_seatprice self.total_surcharge = total_surcharge self.total_send_cost = total_send_cost self.total = total self.currency_code = currency_code self.debitor = debitor self.terms_and_conditions = terms_and_conditions self.purchase_result = purchase_result self.send_cost_tax_component = send_cost_tax_component self.total_combined_tax_component = total_combined_tax_component self.total_surcharge_tax_sub_component = ( total_surcharge_tax_sub_component )
[docs] @classmethod def from_api_data(cls, data): """Creates a new Bundle object from API data from ticketswitch. Args: data (dict): the part of the response from a ticketswitch API call that concerns a bundle. Returns: :class:`Bundle <pyticketswitch.bundle.Bundle>`: a new :class:`Bundle <pyticketswitch.bundle.Bundle>` object populated with the data from the api. """ kwargs = { 'source_code': data.get('bundle_source_code'), 'description': data.get('bundle_source_desc'), 'currency_code': data.get('currency_code'), 'terms_and_conditions': data.get('source_t_and_c'), } raw_orders = data.get('order') if raw_orders: orders = [Order.from_api_data(order) for order in raw_orders] kwargs.update(orders=orders) # Below we are explicital checking for not None because we want to # differentiate between situtations where a value is 0 and a value is # missing from the response. total_seatprice = data.get('bundle_total_seatprice') if total_seatprice is not None: kwargs.update(total_seatprice=total_seatprice) total_surcharge = data.get('bundle_total_surcharge') if total_surcharge is not None: kwargs.update(total_surcharge=total_surcharge) total_send_cost = data.get('bundle_total_send_cost') if total_send_cost is not None: kwargs.update(total_send_cost=total_send_cost) total = data.get('bundle_total_cost') if total is not None: kwargs.update(total=total) raw_debitor = data.get('debitor') if raw_debitor: debitor = Debitor.from_api_data(raw_debitor) kwargs.update(debitor=debitor) raw_purchase_result = data.get('purchase_result') if raw_purchase_result: purchase_result = PurchaseResult.from_api_data(raw_purchase_result) kwargs.update(purchase_result=purchase_result) total = data.get('bundle_total_cost') if total is not None: kwargs.update(total=total) send_cost_tax_component = data.get('bundle_send_cost_tax_component') if send_cost_tax_component is not None: kwargs.update(send_cost_tax_component=send_cost_tax_component) total_combined_tax_component = data.get( 'bundle_total_combined_tax_component' ) if total_combined_tax_component is not None: kwargs.update( total_combined_tax_component=total_combined_tax_component ) total_surcharge_tax_sub_component = data.get( 'bundle_total_surcharge_tax_sub_component' ) if total_surcharge_tax_sub_component is not None: kwargs.update( total_surcharge_tax_sub_component=total_surcharge_tax_sub_component ) return cls(**kwargs)
[docs] def get_events(self): """Get the events in the bundle. Returns: list: list of :class:`Event <pyticketswitch.event.Event>` objects. """ if not self.orders: return [] return [ order.event for order in self.orders if order.event and order.event.id ]
[docs] def get_event_ids(self): """Get the event ids of the events in the bundle. Returns: set: set of events IDs (str). """ return {event.id for event in self.get_events()}
[docs] def is_purchased(self): """Check if this bundle was successfully purchased. Returns: bool: if the bundle is purchased or not. """ if self.purchase_result: return self.purchase_result.success return False
def __repr__(self): return u'<Bundle {}>'.format(self.source_code)