that's actually interesting, does the constructor of your mapped object still obey the same contract that the "*, x, y" syntax describes ? or can you suddenly pass "first_name", "last_name" positionally as well ?
On Aug 5, 2011, at 2:20 AM, Phazorx wrote: > The patch worked on 0.7.0 and i don't get warning from Python (3.2), > so it seem to have addressed the issue correctly. > (Well i don't get same error at least, once i finish with unittests i > can either confirm or deny lack of side effects) > Thanks! > > On Jul 29, 6:38 pm, Michael Bayer <[email protected]> wrote: >> On Jul 29, 2011, at 3:45 AM, Phazorx wrote: >> >>> Most of my entities accept various combinations of parameters and it >>> makes sense for my to use keyword-only pattern of constructors: >> >>> class Person(Root_Entity): >>> def __init__(self, session, *, first_name, last_name): >> >>> class Address(Root_Entity): >>> def __init__(self, session, *, street, building, unit=None, >>> zip=None, office=None, city="My City", region=None, country="My >>> Country"): >> >>> however, in this case i get following from python while SQLA figures >>> out relationships: >>> ValueError: Function has keyword-only arguments or annotations, >>> use getfullargspec() API which can support them >> >>> full traceback:http://dpaste.com/hold/581307/ >> >>> Everything is peachy as soon as i get rid of "*," in constructor >>> obviously... but what can i do to preserve such constructors and still >>> be able to use SQLA? >> >> So you're using some Python syntax I've never seen before, let's check >> (checking...OK its new in Python 3, does not appear to be in the language >> tutorial either, just in the PEP) and in the first case we'd have to use >> getfullargspec() in that case when Py3 is in use, however we'd also have to >> interpret the extended tuple returned by getfullargspec() correctly when we >> establish instrumentation. >> >> If the following patch works, then we could commit once a test is written, >> though looking at it I'm not optimistic that some significant extra work >> might be needed to do this correctly. Until then this is an unsupported >> use case. Ticket #2237 is addedhttp://www.sqlalchemy.org/trac/ticket/2237. >> >> diff -r 87a1dc569235 lib/sqlalchemy/util/compat.py >> --- a/lib/sqlalchemy/util/compat.py Thu Jul 28 11:53:18 2011 -0400 >> +++ b/lib/sqlalchemy/util/compat.py Fri Jul 29 10:35:23 2011 -0400 >> @@ -90,6 +90,11 @@ >> from urlparse import parse_qsl >> >> if py3k: >> + from inspect import getfullargspec as inspect_getfullargspec >> +else: >> + from inspect import getargspec as inspect_getfullargspec >> + >> +if py3k: >> # they're bringing it back in 3.2. brilliant ! >> def callable(fn): >> return hasattr(fn, '__call__') >> diff -r 87a1dc569235 lib/sqlalchemy/util/langhelpers.py >> --- a/lib/sqlalchemy/util/langhelpers.py Thu Jul 28 11:53:18 2011 >> -0400 >> +++ b/lib/sqlalchemy/util/langhelpers.py Fri Jul 29 10:35:23 2011 >> -0400 >> @@ -15,7 +15,7 @@ >> import sys >> import types >> import warnings >> -from compat import update_wrapper, set_types, threading >> +from compat import update_wrapper, set_types, threading, >> inspect_getfullargspec >> from sqlalchemy import exc >> >> def _unique_symbols(used, *bases): >> @@ -149,7 +149,7 @@ >> 'apply_pos': '(self, a, b, c, **d)'} >> >> """ >> - spec = callable(fn) and inspect.getargspec(fn) or fn >> + spec = callable(fn) and inspect_getfullargspec(fn) or fn >> args = inspect.formatargspec(*spec) >> if spec[0]: >> self_arg = spec[0][0] >> >> >> >>> -- >>> 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 >>> athttp://groups.google.com/group/sqlalchemy?hl=en. > > -- > 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. > -- 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.
