
    gi                         S r SSKJr  SSKrSSKJr  SSKrSSKJ	r	   SSK
rS	S
S jjrSSS jjrSS jrg! \ a    Sr Nf = f)u,  
db.py
-----
Conexión centralizada a SQL Server (local + Streamlit Cloud).

- Local: lee variables desde .env (python-dotenv) y/o variables de entorno.
- Streamlit Cloud: lee desde st.secrets (Settings -> Secrets).
- Nunca hardcodear credenciales.

Requisitos:
- python-dotenv
- sqlalchemy
- pyodbc
    )annotationsN)
quote_plus)load_dotenvc                x    [        U S 5      nUc  U$ [        U5      R                  5       R                  5       S;   $ )N>   1yonyestrue)_getstrstriplower)namedefaultraws      XC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\Proyectos\Cabanna\modules\db.py_get_env_boolr      s8    
tT
C
{s8>>!!#'FFF    c                   [         R                  " U 5      nUb6  [        U5      R                  5       S:w  a  [        U5      R                  5       $ [        b   U [        R
                  ;   a*  [        [        R
                  U    5      R                  5       $ S[        R
                  ;   aD  U [        R
                  S   ;   a-  [        [        R
                  S   U    5      R                  5       $ U$ U$ ! [         a     U$ f = f)u   
Lee configuración en este orden:
1) Variables de entorno (os.getenv)
2) Streamlit secrets (st.secrets) (Cloud)
   - soporta claves top-level: st.secrets["CABANNA_DB_SERVER"]
   - soporta sección [cabanna]: st.secrets["cabanna"]["CABANNA_DB_SERVER"]
 cabanna)osgetenvr   r   stsecrets	Exception)r   r   vs      r   r   r   %   s     			$A}Q2-1v||~	~		rzz!2::d+,2244 BJJ&42::i3H+H2::i067==?? N7N  	N	s   =C2 AC2 2
D ?D c                 `   [        5         [        SS5      =(       d    Sn [        SS5      =(       d    Sn[        SS5      =(       d    Sn[        SS5      =(       d    Sn[        SS5      =(       d    Sn[        SS	5      =(       d    S	n[        S
SS9nU UUUS.R                  5        VVs/ s H  u  pxU(       a  M  UPM     n	nnU	(       a  [	        SSR                  U	5       35      e[        U5      n
U(       a  SOSnSU SU SU  SU SU SU
 U 3n[        R                  " USS9$ s  snnf )z
Variables requeridas:
- CABANNA_DB_SERVER
- CABANNA_DB_PORT (default 1433)
- CABANNA_DB_NAME
- CABANNA_DB_USER
- CABANNA_DB_PASSWORD
- CABANNA_ODBC_DRIVER (default: ODBC Driver 18 for SQL Server)
- CABANNA_TRUST_SERVER_CERT (opcional: true/false)
CABANNA_DB_SERVERr   CABANNA_DB_PORT1433CABANNA_DB_NAMECABANNA_DB_USERCABANNA_DB_PASSWORDCABANNA_ODBC_DRIVERzODBC Driver 18 for SQL ServerCABANNA_TRUST_SERVER_CERTT)r   )r    r#   r$   r%   z-Faltan variables de entorno/secrets para DB: z, z&TrustServerCertificate=yeszmssql+pyodbc://:@,/z?driver=)pool_pre_ping)	r   r   r   items
ValueErrorjoinr   sacreate_engine)serverportdbuserpwddriver
trust_certkr   missing
driver_enctrust_paramconn_strs                r   
get_enginer>   @   sR    M%r*0bF!6*4fD		$	*B!2&,"D
$b
)
/RC')HIlMlF:DIJ $"	
 eg  TQ
   G  HSZI[H\]^^F#J3=/2K $qQvhavQrd
:,-	  HD99's   +D*<D*)F)r   r   r   boolreturnr?   )r   )r   r   r   
str | Noner@   rA   )r@   z	sa.Engine)__doc__
__future__r   r   urllib.parser   
sqlalchemyr0   dotenvr   	streamlitr   r   r   r   r>    r   r   <module>rI      sJ    # 	 #  
G6*:M  	Bs   6 A A