Skip to content

Re-using sqlalchemy.dialects.postgresql.UUID instance generates mypy violation #225

Open
@mtvx

Description

@mtvx

Describe the bug

Storing an instance of sqlalchemy.dialects.postgresql.UUID to a variable and re-using that in the column declarations is seen as NullType.

Expected behavior

Type should be detected as Column[UUID]?

To Reproduce

from typing import Optional
from uuid import UUID

from sqlalchemy import Column
from sqlalchemy.dialects.postgresql import UUID as PostgresUUID
from sqlalchemy.orm import declarative_base

PgUUID = PostgresUUID(as_uuid=True)
Base = declarative_base()


class Foobar(Base):
    __tablename__ = "foobar"

    works: Optional[UUID] = Column(PostgresUUID(as_uuid=True))
    doesnt: Optional[UUID] = Column(PgUUID)

Error

Running with sqlalchemy.ext.mypy.plugin enabled in mypy configs:

$ mypy foobar.py
foobar.py:15: error: Incompatible types in assignment (expression has type "Column[NullType]", variable has type "UUID")  [assignment]
Found 1 error in 1 file (checked 1 source file)

Versions.

  • OS: Linux
  • Python: 3.9.9
  • SQLAlchemy: 1.4.39
  • mypy: mypy 0.971
  • SQLAlchemy2-stubs: 0.0.2a25

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingmypy pluginsomething that has to do with the sqlalchemy mypy plugin

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions