1- def _enable_logging (f ):
2- """Enable logging of SQL statements when Flask is in use."""
3-
4- import logging
5- import functools
6-
7- @functools .wraps (f )
8- def decorator (* args , ** kwargs ):
9-
10- # Infer whether Flask is installed
11- try :
12- import flask
13- except ModuleNotFoundError :
14- return f (* args , ** kwargs )
15-
16- # Enable logging
17- disabled = logging .getLogger ("cs50" ).disabled
18- if flask .current_app :
19- logging .getLogger ("cs50" ).disabled = False
20- try :
21- return f (* args , ** kwargs )
22- finally :
23- logging .getLogger ("cs50" ).disabled = disabled
24-
25- return decorator
1+ import logging
262
273
284class SQL (object ):
@@ -45,9 +21,6 @@ def __init__(self, url, **kwargs):
4521 import sqlalchemy
4622 import sqlite3
4723
48- # Get logger
49- self ._logger = logging .getLogger ("cs50" )
50-
5124 # Require that file already exist for SQLite
5225 matches = re .search (r"^sqlite:///(.+)$" , url )
5326 if matches :
@@ -78,20 +51,17 @@ def connect(dbapi_connection, connection_record):
7851 # Register listener
7952 sqlalchemy .event .listen (self ._engine , "connect" , connect )
8053
81- # Log statements to standard error
82- logging .basicConfig (level = logging .DEBUG )
83-
8454 # Test database
55+ disabled = logging .root .disabled
56+ logging .root .disabled = True
8557 try :
86- disabled = self ._logger .disabled
87- self ._logger .disabled = True
8858 self .execute ("SELECT 1" )
8959 except sqlalchemy .exc .OperationalError as e :
9060 e = RuntimeError (_parse_exception (e ))
9161 e .__cause__ = None
9262 raise e
9363 finally :
94- self . _logger .disabled = disabled
64+ logging . root .disabled = disabled
9565
9666 def __del__ (self ):
9767 """Disconnect from database."""
@@ -103,7 +73,6 @@ def _disconnect(self):
10373 self ._connection .close ()
10474 delattr (self , "_connection" )
10575
106- @_enable_logging
10776 def execute (self , sql , * args , ** kwargs ):
10877 """Execute a SQL statement."""
10978
@@ -373,22 +342,22 @@ def shutdown_session(exception=None):
373342
374343 # If constraint violated, return None
375344 except sqlalchemy .exc .IntegrityError as e :
376- self . _logger .debug (termcolor .colored (statement , "yellow" ))
345+ logging .debug (termcolor .colored (statement , "yellow" ))
377346 e = ValueError (e .orig )
378347 e .__cause__ = None
379348 raise e
380349
381350 # If user error
382351 except (sqlalchemy .exc .OperationalError , sqlalchemy .exc .ProgrammingError ) as e :
383352 self ._disconnect ()
384- self . _logger .debug (termcolor .colored (statement , "red" ))
353+ logging .debug (termcolor .colored (statement , "red" ))
385354 e = RuntimeError (e .orig )
386355 e .__cause__ = None
387356 raise e
388357
389358 # Return value
390359 else :
391- self . _logger .debug (termcolor .colored (_statement , "green" ))
360+ logging .debug (termcolor .colored (_statement , "green" ))
392361 return ret
393362
394363 def _escape (self , value ):
0 commit comments