Skip to content

Generic bounded dataclass crash #10140

Closed
Closed
@xanderbailey

Description

@xanderbailey

Crash Report

Ran mypy on my user library - no idea what went wrong.

Traceback

  File "/Users/name/.env/myenv/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/__main__.py", line 11, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/main.py", line 98, in main
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/build.py", line 179, in build
    result = _build(
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/build.py", line 253, in _build
    graph = dispatch(sources, manager, stdout)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/build.py", line 2688, in dispatch
    process_graph(graph, manager)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/build.py", line 3012, in process_graph
    process_stale_scc(graph, scc, manager)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/build.py", line 3104, in process_stale_scc
    mypy.semanal_main.semantic_analysis_for_scc(graph, scc, manager.errors)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/semanal_main.py", line 79, in semantic_analysis_for_scc
    process_functions(graph, scc, patches)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/semanal_main.py", line 233, in process_functions
    process_top_level_function(analyzer,
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/semanal_main.py", line 274, in process_top_level_function
    deferred, incomplete, progress = semantic_analyze_target(target, state, node, active_type,
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/semanal_main.py", line 326, in semantic_analyze_target
    analyzer.refresh_partial(refresh_node,
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/semanal.py", line 397, in refresh_partial
    self.accept(node)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/semanal.py", line 4835, in accept
    node.accept(self)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/nodes.py", line 687, in accept
    return visitor.visit_func_def(self)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/semanal.py", line 573, in visit_func_def
    self.analyze_func_def(defn)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/semanal.py", line 605, in analyze_func_def
    self.defer(defn)
  File "/Users/name/.env/myenv/lib/python3.9/site-packages/mypy/semanal.py", line 4554, in defer
    assert not self.final_iteration, 'Must not defer during final iteration'
AssertionError: Must not defer during final iteration

To Reproduce

from dataclasses import dataclass
import dataclasses
from typing import Any, Dict, Generic, List, Type, TypeVar, Union
from abc import ABC, abstractclassmethod

from occupier.utils import EnhancedJSONEncoder

T = TypeVar("T", bound="DictDataClass")


@dataclass(frozen=True)
class DictDataClass(Generic[T]):
    urn: int

    def to_dict(self) -> Dict[str, Any]:
        return dataclasses.asdict(self)

    @classmethod
    def from_dict(cls: Type[T], dict_: Dict[str, Any]) -> T:
        return cls(**dict_)

    @classmethod
    def field_names(cls) -> List[str]:
        return [field.name for field in dataclasses.fields(cls)]


@dataclass(frozen=True)
class JSONDataClass(ABC, DictDataClass):

    _JSON_ENCODER = EnhancedJSONEncoder()

    def to_json(self) -> str:
        return JSONDataClass._JSON_ENCODER.encode(self)

    @classmethod
    @abstractclassmethod
    def from_json(cls: Type[T], json_str: str) -> Union[List[T], T]:
        pass

Your Environment

  • Mypy version used : 0.820+dev.effd970ad1e8bb09fd2a18634339e1d043a83400
  • Mypy command-line flags: None
  • Mypy configuration options from mypy.ini (and other config files):
  • Python version used: 3.9.1
  • Operating system and version: MacOS 10.15.7

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions