"""Model track_crop_info.""" from datetime import datetime from oto import response from sqlalchemy import Column from sqlalchemy import DateTime from sqlalchemy import Integer from product_film.connectors import mysql class TrackCropInfo(mysql.BaseModel): """Encapsulates Track Crop data. Represents track_crop_info table in the art_relations database. """ __tablename__ = 'track_crop_info' # In table definition track_id = Column( 'track_id', Integer, primary_key=True, autoincrement=False) crop_left = Column(Integer) crop_right = Column(Integer) crop_top = Column(Integer) crop_bottom = Column(Integer) orchard_user_id = Column(Integer) created_timestamp = Column(DateTime) updated_timestamp = Column(DateTime) def to_dict(self): """Convert TrackCropInfo data to dict.""" data = { 'track_id': self.track_id, 'crop_left': self.crop_left, 'crop_right': self.crop_right, 'crop_top': self.crop_top, 'crop_bottom': self.crop_bottom, 'orchard_user_id': self.orchard_user_id, 'created_timestamp': self.created_timestamp, 'updated_timestamp': self.updated_timestamp } return data def get_track_crop_info(track_id): """Get Track Crop Info. Args: track_id (int): track id. Returns: response.Response: the data of the model. """ with mysql.db_session() as session: crop_data = session.query(TrackCropInfo).get(track_id) if not crop_data: return response.create_not_found_response('Record not found') return response.Response(crop_data.to_dict()) def add_track_crop_info( track_id, left, right, top, bottom, orchard_user_id): """Add/Edit Track Crop Info. Args: track_id (int): track id. left (int): left track crop info. right (int): right track crop info. top (int): top track crop info. bottom (int): bottom track crop info. orchard_user_id (int): orchard_user_id. Returns: Response: on successful, 200 status with JSON body """ with mysql.db_session() as session: existing_crop_data = session.query(TrackCropInfo).get(track_id) new_track_crop_info = TrackCropInfo( track_id=track_id, crop_left=left, crop_right=right, crop_top=top, crop_bottom=bottom, orchard_user_id=orchard_user_id, created_timestamp=datetime.now(), updated_timestamp=datetime.now(), ) if existing_crop_data: new_track_crop_info.created_timestamp = \ existing_crop_data.created_timestamp session.merge(new_track_crop_info) else: session.add(new_track_crop_info) session.flush() return response.Response(new_track_crop_info.to_dict())