"""Model Vendor. Encapsulates vendor data response, and related models. The idea is to provide a high level interface and abstract away many of the related vendor tables from the business logic layer. """ from oto import response from sqlalchemy import Column from sqlalchemy import Enum from sqlalchemy import String from sqlalchemy import SmallInteger from backend.connectors import mysql from backend.constants import error from backend.constants import vendor_field class VendorPersister(object): """Handles high level operations for vendors.""" @classmethod def get_by_vendor_id(cls, vendor_id): """Get vendor by its unique id. Args: vendor_id (int): unique id of vendor Returns: response.Response: dictionary of vendor data """ with mysql.db_session() as session: vendor = session.query(Vendor).get(vendor_id) if vendor: return response.Response(message=vendor.to_dict()) else: return response.create_not_found_response() class Vendor(mysql.BaseModel): """Encapsulates Vendor data. Represents vendor table in the art_relations database. """ __tablename__ = 'vendor' vendor_id = Column( 'vendor_id', SmallInteger, primary_key=True, autoincrement=True, nullable=False) owner = Column('owner', String(10)) country = Column('country', SmallInteger) status = Column('status', Enum('pitched', 'pending', 'verbal', 'signed', 'passed', 'inactive', 'deletion', 'waiting_for_approval', 'approved')) is_owned = Column('is_owned', Enum('Yes', 'No')) contact_email = Column('contact_email', String(255)) is_distributor = Column('is_distributor', Enum('N', 'Y')) name = Column('name', String(255)) company = Column('company', String(255)) def to_dict(self): """Convert the vendor data to dict.""" result = {} for field in vendor_field.BASIC_MODEL_FIELDS: result[field] = getattr(self, field) return result