diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2005-12-09 05:08:51 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2005-12-09 05:08:51 +0000 |
commit | 69ad2955bdb33eb45939a01d95bcff240a2d9fb6 (patch) | |
tree | 8e285e2c1850a94ae3e44a7fe118f86bf8ff3448 /lib/sqlalchemy/util.py | |
parent | ddf671347205aae40e501c5533c2dd7a94a6a3a1 (diff) | |
download | sqlalchemy-69ad2955bdb33eb45939a01d95bcff240a2d9fb6.tar.gz |
build in 'backref' property argument
Diffstat (limited to 'lib/sqlalchemy/util.py')
-rw-r--r-- | lib/sqlalchemy/util.py | 38 |
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 |