Source code for pyticketswitch.performance

from pyticketswitch import utils
from pyticketswitch.cost_range import CostRange
from pyticketswitch.availability import AvailabilityDetails
from pyticketswitch.mixins import JSONMixin, PaginationMixin
from pyticketswitch.currency import CurrencyMeta


[docs]class Performance(JSONMixin, object): """Describes and occurance of an :class:`Event <pyticketswitch.event.Event>`. The performance will have either a **date_time** or a **name**. .. note:: The **date_time** field is a timezone aware datetime and it is localised for the venue and not the user. Attributes: id (str): identifier for the performance. event_id (str): identifier for the event. date_time (:obj:`datetime.datetime`): the localised date and time for the performance. date_description (str): a human readable description of the date of the performance. time_description (str): a human readable description of the time of the performance. has_pool_seats (bool): the performance has pool seats available. is_limited (bool): the performance has limited availability. cached_max_seats (int): the maximum number of seats available to book in a single order. This value is cached and may not be accurate. cost_range (:class:`CostRange <pyticketswitch.cost_range.CostRange>`): pricing summary, may also include offers. no_singles_cost_range (:class:`CostRange <pyticketswitch.cost_range.CostRange>`): pricing summary when no leaving single seats, may also include offers. is_ghost (bool): the performance is a ghost performance and is nolonger available. name (str): the name of the performance. running_time (int): the number of minutes the performance is expected to run for. availability_details (:class:`AvailabilityDetails <pyticketswitch.availability.AvailabilityDetails>`): summerised availability data for the performance. This data is cached from previous availability calls and may not be accurate. """ def __init__(self, id_, event_id, date_time=None, date_description=None, time_description=None, has_pool_seats=False, is_limited=False, cached_max_seats=None, cost_range=None, no_singles_cost_range=None, is_ghost=False, name=None, running_time=None, availability_details=None): self.id = id_ self.event_id = event_id self.date_time = date_time self.date_description = date_description self.time_description = time_description self.has_pool_seats = has_pool_seats self.is_limited = is_limited self.cached_max_seats = cached_max_seats self.cost_range = cost_range self.no_singles_cost_range = no_singles_cost_range self.is_ghost = is_ghost self.name = name self.running_time = running_time self.availability_details = availability_details
[docs] @classmethod def from_api_data(cls, data): """Creates a new **Performance** object from API data from ticketswitch. Args: data (dict): the part of the response from a ticketswitch API call that concerns a performance. Returns: :class:`Performance <pyticketswitch.order.Performance>`: a new :class:`Performance <pyticketswitch.order.Performance>` object populated with the data from the api. """ id_ = data.get('perf_id') event_id = data.get('event_id') date_time = data.get('iso8601_date_and_time') if date_time: date_time = utils.isostr_to_datetime(date_time) date_desc = data.get('date_desc') time_desc = data.get('time_desc') api_cost_range = data.get('cost_range', {}) api_no_singles_cost_range = api_cost_range.get('no_singles_cost_range', {}) cost_range = None no_singles_cost_range = None if api_cost_range: api_cost_range['singles'] = True cost_range = CostRange.from_api_data(api_cost_range) if api_no_singles_cost_range: api_no_singles_cost_range['singles'] = False no_singles_cost_range = CostRange.from_api_data( api_no_singles_cost_range) availability_details = AvailabilityDetails.from_api_data( data.get('avail_details', {})) kwargs = { 'id_': id_, 'event_id': event_id, 'date_time': date_time, 'date_description': date_desc, 'time_description': time_desc, 'running_time': data.get('running_time'), 'name': data.get('perf_name'), 'has_pool_seats': data.get('has_pool_seats', False), 'is_limited': data.get('is_limited', False), 'is_ghost': data.get('is_ghost', False), 'cached_max_seats': data.get('cached_max_seats'), 'cost_range': cost_range, 'no_singles_cost_range': no_singles_cost_range, 'availability_details': availability_details, } return cls(**kwargs)
def __repr__(self): if self.date_time: return u'<Performance {}: {}>'.format(self.id, self.date_time.isoformat()) return u'<Performance {}>'.format(self.id)
[docs]class PerformanceMeta(PaginationMixin, CurrencyMeta, object): """ PerformanceMeta contains meta information about a list of :class:`Performances <pyticketswitch.performance.Performance>`. Attributes: auto_select (bool): indicates that the performance list will contain only one performance and this performance should be automatically selected for the customer. See :ref:`Events that don't need performance selection <events_that_dont_need_performance_selection>` for more information. has_names: (bool): indicates that the related performances have names """ def __init__(self, auto_select=False, has_names=False, *args, **kwargs): self.auto_select = auto_select self.has_names = has_names super(PerformanceMeta, self).__init__(*args, **kwargs)
[docs] @classmethod def from_api_data(cls, data): """Creates a new **PerformanceMeta** object from API data from ticketswitch. Args: data (dict): the part of the response from a ticketswitch API call that concerns some performance meta data. Returns: :class:`PerformanceMeta <pyticketswitch.order.PerformanceMeta>`: a new :class:`PerformanceMeta <pyticketswitch.order.PerformanceMeta>` object populated with the data from the api. """ inst = super(PerformanceMeta, cls).from_api_data(data) inst.auto_select = data.get('autoselect_this_performance', False) inst.has_names = data.get('results', {}).get('has_perf_names', False) return inst