Skip to content

Commit b35def0

Browse files
author
Kareem Zidane
committed
used catch_warnings
werkzeug throws a DeprecationWarning when Flask-Session tries to import some deprecated module. `catch_warnings` resets the wraning filter after it exists instead of raising an Error for any warning anywhere.
1 parent a1a901e commit b35def0

File tree

2 files changed

+56
-55
lines changed

2 files changed

+56
-55
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@
1616
package_dir={"": "src"},
1717
packages=["cs50"],
1818
url="https://github.com/cs50/python-cs50",
19-
version="4.0.2"
19+
version="4.0.3"
2020
)

src/cs50/sql.py

Lines changed: 55 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -215,62 +215,63 @@ def execute(self, sql, *args, **kwargs):
215215
# Join tokens into statement
216216
statement = "".join([str(token) for token in tokens])
217217

218-
# Raise exceptions for warnings
219-
warnings.filterwarnings("error")
220-
221-
# Prepare, execute statement
222-
try:
223-
224-
# Execute statement
225-
result = self.engine.execute(sqlalchemy.text(statement))
218+
with warnings.catch_warnings():
219+
warnings.simplefilter("error")
220+
221+
# Prepare, execute statement
222+
try:
223+
224+
225+
# Execute statement
226+
result = self.engine.execute(sqlalchemy.text(statement))
227+
228+
# Return value
229+
ret = True
230+
if tokens[0].ttype == sqlparse.tokens.Keyword.DML:
231+
232+
# Uppercase token's value
233+
value = tokens[0].value.upper()
234+
235+
# If SELECT, return result set as list of dict objects
236+
if value == "SELECT":
237+
238+
# Coerce any decimal.Decimal objects to float objects
239+
# https://groups.google.com/d/msg/sqlalchemy/0qXMYJvq8SA/oqtvMD9Uw-kJ
240+
rows = [dict(row) for row in result.fetchall()]
241+
for row in rows:
242+
for column in row:
243+
if type(row[column]) is decimal.Decimal:
244+
row[column] = float(row[column])
245+
ret = rows
246+
247+
# If INSERT, return primary key value for a newly inserted row
248+
elif value == "INSERT":
249+
if self.engine.url.get_backend_name() in ["postgres", "postgresql"]:
250+
result = self.engine.execute("SELECT LASTVAL()")
251+
ret = result.first()[0]
252+
else:
253+
ret = result.lastrowid
254+
255+
# If DELETE or UPDATE, return number of rows matched
256+
elif value in ["DELETE", "UPDATE"]:
257+
ret = result.rowcount
258+
259+
# If constraint violated, return None
260+
except sqlalchemy.exc.IntegrityError:
261+
self._logger.debug(termcolor.colored(statement, "yellow"))
262+
return None
263+
264+
# If user errror
265+
except sqlalchemy.exc.OperationalError as e:
266+
self._logger.debug(termcolor.colored(statement, "red"))
267+
e = RuntimeError(_parse_exception(e))
268+
e.__cause__ = None
269+
raise e
226270

227271
# Return value
228-
ret = True
229-
if tokens[0].ttype == sqlparse.tokens.Keyword.DML:
230-
231-
# Uppercase token's value
232-
value = tokens[0].value.upper()
233-
234-
# If SELECT, return result set as list of dict objects
235-
if value == "SELECT":
236-
237-
# Coerce any decimal.Decimal objects to float objects
238-
# https://groups.google.com/d/msg/sqlalchemy/0qXMYJvq8SA/oqtvMD9Uw-kJ
239-
rows = [dict(row) for row in result.fetchall()]
240-
for row in rows:
241-
for column in row:
242-
if type(row[column]) is decimal.Decimal:
243-
row[column] = float(row[column])
244-
ret = rows
245-
246-
# If INSERT, return primary key value for a newly inserted row
247-
elif value == "INSERT":
248-
if self.engine.url.get_backend_name() in ["postgres", "postgresql"]:
249-
result = self.engine.execute("SELECT LASTVAL()")
250-
ret = result.first()[0]
251-
else:
252-
ret = result.lastrowid
253-
254-
# If DELETE or UPDATE, return number of rows matched
255-
elif value in ["DELETE", "UPDATE"]:
256-
ret = result.rowcount
257-
258-
# If constraint violated, return None
259-
except sqlalchemy.exc.IntegrityError:
260-
self._logger.debug(termcolor.colored(statement, "yellow"))
261-
return None
262-
263-
# If user errror
264-
except sqlalchemy.exc.OperationalError as e:
265-
self._logger.debug(termcolor.colored(statement, "red"))
266-
e = RuntimeError(_parse_exception(e))
267-
e.__cause__ = None
268-
raise e
269-
270-
# Return value
271-
else:
272-
self._logger.debug(termcolor.colored(statement, "green"))
273-
return ret
272+
else:
273+
self._logger.debug(termcolor.colored(statement, "green"))
274+
return ret
274275

275276
def _escape(self, value):
276277
"""

0 commit comments

Comments
 (0)