
    	,h
                        d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZmZ d dlmZ  ee      Zd	ed
efdZ ee      Z ee        e	edd      Z edde      Zd
eeddf   fdZed
eeddf   fd       Zy)    )	Generator)contextmanager)
quote_plus)OperationalError)create_engine)Sessionsessionmaker)Settingssettings)
get_logger	_settingsreturnc           
          | j                   }| j                  }| j                  }| j                  }| j                  }t        |      }|sd| d| d| d| }|S d| d| d| d| d| 
}|S )a  
    Build a SQLAlchemy URL based on the provided settings.

    Parameters
    ----------
        _settings (Settings): An instance of the Settings class
        containing the PostgreSQL connection details.

    Returns
    -------
        str: The generated SQLAlchemy URL.
    zmysql+pymysql://@:/)SQL_HOSTSQL_PORTSQL_DBSQL_USERSQL_PASSr   )r   DB_HOSTDB_PORTDB_NAMEDB_USERDB_PASSencoded_passworddatabase_urls           2/var/www/html/RetailAPI/app/database/main/mysql.py+build_sqlalchemy_database_url_from_settingsr       s       G  GG  G  G!'*)'!G9AgYayQ  *'!4D3EQwiqQXPYYZ[bZcd    Ti  )futurepool_recycleF)
autocommit	autoflushbindNc               #      K   t               } 	 |  	 | j	                          y# t        $ r }d|}t        j                  |        d}~ww xY w# | j	                          w xY ww)z
    Get the database session.

    Returns
    -------
        db: The database session.

    Raises
    ------
        OperationalError: If an error occurs while accessing the database.
    =An error occurred while getting the database session. Error: N)_session_localr   logger	exceptionclosedbeerror_messages      r   get_dbr1   4   sa      
	B 	
  WXYW\]'
 	
0   A%$ A%	AAAA A""A%c               #      K   t               } 	 |  	 | j	                          y# t        $ r }d|}t        j                  |        d}~ww xY w# | j	                          w xY ww)z
    Context manager that creates a database session and yields
    it for use in a 'with' statement.

    Yields
    ------
    Session: A database session.
    r(   N)r)   	Exceptionr*   r+   r,   r-   s      r   
get_ctx_dbr5   K   sa      
	B 	
  WXYW\]'
 	
r2   )collections.abcr   
contextlibr   urllib.parser   pymysqlr   
sqlalchemyr   sqlalchemy.ormr   r	   
app.configr
   r   app.logr   __name__r*   strr    SQLALCHEMY_DATABASE_URLprint_enginer)   r1   r5    r!   r   <module>rD      s    % % # $ $ 0 ) 	H	8  6 FhO   

 %gN	'4-. . IgtT12  r!   