Skip to content

Stubgen generates __mypy-replace method for @dataclass_transform #18081

@KapJI

Description

@KapJI

Bug Report

Stubgen generates mypy-replace method which makes .pyi file invalid.

To Reproduce

Minimum example, truncated from Home Assistant codebase:

from typing import dataclass_transform

@dataclass_transform(
    field_specifiers=(),
)
class FrozenOrThawed(type):
    ...

class EntityDescription(metaclass=FrozenOrThawed):
    key: str
$ stubgen --include-private test.py

Without --include-private this method is not generated.

Expected Behavior

Stubgen produces .pyi file with valid syntax, without mypy-replace. Probably with __replace__ method:

class FrozenOrThawed(type): ...

class EntityDescription(metaclass=FrozenOrThawed):
    key: str
    def __init__(self, key) -> None: ...
    def __replace__(self, *, key) -> None: ...

Actual Behavior

Stubgen on master generates:

class FrozenOrThawed(type): ...

class EntityDescription(metaclass=FrozenOrThawed):
    key: str
    def __init__(self, key) -> None: ...
    def __mypy-replace(*, key) -> None: ...

Stubgen 1.13.0 generates __replace__ method as well:

class FrozenOrThawed(type): ...

class EntityDescription(metaclass=FrozenOrThawed):
    key: str
    def __init__(self, key) -> None: ...
    def __mypy-replace(*, key) -> None: ...
    def __replace__(self, *, key) -> None: ...

Your Environment

  • Stubgen version used: master 06a566b and released 1.13.0.
  • Stubgen command-line flags: --include-private
  • Python version used: 3.12.6 on MacOS

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions