Skip to content

Make datetime generic over tzinfo - #11844

Open
srittau wants to merge 45 commits into
python:mainfrom
srittau:datetime-tzinfo
Open

srittau wants to merge 45 commits into
python:mainfrom
srittau:datetime-tzinfo

Conversation

@srittau

@srittau srittau commented Apr 29, 2024

Copy link
Copy Markdown
Collaborator

No description provided.

@srittau

srittau commented Apr 29, 2024

Copy link
Copy Markdown
Collaborator Author

This is a trial to judge the impact of such a change that could prevent runtime errors due to mixing timezone-aware and unaware datetimes.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@srittau

srittau commented Apr 29, 2024

Copy link
Copy Markdown
Collaborator Author

While I think there's some promise in this approach, I struggle with Any annotated datetimes. The __sub__ overloads (for example), derive a return type of Any, probably because mypy is merging the timedelta and NoReturn annotations of multiple annotations. Does anyone have an idea how to work around this?

@bluetech

Copy link
Copy Markdown
Contributor

I don't have much to add except to say that having this will be truly great, my code is littered with "aware"/"not aware" comments which really should be in the type, so I hope you can get it to work. (I haven't been bothered with it enough to use something like DataType yet).

I am curious about two things:

  • Why default TzInfoT to Any instead of tzinfo | None?
  • Why are the overloads needed? I guess typecheckers don't know the type of default values so they don't see that fromtimestamp(123) is the same as fromtimestamp(123, tz=None) and so can't infer TzInfoT=None?

@srittau

srittau commented May 19, 2024

Copy link
Copy Markdown
Collaborator Author

@bluetech

  • Why default TzInfoT to Any instead of tzinfo | None?

It tried both, but both didn't work. tzinfo | None is also my preferred default, but I hoped that Any would have less problems when it didn't.

  • Why are the overloads needed? I guess typecheckers don't know the type of default values so they don't see that fromtimestamp(123) is the same as fromtimestamp(123, tz=None) and so can't infer TzInfoT=None?

Exactly.

Comment thread stdlib/datetime.pyi
Comment thread stdlib/datetime.pyi
Comment thread stdlib/datetime.pyi Outdated
Comment thread stubs/python-dateutil/@tests/test_cases/check_inheritance.py
Comment thread stdlib/datetime.pyi Outdated
Comment thread stdlib/datetime.pyi Outdated
Comment thread stdlib/datetime.pyi Outdated
Comment thread stdlib/datetime.pyi Outdated
self: datetime[None] | datetime[_TzInfo | None], value: datetime[None] | datetime[_TzInfo | None], /
) -> timedelta: ...
@overload
def __sub__(self: datetime[Any], value: datetime[Any], /) -> NoReturn: ...

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these fallbacks necessary? I'd assume if left out the type checkers should report something like the operation not being supported, which would be a better user experience, no?

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

Now it should return `Self`, which means `datetime[Any]` for plain
`datetime` objects. Since the format string is user defined, callers
usually know whether the returned datetime object is naive or tz-aware,
so a union can be overly strict.
@srittau

srittau commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator Author

This is another class that could benefit greatly from AnyOf (python/typing#566).

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Diff from mypy_primer, showing the effect of this PR on open source code:

tornado (https://github.com/tornadoweb/tornado)
+ tornado/test/locale_test.py:103: error: Unsupported operand types for - ("object" and "timedelta")  [operator]
+ tornado/test/locale_test.py:103: error: Argument 1 to "format_date" of "Locale" has incompatible type "timedelta"; expected "int | float | datetime[Any]"  [arg-type]
+ tornado/test/locale_test.py:109: error: Unsupported operand types for - ("object" and "timedelta")  [operator]
+ tornado/test/locale_test.py:109: error: Argument 1 to "format_date" of "Locale" has incompatible type "timedelta"; expected "int | float | datetime[Any]"  [arg-type]
+ tornado/test/locale_test.py:115: error: Unsupported operand types for - ("object" and "timedelta")  [operator]
+ tornado/test/locale_test.py:115: error: Argument 1 to "format_date" of "Locale" has incompatible type "timedelta"; expected "int | float | datetime[Any]"  [arg-type]
+ tornado/test/locale_test.py:122: error: Unsupported operand types for - ("object" and "timedelta")  [operator]
+ tornado/test/locale_test.py:122: error: Argument 1 to "format_date" of "Locale" has incompatible type "timedelta"; expected "int | float | datetime[Any]"  [arg-type]
+ tornado/test/locale_test.py:129: error: Unsupported operand types for - ("object" and "timedelta")  [operator]
+ tornado/test/locale_test.py:129: error: Incompatible types in assignment (expression has type "timedelta", variable has type "datetime[None]")  [assignment]
+ tornado/test/locale_test.py:135: error: Unsupported operand types for - ("object" and "timedelta")  [operator]
+ tornado/test/locale_test.py:135: error: Incompatible types in assignment (expression has type "timedelta", variable has type "datetime[None]")  [assignment]
+ tornado/test/locale_test.py:141: error: Unsupported operand types for - ("object" and "timedelta")  [operator]
+ tornado/test/locale_test.py:141: error: Incompatible types in assignment (expression has type "timedelta", variable has type "datetime[None]")  [assignment]
+ tornado/test/locale_test.py:147: error: Unsupported operand types for + ("object" and "timedelta")  [operator]
+ tornado/test/locale_test.py:147: error: Incompatible types in assignment (expression has type "timedelta", variable has type "datetime[None]")  [assignment]

prefect (https://github.com/PrefectHQ/prefect)
- src/prefect/_internal/schemas/validators.py:231: error: Incompatible return value type (got "datetime", expected "DateTime")  [return-value]
+ src/prefect/_internal/schemas/validators.py:231: error: Incompatible return value type (got "datetime[Any]", expected "DateTime")  [return-value]
- src/prefect/_internal/schemas/validators.py:264: error: Item "None" of "tzinfo | None" has no attribute "name"  [union-attr]
- src/prefect/server/schemas/schedules.py:540: error: Argument 1 to "_next_date" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/schemas/schedules.py:540: error: Argument 1 to "_next_date" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/schemas/schedules.py:553: error: Incompatible types in "yield" (actual type "datetime", expected type "DateTime")  [misc]
+ src/prefect/server/schemas/schedules.py:553: error: Incompatible types in "yield" (actual type "datetime[Any]", expected type "DateTime")  [misc]
- src/prefect/server/schemas/schedules.py:561: error: Argument 1 to "_next_date" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/schemas/schedules.py:561: error: Argument 1 to "_next_date" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/schemas/schedules.py:682: error: Item "datetime" of "datetime | Any" has no attribute "tz"  [union-attr]
+ src/prefect/server/schemas/schedules.py:682: error: Item "datetime[Any]" of "datetime[Any] | Any" has no attribute "tz"  [union-attr]
- src/prefect/server/schemas/schedules.py:713: error: Incompatible types in "yield" (actual type "datetime", expected type "DateTime")  [misc]
+ src/prefect/server/schemas/schedules.py:713: error: Incompatible types in "yield" (actual type "datetime[Any]", expected type "DateTime")  [misc]
- src/prefect/server/schemas/schedules.py:781: error: Incompatible types in "yield" (actual type "datetime", expected type "DateTime")  [misc]
+ src/prefect/server/schemas/schedules.py:781: error: Incompatible types in "yield" (actual type "datetime[Any]", expected type "DateTime")  [misc]
- src/prefect/server/schemas/schedules.py:935: error: Incompatible default for parameter "start" (default has type "None", parameter has type "datetime")  [assignment]
+ src/prefect/server/schemas/schedules.py:935: error: Incompatible default for parameter "start" (default has type "None", parameter has type "datetime[Any]")  [assignment]
- src/prefect/server/schemas/schedules.py:936: error: Incompatible default for parameter "end" (default has type "None", parameter has type "datetime")  [assignment]
+ src/prefect/server/schemas/schedules.py:936: error: Incompatible default for parameter "end" (default has type "None", parameter has type "datetime[Any]")  [assignment]
- src/prefect/server/schemas/schedules.py:1006: error: Incompatible types in "yield" (actual type "datetime", expected type "DateTime")  [misc]
+ src/prefect/server/schemas/schedules.py:1006: error: Incompatible types in "yield" (actual type "datetime[tzinfo]", expected type "DateTime")  [misc]
- src/prefect/_internal/compatibility/deprecated.py:114: error: Item "str" of "datetime | str | Any" has no attribute "strftime"  [union-attr]
+ src/prefect/_internal/compatibility/deprecated.py:114: error: Item "str" of "datetime[Any] | str | Any" has no attribute "strftime"  [union-attr]
- src/prefect/client/schemas/objects.py:416: error: Incompatible types in assignment (expression has type "datetime", variable has type "DateTime | None")  [assignment]
+ src/prefect/client/schemas/objects.py:416: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "DateTime | None")  [assignment]
- src/prefect/states.py:358: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime | None"; expected "DateTime | None"  [arg-type]
+ src/prefect/states.py:358: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime[Any] | None"; expected "DateTime | None"  [arg-type]
- src/prefect/states.py:407: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime | None"; expected "DateTime | None"  [arg-type]
+ src/prefect/states.py:407: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime[Any] | None"; expected "DateTime | None"  [arg-type]
- src/prefect/states.py:436: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime | None"; expected "DateTime | None"  [arg-type]
+ src/prefect/states.py:436: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime[Any] | None"; expected "DateTime | None"  [arg-type]
- src/prefect/server/schemas/states.py:182: error: Incompatible types in assignment (expression has type "datetime", variable has type "DateTime | None")  [assignment]
+ src/prefect/server/schemas/states.py:182: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "DateTime | None")  [assignment]
- src/prefect/server/schemas/states.py:329: error: Incompatible types in assignment (expression has type "datetime", variable has type "DateTime | None")  [assignment]
+ src/prefect/server/schemas/states.py:329: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "DateTime | None")  [assignment]
- src/prefect/events/related.py:212: error: Incompatible types in assignment (expression has type "tuple[dict[str, str | ObjectBaseModel | None], datetime]", target has type "tuple[dict[str, str | ObjectBaseModel | None], DateTime]")  [assignment]
+ src/prefect/events/related.py:212: error: Incompatible types in assignment (expression has type "tuple[dict[str, str | ObjectBaseModel | None], datetime[Any]]", target has type "tuple[dict[str, str | ObjectBaseModel | None], DateTime]")  [assignment]
- src/prefect/events/clients.py:849: error: Incompatible types in assignment (expression has type "datetime", variable has type "DateTime | None")  [assignment]
+ src/prefect/events/clients.py:849: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "DateTime | None")  [assignment]
- src/prefect/_internal/states.py:228: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime | None"; expected "DateTime | None"  [arg-type]
+ src/prefect/_internal/states.py:228: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime[Any] | None"; expected "DateTime | None"  [arg-type]
- src/prefect/_internal/states.py:277: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime | None"; expected "DateTime | None"  [arg-type]
+ src/prefect/_internal/states.py:277: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime[Any] | None"; expected "DateTime | None"  [arg-type]
- src/prefect/_internal/states.py:306: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime | None"; expected "DateTime | None"  [arg-type]
+ src/prefect/_internal/states.py:306: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime[Any] | None"; expected "DateTime | None"  [arg-type]
- src/prefect/server/schemas/responses.py:146: error: Incompatible types in assignment (expression has type "datetime", target has type "None")  [assignment]
+ src/prefect/server/schemas/responses.py:146: error: Incompatible types in assignment (expression has type "datetime[Any]", target has type "None")  [assignment]
- src/prefect/server/events/actions.py:861: error: Argument "scheduled_time" to "Scheduled" has incompatible type "datetime"; expected "DateTime | None"  [arg-type]
+ src/prefect/server/events/actions.py:861: error: Argument "scheduled_time" to "Scheduled" has incompatible type "datetime[tzinfo]"; expected "DateTime | None"  [arg-type]
- src/prefect/deployments/runner.py:1005: error: Argument 1 to "construct_schedule" has incompatible type "**dict[str, str | Any | int | float | timedelta | datetime | None]"; expected "int | float | timedelta | None"  [arg-type]
+ src/prefect/deployments/runner.py:1005: error: Argument 1 to "construct_schedule" has incompatible type "**dict[str, str | Any | int | float | timedelta | datetime[Any] | None]"; expected "int | float | timedelta | None"  [arg-type]
- src/prefect/deployments/runner.py:1005: error: Argument 1 to "construct_schedule" has incompatible type "**dict[str, str | Any | int | float | timedelta | datetime | None]"; expected "datetime | str | None"  [arg-type]
+ src/prefect/deployments/runner.py:1005: error: Argument 1 to "construct_schedule" has incompatible type "**dict[str, str | Any | int | float | timedelta | datetime[Any] | None]"; expected "datetime[Any] | str | None"  [arg-type]
- src/prefect/deployments/runner.py:1005: error: Argument 1 to "construct_schedule" has incompatible type "**dict[str, str | Any | int | float | timedelta | datetime | None]"; expected "str | None"  [arg-type]
+ src/prefect/deployments/runner.py:1005: error: Argument 1 to "construct_schedule" has incompatible type "**dict[str, str | Any | int | float | timedelta | datetime[Any] | None]"; expected "str | None"  [arg-type]
- src/prefect/server/models/variables.py:18: error: Argument 2 to "variable_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/variables.py:18: error: Argument 2 to "variable_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/variables.py:24: error: Argument 2 to "variable_updated_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/variables.py:24: error: Argument 2 to "variable_updated_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/variables.py:30: error: Argument 2 to "variable_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/variables.py:30: error: Argument 2 to "variable_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/flows.py:26: error: Argument 2 to "flow_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/flows.py:26: error: Argument 2 to "flow_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/flows.py:32: error: Argument 2 to "flow_updated_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/flows.py:32: error: Argument 2 to "flow_updated_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/flows.py:38: error: Argument 2 to "flow_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/flows.py:38: error: Argument 2 to "flow_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/concurrency_limits_v2.py:23: error: Argument 2 to "concurrency_limit_v2_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/concurrency_limits_v2.py:23: error: Argument 2 to "concurrency_limit_v2_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/concurrency_limits_v2.py:33: error: Argument 2 to "concurrency_limit_v2_updated_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/concurrency_limits_v2.py:33: error: Argument 2 to "concurrency_limit_v2_updated_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/concurrency_limits_v2.py:43: error: Argument 2 to "concurrency_limit_v2_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/concurrency_limits_v2.py:43: error: Argument 2 to "concurrency_limit_v2_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/concurrency_limits.py:29: error: Argument 2 to "concurrency_limit_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/concurrency_limits.py:29: error: Argument 2 to "concurrency_limit_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/concurrency_limits.py:39: error: Argument 2 to "concurrency_limit_updated_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/concurrency_limits.py:39: error: Argument 2 to "concurrency_limit_updated_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/concurrency_limits.py:49: error: Argument 2 to "concurrency_limit_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/concurrency_limits.py:49: error: Argument 2 to "concurrency_limit_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/artifacts.py:25: error: Argument 2 to "artifact_collection_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/artifacts.py:25: error: Argument 2 to "artifact_collection_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/artifacts.py:35: error: Argument 2 to "artifact_collection_updated_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/artifacts.py:35: error: Argument 2 to "artifact_collection_updated_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/artifacts.py:45: error: Argument 2 to "artifact_collection_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/artifacts.py:45: error: Argument 2 to "artifact_collection_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/events/counting.py:103: error: Unsupported operand types for + ("datetime" and "int")  [operator]
+ src/prefect/server/events/counting.py:103: error: Unsupported operand types for + ("datetime[tzinfo]" and "int")  [operator]
- src/prefect/server/models/block_types.py:30: error: Argument 2 to "block_type_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/block_types.py:30: error: Argument 2 to "block_type_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/block_types.py:38: error: Argument 2 to "block_type_updated_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/block_types.py:38: error: Argument 2 to "block_type_updated_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/block_types.py:46: error: Argument 2 to "block_type_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/block_types.py:46: error: Argument 2 to "block_type_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/block_documents.py:36: error: Argument 2 to "block_document_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/block_documents.py:36: error: Argument 2 to "block_document_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/block_documents.py:46: error: Argument 2 to "block_document_updated_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/block_documents.py:46: error: Argument 2 to "block_document_updated_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/block_documents.py:56: error: Argument 2 to "block_document_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/block_documents.py:56: error: Argument 2 to "block_document_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/workers.py:455: error: Argument "occurred" to "work_queue_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/workers.py:455: error: Argument "occurred" to "work_queue_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/workers.py:575: error: Argument "occurred" to "work_queue_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/workers.py:575: error: Argument "occurred" to "work_queue_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/workers.py:910: error: Argument "occurred" to "work_queue_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/workers.py:910: error: Argument "occurred" to "work_queue_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/workers.py:1360: error: Argument "occurred" to "work_pool_updated_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/workers.py:1360: error: Argument "occurred" to "work_pool_updated_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/workers.py:1369: error: Argument "occurred" to "work_pool_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/workers.py:1369: error: Argument "occurred" to "work_pool_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/workers.py:1377: error: Argument "occurred" to "work_pool_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/workers.py:1377: error: Argument "occurred" to "work_pool_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/deployments.py:689: error: Argument "occurred" to "deployment_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/deployments.py:689: error: Argument "occurred" to "deployment_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/deployments.py:760: error: Argument "occurred" to "deployment_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/deployments.py:760: error: Argument "occurred" to "deployment_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/deployments.py:1357: error: Argument "occurred" to "deployment_status_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/deployments.py:1357: error: Argument "occurred" to "deployment_status_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/deployments.py:1422: error: Argument "occurred" to "deployment_status_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/deployments.py:1422: error: Argument "occurred" to "deployment_status_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/deployments.py:1507: error: Argument "occurred" to "deployment_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/deployments.py:1507: error: Argument "occurred" to "deployment_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/deployments.py:1526: error: Argument "occurred" to "deployment_updated_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/deployments.py:1526: error: Argument "occurred" to "deployment_updated_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/deployments.py:1541: error: Argument "occurred" to "deployment_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/deployments.py:1541: error: Argument "occurred" to "deployment_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/work_queues.py:751: error: Argument "occurred" to "work_queue_status_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/work_queues.py:751: error: Argument "occurred" to "work_queue_status_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/work_queues.py:789: error: Argument "occurred" to "work_queue_status_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/work_queues.py:789: error: Argument "occurred" to "work_queue_status_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/work_queues.py:809: error: Argument "occurred" to "work_queue_status_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/work_queues.py:809: error: Argument "occurred" to "work_queue_status_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/work_queues.py:829: error: Argument "occurred" to "work_queue_updated_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/work_queues.py:829: error: Argument "occurred" to "work_queue_updated_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/work_queues.py:844: error: Argument "occurred" to "work_queue_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/work_queues.py:844: error: Argument "occurred" to "work_queue_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/models/work_queues.py:859: error: Argument "occurred" to "work_queue_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/models/work_queues.py:859: error: Argument "occurred" to "work_queue_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/orchestration/core_policy.py:672: error: Argument "scheduled_time" to "Scheduled" has incompatible type "datetime"; expected "DateTime | None"  [arg-type]
+ src/prefect/server/orchestration/core_policy.py:672: error: Argument "scheduled_time" to "Scheduled" has incompatible type "datetime[Any]"; expected "DateTime | None"  [arg-type]
- src/prefect/server/orchestration/core_policy.py:1124: error: Argument "scheduled_time" to "AwaitingRetry" has incompatible type "datetime"; expected "DateTime | None"  [arg-type]
+ src/prefect/server/orchestration/core_policy.py:1124: error: Argument "scheduled_time" to "AwaitingRetry" has incompatible type "datetime[Any]"; expected "DateTime | None"  [arg-type]
- src/prefect/server/orchestration/core_policy.py:1142: error: Argument "scheduled_time" to "AwaitingRetry" has incompatible type "datetime"; expected "DateTime | None"  [arg-type]
+ src/prefect/server/orchestration/core_policy.py:1142: error: Argument "scheduled_time" to "AwaitingRetry" has incompatible type "datetime[Any]"; expected "DateTime | None"  [arg-type]
- src/prefect/server/orchestration/core_policy.py:1200: error: Argument "scheduled_time" to "AwaitingRetry" has incompatible type "datetime"; expected "DateTime | None"  [arg-type]
+ src/prefect/server/orchestration/core_policy.py:1200: error: Argument "scheduled_time" to "AwaitingRetry" has incompatible type "datetime[Any]"; expected "DateTime | None"  [arg-type]
- src/prefect/server/events/models/automations.py:33: error: Argument 2 to "automation_created_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/events/models/automations.py:33: error: Argument 2 to "automation_created_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/events/models/automations.py:41: error: Argument 2 to "automation_updated_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/events/models/automations.py:41: error: Argument 2 to "automation_updated_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/events/models/automations.py:49: error: Argument 2 to "automation_deleted_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/events/models/automations.py:49: error: Argument 2 to "automation_deleted_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/services/cancellation_cleanup.py:95: error: Argument "when" to "schedule_cancelling_timeout_check" has incompatible type "timedelta"; expected "datetime"  [arg-type]
+ src/prefect/server/services/cancellation_cleanup.py:95: error: Argument "when" to "schedule_cancelling_timeout_check" has incompatible type "timedelta"; expected "datetime[Any]"  [arg-type]
- src/prefect/server/events/triggers.py:758: error: Argument 1 to "periodic_evaluation" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/events/triggers.py:758: error: Argument 1 to "periodic_evaluation" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/events/triggers.py:898: error: Incompatible return value type (got "tuple[datetime | None, Any | int]", expected "tuple[DateTime | None, int]")  [return-value]
+ src/prefect/server/events/triggers.py:898: error: Incompatible return value type (got "tuple[datetime[Any] | None, Any | int]", expected "tuple[DateTime | None, int]")  [return-value]
- src/prefect/server/events/triggers.py:1443: error: Incompatible types in assignment (expression has type "datetime", variable has type "timedelta")  [assignment]
+ src/prefect/server/events/triggers.py:1443: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "timedelta")  [assignment]
- src/prefect/server/events/triggers.py:1465: error: Argument 2 to "proactive_evaluation" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/events/triggers.py:1465: error: Argument 2 to "proactive_evaluation" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/task_engine.py:367: error: Incompatible types in assignment (expression has type "datetime", variable has type "DateTime | None")  [assignment]
+ src/prefect/task_engine.py:367: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "DateTime | None")  [assignment]
- src/prefect/task_engine.py:525: error: Incompatible types in assignment (expression has type "datetime", variable has type "DateTime | None")  [assignment]
+ src/prefect/task_engine.py:525: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "DateTime | None")  [assignment]
- src/prefect/task_engine.py:593: error: Incompatible types in assignment (expression has type "datetime", variable has type "DateTime | None")  [assignment]
+ src/prefect/task_engine.py:593: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "DateTime | None")  [assignment]
- src/prefect/task_engine.py:657: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime | None"; expected "DateTime | None"  [arg-type]
+ src/prefect/task_engine.py:657: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime[Any] | None"; expected "DateTime | None"  [arg-type]
- src/prefect/task_engine.py:1253: error: Incompatible types in assignment (expression has type "datetime", variable has type "DateTime | None")  [assignment]
+ src/prefect/task_engine.py:1253: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "DateTime | None")  [assignment]
- src/prefect/task_engine.py:1316: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime | None"; expected "DateTime | None"  [arg-type]
+ src/prefect/task_engine.py:1316: error: Argument "expiration" to "create_result_record" of "ResultStore" has incompatible type "datetime[Any] | None"; expected "DateTime | None"  [arg-type]
- src/prefect/server/api/workers.py:491: error: Argument "occurred" to "emit_work_pool_status_event" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/api/workers.py:491: error: Argument "occurred" to "emit_work_pool_status_event" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/api/workers.py:1151: error: Argument "work_pool_updated" to "WorkerChannelConnection" has incompatible type "DateTime | None"; expected "datetime"  [arg-type]
+ src/prefect/server/api/workers.py:1151: error: Argument "work_pool_updated" to "WorkerChannelConnection" has incompatible type "DateTime | None"; expected "datetime[Any]"  [arg-type]
- src/prefect/task_worker.py:288: error: Incompatible types in assignment (expression has type "datetime", target has type "DateTime")  [assignment]
+ src/prefect/task_worker.py:288: error: Incompatible types in assignment (expression has type "datetime[Any]", target has type "DateTime")  [assignment]
- src/prefect/task_worker.py:418: error: Incompatible types in assignment (expression has type "datetime", variable has type "DateTime | None")  [assignment]
+ src/prefect/task_worker.py:418: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "DateTime | None")  [assignment]
- src/prefect/server/api/flow_runs.py:540: error: Argument "scheduled_time" to "Scheduled" has incompatible type "datetime"; expected "DateTime | None"  [arg-type]
+ src/prefect/server/api/flow_runs.py:540: error: Argument "scheduled_time" to "Scheduled" has incompatible type "datetime[Any]"; expected "DateTime | None"  [arg-type]
- src/prefect/server/api/ui/flows.py:43: error: Incompatible return value type (got "datetime", expected "DateTime")  [return-value]
+ src/prefect/server/api/ui/flows.py:43: error: Incompatible return value type (got "datetime[Any]", expected "DateTime")  [return-value]
- src/prefect/runtime/flow_run.py:80: error: Dict entry 4 has incompatible type "type[datetime]": "Callable[[str], datetime]"; expected "type[int] | type[float] | type[str] | type[None] | type[DateTime]": "Callable[[Any], Any]"  [dict-item]
+ src/prefect/runtime/flow_run.py:80: error: Dict entry 4 has incompatible type "type[datetime[Any]]": "Callable[[str], datetime[Any]]"; expected "type[int] | type[float] | type[str] | type[None] | type[DateTime]": "Callable[[Any], Any]"  [dict-item]
- src/prefect/runtime/flow_run.py:232: error: Incompatible return value type (got "datetime", expected "DateTime")  [return-value]
+ src/prefect/runtime/flow_run.py:232: error: Incompatible return value type (got "datetime[Any]", expected "DateTime")  [return-value]
- src/prefect/testing/fixtures.py:235: error: Incompatible return value type (got "datetime", expected "DateTime")  [return-value]
+ src/prefect/testing/fixtures.py:235: error: Incompatible return value type (got "datetime[Any]", expected "DateTime")  [return-value]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:116: error: Argument "current_time" to "_prune_completed_idempotency_locked" of "WorkerCleanupQueue" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:116: error: Argument "current_time" to "_prune_completed_idempotency_locked" of "WorkerCleanupQueue" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:182: error: Argument "current_time" to "_expire_due_leases_locked" of "WorkerCleanupQueue" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:182: error: Argument "current_time" to "_expire_due_leases_locked" of "WorkerCleanupQueue" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:214: error: Argument "current_time" to "_move_to_dead_letter_locked" of "WorkerCleanupQueue" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:214: error: Argument "current_time" to "_move_to_dead_letter_locked" of "WorkerCleanupQueue" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:228: error: Argument "lease_expires_at" to "_Reservation" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:228: error: Argument "lease_expires_at" to "_Reservation" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:229: error: Argument "reserved_at" to "_Reservation" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:229: error: Argument "reserved_at" to "_Reservation" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:273: error: Argument "current_time" to "_validate_current_reservation_locked" of "WorkerCleanupQueue" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:273: error: Argument "current_time" to "_validate_current_reservation_locked" of "WorkerCleanupQueue" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:287: error: Argument "completed_at" to "_AckedMessage" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:287: error: Argument "completed_at" to "_AckedMessage" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:326: error: Argument "current_time" to "_validate_current_reservation_locked" of "WorkerCleanupQueue" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:326: error: Argument "current_time" to "_validate_current_reservation_locked" of "WorkerCleanupQueue" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:341: error: Argument "current_time" to "_move_to_dead_letter_locked" of "WorkerCleanupQueue" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:341: error: Argument "current_time" to "_move_to_dead_letter_locked" of "WorkerCleanupQueue" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:390: error: Argument "current_time" to "_validate_current_reservation_locked" of "WorkerCleanupQueue" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:390: error: Argument "current_time" to "_validate_current_reservation_locked" of "WorkerCleanupQueue" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:404: error: Argument "lease_expires_at" to "_Reservation" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:404: error: Argument "lease_expires_at" to "_Reservation" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/server/worker_communication/cleanup_queue/memory.py:436: error: Argument "current_time" to "_expire_due_leases_locked" of "WorkerCleanupQueue" has incompatible type "datetime"; expected "DateTime"  [arg-type]
+ src/prefect/server/worker_communication/cleanup_queue/memory.py:436: error: Argument "current_time" to "_expire_due_leases_locked" of "WorkerCleanupQueue" has incompatible type "datetime[Any]"; expected "DateTime"  [arg-type]
- src/prefect/cli/deployment.py:811: error: Value of "anchor_date" has incompatible type "datetime"; expected "str"  [typeddict-item]
+ src/prefect/cli/deployment.py:811: error: Value of "anchor_date" has incompatible type "datetime[Any]"; expected "str"  [typeddict-item]
- src/prefect/cli/deploy/_schedules.py:70: error: Argument 1 to "IntervalSchedule" has incompatible type "**dict[str, timedelta | Any | datetime]"; expected "timedelta"  [arg-type]
+ src/prefect/cli/deploy/_schedules.py:70: error: Argument 1 to "IntervalSchedule" has incompatible type "**dict[str, timedelta | Any | datetime[Any]]"; expected "timedelta"  [arg-type]
- src/prefect/cli/deploy/_schedules.py:70: error: Argument 1 to "IntervalSchedule" has incompatible type "**dict[str, timedelta | Any | datetime]"; expected "DateTime | datetime | str | None"  [arg-type]
+ src/prefect/cli/deploy/_schedules.py:70: error: Argument 1 to "IntervalSchedule" has incompatible type "**dict[str, timedelta | Any | datetime[Any]]"; expected "DateTime | datetime[Any] | str | None"  [arg-type]
- src/prefect/cli/deploy/_schedules.py:70: error: Argument 1 to "IntervalSchedule" has incompatible type "**dict[str, timedelta | Any | datetime]"; expected "str | None"  [arg-type]
+ src/prefect/cli/deploy/_schedules.py:70: error: Argument 1 to "IntervalSchedule" has incompatible type "**dict[str, timedelta | Any | datetime[Any]]"; expected "str | None"  [arg-type]
- src/prefect/cli/work_queue.py:741: error: Unsupported operand types for > ("datetime" and "None")  [operator]
+ src/prefect/cli/work_queue.py:741: error: No overload variant of "__gt__" of "datetime" matches argument type "None"  [operator]
+ src/prefect/cli/work_queue.py:741: note: Possible overload variants:
+ src/prefect/cli/work_queue.py:741: note:     def __gt__(self, datetime[tzinfo] | datetime[tzinfo | None], /) -> bool
+ src/prefect/cli/work_queue.py:741: note:     def __gt__(self, datetime[None] | datetime[tzinfo | None], /) -> bool
+ src/prefect/cli/work_queue.py:741: note:     def __gt__(self, datetime[Any], /) -> Never

aiohttp (https://github.com/aio-libs/aiohttp)
+ aiohttp/web_request.py:542:5: error: Type of decorated function contains type "Any" ("under_cached_property[datetime[Any] | None]")  [misc]
+ aiohttp/web_request.py:550:5: error: Type of decorated function contains type "Any" ("under_cached_property[datetime[Any] | None]")  [misc]
+ aiohttp/web_request.py:604:5: error: Type of decorated function contains type "Any" ("under_cached_property[datetime[Any] | ETag | None]")  [misc]

nionutils (https://github.com/nion-software/nionutils)
+ nion/utils/test/DateTime_test.py:31: error: "object" has no attribute "isoformat"  [attr-defined]
+ nion/utils/test/DateTime_test.py:32: error: Argument 1 to "get_windows_filetime_from_datetime" has incompatible type "object"; expected "datetime[Any]"  [arg-type]
+ nion/utils/test/DateTime_test.py:36: error: "object" has no attribute "tzinfo"  [attr-defined]
+ nion/utils/test/DateTime_test.py:38: error: "object" has no attribute "replace"  [attr-defined]
+ nion/utils/test/DateTime_test.py:40: error: "object" has no attribute "astimezone"  [attr-defined]
+ nion/utils/test/DateTime_test.py:45: error: "object" has no attribute "tzinfo"  [attr-defined]
+ nion/utils/test/DateTime_test.py:47: error: "object" has no attribute "replace"  [attr-defined]
+ nion/utils/test/DateTime_test.py:49: error: "object" has no attribute "astimezone"  [attr-defined]

apprise (https://github.com/caronc/apprise)
- apprise/asset.py:375: error: Incompatible types in assignment (expression has type "tzinfo | None", variable has type "None")  [assignment]
+ apprise/asset.py:375: error: Incompatible types in assignment (expression has type "tzinfo", variable has type "None")  [assignment]
- apprise/persistent_store.py:132: error: Incompatible types in assignment (expression has type "datetime", variable has type "None")  [assignment]
+ apprise/persistent_store.py:132: error: Incompatible types in assignment (expression has type "datetime[tzinfo]", variable has type "None")  [assignment]
- apprise/persistent_store.py:140: error: Incompatible types in assignment (expression has type "datetime", variable has type "None")  [assignment]
+ apprise/persistent_store.py:140: error: Incompatible types in assignment (expression has type "datetime[tzinfo]", variable has type "None")  [assignment]
- apprise/persistent_store.py:143: error: Incompatible types in assignment (expression has type "datetime", variable has type "None")  [assignment]
+ apprise/persistent_store.py:143: error: Incompatible types in assignment (expression has type "datetime[tzinfo]", variable has type "None")  [assignment]
- apprise/persistent_store.py:1429: error: Incompatible types in assignment (expression has type "datetime", variable has type "int | float | None")  [assignment]
+ apprise/persistent_store.py:1429: error: Incompatible types in assignment (expression has type "datetime[None]", variable has type "int | float | None")  [assignment]
- apprise/persistent_store.py:1528: error: Unsupported operand types for > ("datetime" and "None")  [operator]
+ apprise/persistent_store.py:1528: error: No overload variant of "__gt__" of "datetime" matches argument type "None"  [operator]
+ apprise/persistent_store.py:1528: note: Possible overload variants:
+ apprise/persistent_store.py:1528: note:     def __gt__(self, datetime[None] | datetime[tzinfo | None], /) -> bool
+ apprise/persistent_store.py:1528: note:     def __gt__(self, datetime[Any], /) -> Never
- apprise/persistent_store.py:1528: error: Unsupported operand types for < ("int" and "datetime")  [operator]
+ apprise/persistent_store.py:1528: error: Unsupported operand types for < ("int" and "datetime[None]")  [operator]
- apprise/persistent_store.py:1528: error: Unsupported operand types for < ("float" and "datetime")  [operator]
+ apprise/persistent_store.py:1528: error: Unsupported operand types for < ("float" and "datetime[None]")  [operator]

zulip (https://github.com/zulip/zulip)
+ zerver/tests/test_timestamp.py:80: error: Incompatible types in assignment (expression has type "datetime[None]", variable has type "datetime[tzinfo]")  [assignment]

kopf (https://github.com/nolar/kopf)
+ kopf/_core/actions/progression.py:133: error: Returning Any from function declared to return "timedelta"  [no-any-return]

core (https://github.com/home-assistant/core)
+ homeassistant/components/braviatv/coordinator.py:254: error: Statement is unreachable  [unreachable]
+ homeassistant/components/calendar/trigger.py:119: error: Returning Any from function declared to return "bool"  [no-any-return]
+ homeassistant/components/evohome/storage.py:100: error: Incompatible types in assignment (expression has type "datetime[tzinfo] | datetime[None]", variable has type "datetime[None]")  [assignment]
+ homeassistant/components/sensor/recorder.py:195: error: Returning Any from function declared to return "float"  [no-any-return]
+ homeassistant/components/sun/condition.py:132: error: Returning Any from function declared to return "bool"  [no-any-return]
+ homeassistant/components/tibber/coordinator.py:340: error: Incompatible types in assignment (expression has type "datetime[tzinfo]", variable has type "datetime[None]")  [assignment]
+ homeassistant/components/rituals_perfume_genie/coordinator.py:265: error: Returning Any from function declared to return "bool"  [no-any-return]
+ homeassistant/components/tod/binary_sensor.py:150: error: Returning Any from function declared to return "bool"  [no-any-return]
- homeassistant/components/xbox/coordinator.py:317: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/xbox/coordinator.py:317: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
- homeassistant/components/xbox/coordinator.py:319: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/xbox/coordinator.py:319: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
+ homeassistant/components/alexa/auth.py:113: error: Returning Any from function declared to return "bool"  [no-any-return]
+ homeassistant/components/calendar/__init__.py:221: error: Returning Any from function declared to return "bool"  [no-any-return]
+ homeassistant/components/recorder/models/state.py:73: error: Unused "type: ignore" comment  [unused-ignore]
+ homeassistant/components/recorder/models/state.py:81: error: Unused "type: ignore" comment  [unused-ignore]
+ homeassistant/helpers/condition/conditions.py:290: error: Returning Any from function declared to return "bool"  [no-any-return]
+ homeassistant/helpers/sun.py:161: error: Returning Any from function declared to return "bool"  [no-any-return]
+ homeassistant/components/history_stats/helpers.py:85: error: Returning Any from function declared to return "float"  [no-any-return]
+ homeassistant/components/jewish_calendar/services.py:58: error: Returning Any from function declared to return "bool"  [no-any-return]
+ homeassistant/components/derivative/sensor.py:308: error: Returning Any from function declared to return "float"  [no-any-return]
- homeassistant/components/alexa_devices/media_player.py:209: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/alexa_devices/media_player.py:209: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
- homeassistant/components/data_grand_lyon/sensor.py:44: error: Returning Any from function declared to return "datetime"  [no-any-return]
+ homeassistant/components/data_grand_lyon/sensor.py:44: error: Returning Any from function declared to return "datetime[Any]"  [no-any-return]
- homeassistant/components/data_grand_lyon/sensor.py:45: error: Returning Any from function declared to return "datetime"  [no-any-return]
+ homeassistant/components/data_grand_lyon/sensor.py:45: error: Returning Any from function declared to return "datetime[Any]"  [no-any-return]
- homeassistant/components/jewish_calendar/sensor.py:305: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/jewish_calendar/sensor.py:305: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
- homeassistant/components/russound_rio/media_player.py:197: error: Returning Any from function declared to return "datetime"  [no-any-return]
+ homeassistant/components/russound_rio/media_player.py:197: error: Returning Any from function declared to return "datetime[Any]"  [no-any-return]
+ homeassistant/components/statistics/sensor.py:1078: error: Incompatible types in assignment (expression has type "datetime[tzinfo]", variable has type "datetime[None]")  [assignment]
- homeassistant/components/easyenergy/services.py:161: error: Returning Any from function declared to return "list[dict[str, float | datetime]]"  [no-any-return]
+ homeassistant/components/easyenergy/services.py:161: error: Returning Any from function declared to return "list[dict[str, float | datetime[Any]]]"  [no-any-return]
- homeassistant/components/hortimax/sensor.py:276: error: Returning Any from function declared to return "float | str | datetime | None"  [no-any-return]
+ homeassistant/components/hortimax/sensor.py:276: error: Returning Any from function declared to return "float | str | datetime[Any] | None"  [no-any-return]
- homeassistant/components/unifiprotect/sensor.py:100: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/unifiprotect/sensor.py:100: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
- homeassistant/components/unifiprotect/sensor.py:610: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/unifiprotect/sensor.py:610: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
+ homeassistant/components/onvif/device.py:293: error: Need type annotation for "dt_diff"  [var-annotated]
+ homeassistant/components/roborock/coordinator.py:363: error: Returning Any from function declared to return "bool"  [no-any-return]
- homeassistant/components/cambridge_audio/media_player.py:188: error: Returning Any from function declared to return "datetime"  [no-any-return]
+ homeassistant/components/cambridge_audio/media_player.py:188: error: Returning Any from function declared to return "datetime[Any]"  [no-any-return]
- homeassistant/components/discovergy/sensor.py:37: error: Returning Any from function declared to return "datetime | float | None"  [no-any-return]
+ homeassistant/components/discovergy/sensor.py:37: error: Returning Any from function declared to return "datetime[Any] | float | None"  [no-any-return]
- homeassistant/components/ecowitt/sensor.py:368: error: Returning Any from function declared to return "str | int | float | None | datetime"  [no-any-return]
+ homeassistant/components/ecowitt/sensor.py:368: error: Returning Any from function declared to return "str | int | float | None | datetime[Any]"  [no-any-return]
- homeassistant/components/my_pv/sensor.py:258: error: Returning Any from function declared to return "str | int | float | None | date | datetime | Decimal"  [no-any-return]
+ homeassistant/components/my_pv/sensor.py:258: error: Returning Any from function declared to return "str | int | float | None | date | datetime[Any] | Decimal"  [no-any-return]
- homeassistant/components/roku/media_player.py:235: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/roku/media_player.py:235: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
+ homeassistant/components/local_calendar/calendar.py:283: note:     def __sub__(self, datetime[tzinfo] | datetime[tzinfo | None], /) -> timedelta
+ homeassistant/components/local_calendar/calendar.py:283: note:     def __sub__(self, datetime[None] | datetime[tzinfo | None], /) -> timedelta
- homeassistant/components/local_calendar/calendar.py:283: note:     def __sub__(self, datetime, /) -> timedelta
+ homeassistant/components/local_calendar/calendar.py:283: note:     def __sub__(self, datetime[Any], /) -> Never
- homeassistant/components/local_calendar/calendar.py:283: note:     def __sub__(self, timedelta, /) -> datetime
+ homeassistant/components/local_calendar/calendar.py:283: note:     def __sub__(self, timedelta, /) -> datetime[Any]
+ homeassistant/components/filter/sensor.py:757: error: Returning Any from function declared to return "float"  [no-any-return]
- homeassistant/components/wattwaechter/sensor.py:697: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/wattwaechter/sensor.py:697: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
- homeassistant/components/vallox/sensor.py:69: error: Returning Any from function declared to return "str | int | float | None | datetime"  [no-any-return]
+ homeassistant/components/vallox/sensor.py:69: error: Returning Any from function declared to return "str | int | float | None | datetime[Any]"  [no-any-return]
- homeassistant/components/esphome/sensor.py:119: error: Returning Any from function declared to return "datetime | int | float | None"  [no-any-return]
+ homeassistant/components/esphome/sensor.py:119: error: Returning Any from function declared to return "datetime[Any] | int | float | None"  [no-any-return]
- homeassistant/components/esphome/sensor.py:150: error: Returning Any from function declared to return "str | datetime | date | None"  [no-any-return]
+ homeassistant/components/esphome/sensor.py:150: error: Returning Any from function declared to return "str | datetime[Any] | date | None"  [no-any-return]
- homeassistant/components/yoto/media_player.py:128: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/yoto/media_player.py:128: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
- homeassistant/components/nest/camera.py:236: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/nest/camera.py:236: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
- homeassistant/components/nest/camera.py:283: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/nest/camera.py:283: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
- homeassistant/components/nest/sensor.py:143: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/nest/sensor.py:143: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
- homeassistant/components/dlna_dmr/media_player.py:986: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/dlna_dmr/media_player.py:986: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
+ homeassistant/components/knx/datetime.py:97: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]
- homeassistant/components/knx/datetime.py:97: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
- homeassistant/components/lyngdorf/media_player.py:414: error: Returning Any from function declared to return "datetime | None"  [no-any-return]
+ homeassistant/components/lyngdorf/media_player.py:414: error: Returning Any from function declared to return "datetime[Any] | None"  [no-any-return]

discord.py (https://github.com/Rapptz/discord.py)
- discord/embeds.py:362: error: Incompatible types in assignment (expression has type "None", variable has type "datetime")  [assignment]
+ discord/embeds.py:362: error: Incompatible types in assignment (expression has type "None", variable has type "datetime[tzinfo] | datetime[Any]")  [assignment]
- discord/member.py:154: note:     def parse_time(timestamp: str) -> datetime
+ discord/member.py:154: note:     def parse_time(timestamp: str) -> datetime[Any]
- discord/member.py:154: note:     def parse_time(timestamp: str | None) -> datetime | None
+ discord/member.py:154: note:     def parse_time(timestamp: str | None) -> datetime[Any] | None
- discord/guild.py:4712: note:     def parse_time(timestamp: str) -> datetime
+ discord/guild.py:4712: note:     def parse_time(timestamp: str) -> datetime[Any]
- discord/guild.py:4712: note:     def parse_time(timestamp: str | None) -> datetime | None
+ discord/guild.py:4712: note:     def parse_time(timestamp: str | None) -> datetime[Any] | None
- discord/guild.py:4723: note:     def parse_time(timestamp: str) -> datetime
+ discord/guild.py:4723: note:     def parse_time(timestamp: str) -> datetime[Any]
- discord/guild.py:4723: note:     def parse_time(timestamp: str | None) -> datetime | None
+ discord/guild.py:4723: note:     def parse_time(timestamp: str | None) -> datetime[Any] | None
- discord/ext/tasks/__init__.py:213: error: Incompatible types in assignment (expression has type "datetime", variable has type "None")  [assignment]
+ discord/ext/tasks/__init__.py:213: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "None")  [assignment]
- discord/ext/tasks/__init__.py:215: error: Incompatible types in assignment (expression has type "datetime", variable has type "None")  [assignment]
+ discord/ext/tasks/__init__.py:215: error: Incompatible types in assignment (expression has type "datetime[tzinfo]", variable has type "None")  [assignment]
- discord/ext/tasks/__init__.py:223: error: Argument 1 to "_try_sleep_until" of "Loop" has incompatible type "None"; expected "datetime"  [arg-type]
+ discord/ext/tasks/__init__.py:223: error: Argument 1 to "_try_sleep_until" of "Loop" has incompatible type "None"; expected "datetime[Any]"  [arg-type]
- discord/ext/tasks/__init__.py:225: error: Incompatible types in assignment (expression has type "None", variable has type "datetime")  [assignment]
+ discord/ext/tasks/__init__.py:225: error: Incompatible types in assignment (expression has type "None", variable has type "datetime[Any]")  [assignment]
- discord/ext/tasks/__init__.py:226: error: Incompatible types in assignment (expression has type "datetime", variable has type "None")  [assignment]
+ discord/ext/tasks/__init__.py:226: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "None")  [assignment]
- discord/ext/tasks/__init__.py:232: error: Unsupported operand types for >= ("datetime" and "None")  [operator]
+ discord/ext/tasks/__init__.py:232: error: No overload variant of "__ge__" of "datetime" matches argument type "None"  [operator]
+ discord/ext/tasks/__init__.py:232: note: Possible overload variants:
+ discord/ext/tasks/__init__.py:232: note:     def __ge__(self, datetime[tzinfo] | datetime[tzinfo | None], /) -> bool
+ discord/ext/tasks/__init__.py:232: note:     def __ge__(self, datetime[None] | datetime[tzinfo | None], /) -> bool
+ discord/ext/tasks/__init__.py:232: note:     def __ge__(self, datetime[Any], /) -> Never
- discord/ext/tasks/__init__.py:243: error: Argument 1 to "_try_sleep_until" of "Loop" has incompatible type "None"; expected "datetime"  [arg-type]
+ discord/ext/tasks/__init__.py:243: error: Argument 1 to "_try_sleep_until" of "Loop" has incompatible type "None"; expected "datetime[Any]"  [arg-type]
- discord/ext/tasks/__init__.py:244: error: Incompatible types in assignment (expression has type "datetime", variable has type "None")  [assignment]
+ discord/ext/tasks/__init__.py:244: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "None")  [assignment]
- discord/ext/tasks/__init__.py:267: error: Argument 1 to "_try_sleep_until" of "Loop" has incompatible type "None"; expected "datetime"  [arg-type]
+ discord/ext/tasks/__init__.py:267: error: Argument 1 to "_try_sleep_until" of "Loop" has incompatible type "None"; expected "datetime[Any]"  [arg-type]
- discord/ext/tasks/__init__.py:791: error: Incompatible types in assignment (expression has type "datetime", variable has type "None")  [assignment]
+ discord/ext/tasks/__init__.py:791: error: Incompatible types in assignment (expression has type "datetime[Any]", variable has type "None")  [assignment]
- discord/ext/tasks/__init__.py:794: error: Argument 1 to "recalculate" of "SleepHandle" has incompatible type "None"; expected "datetime"  [arg-type]
+ discord/ext/tasks/__init__.py:794: error: Argument 1 to "recalculate" of "SleepHandle" has incompatible type "None"; expected "datetime[Any]"  [arg-type]

psycopg (https://github.com/psycopg/psycopg)
+ psycopg/psycopg/types/datetime.py:574: error: Incompatible types in assignment (expression has type "datetime[None]", variable has type "datetime[tzinfo]")  [assignment]

pandera (https://github.com/pandera-dev/pandera)
- pandera/engines/pandas_engine.py:171: note:     def array(data: Sequence[Just[float] | str | datetime | datetime64[Any] | NaTType | None] | ndarray[tuple[Any, ...], dtype[Any]] | DatetimeArray, dtype: DatetimeTZDtype | Literal['datetime64[s, UTC]', 'datetime64[ms, UTC]', 'datetime64[us, UTC]', 'datetime64[ns, UTC]'] | dtype[datetime64[Any]] | Literal['datetime64[s]', 'datetime64[ms]', 'datetime64[us]', 'datetime64[ns]', 'M8[s]', 'M8[ms]', 'M8[us]', 'M8[ns]', '<M8[s]', '<M8[ms]', '<M8[us]', '<M8[ns]'] | dtype[datetime64[Any]], copy: bool = ...) -> DatetimeArray
+ pandera/engines/pandas_engine.py:171: note:     def array(data: Sequence[Just[float] | str | datetime[Any] | datetime64[Any] | NaTType | None] | ndarray[tuple[Any, ...], dtype[Any]] | DatetimeArray, dtype: DatetimeTZDtype | Literal['datetime64[s, UTC]', 'datetime64[ms, UTC]', 'datetime64[us, UTC]', 'datetime64[ns, UTC]'] | dtype[datetime64[Any]] | Literal['datetime64[s]', 'datetime64[ms]', 'datetime64[us]', 'datetime64[ns]', 'M8[s]', 'M8[ms]', 'M8[us]', 'M8[ns]', '<M8[s]', '<M8[ms]', '<M8[us]', '<M8[ns]'] | dtype[datetime64[Any]], copy: bool = ...) -> DatetimeArray
- pandera/engines/pandas_engine.py:171: note:     def array(data: Sequence[datetime | datetime64[Any] | NaTType | None] | ndarray[tuple[Any, ...], dtype[datetime64[Any]]] | DatetimeArray, dtype: None = ..., copy: bool = ...) -> DatetimeArray
+ pandera/engines/pandas_engine.py:171: note:     def array(data: Sequence[datetime[Any] | datetime64[Any] | NaTType | None] | ndarray[tuple[Any, ...], dtype[datetime64[Any]]] | DatetimeArray, dtype: None = ..., copy: bool = ...) -> DatetimeArray
- pandera/engines/pandas_engine.py:171: note:     def array(data: Sequence[datetime | datetime64[Any] | NaTType | None] | ndarray[tuple[Any, ...]

... (truncated 274 lines) ...

@srittau

srittau commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator Author

I think this is now in good shape. As far as I can see, the primer hits are now mostly either naive and tz-aware datetimes assigned to the same variable (which is churn, but unavoidable, and splitting is a good practice), and returning Any warnings due to datetime now being datetime[Any].

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Safer types for datetime

6 participants