"""Supplier Model. This Supplier model uses sqlalchemy. """ from owsresponse import response from sqlalchemy import Column, Integer from account.connectors import mysql class Supplier(mysql.BaseModel): """Supplier DB Model.""" __tablename__ = 'vendor_physical_supplychain_default_selection' vendor_id = Column(Integer, primary_key=True) store_id = Column(Integer, primary_key=True) DEFAULT_FIELDS = (Supplier.vendor_id, Supplier.store_id) def get_default(vendor_id): """Get default physical supplychain information. Args: vendor_id (int): unique identifier for vendor. Returns: response.Response: containing dict of default stores. """ with mysql.session_scope(read_only=True) as session: rows = session.query(*DEFAULT_FIELDS).filter(Supplier.vendor_id == vendor_id).all() results = list() if rows: for row in rows: results.append(row._asdict()) return response.Response(results) return response.create_not_found_response() def delete_default(vendor_id): """Delete default physical supplychain information. Args: vendor_id (int): unique identifier for vendor. Returns: response.Response: success or fail message. """ with mysql.session_scope() as session: num_rows_deleted = session.query(Supplier).filter_by(vendor_id=vendor_id).delete() session.commit() return response.Response(message={'removed_rows': num_rows_deleted}, status=200) def set_default(vendor_id, store_ids): """Set default physical supplychain information. Args: vendor_id (int): unique identifier for vendor. store_ids (list): list of store ids to be stored. Returns: response.Response: containing dict of default stores. """ remove_records = delete_default(vendor_id) if remove_records.status != 200: return remove_records with mysql.session_scope() as session: if store_ids: objects = [Supplier(vendor_id=vendor_id, store_id=store_id) for store_id in store_ids] session.bulk_save_objects(objects) session.commit() return response.Response(message={'inserted_rows': len(store_ids)}, status=201)