]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
rudimentary support for many-to-many relation. Still requires a separately defined...
authorjeff <none@none>
Fri, 3 Mar 2006 14:46:39 +0000 (14:46 +0000)
committerjeff <none@none>
Fri, 3 Mar 2006 14:46:39 +0000 (14:46 +0000)
lib/sqlalchemy/ext/activemapper.py

index e5b3e4929ce8c6d3da72aaad838d7513e3297efa..fdb796db2a87086eec208a377b1fd2c1793db7d9 100644 (file)
@@ -25,8 +25,8 @@ class column(object):
         self.colname     = colname
         self.foreign_key = foreign_key
         self.primary_key = primary_key
-        self.unique      = kwargs.pop( 'unique', False )
-        self.indexed     = kwargs.pop( 'indexed', self.unique )
+#         self.unique      = kwargs.pop( 'unique', None )
+#         self.index       = kwargs.pop( 'indexed', None )
         self.kwargs      = kwargs
         self.args        = args
 
@@ -34,14 +34,15 @@ class column(object):
 # declarative relationship declaration
 #
 class relationship(object):
-    def __init__(self, classname, colname=None, backref=None, private=False, lazy=True, uselist=True):
+    def __init__(self, classname, colname=None, backref=None, private=False,
+                 lazy=True, uselist=True, secondary=None):
         self.classname = classname
         self.colname   = colname
         self.backref   = backref
         self.private   = private
         self.lazy      = lazy
         self.uselist   = uselist
-
+        self.secondary = secondary
 
 class one_to_many(relationship):
     def __init__(self, classname, colname=None, backref=None, private=False, lazy=True):
@@ -52,6 +53,10 @@ class one_to_one(relationship):
     def __init__(self, classname, colname=None, backref=None, private=False, lazy=True):
         relationship.__init__(self, classname, colname, backref, private, lazy, uselist=False)
 
+class many_to_many(relationship):
+    def __init__(self, classname, secondary, backref=None, lazy=True):
+        relationship.__init__(self, classname, None, backref, False, lazy,
+                              uselist=True, secondary=secondary)
 
 
 # 
@@ -73,7 +78,8 @@ def process_relationships(klass, was_deferred=False):
         relations = {}
         for propname, reldesc in klass.relations.items():
             relclass = ActiveMapperMeta.classes[reldesc.classname]
-            relations[propname] = relation(relclass, 
+            relations[propname] = relation(relclass.mapper,
+                                           secondary=reldesc.secondary,
                                            backref=reldesc.backref, 
                                            private=reldesc.private, 
                                            lazy=reldesc.lazy, 
@@ -122,10 +128,10 @@ class ActiveMapperMeta(type):
                                      primary_key=value.primary_key,
                                      *value.args, **value.kwargs)
                     columns.append(col)
-                    if value.indexed:
-                        # create a Index object for the column
-                        index= Index( "%s_idx" % (value.colname or name),
-                                      col, unique= value.unique )
+                    if value.indexed:
+                        # create a Index object for the column
+                        index= Index( "%s_idx" % (value.colname or name),
+                                      col, unique= value.unique )
                     continue
                 
                 if isinstance(value, relationship):
@@ -155,4 +161,5 @@ class ActiveMapper(object):
 
 def create_tables():
     for klass in ActiveMapperMeta.classes.values():
-        klass.table.create()
\ No newline at end of file
+        klass.table.create()
+