Comments (11)
@arnimarj, the fix is in #29. I think it should solve this issue.
from mypy-zope.
I modified get_metaclass_hook
to be:
def get_metaclass_hook(
self, fullname: str
) -> Optional[Callable[[ClassDefContext], None]]:
def analyze_metaclass(ctx: ClassDefContext) -> None:
metaclass = cast(NameExpr, ctx.cls.metaclass)
if isinstance(metaclass.node, Var):
return
info = cast(TypeInfo, metaclass.node)
expected = "zope.interface.interface.InterfaceClass"
if info and any(node.fullname == expected for node in info.mro):
self.log(f"Found zope interface: {ctx.cls.fullname}")
md = self._get_metadata(ctx.cls.info)
md["is_interface"] = True
return analyze_metaclass
...after looking at analyze_metaclass
in MyPy. There is a short-circuit along the lines of:
if isinstance(sym.node, Var) and isinstance(get_proper_type(sym.node.type), AnyType):
# 'Any' metaclass -- just ignore it.
#
# TODO: A better approach would be to record this information
# and assume that the type object supports arbitrary
# attributes, similar to an 'Any' base class.
return
That made the error go away
from mypy-zope.
Yeah, these casts in front of analyze_metaclass
are not right. I'll try a more correct approach there, let me make a branch to test it.
from mypy-zope.
I've got a small test-case:
from i.dont.exist import MetaKlass
class Leg(metaclass=MetaKlass):
pass
I believe mypy gives you a Var
node when the metaclass has not been resolved
from mypy-zope.
Oh, thanks, I can add a test too then!
from mypy-zope.
my mypy.ini:
[mypy]
scripts_are_modules = True
show_traceback = True
disallow_any_generics = True
warn_no_return = True
no_implicit_optional = True
ignore_missing_imports = True
namespace_packages = True
plugins = mypy_zope:plugin
And the run:
$ PYTHONPATH=$(pwd) mypy --show-traceback --show-error-codes --config mypy.ini z.py
z.py:4: error: INTERNAL ERROR -- Please try using mypy master on Github:
https://mypy.rtfd.io/en/latest/common_issues.html#using-a-development-mypy-build
Please report a bug at https://github.com/python/mypy/issues
version: 0.800
Traceback (most recent call last):
File "mypy/semanal.py", line 4835, in accept
File "mypy/nodes.py", line 950, in accept
File "mypy/semanal.py", line 1048, in visit_class_def
File "mypy/semanal.py", line 1125, in analyze_class
File "mypy/semanal.py", line 1134, in analyze_class_body_common
File "mypy/semanal.py", line 1187, in apply_class_plugin_hooks
File "/home/arni/.config/dohop/tools_venv3/lib/python3.8/site-packages/mypy_zope/plugin.py", line 270, in analyze_metaclass
if info and any(node.fullname == expected for node in info.mro):
AttributeError: 'Var' object has no attribute 'mro'
z.py:4: : note: use --pdb to drop into pdb
from mypy-zope.
@arnimarj, the fix is in #29. I think it should solve this issue.
The issue seems to be gone. Thanks for the great turnaround speed.
from mypy-zope.
Do you want a new release with this fix?
from mypy-zope.
Do you want a new release with this fix?
Yes please :)
from mypy-zope.
0.2.10 is released
from mypy-zope.
0.2.10 is released
Thanks. We hit this bug in our regression tests, so a new release helps.
from mypy-zope.
Related Issues (20)
- exceptions.pyi doesn't contain MultipleInvalid HOT 3
- mypy 1.5.1 compatibility HOT 5
- mypy 1.7 support HOT 6
- mypy 1.8.0 release HOT 1
- `zope-stubs/__init__.pyi` prevents mypy from detecting `zope` as a namespace package HOT 1
- Subclasses of Twisted's amp fail to be determined by mypy-zope
- Doesn't quite understand that dynamically created classes are classes HOT 1
- Types for zope.component
- A way to express "A type which implements these N interfaces" HOT 3
- Error importing plugin "mypy_zope": cannot import name 'SemanticAnalyzerPass2' from 'mypy.semanal' HOT 2
- release that works with current mypy (==0.961) HOT 2
- Potential issue with mypy==0.970-dev HOT 1
- Caching errors with latest version of mypy HOT 1
- adaptation callable ought to return a union type with its second argument
- Regression in upcoming mypy 0.990 HOT 3
- Caching error (Metaclass conflict) with mypy 0.991 HOT 4
- Mypy's `--warn-unreachable` option erroneously considers some `isinstance` calls to be always False with mypy-zope 0.9.0 HOT 6
- make it possible to define a generic interface
- Follow semantic versioning in mypy version pins HOT 4
- mypy 1.3 compatibility HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mypy-zope.