1- import logging
2-
3- from .cs50 import _formatException
4-
5-
6- # Configure logger
7- _logger = logging .getLogger ("cs50" )
8- _logger .setLevel (logging .DEBUG )
9-
10- # Log messages once
11- _logger .propagate = False
12-
13- handler = logging .StreamHandler ()
14- handler .setLevel (logging .DEBUG )
15-
16- formatter = logging .Formatter ("%(levelname)s: %(message)s" )
17- formatter .formatException = lambda exc_info : _formatException (* exc_info )
18- handler .setFormatter (formatter )
19- _logger .addHandler (handler )
20-
21-
221class SQL (object ):
232 """Wrap SQLAlchemy to provide a simple SQL API."""
243
@@ -33,6 +12,7 @@ def __init__(self, url, **kwargs):
3312 """
3413
3514 # Lazily import
15+ import logging
3616 import os
3717 import re
3818 import sqlalchemy
@@ -49,6 +29,8 @@ def __init__(self, url, **kwargs):
4929 # Create engine, disabling SQLAlchemy's own autocommit mode, raising exception if back end's module not installed
5030 self ._engine = sqlalchemy .create_engine (url , ** kwargs ).execution_options (autocommit = False )
5131
32+ self ._logger = logging .getLogger ("cs50" )
33+
5234 # Listener for connections
5335 def connect (dbapi_connection , connection_record ):
5436
@@ -70,16 +52,16 @@ def connect(dbapi_connection, connection_record):
7052
7153
7254 # Test database
73- disabled = _logger .disabled
74- _logger .disabled = True
55+ disabled = self . _logger .disabled
56+ self . _logger .disabled = True
7557 try :
7658 self .execute ("SELECT 1" )
7759 except sqlalchemy .exc .OperationalError as e :
7860 e = RuntimeError (_parse_exception (e ))
7961 e .__cause__ = None
8062 raise e
8163 finally :
82- _logger .disabled = disabled
64+ self . _logger .disabled = disabled
8365
8466 def __del__ (self ):
8567 """Disconnect from database."""
@@ -360,22 +342,22 @@ def shutdown_session(exception=None):
360342
361343 # If constraint violated, return None
362344 except sqlalchemy .exc .IntegrityError as e :
363- _logger .debug (termcolor .colored (statement , "yellow" ))
345+ self . _logger .debug (termcolor .colored (statement , "yellow" ))
364346 e = ValueError (e .orig )
365347 e .__cause__ = None
366348 raise e
367349
368350 # If user error
369351 except (sqlalchemy .exc .OperationalError , sqlalchemy .exc .ProgrammingError ) as e :
370352 self ._disconnect ()
371- _logger .debug (termcolor .colored (statement , "red" ))
353+ self . _logger .debug (termcolor .colored (statement , "red" ))
372354 e = RuntimeError (e .orig )
373355 e .__cause__ = None
374356 raise e
375357
376358 # Return value
377359 else :
378- _logger .debug (termcolor .colored (_statement , "green" ))
360+ self . _logger .debug (termcolor .colored (_statement , "green" ))
379361 return ret
380362
381363 def _escape (self , value ):
0 commit comments