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

Fix type annotation of ModelMetaclass.__prepare__ #8305

Merged

Conversation

slanzmich
Copy link
Contributor

@slanzmich slanzmich commented Dec 5, 2023

Change Summary

This fixes a type annotation that was fixed in the typeshed in python/typeshed#11093. type.__prepare__ (and thus ModelMetaclass.__prepare__) must return a mutable mapping. This is because during class creation, that namespace is populated when the class body is executed.

Related issue number

As this change looks rather trivial, I have not created an issue.

Checklist

  • The pull request title is a good summary of the changes - it will be used in the changelog
  • Unit tests for the changes exist
  • Tests pass on CI
  • Documentation reflects the changes where applicable
  • My PR is ready to review, please add a comment including the phrase "please review" to assign reviewers

Selected Reviewer: @hramezani

@slanzmich
Copy link
Contributor Author

I'm not too familiar with how quickly changes from the typeshed end up in the static type checkers, though. Other than that this is ready, please review.

Copy link

codspeed-hq bot commented Dec 5, 2023

CodSpeed Performance Report

Merging #8305 will not alter performance

Comparing slanzmich:fix-modelmetaclass-prepare-annotation (ff4bb7d) with main (20c0c6d)

Summary

✅ 10 untouched benchmarks

@@ -216,7 +216,7 @@ def __getattr__(self, item: str) -> Any:
raise AttributeError(item)

@classmethod
def __prepare__(cls, *args: Any, **kwargs: Any) -> Mapping[str, object]:
def __prepare__(cls, *args: Any, **kwargs: Any) -> MutableMapping[str, object]:
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
def __prepare__(cls, *args: Any, **kwargs: Any) -> MutableMapping[str, object]:
def __prepare__(cls, *args: Any, **kwargs: Any) -> _ModelNamespaceDict:

And make _ModelNamespaceDict parametrized? Could be _ModelNamespaceDict(dict[str, object]) but that doesn't play nice with Python < 3.10, so maybe something like _ModelNamespaceDict(dict, typing.MutableMapping[str, object])?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

from typing import MutableMapping

class D(dict, MutableMapping[str, float]):
    pass

d = D()
d["k"] = 100
d[2] = 20

does not seem to work, mypy finds no issue with that, while it complains as expected for

class D(dict[str, float]):
    pass

d = D()
d["k"] = 100
d[2] = 20

dict[str, object] works starting with Python 3.9, but not 3.8, which is still supported by pydantic.

Copy link
Contributor

@Viicos Viicos Dec 5, 2023

Choose a reason for hiding this comment

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

Hum too bad. Subclassing typing.Dict seems to work, although I haven't seen it used this way a lot through Python code. What do you think?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I agree, inheriting from typing.Dict works and is probably fine.

After being no longer distracted by this technical issue, I'm wondering whether it makes sense to annotate the return type with a private class, though. Except for the warning, the object returned from __prepare__ will behave exactly like Dict[str, object].

ModelMetaclass is somewhat public (it is type(pydantic.BaseModel)), my gut feeling would be that this exposes a private class.

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeah you're probably right, usually the return type hint should reflect precisely the actual type being returned (e.g. type hint list instead of Sequence) but here it makes more sense.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sorry, I'm not too familiar with the code base, so I only noticed this now: _model_construction.py already uses PEP 585 type annotations. For consistency, I assume we can annotate the return type as dict[str, object] without using typing.Dict.

@Viicos
Copy link
Contributor

Viicos commented Dec 5, 2023

I'm not too familiar with how quickly changes from the typeshed end up in the static type checkers, though.

pyright is checked on CI, and we should expect a new release very soon (probably before next week).

During class creation, the namespace returned by `__prepare__` is
populated when the class body is executed. Therefore, it must be
mutable.

The previous, incorrect annotation was fixed in the typeshed in
python/typeshed#11093
@slanzmich slanzmich force-pushed the fix-modelmetaclass-prepare-annotation branch from bc83af9 to ff4bb7d Compare December 6, 2023 08:05
@sydney-runkle sydney-runkle added the relnotes-fix Used for bugfixes. label Dec 7, 2023
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.

@slanzmich,

Looks great, thanks for your contribution! :)

@Viicos, Is it alright if we go ahead and merge this, or do we need to wait on the update to pyright?

@Viicos
Copy link
Contributor

Viicos commented Dec 7, 2023

Pyright got updated to 1.1.339 yesterday but typeshed doesn't seem to have been synced in this release. I think it's still fine to merge, pyright can be updated later once a version ships with the typeshed changes

@sydney-runkle sydney-runkle merged commit d7ab7d6 into pydantic:main Dec 7, 2023
54 of 55 checks passed
@slanzmich slanzmich deleted the fix-modelmetaclass-prepare-annotation branch December 11, 2023 14:24
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
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants