Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to pyright==1.1.345 #8453

Merged
merged 10 commits into from Jan 12, 2024
Merged

Conversation

Viicos
Copy link
Contributor

@Viicos Viicos commented Dec 29, 2023

Required by #8237

Most of the changes are introduced by the new standard type checking mode.

One failure remains on:

class TypeAdapter(Generic[T]):
"""Type adapters provide a flexible way to perform validation and serialization based on a Python type.
A `TypeAdapter` instance exposes some of the functionality from `BaseModel` instance methods
for types that do not have such methods (such as dataclasses, primitive types, and more).
**Note:** `TypeAdapter` instances are not types, and cannot be used as type annotations for fields.
Attributes:
core_schema: The core schema for the type.
validator (SchemaValidator): The schema validator for the type.
serializer: The schema serializer for the type.
"""
if TYPE_CHECKING:
@overload
def __new__(cls, __type: type[T], *, config: ConfigDict | None = ...) -> TypeAdapter[T]:
...
# this overload is for non-type things like Union[int, str]
# Pyright currently handles this "correctly", but MyPy understands this as TypeAdapter[object]
# so an explicit type cast is needed
@overload
def __new__(cls, __type: T, *, config: ConfigDict | None = ...) -> TypeAdapter[T]:
...
def __new__(cls, __type: Any, *, config: ConfigDict | None = None) -> TypeAdapter[T]:
"""A class representing the type adapter."""
raise NotImplementedError
@overload
def __init__(
self, type: type[T], *, config: ConfigDict | None = None, _parent_depth: int = 2, module: str | None = None
) -> None:
...
# this overload is for non-type things like Union[int, str]
# Pyright currently handles this "correctly", but MyPy understands this as TypeAdapter[object]
# so an explicit type cast is needed
@overload
def __init__(
self, type: T, *, config: ConfigDict | None = None, _parent_depth: int = 2, module: str | None = None
) -> None:
...

As described by the comment, pyright handles it currently and doesn't need the extra overload, hence the emitted diagnostic:

error: Overload 2 for "__new__" will never be used because its parameters overlap overload 1 (reportOverlappingOverload)

This can be fixed by adding an if MYPY block, but first I think we can remove one of the overload set (either __init__ or __new__), I don't know if it makes much sense to have both defined (apart from IDE support, but in that case we can keep only the __init__ overload set defined).

Edit: went for __init__ and special cased mypy.

Selected Reviewer: @hramezani

Copy link

codspeed-hq bot commented Dec 29, 2023

CodSpeed Performance Report

Merging #8453 will not alter performance

Comparing Viicos:update-pyright-343 (bc9fe04) with main (da468c4)

Summary

✅ 10 untouched benchmarks

@Viicos Viicos changed the title Update to pyright==1.1.343 Update to pyright==1.1.344 Dec 30, 2023
@Viicos
Copy link
Contributor Author

Viicos commented Jan 3, 2024

This can be fixed by adding an if MYPY block, but first I think we can remove one of the overload set (either __init__ or __new__), I don't know if it makes much sense to have both defined (apart from IDE support, but in that case we can keep only the __init__ overload set defined).

Edit: went for __init__ and special cased mypy.

Actually, an if MYPY block isn't special cased by pyright (a workaround is available here, but does not apply to library code).

I think the best thing would be to remove mypy support here. The following comment:

# this overload is for non-type things like Union[int, str]
# Pyright currently handles this "correctly", but MyPy understands this as TypeAdapter[object]
# so an explicit type cast is needed
@overload
def __new__(cls, __type: T, *, config: ConfigDict | None = ...) -> TypeAdapter[T]:

seems outdated/incorrect, as the second overload also makes mypy understand it as TypeAdapter[object] (see playground).

Without the second overload (so only type[T] for the type argument), mypy raises a weird issue (playground).

I wonder if this could be clarified in the typing spec, as Union is a special form meant to be used in annotations, not as values (see also python/mypy#9773).

In the meanwhile, the last commit pushed removed support for mypy.

@Viicos
Copy link
Contributor Author

Viicos commented Jan 3, 2024

Please review

@sydney-runkle sydney-runkle added the relnotes-packaging Used for dependency changes. label Jan 9, 2024
@Viicos Viicos changed the title Update to pyright==1.1.344 Update to pyright==1.1.345 Jan 9, 2024
Copy link
Member

@sydney-runkle sydney-runkle left a comment

Choose a reason for hiding this comment

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

Looks good overall, thank you!

Going to consult with the team re your questions for TypeAdapter


@classmethod
def model_construct(cls: type[Model], root: RootModelRootType, _fields_set: set[str] | None = None) -> Model:
def model_construct(cls: type[Model], root: RootModelRootType, _fields_set: set[str] | None = None) -> Model: # type: ignore
Copy link
Member

Choose a reason for hiding this comment

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

What's the problem here / what error is raised?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Method "model_construct" overrides class "BaseModel" in an incompatible manner, due to the fact that reportIncompatibleMethodOverride was recently reported by default to be compliant with the typing spec.

Comment on lines -125 to -127
@overload
def __new__(cls, __type: type[T], *, config: ConfigDict | None = ...) -> TypeAdapter[T]:
...
Copy link
Member

Choose a reason for hiding this comment

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

Don't we basically loose all typing for TypeAdapter(int) by doing this?

def __init__(
self, type: Any, *, config: ConfigDict | None = None, _parent_depth: int = 2, module: str | None = None
self,
type: type[T],
Copy link
Member

@adriangb adriangb Jan 10, 2024

Choose a reason for hiding this comment

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

Does this work now? What about passing in int | str with mypy as per comment above?

Copy link
Member

Choose a reason for hiding this comment

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

Following up, this doesn't work:

from pydantic import TypeAdapter

from typing import Union

adapter: TypeAdapter[Union[int, str]] = TypeAdapter(Union[int, str])

-->

test.py:5: error: Argument 1 to "TypeAdapter" has incompatible type "object"; expected "Union[Type[int], Type[str]]"  [arg-type]
Found 1 error in 1 file (checked 1 source file)

Copy link
Member

Choose a reason for hiding this comment

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

@Viicos,

Is there any downside of leaving the above overloads within the if TYPE_CHECKING block? I think it'd be preferred to leave those in place.

@Viicos
Copy link
Contributor Author

Viicos commented Jan 11, 2024

Regarding TypeAdapter:

The current implementation is making use of __new__ and __init__ at the same time, which is currently unspecified in the typing spec and leads to different behaviors between pyright and mypy. Afaik pyright will make use of the __new__ return type annotation but will try to use the __init__ signature regarding arguments. mypy seems to discards the __new__ method in our case. The __new__ method also seems to be missing some arguments with respect to __init__.

Now regarding the overload for the type argument, the following comment:

# this overload is for non-type things like Union[int, str]
# Pyright currently handles this "correctly", but MyPy understands this as TypeAdapter[object]
# so an explicit type cast is needed
@overload
def __new__(cls, __type: T, *, config: ConfigDict | None = ...) -> TypeAdapter[T]:

seems incorrect: according to this comment, having only the first overload (with type: type[T]) will make mypy infer TypeAdapter(Union[int, str]) as TypeAdapter[object]. In reality, it doesn't infer anything, and throws a weird error (playground).

Having the second overload added is what actually makes mypy infer TypeAdapter(Union[str, int]) as TypeAdapter[object], which isn't ideal but still better than the previous error (playground). This also means that:

Following up, this doesn't work:

from pydantic import TypeAdapter

from typing import Union

adapter: TypeAdapter[Union[int, str]] = TypeAdapter(Union[int, str])

in fact never worked, even with the current implementation (in the last linked playground, you can try explicitly annotating a to TypeAdapter[Union[int, str]], you will get the same error).

However, I think the best solution would be:
I add back the overload with type: T, and ignore the pyright overlap issue. That way people can still do the following in mypy:

adapter: TypeAdapter[Union[int, str]] = TypeAdapter(Union[int, str])  # type: ignore[arg-type]
reveal_type(adapter)  # Revealed type is "__main__.TypeAdapter[Union[builtins.str, builtins.int]]"

Don't we basically loose all typing for TypeAdapter(int) by doing this?

There is actually no need to add __new__ overloads for our use case, type checkers will infer the type variable from the provided argument at instantiation. Not making use of __new__ also allows subclassing TypeAdapter and having the correct class inferred. You can see how it plays in pyright and mypy.

So long story short I think I just need to add an extra __init__ overload and it should be alright?

@adriangb
Copy link
Member

Could you make a matrix of what does and doesn’t work with type adapter before and after this PR? We need to look at type checke and type/union.

@Viicos
Copy link
Contributor Author

Viicos commented Jan 12, 2024

This is the current state with the last changes pushed:

Use case Before After Notes
reveal_type(TypeAdapter(int)) mypy: TypeAdapter[int]pyright: TypeAdapter[int] mypy : TypeAdapter[int]pyright : TypeAdapter[int]
reveal_type(TypeAdapter(Union[str, int])) mypy: TypeAdapter[object]pyright: TypeAdapter[str | int] mypy : TypeAdapter[object]pyright : TypeAdapter[str | int] Explicitly annotating to TypeAdapter[Union[str, int]] can be used as a workaround for mypy, but you will need to add a # type: ignore comment
class Sub(TypeAdapter[T]): pass; reveal_type(Sub(int)) mypy: Sub[int]pyright: TypeAdapter[int] mypy : Sub[int]pyright : Sub[int]

I've updated the docstring as well

@adriangb
Copy link
Member

It looks like the only thing that is improved is the last use case, which imo we don’t want to accidentally support, so I would suggest making the class final if we move forward with this change.

@Viicos
Copy link
Contributor Author

Viicos commented Jan 12, 2024

It looks like the only thing that is improved is the last use case

From a user perspective yes, and on the other hand this cleans up the usage of __new__ and __init__ which wasn't necessary.

which imo we don’t want to accidentally support, so I would suggest making the class final if we move forward with this change.

What are your concerns on this use case? I think people might want to create subclasses to change some method signature defaults for example.

A quick search shows only one result though, so annotating it as final probably won't break a lot of existing code

@adriangb
Copy link
Member

Yes I’m not saying it’s a bad change if it doesn’t deteriorate an existing use case. I do want to be clear about what the advantages are.

After working on a project as widely used as Pydantic you realize that if someone can they will, and you end up having to support use cases you never imagined in the name of backwards compatibility. So for now I’d mark it as final since it wasn’t really safely subclassable before.

@Viicos
Copy link
Contributor Author

Viicos commented Jan 12, 2024

After working on a project as widely used as Pydantic you realize that if someone can they will, and you end up having to support use cases you never imagined in the name of backwards compatibility. So for now I’d mark it as final since it wasn’t really safely subclassable before.

That's understandable! Anyway this will only be enforced at the typing level, and I feel it's a good way to "warn" users they are using an unsupported feature, and if they want to proceed they'll need to add a type: ignore comment

@sydney-runkle
Copy link
Member

@Viicos, LGTM once you fix the ruff issues causing the tests to fail.

@Viicos
Copy link
Contributor Author

Viicos commented Jan 12, 2024

LGTM once you fix the ruff issues causing the tests to fail.

Yeah I'm not sure what's happening here, I've added a test="skip" directive but it seems to be tested still. I'll fix the example, might be easier

Copy link
Member

@sydney-runkle sydney-runkle left a comment

Choose a reason for hiding this comment

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

🚀

@sydney-runkle sydney-runkle merged commit 953bbea into pydantic:main Jan 12, 2024
54 checks passed
@Viicos Viicos deleted the update-pyright-343 branch January 12, 2024 14:11
jsuchenia pushed a commit to jsuchenia/adventofcode that referenced this pull request Feb 13, 2024
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [pydantic](https://github.com/pydantic/pydantic) ([changelog](https://docs.pydantic.dev/latest/changelog/)) | dependencies | minor | `2.5.3` -> `2.6.1` |

---

### Release Notes

<details>
<summary>pydantic/pydantic (pydantic)</summary>

### [`v2.6.1`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v261-2024-02-05)

[Compare Source](pydantic/pydantic@v2.6.0...v2.6.1)

[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.6.1)

##### What's Changed

##### Packaging

-   Upgrade to `pydantic-core` 2.16.2 by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8717](pydantic/pydantic#8717)

##### Fixes

-   Fix bug with `mypy` plugin and `no_strict_optional = True` by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;8666](pydantic/pydantic#8666)
-   Fix `ByteSize` error `type` change by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8681](pydantic/pydantic#8681)
-   Fix inheriting `Field` annotations in dataclasses by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8679](pydantic/pydantic#8679)
-   Fix regression in core schema generation for indirect definition references by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;8702](pydantic/pydantic#8702)
-   Fix unsupported types bug with `PlainValidator` by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8710](pydantic/pydantic#8710)
-   Reverting problematic fix from 2.6 release, fixing schema building bug by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8718](pydantic/pydantic#8718)
-   Fix warning for tuple of wrong size in `Union` by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic/pydantic-core#1174](pydantic/pydantic-core#1174)
-   Fix `computed_field` JSON serializer `exclude_none` behavior by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1187](pydantic/pydantic-core#1187)

### [`v2.6.0`](https://github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v260-2024-01-23)

[Compare Source](pydantic/pydantic@v2.5.3...v2.6.0)

[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.6.0)

The code released in v2.6.0 is practically identical to that of v2.6.0b1.

##### What's Changed

##### Packaging

-   Check for `email-validator` version >= 2.0 by [@&#8203;commonism](https://github.com/commonism) in [#&#8203;6033](pydantic/pydantic#6033)
-   Upgrade \`ruff\`\` target version to Python 3.8 by [@&#8203;Elkiwa](https://github.com/Elkiwa) in [#&#8203;8341](pydantic/pydantic#8341)
-   Update to `pydantic-extra-types==2.4.1` by [@&#8203;yezz123](https://github.com/yezz123) in [#&#8203;8478](pydantic/pydantic#8478)
-   Update to `pyright==1.1.345` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;8453](pydantic/pydantic#8453)
-   Update pydantic-core from 2.14.6 to 2.16.1, significant changes from these updates are described below, full changelog [here](pydantic/pydantic-core@v2.14.6...v2.16.1)

##### New Features

-   Add `NatsDsn` by [@&#8203;ekeew](https://github.com/ekeew) in [#&#8203;6874](pydantic/pydantic#6874)
-   Add `ConfigDict.ser_json_inf_nan` by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [#&#8203;8159](pydantic/pydantic#8159)
-   Add `types.OnErrorOmit` by [@&#8203;adriangb](https://github.com/adriangb) in [#&#8203;8222](pydantic/pydantic#8222)
-   Support `AliasGenerator` usage by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8282](pydantic/pydantic#8282)
-   Add Pydantic People Page to docs by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8345](pydantic/pydantic#8345)
-   Support `yyyy-MM-DD` datetime parsing by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8404](pydantic/pydantic#8404)
-   Added bits conversions to the `ByteSize` class [#&#8203;8415](pydantic/pydantic#8415) by [@&#8203;luca-matei](https://github.com/luca-matei) in [#&#8203;8507](pydantic/pydantic#8507)
-   Enable json schema creation with type `ByteSize` by [@&#8203;geospackle](https://github.com/geospackle) in [#&#8203;8537](pydantic/pydantic#8537)
-   Add `eval_type_backport` to handle union operator and builtin generic subscripting in older Pythons by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;8209](pydantic/pydantic#8209)
-   Add support for `dataclass` fields `init` by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;8552](pydantic/pydantic#8552)
-   Implement pickling for `ValidationError` by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic/pydantic-core#1119](pydantic/pydantic-core#1119)
-   Add unified tuple validator that can handle "variadic" tuples via PEP-646 by [@&#8203;dmontagu](https://github.com/dmontagu) in [pydantic/pydantic-core#865](pydantic/pydantic-core#865)

##### Changes

-   Drop Python3.7 support by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;7188](pydantic/pydantic#7188)
-   Drop Python 3.7, and PyPy 3.7 and 3.8 by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic/pydantic-core#1129](pydantic/pydantic-core#1129)
-   Use positional-only `self` in `BaseModel` constructor, so no field name can ever conflict with it by [@&#8203;ariebovenberg](https://github.com/ariebovenberg) in [#&#8203;8072](pydantic/pydantic#8072)
-   Make `@validate_call` return a function instead of a custom descriptor - fixes binding issue with inheritance and adds `self/cls` argument to validation errors by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;8268](pydantic/pydantic#8268)
-   Exclude `BaseModel` docstring from JSON schema description by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8352](pydantic/pydantic#8352)
-   Introducing `classproperty` decorator for `model_computed_fields` by [@&#8203;Jocelyn-Gas](https://github.com/Jocelyn-Gas) in [#&#8203;8437](pydantic/pydantic#8437)
-   Explicitly raise an error if field names clashes with types by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;8243](pydantic/pydantic#8243)
-   Use stricter serializer for unions of simple types by [@&#8203;alexdrydew](https://github.com/alexdrydew) [pydantic/pydantic-core#1132](pydantic/pydantic-core#1132)

##### Performance

-   Add Codspeed profiling Actions workflow  by [@&#8203;lambertsbennett](https://github.com/lambertsbennett) in [#&#8203;8054](pydantic/pydantic#8054)
-   Improve `int` extraction by [@&#8203;samuelcolvin](https://github.com/samuelcolvin) in [pydantic/pydantic-core#1155](pydantic/pydantic-core#1155)
-   Improve performance of recursion guard by [@&#8203;samuelcolvin](https://github.com/samuelcolvin) in [pydantic/pydantic-core#1156](pydantic/pydantic-core#1156)
-   `dataclass` serialization speedups by [@&#8203;samuelcolvin](https://github.com/samuelcolvin) in [pydantic/pydantic-core#1162](pydantic/pydantic-core#1162)
-   Avoid `HashMap` creation when looking up small JSON objects in `LazyIndexMaps` by [@&#8203;samuelcolvin](https://github.com/samuelcolvin) in [pydantic/jiter#55](pydantic/jiter#55)
-   use hashbrown to speedup python string caching by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic/jiter#51](pydantic/jiter#51)
-   Replace `Peak` with more efficient `Peek` by [@&#8203;davidhewitt](https://github.com/davidhewitt) in [pydantic/jiter#48](pydantic/jiter#48)

##### Fixes

-   Move `getattr` warning in deprecated `BaseConfig` by [@&#8203;tlambert03](https://github.com/tlambert03) in [#&#8203;7183](pydantic/pydantic#7183)
-   Only hash `model_fields`, not whole `__dict__` by [@&#8203;alexmojaki](https://github.com/alexmojaki) in [#&#8203;7786](pydantic/pydantic#7786)
-   Fix mishandling of unions while freezing types in the `mypy` plugin by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;7411](pydantic/pydantic#7411)
-   Fix `mypy` error on untyped `ClassVar` by [@&#8203;vincent-hachin-wmx](https://github.com/vincent-hachin-wmx) in [#&#8203;8138](pydantic/pydantic#8138)
-   Only compare pydantic fields in `BaseModel.__eq__` instead of whole `__dict__` by [@&#8203;QuentinSoubeyranAqemia](https://github.com/QuentinSoubeyranAqemia) in [#&#8203;7825](pydantic/pydantic#7825)
-   Update `strict` docstring in `model_validate` method. by [@&#8203;LukeTonin](https://github.com/LukeTonin) in [#&#8203;8223](pydantic/pydantic#8223)
-   Fix overload position of `computed_field` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;8227](pydantic/pydantic#8227)
-   Fix custom type type casting used in multiple attributes by [@&#8203;ianhfc](https://github.com/ianhfc) in [#&#8203;8066](pydantic/pydantic#8066)
-   Fix issue not allowing `validate_call` decorator to be dynamically assigned to a class method by [@&#8203;jusexton](https://github.com/jusexton) in [#&#8203;8249](pydantic/pydantic#8249)
-   Fix issue `unittest.mock` deprecation warnings  by [@&#8203;ibleedicare](https://github.com/ibleedicare) in [#&#8203;8262](pydantic/pydantic#8262)
-   Added tests for the case `JsonValue` contains subclassed primitive values by [@&#8203;jusexton](https://github.com/jusexton) in [#&#8203;8286](pydantic/pydantic#8286)
-   Fix `mypy` error on free before validator (classmethod) by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8285](pydantic/pydantic#8285)
-   Fix `to_snake` conversion by [@&#8203;jevins09](https://github.com/jevins09) in [#&#8203;8316](pydantic/pydantic#8316)
-   Fix type annotation of `ModelMetaclass.__prepare__` by [@&#8203;slanzmich](https://github.com/slanzmich) in [#&#8203;8305](pydantic/pydantic#8305)
-   Disallow `config` specification when initializing a `TypeAdapter` when the annotated type has config already by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8365](pydantic/pydantic#8365)
-   Fix a naming issue with JSON schema for generics parametrized by recursive type aliases by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;8389](pydantic/pydantic#8389)
-   Fix type annotation in pydantic people script by [@&#8203;shenxiangzhuang](https://github.com/shenxiangzhuang) in [#&#8203;8402](pydantic/pydantic#8402)
-   Add support for field `alias` in `dataclass` signature by [@&#8203;NeevCohen](https://github.com/NeevCohen) in [#&#8203;8387](pydantic/pydantic#8387)
-   Fix bug with schema generation with `Field(...)` in a forward ref by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;8494](pydantic/pydantic#8494)
-   Fix ordering of keys in `__dict__` with `model_construct` call by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8500](pydantic/pydantic#8500)
-   Fix module `path_type` creation when globals does not contain `__name__` by [@&#8203;hramezani](https://github.com/hramezani) in [#&#8203;8470](pydantic/pydantic#8470)
-   Fix for namespace issue with dataclasses with `from __future__ import annotations` by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8513](pydantic/pydantic#8513)
-   Fix: make function validator types positional-only by [@&#8203;pmmmwh](https://github.com/pmmmwh) in [#&#8203;8479](pydantic/pydantic#8479)
-   Fix usage of `@deprecated` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;8294](pydantic/pydantic#8294)
-   Add more support for private attributes in `model_construct` call by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8525](pydantic/pydantic#8525)
-   Use a stack for the types namespace by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;8378](pydantic/pydantic#8378)
-   Fix schema-building bug with `TypeAliasType` for types with refs by [@&#8203;dmontagu](https://github.com/dmontagu) in [#&#8203;8526](pydantic/pydantic#8526)
-   Support `pydantic.Field(repr=False)` in dataclasses by [@&#8203;tigeryy2](https://github.com/tigeryy2) in [#&#8203;8511](pydantic/pydantic#8511)
-   Override `dataclass_transform` behavior for `RootModel` by [@&#8203;Viicos](https://github.com/Viicos) in [#&#8203;8163](pydantic/pydantic#8163)
-   Refactor signature generation for simplicity by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [#&#8203;8572](pydantic/pydantic#8572)
-   Fix ordering bug of PlainValidator annotation by [@&#8203;Anvil](https://github.com/Anvil) in [#&#8203;8567](pydantic/pydantic#8567)
-   Fix `exclude_none` for json serialization of `computed_field`s by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1098](pydantic/pydantic-core#1098)
-   Support yyyy-MM-DD string for datetimes by [@&#8203;sydney-runkle](https://github.com/sydney-runkle) in [pydantic/pydantic-core#1124](pydantic/pydantic-core#1124)
-   Tweak ordering of definitions in generated schemas by [@&#8203;StrawHatDrag0n](https://github.com/StrawHatDrag0n) in [#&#8203;8583](pydantic/pydantic#8583)

##### New Contributors

##### `pydantic`

-   [@&#8203;ekeew](https://github.com/ekeew) made their first contribution in [#&#8203;6874](pydantic/pydantic#6874)
-   [@&#8203;lambertsbennett](https://github.com/lambertsbennett) made their first contribution in [#&#8203;8054](pydantic/pydantic#8054)
-   [@&#8203;vincent-hachin-wmx](https://github.com/vincent-hachin-wmx) made their first contribution in [#&#8203;8138](pydantic/pydantic#8138)
-   [@&#8203;QuentinSoubeyranAqemia](https://github.com/QuentinSoubeyranAqemia) made their first contribution in [#&#8203;7825](pydantic/pydantic#7825)
-   [@&#8203;ariebovenberg](https://github.com/ariebovenberg) made their first contribution in [#&#8203;8072](pydantic/pydantic#8072)
-   [@&#8203;LukeTonin](https://github.com/LukeTonin) made their first contribution in [#&#8203;8223](pydantic/pydantic#8223)
-   [@&#8203;denisart](https://github.com/denisart) made their first contribution in [#&#8203;8231](pydantic/pydantic#8231)
-   [@&#8203;ianhfc](https://github.com/ianhfc) made their first contribution in [#&#8203;8066](pydantic/pydantic#8066)
-   [@&#8203;eonu](https://github.com/eonu) made their first contribution in [#&#8203;8255](pydantic/pydantic#8255)
-   [@&#8203;amandahla](https://github.com/amandahla) made their first contribution in [#&#8203;8263](pydantic/pydantic#8263)
-   [@&#8203;ibleedicare](https://github.com/ibleedicare) made their first contribution in [#&#8203;8262](pydantic/pydantic#8262)
-   [@&#8203;jevins09](https://github.com/jevins09) made their first contribution in [#&#8203;8316](pydantic/pydantic#8316)
-   [@&#8203;cuu508](https://github.com/cuu508) made their first contribution in [#&#8203;8322](pydantic/pydantic#8322)
-   [@&#8203;slanzmich](https://github.com/slanzmich) made their first contribution in [#&#8203;8305](pydantic/pydantic#8305)
-   [@&#8203;jensenbox](https://github.com/jensenbox) made their first contribution in [#&#8203;8331](pydantic/pydantic#8331)
-   [@&#8203;szepeviktor](https://github.com/szepeviktor) made their first contribution in [#&#8203;8356](pydantic/pydantic#8356)
-   [@&#8203;Elkiwa](https://github.com/Elkiwa) made their first contribution in [#&#8203;8341](pydantic/pydantic#8341)
-   [@&#8203;parhamfh](https://github.com/parhamfh) made their first contribution in [#&#8203;8395](pydantic/pydantic#8395)
-   [@&#8203;shenxiangzhuang](https://github.com/shenxiangzhuang) made their first contribution in [#&#8203;8402](pydantic/pydantic#8402)
-   [@&#8203;NeevCohen](https://github.com/NeevCohen) made their first contribution in [#&#8203;8387](pydantic/pydantic#8387)
-   [@&#8203;zby](https://github.com/zby) made their first contribution in [#&#8203;8497](pydantic/pydantic#8497)
-   [@&#8203;patelnets](https://github.com/patelnets) made their first contribution in [#&#8203;8491](pydantic/pydantic#8491)
-   [@&#8203;edwardwli](https://github.com/edwardwli) made their first contribution in [#&#8203;8503](pydantic/pydantic#8503)
-   [@&#8203;luca-matei](https://github.com/luca-matei) made their first contribution in [#&#8203;8507](pydantic/pydantic#8507)
-   [@&#8203;Jocelyn-Gas](https://github.com/Jocelyn-Gas) made their first contribution in [#&#8203;8437](pydantic/pydantic#8437)
-   [@&#8203;bL34cHig0](https://github.com/bL34cHig0) made their first contribution in [#&#8203;8501](pydantic/pydantic#8501)
-   [@&#8203;tigeryy2](https://github.com/tigeryy2) made their first contribution in [#&#8203;8511](pydantic/pydantic#8511)
-   [@&#8203;geospackle](https://github.com/geospackle) made their first contribution in [#&#8203;8537](pydantic/pydantic#8537)
-   [@&#8203;Anvil](https://github.com/Anvil) made their first contribution in [#&#8203;8567](pydantic/pydantic#8567)
-   [@&#8203;hungtsetse](https://github.com/hungtsetse) made their first contribution in [#&#8203;8546](pydantic/pydantic#8546)
-   [@&#8203;StrawHatDrag0n](https://github.com/StrawHatDrag0n) made their first contribution in [#&#8203;8583](pydantic/pydantic#8583)

##### `pydantic-core`

-   [@&#8203;mariuswinger](https://github.com/mariuswinger) made their first contribution in [pydantic/pydantic-core#1087](pydantic/pydantic-core#1087)
-   [@&#8203;adamchainz](https://github.com/adamchainz) made their first contribution in [pydantic/pydantic-core#1090](pydantic/pydantic-core#1090)
-   [@&#8203;akx](https://github.com/akx) made their first contribution in [pydantic/pydantic-core#1123](pydantic/pydantic-core#1123)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMzAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEzMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIn0=-->

Reviewed-on: https://git.apud.pl/jacek/adventofcode/pulls/57
Co-authored-by: Renovate <renovate@apud.pl>
Co-committed-by: Renovate <renovate@apud.pl>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ready for review relnotes-packaging Used for dependency changes.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants