o
    5)i                     @   s^   d Z ddlmZmZmZmZ ddlZddlmZm	Z	 ddl
mZ ddlmZ G dd dZdS )	u   
MySQLModel — thin wrapper around mysql-connector-python.
Reads connection settings from Flask app config (MYSQL_DATABASES['default']).
    )DictListOptionalTupleN)Errorpooling)current_app)
get_loggerc                   @   sl   e Zd ZdZddefddZdefddZd	d
 Zddede	e
 dee fddZdefddZdd ZdS )
MySQLModelzIMySQL database access layer used by DatabaseService and ReportController.defaultdb_namec                 C   s   || _ td| _d S )Nmysql_model)r   r	   logger)selfr    r   4/var/www/html/oms-prod-mcp/app/models/mysql_model.py__init__   s   zMySQLModel.__init__returnc              
   C   s<   t jd | j }|d |d |d |d |d ddd	d	d
	S )NMYSQL_DATABASEShostportdatabaseusernamepasswordutf8mb4T
   )	r   r   r   userr   charset
autocommitconnection_timeoutconnect_timeout)r   configr   )r   dbr   r   r   _get_config   s   zMySQLModel._get_configc                 C   s   t jjdi |  S )Nr   )mysql	connectorconnectr#   r   r   r   r   _get_connection#   s   zMySQLModel._get_connectionNqueryparamsc              
   C   s   |   }d}z5z|jdd}||| | }|W W |r!|  |  S  ty; } z
| jd|   d}~ww |rB|  |  w )zCExecute a SELECT / DML query and return results as a list of dicts.NT)
dictionaryzMySQL query error: )r(   cursorexecutefetchallcloser   r   error)r   r)   r*   connr,   resultser   r   r   execute_query&   s$   

zMySQLModel.execute_queryc              
   C   s   d}zBz|   }|jdd ddiW W |r|  S S  tyD } z| jd|  dt|dW  Y d}~W |r?|  S S d}~ww |rL|  w w )	z+Ping the database and return a status dict.NF)	reconnectstatus	connectedzMySQL connection test failed: r0   )r6   message)r(   pingr/   r   r   warningstr)r   r1   r3   r   r   r   test_connection8   s&   



zMySQLModel.test_connectionc                 C   s   d S Nr   r'   r   r   r   cleanupH   s   zMySQLModel.cleanup)r   r=   )__name__
__module____qualname____doc__r;   r   r   r#   r(   r   r   r   r4   r<   r>   r   r   r   r   r
      s     r
   )rB   typingr   r   r   r   mysql.connectorr$   r   r   flaskr   app.utils.helpersr	   r
   r   r   r   r   <module>   s    