Commit 2c7c0cab authored by Stephen Finucane's avatar Stephen Finucane
Browse files

tests: Enable SAWarning warnings



We shouldn't be raising warnings from SQLAlchemy. Where we are
intentionally doing so, we should capture these warnings at the test
level. This requires some minor fixes.

Change-Id: I9d4512dc337153edc48a2cc3bf95ab2b31c39ccf
Signed-off-by: default avatarStephen Finucane <stephenfin@redhat.com>
parent a530cbfc
......@@ -39,6 +39,7 @@ from sqlalchemy import Index
from sqlalchemy import inspect
from sqlalchemy import Integer
from sqlalchemy import MetaData
from sqlalchemy import PrimaryKeyConstraint
from sqlalchemy.sql.expression import cast
from sqlalchemy.sql.expression import literal_column
from sqlalchemy.sql import text
......@@ -608,7 +609,14 @@ def _change_deleted_column_type_to_boolean_sqlite(engine, table_name,
# FIXME(stephenfin): We shouldn't be using this private API;
# figure out how else to copy an arbitrary column schema
constraints = [constraint._copy() for constraint in table.constraints]
# NOTE(stephenfin): We drop PrimaryKeyConstraint-type constraints since
# these duplicate the 'primary_key=True' attribute on the speicified
# column(s). This technically breaks things when the primary key covers
# multiple columns but that's okay: these are deprecated APIs
constraints = [
constraint._copy() for constraint in table.constraints
if not isinstance(constraint, PrimaryKeyConstraint)
]
with engine.connect() as conn:
meta = table.metadata
......@@ -738,7 +746,10 @@ def _change_deleted_column_type_to_id_type_sqlite(engine, table_name,
constraints = []
for constraint in table.constraints:
if not _is_deleted_column_constraint(constraint):
if not (
_is_deleted_column_constraint(constraint) or
isinstance(constraint, PrimaryKeyConstraint)
):
# FIXME(stephenfin): We shouldn't be using this private API;
# figure out how else to copy an arbitrary constraint schema
constraints.append(constraint._copy())
......@@ -749,7 +760,8 @@ def _change_deleted_column_type_to_id_type_sqlite(engine, table_name,
with conn.begin():
new_table = Table(
table_name + "__tmp__", meta,
*(columns + constraints))
*(columns + constraints),
)
new_table.create(conn)
indexes = []
......
......@@ -24,11 +24,12 @@ class WarningsFixture(fixtures.Fixture):
self._original_warning_filters = warnings.filters[:]
# Make deprecation warnings only happen once to avoid spamming
warnings.simplefilter('once', DeprecationWarning)
# Enable generic warnings to ensure we're not doing anything odd
warnings.filterwarnings(
'error', message='Evaluating non-mapped column expression',
'error',
category=sqla_exc.SAWarning)
# Enable deprecation warnings to capture upcoming SQLAlchemy changes
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment