"""ToolLog Model. This ToolLog model uses sqlalchemy. It's used to store, update, get information about tool log """ from oto import response from sqlalchemy import Column from sqlalchemy import DateTime from sqlalchemy import Integer from sqlalchemy import SmallInteger from sqlalchemy import String from sqlalchemy import Text from sqlalchemy import UniqueConstraint from prs.connectors import mysql class ToolLog(mysql.ppb_model): """Table definition for tool_log table.""" __tablename__ = 'tool_log' tool_log_id = Column( 'id', Integer, primary_key=True, autoincrement=True, nullable=False) tool_name = Column(String(255), nullable=False) society_id = Column(Integer, default=None, nullable=True) time_start = Column(DateTime, nullable=False) time_end = Column(DateTime, default=None, nullable=True) output_filename = Column(Text, nullable=True) num_rows = Column(Integer, default=None, nullable=True) query_file = Column(Text, nullable=True) tool_switches = Column(Text, nullable=True) input_text = Column(Text, nullable=True) status = Column(SmallInteger, default=None, nullable=True) comment = Column(String(255), default=None, nullable=True) return_message = Column(Text, nullable=True) mysql_proc_id = Column(Integer, default=None, nullable=True) active = Column(SmallInteger, default=1, nullable=False) progress = Column(String(255), default='Completed', nullable=True) file_code = Column(String(16), default=None, nullable=True) user_ip = Column(String(50), default=None, nullable=True) __table_args__ = (UniqueConstraint( 'time_start', 'mysql_proc_id', name='proc_id_tim'),) @mysql.wrap_db_errors def initialize_tool_log(data): """Create tool_log data. This method will save the tool logs value passed to it. Args: data (dict): Contains data that needs to be added to initialize the tool log. Returns: response.Response: Containing dict of newly created tool logs. """ new_log = ToolLog(**data) with mysql.ppb_db_session() as session: session.add(new_log) session.flush() log_id = {'tool_log_id': new_log.tool_log_id} return response.Response(log_id) @mysql.wrap_db_errors def update_tool_log(tool_log_entry): """Update an existing tool_log with the new tool_log_entry. This method will update the tool logs value passed to it. Args: tool_log_entry (dict): Contains data that needs to be updated to the tool log. Returns: response.Response: Containing response object of update_log with success or failure. """ with mysql.ppb_db_session() as session: update_log = session.query(ToolLog.tool_log_id).filter( ToolLog.tool_log_id == tool_log_entry[ 'tool_log_id']).update(tool_log_entry) # update_log returns 1 if update is successful else 0 return response.Response(message=update_log)