Source code for pyticketswitch.discount

from pyticketswitch.mixins import JSONMixin, SeatPricingMixin
from pyticketswitch.commission import Commission


[docs]class Discount(SeatPricingMixin, JSONMixin, object): """Represents a set of prices for a price band. Attributes: code (str): the identifier for the discount. description (str): a human readable description for the discount. price_band_code (str): identifier for the related price band. is_offer (bool): indicates that the discount is an offer. availability (int): the number tickets available with this discount. percentage_saving (float): the amount saved compared to when this discount is not on offer, as a percentage or the non offer price. absolute_saving (float): the amount saved compared to when this discount is not on offer. gross_commission (:class: `Commission <pyticketswitch.commission.Commission>`): predicted commission to be shared between ingresso and the partner. user_commission (:class:`Commission <pyticketswitch.commission.Commission>`): predicted commission for the partner. disallowed_seat_nos (list): a list of seat numbers, that this discount code cannot be specified for. semantic_type: a mapping of the code to a meaning e.g. standard (adult) or child minimum_eligible_age: the youngest one can be to qualify for this ticket maximum_eligible_age: the oldest one can be to qualify for this ticket """ def __init__( self, code, description=None, price_band_code=None, availability=None, is_offer=False, percentage_saving=0, absolute_saving=0, gross_commission=None, user_commission=None, disallowed_seat_nos=None, tax_component=None, semantic_type=None, minimum_eligible_age=None, maximum_eligible_age=None, *args, **kwargs ): super(Discount, self).__init__(*args, **kwargs) self.code = code self.description = description self.price_band_code = price_band_code self.is_offer = is_offer self.availability = availability self.percentage_saving = percentage_saving self.absolute_saving = absolute_saving self.gross_commission = gross_commission self.user_commission = user_commission self.disallowed_seat_nos = disallowed_seat_nos self.tax_component = tax_component self.semantic_type = semantic_type self.minimum_eligible_age = semantic_type self.maximum_eligible_age = semantic_type
[docs] @classmethod def from_api_data(cls, data): """Creates a new Discount object from API data from ticketswitch. Args: data (dict): the part of the response from a ticketswitch API call that concerns a discount. Returns: :class:`Discount <pyticketswitch.discount.Discount>`: a new :class:`Discount <pyticketswitch.discount.Discount>` object populated with the data from the api. """ gross_commission = data.get('predicted_gross_commission') if gross_commission: gross_commission = Commission.from_api_data(gross_commission) user_commission = data.get('predicted_user_commission') if user_commission: user_commission = Commission.from_api_data(user_commission) kwargs = { 'code': data.get('discount_code'), 'description': data.get('discount_desc'), 'disallowed_seat_nos': data.get('discount_disallowed_seat_nos'), 'price_band_code': data.get('price_band_code'), 'is_offer': data.get('is_offer', False), 'seatprice': data.get('sale_seatprice'), 'surcharge': data.get('sale_surcharge'), 'non_offer_seatprice': data.get('non_offer_sale_seatprice'), 'non_offer_surcharge': data.get('non_offer_sale_surcharge'), 'availability': data.get('number_available'), 'percentage_saving': data.get('percentage_saving'), 'absolute_saving': data.get('absolute_saving'), 'gross_commission': gross_commission, 'user_commission': user_commission, 'semantic_type': data.get('discount_semantic_type'), 'minimum_eligible_age': data.get('discount_minimum_eligible_age'), 'maximum_eligible_age': data.get('discount_maximum_eligible_age'), } tax_component = data.get('sale_combined_tax_component') if tax_component is not None: kwargs.update(tax_component=tax_component) kwargs.update(SeatPricingMixin.kwargs_from_api_data(data)) return cls(**kwargs)
def __repr__(self): return u'<Discount {}:{}>'.format( self.code, self.description.encode('ascii', 'ignore') )