Just kidding.
def redefined_by_decorator(node):
"""return True if the object is a method redefined via decorator.
For example:
@property
def x(self): return self._x
@x.setter
def x(self, value): self._x = value
"""
if node.decorators:
for decorator in node.decorators.nodes:
if (isinstance(decorator, astng.Getattr) and
not isinstance(node, astng.Getattr) and
decorator.expr.name == node.name):
return True
return False
On Fri, Aug 17, 2012 at 3:18 PM, JT Olds <[email protected]> wrote:
> I have no idea if this interpretation is right, but here's what I
> think is going on?
>
> in pylint/checkers/base.py, there's a redefined_by_decorator method, like
>
> def redefined_by_decorator(node):
> if node.decorators:
> for decorator in node.decorators.nodes:
> if (isinstance(decorator, astng.Getattr) and
> decorator.expr.name == node.name):
> return True
> return False
>
> I think the "and" should be an "or".
>
> True?
>
> On Fri, Aug 17, 2012 at 3:06 PM, JT Olds <[email protected]> wrote:
>> Hey all,
>>
>> I'm getting a weird error from pylint. I've reduced the code that
>> makes pylint choke to a small test case. When I run pylint on
>>
>> class Thing2(object):
>> def decorator(self, method):
>> def wrapper(*args, **kwargs):
>> return method(*args, **kwargs)
>> return wrapper
>>
>> class Thing1(object):
>> def __getattr__(self, name):
>> return Thing2()
>>
>> thing = Thing1()
>>
>> @thing.my_param.decorator
>> def test():
>> print "hi"
>>
>> I get:
>>
>> Traceback (most recent call last):
>> File "/home/jt/.virtualenvs/default/bin/pylint", line 4, in <module>
>> lint.Run(sys.argv[1:])
>> File
>> "/home/jt/.virtualenvs/default/local/lib/python2.7/site-packages/pylint/lint.py",
>> line 879, in __init__
>> linter.check(args)
>> File
>> "/home/jt/.virtualenvs/default/local/lib/python2.7/site-packages/pylint/lint.py",
>> line 502, in check
>> self.check_astng_module(astng, walker, rawcheckers)
>> File
>> "/home/jt/.virtualenvs/default/local/lib/python2.7/site-packages/pylint/lint.py",
>> line 574, in check_astng_module
>> walker.walk(astng)
>> File
>> "/home/jt/.virtualenvs/default/local/lib/python2.7/site-packages/pylint/utils.py",
>> line 528, in walk
>> self.walk(child)
>> File
>> "/home/jt/.virtualenvs/default/local/lib/python2.7/site-packages/pylint/utils.py",
>> line 525, in walk
>> cb(astng)
>> File
>> "/home/jt/.virtualenvs/default/local/lib/python2.7/site-packages/pylint/checkers/base.py",
>> line 161, in visit_function
>> if not redefined_by_decorator(node):
>> File
>> "/home/jt/.virtualenvs/default/local/lib/python2.7/site-packages/pylint/checkers/base.py",
>> line 116, in redefined_by_decorator
>> decorator.expr.name == node.name):
>> AttributeError: 'Getattr' object has no attribute 'name'
>>
>> Any ideas?
_______________________________________________
Python-Projects mailing list
[email protected]
http://lists.logilab.org/mailman/listinfo/python-projects