
    h                         d dl Zd dl mZ d dlZd dlZd dlmZ i Zded<   ded<   ded	<   d
ed<   ded<    G d d          ZdS )    N)Error)datetime	localhostdb_hostsitedb_namerootdb_username db_passwordi  db_portc                   l    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dd	Z
ddZd ZddZd ZddZddZdS )EasySQLc                     d | _         d | _        d| _        d| _        | j        | _        d| _        t          j        | j        t          j	                   d S )NTzlog/EasySQL.logzEasySQL Error -> )filenamelevel)
db_conn	db_cursor
enable_loglog_filedefault_error_functionerror_functione_msg_startloggingbasicConfigERRORselfs    4C:\xampp\htdocs\dev\Site\Backend\api\core\EasySQL.py__init__zEasySQL.__init__   sQ    )"9.T]'-HHHHHH    c                     | j         |z   }| j        r?t          j                                        d          }t          j        | d|            |                     |           d S )Nz%d/%m/%Y %H:%M:%Sz -> )r   r   r   nowstrftimer   errorr   )r   msgfull_msg	timestamps       r   throw_errorzEasySQL.throw_error   sk    #c)? 	8 //0CDDIMY66H66777H%%%%%r!   c                 *    t          d|            d S )NzDEFAULTS :) => )print)r   r&   s     r   r   zEasySQL.default_error_function%   s    %%%&&&&&r!   c                     t           d         | _        t           d         | _        t           d         | _        t           d         | _        t           d         | _        dS )Nr   r   r
   r   r   T)paramsr   r   r
   r   r   r   s    r   db_initzEasySQL.db_init(   sE    i(i(!-0!-0i(tr!   c                 F   	 t           j                            | j        | j        | j        | j        | j                  | _        | j        	                    d          | _
        dS # t          $ r0}|                     dt          |                      Y d }~dS d }~ww xY w)N)hostuserpassworddatabaseportT)
dictionaryzDB Connection Error : F)mysql	connectorconnectr   r
   r   r   r   r   cursorr   r   r)   str)r   es     r   
db_connectzEasySQL.db_connect0   s    	 ?22\%)\ 3  DL "\00D0AADN4 	 	 	>c!ff>>???55555	s   A"A& &
B 0%BB c                     t          |t                    rdS t          |t                    rdS t          |t                    rdS dS )Nidsb)
isinstanceintfloatr:   )r   values     r   get_bind_typezEasySQL.get_bind_type?   sL    eS!! 	3u%% 	3s## 	33r!   c                 4    t          j        d|          r|ndS )Nz^[a-zA-Z0-9_]+$F)rematch)r   strings     r   sanitise_stringzEasySQL.sanitise_stringI   s    "4f==Hvv5Hr!   r   c                     |sdS t          |t                    r|                     |          S d                    d |D                       S )N*, c                     g | ]}d | d 	S )` ).0cols     r   
<listcomp>z)EasySQL.build_columns.<locals>.<listcomp>R   s     <<<Sj#jjj<<<r!   )rB   r:   rK   join)r   columnss     r   build_columnszEasySQL.build_columnsL   sV     	>3%% 	>''00099<<G<<<===r!   ANDc                     |sdg dfS g }g }|                                 D ]2\  }}|                    | d           |                    |           3d| d                    |          |fS )Nr    = %s )itemsappendrU   )r   
conditions
logic_typesql_conditionsvalueskeyrE   s          r   build_conditionszEasySQL.build_conditionsT   s     	r2:$**,, 	! 	!JC!!S---000MM%     :   %%n55v==r!   c                    	 | j                             d| d           d | j                                         D             t          |t                    r"t          |                                          }n|}t          fd|D                       S # t          $ r0}| 	                    dt          |                      Y d }~dS d }~ww xY w)NzSHOW COLUMNS FROM `rP   c                     g | ]
}|d          S )FieldrQ   )rR   rows     r   rT   z,EasySQL.validate_columns.<locals>.<listcomp>a   s    GGGcS\GGGr!   c              3       K   | ]}|v V  	d S )NrQ   )rR   rS   valids     r   	<genexpr>z+EasySQL.validate_columns.<locals>.<genexpr>f   s'      55se|555555r!   zvalidate_columns error: F)r   executefetchallrB   dictlistkeysall	Exceptionr)   r:   )r   
table_namerV   checkr;   ri   s        @r   validate_columnszEasySQL.validate_columns^   s    
	N""#F#F#F#FGGGGGT^-D-D-F-FGGGE'4((  W\\^^,,5555u555555 	 	 	@A@@AAA55555	s   BB 
C"%CCNc                 x   |                      |          }|s|                     d           dS |r|dk    s|dgk    rg }d}nZt          |t                    r|g}|                     ||          s|                     d           dS |                     |          }d| d| }g }|r!|                     ||          \  }}|d| z  }	 | j                            ||           | j        	                                S # t          $ r0}	|                     d	t          |	                      Y d }	~	dS d }	~	ww xY w)
NInvalid table nameFr   rM   zColumn Name ErrorzSELECT z FROM  WHERE zStatement Execution Failure: )rK   r)   rB   r:   rt   rW   rc   r   rk   rl   rq   )
r   rr   rV   r^   r_   col_strsqlr-   cond_strr;   s
             r   selectzEasySQL.selectk   s   ))*55
 	12225  	2'R--7rd??GGG'3'' $")((W==   !4555u((11G333z33 	(#44ZLLHf'X'''C	N""3///>**,,, 	 	 	ESVVEEFFF55555	s   3C? ?
D9	%D44D9c                 f   |                      |          }|r|                     ||          s|                     d           dS d                    |                                          }d                    dgt          |          z            }t          |                                          }d| d| d| d}	 | j        	                    ||           | j
                                         d	S # t          $ r0}|                     d
t          |                      Y d }~dS d }~ww xY w)NInvalid table or column nameFrN   z%szINSERT INTO z (z
) VALUES ()TzInsert Serious Error: )rK   rt   r)   rU   ro   lenrn   ra   r   rk   r   commitrq   r:   )r   rr   dataro   placeholdersra   ry   r;   s           r   insertzEasySQL.insert   s?   ))*55
 	!6!6z4!H!H 	;<<<5yy%%yy$#d))!344dkkmm$$JZJJ4JJ<JJJ	N""3///L!!!4 	 	 	>c!ff>>???55555	s    4C6 6
D0 %D++D0c                 T   |                      |          }|r|                     ||          s|                     d           dS d                    d |D                       }t	          |                                          }|                     ||          \  }}d| d| d| }		 | j                            |	||z              | j	        
                                 | j        j        S # t          $ r0}
|                     dt          |
                      Y d }
~
dS d }
~
ww xY w)	Nr}   FrN   c                     g | ]}| d S )rZ   rQ   )rR   ks     r   rT   z"EasySQL.update.<locals>.<listcomp>   s    :::1:::r!   zUPDATE z SET rw   zUpdate Serious Error: )rK   rt   r)   rU   rn   ra   rc   r   rk   r   r   rowcountrq   r:   )r   rr   r   r^   r_   
set_clausera   cond_clausecond_valuesry   r;   s              r   updatezEasySQL.update   sJ   ))*55
 	!6!6z4!H!H 	;<<<5YY::T:::;;
dkkmm$$#'#8#8Z#P#P [I
IIIIKII	N""3(<===L!!!>** 	 	 	>c!ff>>???55555	s   *AC- -
D'7%D""D'c                    |                      |          }|s|                     d           dS |                     ||          s|                     d           dS |                     ||          \  }}d| d| }	 | j                            ||           | j                                         | j        j        S # t          $ r0}|                     dt          |                      Y d }~dS d }~ww xY w)Nrv   Fz$Invalid column name(s) in conditionszDELETE FROM rw   zDelete Serious Error: )rK   r)   rt   rc   r   rk   r   r   r   rq   r:   )r   rr   r^   r_   r   r   ry   r;   s           r   deletezEasySQL.delete   s#   ))*55
 	12225$$Z<< 	CDDD5#'#8#8Z#P#P [=Z====	N""3444L!!!>** 	 	 	>c!ff>>???55555	s   >?B> >
C8%C33C8)r   )rX   )r   NrX   )__name__
__module____qualname__r    r)   r   r.   r<   rF   rK   rW   rc   rt   r{   r   r   r   rQ   r!   r   r   r      s       I I I& & &' ' '      I I I> > > >> > > >         D  &   (     r!   r   )mysql.connectorr6   r   rH   r   r   r-   r   rQ   r!   r   <module>r      s   
     ! ! ! ! ! ! 				       	y y } } y t t t t t t t t t tr!   