summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/util.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2005-12-09 05:08:51 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2005-12-09 05:08:51 +0000
commit69ad2955bdb33eb45939a01d95bcff240a2d9fb6 (patch)
tree8e285e2c1850a94ae3e44a7fe118f86bf8ff3448 /lib/sqlalchemy/util.py
parentddf671347205aae40e501c5533c2dd7a94a6a3a1 (diff)
downloadsqlalchemy-69ad2955bdb33eb45939a01d95bcff240a2d9fb6.tar.gz
build in 'backref' property argument
Diffstat (limited to 'lib/sqlalchemy/util.py')
-rw-r--r--lib/sqlalchemy/util.py38
1 files changed, 37 insertions, 1 deletions
diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py
index d280368f6..bc23d6080 100644
--- a/lib/sqlalchemy/util.py
+++ b/lib/sqlalchemy/util.py
@@ -16,7 +16,7 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
__all__ = ['OrderedProperties', 'OrderedDict']
-import thread, weakref, UserList,string
+import thread, weakref, UserList,string, inspect
def to_list(x):
if x is None:
@@ -345,3 +345,39 @@ class ScopedRegistry(object):
def _clear_application(self):
self.application = createfunc()
+
+
+def constructor_args(instance, **kwargs):
+ classobj = instance.__class__
+
+ argspec = inspect.getargspec(classobj.__init__.im_func)
+
+ argnames = argspec[0] or []
+ defaultvalues = argspec[3] or []
+
+ (requiredargs, namedargs) = (
+ argnames[0:len(argnames) - len(defaultvalues)],
+ argnames[len(argnames) - len(defaultvalues):]
+ )
+
+ newparams = {}
+
+ for arg in requiredargs:
+ if arg == 'self':
+ continue
+ elif kwargs.has_key(arg):
+ newparams[arg] = kwargs[arg]
+ else:
+ newparams[arg] = getattr(instance, arg)
+
+ for arg in namedargs:
+ if kwargs.has_key(arg):
+ newparams[arg] = kwargs[arg]
+ else:
+ if hasattr(instance, arg):
+ newparams[arg] = getattr(instance, arg)
+ else:
+ raise "instance has no attribute '%s'" % arg
+
+ return newparams
+ \ No newline at end of file