Check that object passed to attrs helpers is attrs (PY-26354)

This commit is contained in:
Semyon Proshev
2018-05-29 16:49:54 +03:00
parent 9d7e586f06
commit b5790bac0a
3 changed files with 110 additions and 6 deletions
@@ -0,0 +1,69 @@
import attr
from typing import Type, Union
class A:
pass
attr.fields(<warning descr="'attr.fields' method should be called on attrs types">A</warning>)
attr.fields(<warning descr="'attr.fields' method should be called on attrs types">A()</warning>)
attr.asdict(<warning descr="'attr.asdict' method should be called on attrs instances">A()</warning>)
attr.astuple(<warning descr="'attr.astuple' method should be called on attrs instances">A()</warning>)
attr.assoc(<warning descr="'attr.assoc' method should be called on attrs instances">A()</warning>)
attr.evolve(<warning descr="'attr.evolve' method should be called on attrs instances">A()</warning>)
@attr.s
class B:
pass
attr.fields(B)
attr.fields(<warning descr="'attr.fields' method should be called on attrs types">B()</warning>)
attr.asdict(B())
attr.astuple(B())
attr.assoc(B())
attr.evolve(B())
attr.asdict(<warning descr="'attr.asdict' method should be called on attrs instances">B</warning>)
attr.astuple(<warning descr="'attr.astuple' method should be called on attrs instances">B</warning>)
attr.assoc(<warning descr="'attr.assoc' method should be called on attrs instances">B</warning>)
attr.evolve(<warning descr="'attr.evolve' method should be called on attrs instances">B</warning>)
def unknown(p):
attr.fields(p)
attr.asdict(p)
attr.astuple(p)
def structural(p):
print(len(p))
attr.fields(p)
attr.asdict(p)
attr.astuple(p)
attr.assoc(p)
attr.evolve(p)
def union1(p: Union[A, B]):
attr.fields(<warning descr="'attr.fields' method should be called on attrs types">p</warning>)
attr.asdict(p)
attr.astuple(p)
attr.assoc(p)
attr.evolve(p)
def union2(p: Union[Type[A], Type[B]]):
attr.fields(p)
attr.asdict(<warning descr="'attr.asdict' method should be called on attrs instances">p</warning>)
attr.astuple(<warning descr="'attr.astuple' method should be called on attrs instances">p</warning>)
attr.assoc(<warning descr="'attr.assoc' method should be called on attrs instances">p</warning>)
attr.evolve(<warning descr="'attr.evolve' method should be called on attrs instances">p</warning>)