
    yh                         d dl mZmZmZmZmZmZ d dlZd dlZd dl	Z	d dl
Z
 e	j                  e      Z e	j                  e	j                          G d d      Zy)    )AnyDictIterableListOptionalTupleN)levelc                       e Zd ZdZ	 	 	 	 	 	 	 	 ddedededee   deded	ed
efdZddZ	ddZ
d Zd Zddedeee      deeeef      fdZddedeee      defdZdedeee      defdZy)DBHelperz
    Simple helper around mysqlclient (MySQLdb).
    Usage:
        with DBHelper(host='localhost', user='root', password='pw', database='otherdb') as db:
            rows = db.query("SELECT id, name FROM users WHERE active=%s", (1,))
    Nhostuserpassworddatabaseportcharsetuse_unicodeconnect_timeoutc	                     || _         || _        || _        || _        || _        || _        || _        || _        d | _        y N)	r   r   r   r   r   r   r   r   conn)	selfr   r   r   r   r   r   r   r   s	            =/var/www/app.tikistats.com/public_html/dashboard/db_helper.py__init__zDBHelper.__init__   sE     		  	&.>B	    returnc           
      
   | j                   ry 	 t        j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                        | _         | j                   j                  d       t        j                  d| j                  | j                  | j                         y # t        j                  $ r}t        j                  d|        d }~ww xY w)N)r   r   passwddbr   r   r   r   TzConnected to MySQL db=%s@%s:%sz Error connecting to database: %s)r   MySQLdbconnectr   r   r   r   r   r   r   r   
autocommitloggerinfoError	exception)r   es     r   r    zDBHelper.connect(   s    99	YYYY}}==YY ,, $ 4 4	DI II  &KK8$--TXT]T]^}} 	?C	s   CC D&C==Dc                     | j                   r8	 | j                   j                          t        j                  d       d | _         y y # t        $ r t        j                  d       Y )w xY w# d | _         w xY w)NzClosed MySQL connectionzError closing connection)r   closer"   r#   	Exceptionr%   r   s    r   r(   zDBHelper.close=   sa    99!		!56 !	   =  !;<= !	s#   /A A'$A* &A''A* *	A3c                 &    | j                          | S r   )r    r*   s    r   	__enter__zDBHelper.__enter__H   s    r   c                 $    | j                          y)NF)r(   )r   exc_typeexctbs       r   __exit__zDBHelper.__exit__L   s    

r   sqlparamsc                    | j                   s| j                          | j                   j                  t        j                  j
                        }	 |j                  ||xs d       |j                         }|D cg c]  }t        |       c}|j                          S c c}w # t        j                  $ r t        j                  d||        w xY w# |j                          w xY w)zL
        Execute a SELECT-style query and return list of dict rows.
         zQuery failed: %s -- params=%s)r   r    cursorr   cursors
DictCursorexecutefetchalldictr(   r$   r"   r%   )r   r2   r3   currowsrows         r   queryzDBHelper.queryQ   s     yyLLNiiw99:		KKV\r*<<>D)-.#DI.
 IIK /}} 	<c6J	 IIKs*   *B% ;B B%  B% %,CC C&c                 `   | j                   s| j                          | j                   j                         }	 |j                  ||xs d       |j                  }||j                          S # t        j                  $ r t        j                  d||        w xY w# |j                          w xY w)zK
        Execute INSERT/UPDATE/DELETE. Returns affected row count.
        r5   zExecute failed: %s -- params=%s)
r   r    r6   r9   rowcountr(   r   r$   r"   r%   )r   r2   r3   r<   affecteds        r   r9   zDBHelper.executed   s     yyLLNii 
	KKV\r*||H IIK }} 	>VL	
 IIKs   #A, ,,BB B-seq_of_paramsc                 R   | j                   s| j                          | j                   j                         }	 |j                  ||       |j                  |j                          S # t        j                  $ r t        j                  d|        w xY w# |j                          w xY w)zN
        Execute many (bulk) statements. Returns total affected rows.
        zExecutemany failed: %s)
r   r    r6   executemanyrA   r(   r   r$   r"   r%   )r   r2   rC   r<   s       r   rE   zDBHelper.executemanyx   s     yyLLNii 	OOC/<<
 IIK	 }} 	5s;	 IIKs   A& &+BB B&)	localhostroot Ni  utf8mb4T
   )r   Nr   )__name__
__module____qualname____doc__strr   intboolr   r    r(   r,   r1   r   r   r   r   r?   r9   rE   r5   r   r   r   r      s     "&  !CC C 	C
 3-C C C C C**!
 hx}&= dSVX[S[nI] &3 #(? 3 (s 8HSM3J s r   r   )typingr   r   r   r   r   r   r   MySQLdb.cursorsloggingos	getLoggerrK   r"   basicConfigINFOr   r5   r   r   <module>rY      sI    = =    				8	$   ',, '| |r   