"""UPC model.""" from oto import response import sentry_sdk from sqlalchemy import BigInteger from sqlalchemy import Column from sqlalchemy import DateTime from sqlalchemy import Enum from sqlalchemy.exc import SQLAlchemyError from product.connectors import mysql DEFAULT_STATUS = 'unused' STATUSES = ['used', 'unused', 'claimed'] class Upc(mysql.BaseModel): """Model representing a UPC.""" __tablename__ = 'upcs' upc = Column(BigInteger, primary_key=True) status = Column(Enum(*STATUSES)) last_updated = Column(DateTime) def to_dict(self): """Return a dictionary of the properties of this UPC instance.""" return {'upc': self.upc, 'status': self.status} def get_upcs_by_values(upcs): """Fetch the UPC models with the given upc values. Args: upcs (int[]): the UPC values to query by. Returns: response.Response: containing dict of upcs or error. """ with mysql.db_session() as session: try: upc_models = session.query(Upc).filter(Upc.upc.in_(upcs)).all() if not upc_models: return response.Response(status=404, message=[]) return response.Response(message=[model.to_dict() for model in upc_models]) except SQLAlchemyError as exception: sentry_sdk.capture_exception(exception) return response.create_fatal_response()