"""Owner Model. This owner model uses sqlalchemy. It provides core functionality for getting owner information by owner abbreviated name. """ from owsresponse import response from sqlalchemy import Column, Enum, Integer, String from account.connectors import mysql class Owner(mysql.BaseModel): """Owner DB Model.""" __tablename__ = 'owner' owner_id = Column(Integer, primary_key=True) owner_abbrivation = Column(String) owner_name = Column(String) owner_type = Column(Enum('aggregator', 'drr')) """The is_sme column will be removed after gras_sender_name is live""" is_sme = Column(Enum('Y', 'N')) gras_sender_name = Column(String) DEFAULT_FIELDS = ( Owner.owner_id, Owner.owner_abbrivation, Owner.is_sme, Owner.gras_sender_name, ) def get_owner(owner_abbreviation): """Get owner information. Gets owner information from the Owner table. Input arg, owner_abbreviation, is mapped to the Table column, owner_abbrivation (note spelling difference). owner_abbreviation is used to join vendor info provided by the user. Args: owner_abbreviation (str): unique identifier for owner. Returns: response.Response: containing dict of owner or error. """ with mysql.session_scope(read_only=True) as session: row = ( session.query(*DEFAULT_FIELDS) .filter(Owner.owner_abbrivation == owner_abbreviation) .one_or_none() ) if row: return response.Response(row._asdict()) return response.create_not_found_response() def get_owners(owner_type='aggregator'): """Return list of owners from the owner table in art_relations. Returns: response.Response: containing a list of owners. """ with mysql.session_scope(read_only=True) as session: result = ( session.query(Owner.owner_abbrivation, Owner.owner_name) .filter(Owner.owner_type == owner_type) .order_by(Owner.owner_name) .all() ) if result: return response.Response([r._asdict() for r in result]) return response.create_not_found_response() def is_sme(owner): """Return True if valid response and is SME, False otherwise. Args: owner (response.Response): owner data returned from response Returns: bool: state of owner response and whether owner is SME """ return owner and owner.message.get('gras_sender_name')