1+ import logging
2+
3+ from .cs50 import _formatException
4+
5+
6+ # Configure logger
7+ _logger = logging .getLogger (__name__ )
8+ _logger .setLevel (logging .DEBUG )
9+
10+ # Log messages once
11+ _logger .propagate = False
12+
13+ ch = logging .StreamHandler ()
14+ ch .setLevel (logging .DEBUG )
15+
16+ formatter = logging .Formatter ("%(levelname)s: %(message)s" )
17+ formatter .formatException = lambda exc_info : _formatException (* exc_info )
18+ ch .setFormatter (formatter )
19+ _logger .addHandler (ch )
20+
21+
122class SQL (object ):
223 """Wrap SQLAlchemy to provide a simple SQL API."""
324
@@ -12,14 +33,11 @@ def __init__(self, url, **kwargs):
1233 """
1334
1435 # Lazily import
15- import logging
1636 import os
1737 import re
1838 import sqlalchemy
1939 import sqlite3
2040
21- from .cs50 import _formatException
22-
2341 # Require that file already exist for SQLite
2442 matches = re .search (r"^sqlite:///(.+)$" , url )
2543 if matches :
@@ -50,32 +68,18 @@ def connect(dbapi_connection, connection_record):
5068 # Register listener
5169 sqlalchemy .event .listen (self ._engine , "connect" , connect )
5270
53- # Configure logger
54- self ._logger = logging .getLogger (__name__ )
55- self ._logger .setLevel (logging .DEBUG )
56-
57- # Log messages once
58- self ._logger .propagate = False
59-
60- ch = logging .StreamHandler ()
61- ch .setLevel (logging .DEBUG )
62-
63- formatter = logging .Formatter ("%(levelname)s: %(message)s" )
64- formatter .formatException = lambda exc_info : _formatException (* exc_info )
65- ch .setFormatter (formatter )
66- self ._logger .addHandler (ch )
6771
6872 # Test database
69- disabled = self . _logger .disabled
70- self . _logger .disabled = True
73+ disabled = _logger .disabled
74+ _logger .disabled = True
7175 try :
7276 self .execute ("SELECT 1" )
7377 except sqlalchemy .exc .OperationalError as e :
7478 e = RuntimeError (_parse_exception (e ))
7579 e .__cause__ = None
7680 raise e
7781 finally :
78- self . _logger .disabled = disabled
82+ _logger .disabled = disabled
7983
8084 def __del__ (self ):
8185 """Disconnect from database."""
@@ -356,22 +360,22 @@ def shutdown_session(exception=None):
356360
357361 # If constraint violated, return None
358362 except sqlalchemy .exc .IntegrityError as e :
359- self . _logger .debug (termcolor .colored (statement , "yellow" ))
363+ _logger .debug (termcolor .colored (statement , "yellow" ))
360364 e = ValueError (e .orig )
361365 e .__cause__ = None
362366 raise e
363367
364368 # If user error
365369 except (sqlalchemy .exc .OperationalError , sqlalchemy .exc .ProgrammingError ) as e :
366370 self ._disconnect ()
367- self . _logger .debug (termcolor .colored (statement , "red" ))
371+ _logger .debug (termcolor .colored (statement , "red" ))
368372 e = RuntimeError (e .orig )
369373 e .__cause__ = None
370374 raise e
371375
372376 # Return value
373377 else :
374- self . _logger .debug (termcolor .colored (_statement , "green" ))
378+ _logger .debug (termcolor .colored (_statement , "green" ))
375379 return ret
376380
377381 def _escape (self , value ):
0 commit comments