From: Mike Bayer Date: Thu, 23 May 2013 17:02:33 +0000 (-0400) Subject: merge default X-Git-Tag: rel_0_9_0b1~304^2~13^2~35 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6e99c0b04e43d1c24ae79a52b225788e6e966abc;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git merge default --- 6e99c0b04e43d1c24ae79a52b225788e6e966abc diff --cc lib/sqlalchemy/util/langhelpers.py index 4cb745c2ba,d82aefdeae..b0ff5b0738 --- a/lib/sqlalchemy/util/langhelpers.py +++ b/lib/sqlalchemy/util/langhelpers.py @@@ -160,33 -162,31 +160,31 @@@ def get_cls_kwargs(cls, _set=None) No anonymous tuple arguments please ! """ + toplevel = _set == None + if toplevel: + _set = set() - for c in cls.__mro__: - if '__init__' in c.__dict__: - stack = set([c]) - break - else: - return [] - - args = set() - while stack: - class_ = stack.pop() - ctr = class_.__dict__.get('__init__', False) - if (not ctr or - not isinstance(ctr, types.FunctionType) or - not isinstance(ctr.__code__, types.CodeType)): - stack.update(class_.__bases__) - continue - - # this is shorthand for - # names, _, has_kw, _ = inspect.getargspec(ctr) + ctr = cls.__dict__.get('__init__', False) + has_init = ctr and isinstance(ctr, types.FunctionType) and \ - isinstance(ctr.func_code, types.CodeType) ++ isinstance(ctr.__code__, types.CodeType) + + if has_init: names, has_kw = inspect_func_args(ctr) - args.update(names) - if has_kw: - stack.update(class_.__bases__) - args.discard('self') - return args + _set.update(names) + + if not has_kw and not toplevel: + return None + + if not has_init or has_kw: + for c in cls.__bases__: + if get_cls_kwargs(c, _set) is None: + break + + _set.discard('self') + return _set + + try: from inspect import CO_VARKEYWORDS