"""Orchard Pricing Tier. This model represents an Orchard Pricing Tier """ import datetime from oto import response from pricing.connectors import mysql from pricing.constants import error import sqlalchemy class OrchardPricingTier(mysql.BaseModel): """Orchard Pricing Tier model.""" __tablename__ = 'orchard_pricing_tier' orchard_pricing_tier_id = sqlalchemy.Column( 'orchard_pricing_tier_id', sqlalchemy.BIGINT, primary_key=True, autoincrement=True ) name = sqlalchemy.Column(sqlalchemy.VARCHAR(45)) pricing_family_id = sqlalchemy.Column(sqlalchemy.BIGINT) is_default = sqlalchemy.Column(sqlalchemy.Boolean) sort_order = sqlalchemy.Column(sqlalchemy.Integer) created_date = sqlalchemy.Column(sqlalchemy.DateTime) created_by = sqlalchemy.Column(sqlalchemy.VARCHAR(45)) updated_date = sqlalchemy.Column(sqlalchemy.DateTime) updated_by = sqlalchemy.Column(sqlalchemy.VARCHAR(45)) def to_dict(self): """Return the object as dictionary.""" return dict( orchard_pricing_tier_id=self.orchard_pricing_tier_id, pricing_family_id=self.pricing_family_id, name=self.name, is_default=self.is_default, sort_order=self.sort_order) @mysql.autosession() def get_orchard_pricing_tier_by_pricing_family_id(pricing_family_id, session): """Return the orchard pricing tiers for a specific pricing family. Args: pricing_family_id (int): the ID of the pricing family. session (Session): the mysql session. Returns: response.Response: containing a list of orchard pricing tier dicts. """ orchard_pricing_tiers = session.query(OrchardPricingTier).filter_by( pricing_family_id=pricing_family_id).order_by( OrchardPricingTier.sort_order).all() if len(orchard_pricing_tiers) == 0: return response.create_not_found_response() return response.Response( { 'items': [ item.to_dict() for item in orchard_pricing_tiers ] }) @mysql.autosession() def get_orchard_pricing_tier_by_pricing_family_ids( pricing_family_ids, session): """Return the orchard pricing tiers for a set of pricing families. Args: pricing_family_ids (tuple): the IDs of the pricing families. session (Session): the mysql session. Returns: response.Response: containing a list of orchard pricing tier dicts. """ orchard_pricing_tiers = session.query(OrchardPricingTier).filter( OrchardPricingTier.pricing_family_id.in_(pricing_family_ids)).\ order_by(OrchardPricingTier.sort_order).all() if len(orchard_pricing_tiers) == 0: return response.create_not_found_response() return response.Response( { 'items': [ item.to_dict() for item in orchard_pricing_tiers ] }) @mysql.autosession() def create_orchard_pricing_tier(data, session): """Create a new Orchard pricing tier. Args: data (dict): the data from which to create the orchard pricing tier. session (Session): the mysql session. Returns: response.Response: containing the created orchard pricing tier dict. """ if not data: return response.create_error_response( 400, error.ERROR_MESSAGE_EMPTY_BODY) data['created_date'] = datetime.datetime.now() orchard_pricing_tier = OrchardPricingTier(**data) session.add(orchard_pricing_tier) session.commit() return response.Response(orchard_pricing_tier.to_dict()) @mysql.autosession() def update_orchard_pricing_tier_by_id(orchard_pricing_tier_id, data, session): """Update an Orchard pricing tier. Args: orchard_pricing_tier_id (int): the ID of the orchard pricing tier. data (dict): the data from which to create the orchard pricing tier. session (Session): the mysql session. Returns: response.Response: containing the updated orchard pricing tier dict. """ if not data: return response.create_error_response( 400, error.ERROR_MESSAGE_EMPTY_BODY) data.update(id=orchard_pricing_tier_id) data['updated_date'] = datetime.datetime.now() found_orchard_pricing_tier = _get_orchard_pricing_tier_by_id( orchard_pricing_tier_id, session) if not found_orchard_pricing_tier: return response.create_not_found_response() for field_name, field_data in data.items(): setattr(found_orchard_pricing_tier, field_name, field_data) session.commit() return response.Response(found_orchard_pricing_tier.to_dict()) def _get_orchard_pricing_tier_by_id(orchard_pricing_tier_id, session): """Find an Orchard pricing tier by ID. Args: orchard_pricing_tier_id (int): the ID of the orchard pricing tier. session (Session): the mysql session. Returns: OrchardPricingTier: the found orchard pricing tier. """ found_orchard_pricing_tier = session.query( OrchardPricingTier).get(orchard_pricing_tier_id) return found_orchard_pricing_tier