]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Issue a warning when a declarative detects a likely trailing comma: foo = Column...
authorJason Kirtland <jek@discorporate.us>
Sat, 15 Mar 2008 23:13:35 +0000 (23:13 +0000)
committerJason Kirtland <jek@discorporate.us>
Sat, 15 Mar 2008 23:13:35 +0000 (23:13 +0000)
lib/sqlalchemy/ext/declarative.py
test/ext/declarative.py

index 4feb47456655385b03a77f93e0064bfd8bd83890..41a51c8c698b879c4ddfa4623b46d40a46d98931 100644 (file)
@@ -159,6 +159,12 @@ class DeclarativeMeta(type):
         our_stuff = {}
         for k in dict_:
             value = dict_[k]
+            if (isinstance(value, tuple) and len(value) == 1 and
+                isinstance(value[0], (Column, MapperProperty))):
+                util.warn("Ignoring declarative-like tuple value of attribute "
+                          "%s: possibly a copy-and-paste error with a comma "
+                          "left at the end of the line?" % k)
+                continue
             if not isinstance(value, (Column, MapperProperty)):
                 continue
             prop = _deferred_relation(cls, value)
index ef5fc87c6cba014b71c6d9d8b045cef504abaf26..fcb0125ac89757dcce64bf82d5dd351b0c79dd25 100644 (file)
@@ -3,6 +3,7 @@ import testenv; testenv.configure_for_tests()
 from sqlalchemy import *
 from sqlalchemy.orm import *
 from sqlalchemy.ext.declarative import declarative_base, declared_synonym
+from sqlalchemy import exceptions
 from testlib.fixtures import Base as Fixture
 from testlib import *
 
@@ -50,6 +51,21 @@ class DeclarativeTest(TestBase):
         self.assertEquals(a1, Address(email='two'))
         self.assertEquals(a1.user, User(name='u1'))
 
+    @testing.emits_warning('Ignoring declarative-like tuple value of '
+                           'attribute id')
+    def test_oops(self):
+        def define():
+            class User(Base, Fixture):
+                __tablename__ = 'users'
+
+                id = Column('id', Integer, primary_key=True),
+                name = Column('name', String(50))
+            assert False
+        self.assertRaisesMessage(
+            exceptions.ArgumentError,
+            "Mapper Mapper|User|users could not assemble any primary key",
+            define)
+
     def test_expression(self):
         class User(Base, Fixture):
             __tablename__ = 'users'