hi
i have
class X(object):
....
X.__init__ = setattr_kargs
where
def setattr_kargs( *args, **kargs):
assert len(args)==1
x = args[0]
for k,v in kargs.iteritems(): setattr( x, k, v)
when SA comes to play, it fails to find a 'self' in "__init__"
arguments.
in format_argspec_plus(), this line
self_arg = spec[0] and spec[0][0] or None
should never be None:
self_arg = spec[0] and spec[0][0] or spec[1]+'[0]'
seems to work.
why not (args,vargs,kwargs,defaults) instead of spec+indexes?
also, the empty defaults is tuple/() and not None, so spec[3] should
not be compared to None but just bool of it. Something like:
def format_argspec_plus(fn, grouped=True):
spec = args,vargs,kwargs,defaults = inspect.getargspec(fn)
vkargs = inspect.formatargspec(*spec)
self_arg = args and args[0] or vargs+'[0]'
apply_pos = inspect.formatargspec( args,vargs,kwargs)
defaulted_vals = defaults and args[-len(defaults):] or ()
apply_kw = inspect.formatargspec( args,vargs,kwargs,
defaulted_vals, formatvalue=lambda x: '=' + x)
if grouped:
return dict(args=vkargs, self_arg=self_arg,
apply_pos=apply_pos, apply_kw=apply_kw)
else:
return dict(args=vkargs[1:-1], self_arg=self_arg,
apply_pos=apply_pos[1:-1], apply_kw=apply_kw[1:-1])
the log/printing of functext/funcvars will help a bit, as
the functext is not very visible in a stacktrace.
and/or, maybe fix/hack with the co_filename and co_firstlineno
code-attributes so inspect.getsource( myclass.__init__)
"works"... maybe pointing to orm.attributes._generate_init function.
on a general note, this functext-generation+exec... is going to make
troubles. i've been generating languages (like 3 level python1 ->
python2 -> python3/C/corba/html/...) for years, but always exposed
the full result and tried to avoid it as much as possible - if _can_
be done without generation+exec - or absolute possible minimum of it.
it's a _very_ slippery slope, regardless how "attractive" it may
look. debugging it is a nightmare.
for example, the query._generative decoration is not really readable,
if something breaks there, would be very hard to understand
what/why/where. Playing with user's __init__ may be unavoidable but
these decorators over ~standartized SA code should work without
stringtext+exec.
anyway
ciao
svilen
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---