-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Closed
Labels
Description
Bug Report
With updating from mypy 1.6.1 -> 1.7.1 I get an assertion error: "AssertionError: Unexpectedly encountered partial type". This happens in the released version 1.7.1 as well as on the current git main branch.
To Reproduce
from typing import Any
from pymongo import MongoClient
from pymongo.errors import ConnectionFailure
from celery import Celery
from celery.signals import worker_process_init, worker_process_shutdown
celery_app = Celery(__name__)
celery_app.conf.broker_url = ""
celery_app.conf.result_backend = ""
# MongoDB setup
client = None
db = None
collection = None
@worker_process_init.connect
def init_worker(**_kwargs: Any) -> None:
"""
Will be run on initialization of each worker. When you run 12 workers, you will need to have
12 database connections. Here you can get them.
"""
global client, db, collection
if client := MongoClient(""):
db = getattr(client, "")
collection = db[""]
else:
raise ConnectionFailure(
"Cannot connect to database. Please check your config and network settings."
)
@worker_process_shutdown.connect
def shutdown_worker(**_kwargs: Any) -> None:
"""
Shutdown everything at the end of a worker’s lifetime, e.g. database connections
"""
if client:
client.close()Expected Behavior
Mypy should not raise an assertion.
Actual Behavior
This is the output from current mypy version from git:
mypy --show-traceback my_project
my_project/worker.py:45: error: INTERNAL ERROR -- Please try using mypy master on GitHub:
https://mypy.readthedocs.io/en/stable/common_issues.html#using-a-development-mypy-build
Please report a bug at https://github.com/python/mypy/issues
version: 1.8.0+dev.e69c5cde8643e04a54a644cc27814ab98181541d
Traceback (most recent call last):
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/bin/mypy", line 8, in <module>
sys.exit(console_entry())
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/__main__.py", line 15, in console_entry
main()
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/main.py", line 100, in main
res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/main.py", line 182, in run_build
res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 191, in build
result = _build(
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 265, in _build
graph = dispatch(sources, manager, stdout)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 2943, in dispatch
process_graph(graph, manager)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 3341, in process_graph
process_stale_scc(graph, scc, manager)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 3442, in process_stale_scc
graph[id].type_check_first_pass()
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/build.py", line 2311, in type_check_first_pass
self.type_checker().check_first_pass()
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 481, in check_first_pass
self.accept(d)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 591, in accept
stmt.accept(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 897, in accept
return visitor.visit_decorator(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 4884, in visit_decorator
self.visit_decorator_inner(e)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 4889, in visit_decorator_inner
self.check_func_item(e.func, name=e.func.name, allow_empty=allow_empty)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 1077, in check_func_item
self.check_func_def(defn, typ, name, allow_empty)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 1293, in check_func_def
self.accept(item.body)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 591, in accept
stmt.accept(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1223, in accept
return visitor.visit_block(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 2770, in visit_block
self.accept(s)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 591, in accept
stmt.accept(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1491, in accept
return visitor.visit_if_stmt(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 4525, in visit_if_stmt
self.accept(b)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 591, in accept
stmt.accept(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1223, in accept
return visitor.visit_block(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 2770, in visit_block
self.accept(s)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 591, in accept
stmt.accept(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1310, in accept
return visitor.visit_assignment_stmt(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 2818, in visit_assignment_stmt
self.check_assignment(s.lvalues[-1], s.rvalue, s.type is None, s.new_syntax)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checker.py", line 2922, in check_assignment
rvalue_type = self.expr_checker.accept(rvalue)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 5727, in accept
typ = node.accept(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1904, in accept
return visitor.visit_call_expr(self)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 473, in visit_call_expr
return self.visit_call_expr_inner(e, allow_none_return=allow_none_return)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 602, in visit_call_expr_inner
ret_type = self.check_call_expr_with_callee_type(
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 1440, in check_call_expr_with_callee_type
ret_type, callee_type = self.check_call(
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 1546, in check_call
return self.check_overload_call(
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 2606, in check_overload_call
arg_types = self.infer_arg_types_in_empty_context(args)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 1868, in infer_arg_types_in_empty_context
arg_type = self.accept(arg)
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 5727, in accept
typ = node.accept(self)
^^^^^^^^^^^^^^^^^
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/nodes.py", line 1806, in accept
return visitor.visit_name_expr(self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 358, in visit_name_expr
return self.narrow_type_from_binder(e, result)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/checkexpr.py", line 6062, in narrow_type_from_binder
return narrow_declared_type(known_type, restriction)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/meet.py", line 144, in narrow_declared_type
elif not is_overlapping_types(declared, narrowed, prohibit_none_typevar_overlap=True):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.cache/pypoetry/virtualenvs/my-project-34kD4rpW-py3.11/lib/python3.11/site-packages/mypy/meet.py", line 304, in is_overlapping_types
assert False, "Unexpectedly encountered partial type"
AssertionError: Unexpectedly encountered partial type
my_project/worker.py:45: : note: use --pdb to drop into pdb
Your Environment
- Mypy version used: 1.7.1
- Mypy command-line flags: none
- Mypy configuration options from
mypy.ini(and other config files):
[tool.mypy]
python_version = "3.11"
plugins = "pydantic.mypy"
follow_imports = "silent"
warn_redundant_casts = true
warn_unused_ignores = true
check_untyped_defs = true
disallow_untyped_defs = true
[tool.pydantic-mypy]
init_forbid_extra = true
init_typed = true
warn_required_dynamic_aliases = true
warn_untyped_fields = true
[[tool.mypy.overrides]]
module = "xxx.*"
ignore_missing_imports = true- Python version used: 3.11.6
pohlarized, leo-ger, tamtashi and 0xlia