""" AssetReceivedDestinationDetails Model. This AssetReceivedDestinationDetails model uses sqlalchemy. This direct_delivery table is used to track metadata of assets that need to be encoded by legacy RBEncoder """ from oto import response from sqlalchemy import Column from sqlalchemy import Integer from sqlalchemy import String from sqlalchemy.exc import SQLAlchemyError from assets.connectors import mysql from assets.connectors import sentry class AssetReceivedDestinationDetails(mysql.DdModel): """Table definition for asset received destination table.""" __tablename__ = 'asset_received_destination_details' asset_received_destination_detail_id = Column( 'id', Integer, primary_key=True, autoincrement=True) asset_received_queue_id = Column(Integer, nullable=False) upc = Column('destination_upc', Integer, nullable=False) track_id = Column('destination_track_id', Integer, nullable=False) name = Column('destination_asset_name', String(255), nullable=True) def as_dict(self): """Get dictionary representation. Returns: dict: Representation of asset received destination detail. """ return { 'id': self.asset_received_destination_detail_id, 'asset_received_queue_id': self.asset_received_queue_id, 'upc': self.upc, 'track_id': self.track_id, 'name': self.name } def get_destination_detail_by_id(detail_id): """Get a single asset received destination detail by id. Args: detail_id (int): unique identifier. Returns: response.Response: contains a dictionary of the item. """ with mysql.dd_db_session() as session: row = session.query(AssetReceivedDestinationDetails).filter( AssetReceivedDestinationDetails. asset_received_destination_detail_id == detail_id).one_or_none() if row: return response.Response(row.as_dict()) return response.create_not_found_response() def create_destination_detail(asset_received_queue_id, upc, track_id, name): """Create new asset received destination detail record. Args: asset_received_queue_id (int): Asset received queue id upc (int): Product UPC track_id (int): Unique track id name (str): Destination asset name Returns: response.Response: Inserted record info or error """ try: destination_detail = AssetReceivedDestinationDetails( asset_received_queue_id=asset_received_queue_id, upc=upc, track_id=track_id, name=name ) with mysql.dd_db_session() as session: session.add(destination_detail) session.flush() destination_detail_data = destination_detail.as_dict() return response.Response(destination_detail_data) except SQLAlchemyError as e: if sentry.sentry_client: sentry.sentry_client.captureException() return response.create_fatal_response(e.args)