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 sqlalchemy@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to