Skip to content

Commit 8c89a76

Browse files
committed
Refactor MetaData test case to remove use of naming_conventions
Push minimum SQLAlchemy version back down to 0.8.0 Reflect in CHANGES
1 parent 0181217 commit 8c89a76

File tree

4 files changed

+32
-33
lines changed

4 files changed

+32
-33
lines changed

CHANGES

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ In development, codename Dubnium
1111

1212
- Added support for custom ``query_class`` and ``model_class`` as args
1313
to the ``SQLAlchemy`` constructor.
14-
- Fix minimum SQLAlchemy version requirement (0.9.2 or above), introduced
15-
by custom MetaData support in 2.1.
14+
- Fix minimum SQLAlchemy version requirement (0.8 or above), due to use
15+
of ``sqlalchemy.inspect``.
1616

1717
Version 2.1
1818
-----------

docs/config.rst

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,12 @@ You can optionally construct the :class:`SQLAlchemy` object with a custom
119119
:class:`~sqlalchemy.schema.MetaData` object.
120120
This allows you to, among other things,
121121
specify a `custom constraint naming convention
122-
<http://docs.sqlalchemy.org/en/latest/core/constraints.html#constraint-naming-conventions>`_.
122+
<http://docs.sqlalchemy.org/en/latest/core/constraints.html#constraint-naming-conventions>`_
123+
in conjunction with SQLAlchemy 0.9.2 or higher.
123124
Doing so is important for dealing with database migrations (for instance using
124125
`alembic <https://alembic.readthedocs.org>`_ as stated
125-
`here <http://alembic.readthedocs.org/en/latest/naming.html>`_. Since SQL
126-
defines no standard naming conventions, there is no guaranteed nor effective
127-
compatibility by default among database implementations. You can define a
128-
custom naming convention like this as suggested by the SQLAlchemy docs::
126+
`here <http://alembic.readthedocs.org/en/latest/naming.html>`_. Here's an
127+
example, as suggested by the SQLAlchemy docs::
129128

130129
from sqlalchemy import MetaData
131130
from flask import Flask

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
platforms='any',
3232
install_requires=[
3333
'Flask>=0.10',
34-
'SQLAlchemy>=0.9.2'
34+
'SQLAlchemy>=0.8.0'
3535
],
3636
test_suite='test_sqlalchemy.suite',
3737
classifiers=[

test_sqlalchemy.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -82,25 +82,15 @@ def test_helper_api(self):
8282
self.assertEqual(self.db.metadata, self.db.Model.metadata)
8383

8484

85-
class CustomMetaDataTestCase(unittest.TestCase):
85+
class MetaDataTestCase(unittest.TestCase):
8686

8787
def setUp(self):
8888
self.app = flask.Flask(__name__)
8989
self.app.config['SQLALCHEMY_ENGINE'] = 'sqlite://'
9090
self.app.config['TESTING'] = True
9191

92-
def test_custom_metadata_positive(self):
93-
94-
convention = {
95-
"ix": 'ix_%(column_0_label)s',
96-
"uq": "uq_%(table_name)s_%(column_0_name)s",
97-
"ck": "ck_%(table_name)s_%(constraint_name)s",
98-
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
99-
"pk": "pk_%(table_name)s"
100-
}
101-
102-
metadata = MetaData(naming_convention=convention)
103-
db = sqlalchemy.SQLAlchemy(self.app, metadata=metadata)
92+
def test_default_metadata(self):
93+
db = sqlalchemy.SQLAlchemy(self.app, metadata=None)
10494
self.db = db
10595

10696
class One(db.Model):
@@ -112,15 +102,19 @@ class Two(db.Model):
112102
one_id = db.Column(db.Integer, db.ForeignKey(One.id))
113103
myunique = db.Column(db.Integer, unique=True)
114104

115-
self.assertEqual(list(One.__table__.constraints)[0].name, 'pk_one')
116-
self.assertEqual(list(One.__table__.indexes)[0].name, 'ix_one_myindex')
105+
self.assertTrue(One.metadata.__class__ is MetaData)
106+
self.assertTrue(Two.metadata.__class__ is MetaData)
117107

118-
self.assertTrue('fk_two_one_id_one' in [c.name for c in Two.__table__.constraints])
119-
self.assertTrue('uq_two_myunique' in [c.name for c in Two.__table__.constraints])
120-
self.assertTrue('pk_two' in [c.name for c in Two.__table__.constraints])
108+
self.assertEqual(One.__table__.schema, None)
109+
self.assertEqual(Two.__table__.schema, None)
121110

122-
def test_custom_metadata_negative(self):
123-
db = sqlalchemy.SQLAlchemy(self.app, metadata=None)
111+
def test_custom_metadata(self):
112+
113+
class CustomMetaData(MetaData):
114+
pass
115+
116+
custom_metadata = CustomMetaData(schema="test_schema")
117+
db = sqlalchemy.SQLAlchemy(self.app, metadata=custom_metadata)
124118
self.db = db
125119

126120
class One(db.Model):
@@ -132,11 +126,17 @@ class Two(db.Model):
132126
one_id = db.Column(db.Integer, db.ForeignKey(One.id))
133127
myunique = db.Column(db.Integer, unique=True)
134128

135-
self.assertNotEqual(list(One.__table__.constraints)[0].name, 'pk_one')
129+
self.assertIs(One.metadata, custom_metadata)
130+
self.assertIs(Two.metadata, custom_metadata)
131+
132+
self.assertFalse(One.metadata.__class__ is MetaData)
133+
self.assertTrue(One.metadata.__class__ is CustomMetaData)
134+
135+
self.assertFalse(Two.metadata.__class__ is MetaData)
136+
self.assertTrue(Two.metadata.__class__ is CustomMetaData)
136137

137-
self.assertFalse('fk_two_one_id_one' in [c.name for c in Two.__table__.constraints])
138-
self.assertFalse('uq_two_myunique' in [c.name for c in Two.__table__.constraints])
139-
self.assertFalse('pk_two' in [c.name for c in Two.__table__.constraints])
138+
self.assertEqual(One.__table__.schema, "test_schema")
139+
self.assertEqual(Two.__table__.schema, "test_schema")
140140

141141

142142
class TestQueryProperty(unittest.TestCase):
@@ -748,7 +748,7 @@ class QazWsx(db.Model):
748748
def suite():
749749
suite = unittest.TestSuite()
750750
suite.addTest(unittest.makeSuite(BasicAppTestCase))
751-
suite.addTest(unittest.makeSuite(CustomMetaDataTestCase))
751+
suite.addTest(unittest.makeSuite(MetaDataTestCase))
752752
suite.addTest(unittest.makeSuite(TestQueryProperty))
753753
suite.addTest(unittest.makeSuite(TablenameTestCase))
754754
suite.addTest(unittest.makeSuite(PaginationTestCase))

0 commit comments

Comments
 (0)