Jonas L.
63ff50b82c
feat: rename airtime-pypo exchange to playout ( #3170 )
...
### Description
The playout exchange was changed to `fanout` without migrating the
previous `direct` exchange. This cause issues during upgrades, such as:
```
amqp.exceptions.PreconditionFailed: Exchange.declare: (406) PRECONDITION_FAILED - inequivalent arg 'type' for exchange 'airtime-pypo' in vhost '/libretime': received 'fanout' but current is 'direct'
```
This is documented upstream in
https://www.rabbitmq.com/docs/queues#property-equivalence
This change provides an upgrade path by renaming the exchange, and leave
the old exchange behind. Loosing messages is not a concern for the
playout queue.
### Testing Notes
- Checkout version `4.4.0`
- Run `make dev`
- Checkout 9e55d3bb6f2fa0f9a4dc858359a99e9d50c826a4
- Run `make dev`
- See the exception in playout: `docker compose logs -f playout`
- Checkout this PR
- Run `make dev`
- See playout fine working.
### **Links**
https://github.com/libretime/libretime/pull/3161
2025-06-14 17:56:21 +02:00
dakriy
0b02ebf1b6
feat(playout): don't clear liquidsoap queue on liquidsoap startup ( #3163 )
...
### Description
When liquidsoap starts, it sends an API request to the legacy API which
triggers a rabbitmq message to the playout service to update the
liquidsoap queues and make sure they are correct. The removed line is
not necessary and will cause issues if there is more than one liquidsoap
service. It is not necessary because the playout service automatically
prunes the queue and will add/remove only what is necessary and does not
require the whole queue to be cleared. If the whole queue is cleared and
there are multiple liquid soap services, every LQ service will go silent
and then fade to normal volume in the middle of playout. Removing this
line has no logical effect as all the work it does is immediately redone
and removal fixes the re-cue-in issue when you have multiple liquidsoap
services all running playout.
So, this line in the best of cases is useless and does nothing, and in
the worst of cases causes playout issues, hence its removal.
**This is a new feature**:
No
**I have updated the documentation to reflect these changes**:
Bug fix
### Testing Notes
**What I did:**
I setup multiple playout/liquidsoap service pairs, and heard that when
one is restarted all of them go quiet and fade in from their current
play cursor. I then made the change and verified that only the restarted
service faded in.
**How you can replicate my testing:**
See above section
### **Links**
Related to #3161 and #3162
2025-06-14 17:56:06 +02:00
Jonas L.
f33518d637
fix: remove potential deadlock in liquidsoap client ( #3165 )
...
### Description
Remove the liquidsoap connection lock to remove any chance to run into a
deadlock. With this change, the client is not thread safe anymore.
Also handle connection error exception when talking to liquidsoap, e.g.
when liquidsoap is restarted and closes the telnet connection.
**This is a new feature**:
No
**I have updated the documentation to reflect these changes**:
Not relevant.
### Testing Notes
- Restart liquidsoap while playout is talking to it.
- See the connection being dropped and playout that might run into a
deadlock.
2025-06-14 15:45:54 +02:00
Jonas L.
6588eb0939
refactor(playout): revert prefer datetime.now(timezone.utc) over datetime.utcnow() ( #3169 )
...
This reverts commit 8bd2db16617bb90d9a3b00ec48a8836a6bafa4f1.
The API does not support timezone aware query parameters.
2025-06-14 15:16:47 +02:00
Jonas L.
908d54805a
fix(playout): invalid input source disconnect command send to liquidsoap ( #3166 )
...
### Description
The `source_disconnect` method in the liquidsoap client was still using
the old names of the 2 harbor input (currently named input_main and
input_show).
Remove the `source_disconnect` method, in favor of the
`source_switch_status` method, to have a single source name mapping
between playout and liquidsoap.
This is a missing update from a refactor made a while ago:
2f9f60e639f13854094abb0f43730aebc9c89cee
### **Links**
Potential fix for https://github.com/libretime/libretime/issues/2796
2025-06-14 13:56:16 +02:00
Jonas L.
8bd2db1661
refactor(playout): prefer datetime.now(timezone.utc) over datetime.utcnow() ( #3167 )
...
### Description
`datetime.utcnow()` is deprecated in favor of
`datetime.now(timezone.utc)`.
See
https://docs.python.org/3/library/datetime.html#datetime.datetime.utcnow
2025-06-14 13:55:26 +02:00
dakriy
d7987bb4ef
fix: when metadata has a newline playout stops ( #3160 )
...
### Description
If the title or artist metadata in libretime has a newline, that file is
not played as telnet takes the newline as a command enter in the middle
of the command.
**This is a new feature**:
No
**I have updated the documentation to reflect these changes**:
No
### Testing Notes
**What I did:**
I spun up a fresh local LibreTime instance, uploaded a track with a
newline in the creator field. I then created a show and added the track
to the show and verified that the track did not play with error:
```
playout-1 | 2025-06-06 17:41:49,888 | ERROR | libretime_playout.liquidsoap.client._client:_set_var:50 - ERROR: unknown command, type "help" to get a list of commands.
```
I then added my fix and verified that the track did play as it was
supposed to.
**How you can replicate my testing:**
See the above section
---------
Co-authored-by: jo <ljonas@riseup.net>
2025-06-08 16:54:21 +02:00
dakriy
9e55d3bb6f
feat: use fanout queue type for playout queue ( #3161 )
...
### Description
Currently, only one service can listen to libretime schedule change
events. This change allows for as many services as desired to listen for
schedule change events.
**This is a new feature**:
Yes
**I have updated the documentation to reflect these changes**:
No, as this seems like the obvious default
### Testing Notes
**What I did:**
I created 2 playout blocks, connected them both to the fanout queue and
saw that they could all connect and receive schedule change events at
the same time.
**How you can replicate my testing:**
See testing notes
2025-06-07 05:05:04 +01:00
Julien Valentin
f9c0bd5a05
feat(playout): add Liquidsoap 2.0 support ( #2786 )
...
### Description
add Liquidsoap2.0 files
(port syntax 1.4 to 2.0)
### Testing Notes
I ran libretime on ubuntu 22.04 and liquidsoap2.0
this pr is just the beginning, just 2 files added it's a clean one...
in order to work under 22.04,it requires changes in
1. this pr
1. (https://github.com/libretime/libretime/pull/2789 )
1. libretime/propel (https://github.com/libretime/propel1/pull/1 ) or
change legacy /composer.json
``` "type": "vcs",
- "url": "https://github.com/libretime/propel1 "
+ "url": "https://github.com/mp3butcher/propel1 "
},
{
"type": "vcs",
@@ -30,7 +30,7 @@
"james-heinrich/getid3": "^1.9",
"league/uri": "^6.7",
"libretime/celery-php": "dev-main",
- "libretime/propel1": "dev-main",
+ "mp3butcher/propel1": "main",
"php-amqplib/php-amqplib": "^3.0",
```
4. and few mods in install
``` case "$ID-$VERSION_ID" in
ubuntu-20.04) is_ubuntu=true && distro="focal" ;;
+ ubuntu-22.04) is_ubuntu=true && distro="jammy" ;;
debian-11) is_debian=true && distro="bullseye" ;;
*)
error "could not determine supported distribution '$ID-$VERSION_ID'
@@ -375,8 +376,12 @@ prepare_packages_install() {
if $is_ubuntu; then
install_packages software-properties-common
- add-apt-repository -y ppa:libretime/libretime
+ +if echo $distro | grep -q 'focal'; then
+ add-apt-repository -y ppa:libretime/libretime
+ fi
+ if echo $distro | grep -q 'jammy'; then
+ apt-get install php-cli php-dev php php-fpm php-pear php-yaml php-gd php-bcmath php-curl
+ fi
DEBIAN_FRONTEND=noninteractive apt-get -q update
fi
}
```
It will require testing changes against ubuntu 20.4 and debian,that's
why i think a testing branch can be wise
---------
Co-authored-by: mp3butcher <mp3butcher@gmail.com>
2025-02-25 10:47:54 +00:00
Scott McGrath
5b4c720e10
fix(playout): improve the way hashlib is called in libretime_playout/player ( #3135 )
...
### Description
Improves the way hashlib is called in libretime_playout/player so that
is isn't broken on systems with python < 3.9
The way it is currently called in
site-packages/libretime_playout/player/file.py, in the section where
scheduled files are copied to the cache dir for playout, specifies the
usedforsecurity=False flag as follows:
`hasher = hashlib.md5(usedforsecurity=False)`
hashlib.md5 did not support this flag until Python 3.9. Attempting to
specify the flag directly as an argument to hashlib.md5(), in an older
python environment (such as that in Ubuntu Focal 20.04), is unsafe, and
can cause hashlib.md5() to balk/throw an exception, which results in
file copy operations failing. This then precipitates into playout
problems, as scheduled media is missing from the cache folder.
This PR instead calls using hashlib.new(), and passes the argument to
that, as follows:
`hasher = hashlib.new('md5', usedforsecurity=False)`
This method of calling with the flag argument is safer, because the
constructor will take it or leave it gracefully, regardless of whether
the system has a version of hashlib that supports the `usedforsecurity`
flag. AFAICT, it improves (fixes) function on older systems without
negatively impacting others.
### Testing Notes
**What I did:**
Before applying this patch, we were experiencing occasional but fairly
regular periods of silence when the system was supposed to be playing a
song or track. This behavior was consistent with errors such as the
following being present in the playout log:
```
2025-01-15 14:01:28,331 | INFO | libretime_playout.player.file:copy_file:47 - copying file 19834 to cache /var/lib/libretime/playout/scheduler/19834.mp3
2025-01-15 14:01:28,466 | ERROR | libretime_playout.player.file:copy_file:77 - could not copy file 19834 to /var/lib/libretime/playout/scheduler/19834.mp3: 'usedforsecurity' is an invalid keyword argument for openssl_md5()
Traceback (most recent call last):
File "/opt/libretime/lib/python3.8/site-packages/libretime_playout/player/file.py", line 70, in copy_file
file_event.filesize = self.report_file_size_and_md5_to_api(
File "/opt/libretime/lib/python3.8/site-packages/libretime_playout/player/file.py", line 89, in report_file_size_and_md5_to_api
hasher = hashlib.md5(usedforsecurity=False)
TypeError: 'usedforsecurity' is an invalid keyword argument for openssl_md5()
```
_For more information about the characterization and results of this
problem, see issue #3134_
**Testing on running systems**
After the patch was applied, these errors were no longer seen. I first
tested this on a dev server, and then on a live server, with
approximately 100 distinct tracks of playout occurring over about 24
hours. There were no file copy failures, and no related playout
problems, which was a major and immediate improvement.
**Testing installer, fresh installs**
***Ubuntu 20.04***
I deployed a patch to the installer and installed it on a blank system
running Ubuntu 20.04 and tested it to make sure the fix was applied and
worked.
***Debian 11***
I deployed patch to the installer and installed it on a blank system
running Debian Bullseye (which runs python = 3.9) , and tested it there
to make sure it did not break anything or introduce a regression.
### **Links**
Closes : #3134
2025-01-17 23:11:02 +00:00
Kyle Robbertze
81e8fa90ed
chore: fix linting ignore comments ( #3084 )
...
### Description
There is now a too-many-positional-arguments check
2024-09-30 16:08:23 +01:00
Jonas L
40b4fc7f66
feat: build schedule events exclusively in playout ( #2946 )
...
### Description
Build and use the schedule events only in playout, the events generated
by legacy are not used anymore.
This ensure that we don't have to maintain 2 different implementation in
2 different languages. We still need the php function to run to make
sure the side effects of this function are executed (filling the
schedule in the DB).
2024-04-27 20:09:16 +02:00
Jonas L
35d0dec4a8
fix: apply replay gain preferences on scheduled files ( #2945 )
...
### Description
The replay gain preferences are applied in the legacy code, but the
playout code was missing this feature. The replay gain was not applied
when playout fetched the schedules.
37d1a7685e/legacy/application/models/Schedule.php (L881-L886)
2024-02-08 20:29:10 +01:00
renovate[bot]
7a3fffd45f
chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v24 ( #2917 )
...
[](https://renovatebot.com )
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
|
[psf/black-pre-commit-mirror](https://togithub.com/psf/black-pre-commit-mirror )
| repository | major | `23.12.1` -> `24.1.1` |
Note: The `pre-commit` manager in Renovate is not supported by the
`pre-commit` maintainers or community. Please do not report any problems
there, instead [create a Discussion in the Renovate
repository](https://togithub.com/renovatebot/renovate/discussions/new )
if you have any questions.
---
### Release Notes
<details>
<summary>psf/black-pre-commit-mirror
(psf/black-pre-commit-mirror)</summary>
###
[`v24.1.1`](https://togithub.com/psf/black-pre-commit-mirror/compare/24.1.0...24.1.1 )
[Compare
Source](https://togithub.com/psf/black-pre-commit-mirror/compare/24.1.0...24.1.1 )
###
[`v24.1.0`](https://togithub.com/psf/black-pre-commit-mirror/compare/23.12.1...24.1.0 )
[Compare
Source](https://togithub.com/psf/black-pre-commit-mirror/compare/23.12.1...24.1.0 )
</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 [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/ ). View
repository job log
[here](https://developer.mend.io/github/libretime/libretime ).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMzUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjE1My4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-02-02 20:24:25 +01:00
Jonas L
2facbfaff2
fix(playout): remove empty file when the download request failed ( #2864 )
2024-01-01 13:16:13 +01:00
Jonas L
7ed1be1816
fix(playout): increase file download chunk size to 8192 bytes ( #2863 )
2024-01-01 13:07:27 +01:00
maxtim
06af18b84e
feat(playout): configure device for alsa and pulseaudio system outputs ( #2654 )
...
### Description
Add hardware configuration to liquidsoap so that users may
set hardware output in config.yml.
---------
Co-authored-by: jo <ljonas@riseup.net>
2023-12-29 15:22:43 +01:00
Jonas L
9d6061e42e
refactor(playout): fix deprecation warnings ( #2847 )
...
### Description
Fix pydantic deprecation warnings after upgrade to v2.
2023-12-28 14:19:29 +01:00
renovate[bot]
7db7eb083c
fix(deps): update dependency pydantic to v2 (main) ( #2604 )
...
[](https://renovatebot.com )
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [pydantic](https://togithub.com/pydantic/pydantic )
([changelog](https://docs.pydantic.dev/latest/changelog/ )) |
`>=1.7.4,<1.11` -> `>=1.7.4,<2.6` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
---
### Release Notes
<details>
<summary>pydantic/pydantic (pydantic)</summary>
###
[`v2.5.3`](https://togithub.com/pydantic/pydantic/releases/tag/v2.5.3 ):
2023-12-22
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.5.2...v2.5.3 )
##### v2.5.3 (2023-12-22)
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.5.3 )
##### What's Changed
##### Packaging
- uprev `pydantic-core` to 2.14.6
##### Fixes
- Fix memory leak with recursive definitions creating reference cycles
by [@​davidhewitt](https://togithub.com/davidhewitt ) in
[pydantic/pydantic-core#1125 ](https://togithub.com/pydantic/pydantic-core/pull/1125 )
Full Changelog:
https://github.com/pydantic/pydantic/compare/v2.5.2...v2.5.3/
###
[`v2.5.2`](https://togithub.com/pydantic/pydantic/releases/tag/v2.5.2 ):
2023-11-22
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.5.1...v2.5.2 )
#### v2.5.2 (2023-11-22)
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.5.2 )
##### What's Changed
##### Packaging
- uprev `pydantic-core` to 2.14.5
##### New Features
- Add `ConfigDict.ser_json_inf_nan` by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​8159](https://togithub.com/pydantic/pydantic/pull/8159 )
##### Fixes
- Fix validation of `Literal` from JSON keys when used as `dict` key by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[pydantic/pydantic-core#1075 ](https://togithub.com/pydantic/pydantic-core/pull/1075 )
- Fix bug re `custom_init` on members of `Union` by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[pydantic/pydantic-core#1076 ](https://togithub.com/pydantic/pydantic-core/pull/1076 )
- Fix `JsonValue` `bool` serialization by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​8190](https://togithub.com/pydantic/pydantic/pull/8159 )
- Fix handling of unhashable inputs with `Literal` in `Union`s by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[pydantic/pydantic-core#1089 ](https://togithub.com/pydantic/pydantic-core/pull/1089 )
###
[`v2.5.1`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v251-2023-11-15 )
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.5.0...v2.5.1 )
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.5.1 )
##### What's Changed
##### Packaging
- uprev pydantic-core to 2.14.3 by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​8120](https://togithub.com/pydantic/pydantic/pull/8120 )
##### Fixes
- Fix package description limit by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​8097](https://togithub.com/pydantic/pydantic/pull/8097 )
- Fix `ValidateCallWrapper` error when creating a model which has a
@​validate_call wrapped field annotation by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​8110](https://togithub.com/pydantic/pydantic/pull/8110 )
###
[`v2.5.0`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v250-2023-11-13 )
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.4.2...v2.5.0 )
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.5.0 )
The code released in v2.5.0 is functionally identical to that of
v2.5.0b1.
##### What's Changed
##### Packaging
- Update pydantic-core from 2.10.1 to 2.14.1, significant changes from
these updates are described below, full changelog
[here](https://togithub.com/pydantic/pydantic-core/compare/v2.10.1...v2.14.1 )
- Update to `pyright==1.1.335` by
[@​Viicos](https://togithub.com/Viicos ) in
[#​8075](https://togithub.com/pydantic/pydantic/pull/8075 )
##### New Features
- Allow plugins to catch non `ValidationError` errors by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7806](https://togithub.com/pydantic/pydantic/pull/7806 )
- Support `__doc__` argument in `create_model()` by
[@​chris-spann](https://togithub.com/chris-spann ) in
[#​7863](https://togithub.com/pydantic/pydantic/pull/7863 )
- Expose `regex_engine` flag - meaning you can use with the Rust or
Python regex libraries in constraints by
[@​utkini](https://togithub.com/utkini ) in
[#​7768](https://togithub.com/pydantic/pydantic/pull/7768 )
- Save return type generated from type annotation in `ComputedFieldInfo`
by [@​alexmojaki](https://togithub.com/alexmojaki ) in
[#​7889](https://togithub.com/pydantic/pydantic/pull/7889 )
- Adopting `ruff` formatter by
[@​Luca-Blight](https://togithub.com/Luca-Blight ) in
[#​7930](https://togithub.com/pydantic/pydantic/pull/7930 )
- Added `validation_error_cause` to config by
[@​zakstucke](https://togithub.com/zakstucke ) in
[#​7626](https://togithub.com/pydantic/pydantic/pull/7626 )
- Make path of the item to validate available in plugin by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7861](https://togithub.com/pydantic/pydantic/pull/7861 )
- Add `CallableDiscriminator` and `Tag` by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7983](https://togithub.com/pydantic/pydantic/pull/7983 )
- `CallableDiscriminator` renamed to `Discriminator` by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​8047](https://togithub.com/pydantic/pydantic/pull/8047 )
- Make union case tags affect union error messages by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​8001](https://togithub.com/pydantic/pydantic/pull/8001 )
- Add `examples` and `json_schema_extra` to `@computed_field` by
[@​alexmojaki](https://togithub.com/alexmojaki ) in
[#​8013](https://togithub.com/pydantic/pydantic/pull/8013 )
- Add `JsonValue` type by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7998](https://togithub.com/pydantic/pydantic/pull/7998 )
- Allow `str` as argument to `Discriminator` by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​8047](https://togithub.com/pydantic/pydantic/pull/8047 )
- Add `SchemaSerializer.__reduce__` method to enable pickle
serialization by [@​edoakes](https://togithub.com/edoakes ) in
[pydantic/pydantic-core#1006 ](https://togithub.com/pydantic/pydantic-core/pull/1006 )
##### Changes
- **Significant Change:** replace `ultra_strict` with new smart union
implementation, the way unions are validated has changed significantly
to improve performance and correctness, we have worked hard to
absolutely minimise the number of cases where behaviour has changed, see
the PR for details - by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[pydantic/pydantic-core#867 ](https://togithub.com/pydantic/pydantic-core/pull/867 )
- Add support for instance method reassignment when `extra='allow'` by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7683](https://togithub.com/pydantic/pydantic/pull/7683 )
- Support JSON schema generation for `Enum` types with no cases by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7927](https://togithub.com/pydantic/pydantic/pull/7927 )
- Warn if a class inherits from `Generic` before `BaseModel` by
[@​alexmojaki](https://togithub.com/alexmojaki ) in
[#​7891](https://togithub.com/pydantic/pydantic/pull/7891 )
##### Performance
- New custom JSON parser, `jiter` by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[pydantic/pydantic-core#974 ](https://togithub.com/pydantic/pydantic-core/pull/974 )
- PGO build for MacOS M1 by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[pydantic/pydantic-core#1063 ](https://togithub.com/pydantic/pydantic-core/pull/1063 )
- Use `__getattr__` for all package imports, improve import time by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7947](https://togithub.com/pydantic/pydantic/pull/7947 )
##### Fixes
- Fix `mypy` issue with subclasses of `RootModel` by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7677](https://togithub.com/pydantic/pydantic/pull/7677 )
- Properly rebuild the `FieldInfo` when a forward ref gets evaluated by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7698](https://togithub.com/pydantic/pydantic/pull/7698 )
- Fix failure to load `SecretStr` from JSON (regression in v2.4) by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7729](https://togithub.com/pydantic/pydantic/pull/7729 )
- Fix `defer_build` behavior with `TypeAdapter` by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7736](https://togithub.com/pydantic/pydantic/pull/7736 )
- Improve compatibility with legacy `mypy` versions by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7742](https://togithub.com/pydantic/pydantic/pull/7742 )
- Fix: update `TypeVar` handling when default is not set by
[@​pmmmwh](https://togithub.com/pmmmwh ) in
[#​7719](https://togithub.com/pydantic/pydantic/pull/7719 )
- Support specification of `strict` on `Enum` type fields by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7761](https://togithub.com/pydantic/pydantic/pull/7761 )
- Wrap `weakref.ref` instead of subclassing to fix `cloudpickle`
serialization by [@​edoakes](https://togithub.com/edoakes ) in
[#​7780](https://togithub.com/pydantic/pydantic/pull/7780 )
- Keep values of private attributes set within `model_post_init` in
subclasses by [@​alexmojaki](https://togithub.com/alexmojaki ) in
[#​7775](https://togithub.com/pydantic/pydantic/pull/7775 )
- Add more specific type for non-callable `json_schema_extra` by
[@​alexmojaki](https://togithub.com/alexmojaki ) in
[#​7803](https://togithub.com/pydantic/pydantic/pull/7803 )
- Raise an error when deleting frozen (model) fields by
[@​alexmojaki](https://togithub.com/alexmojaki ) in
[#​7800](https://togithub.com/pydantic/pydantic/pull/7800 )
- Fix schema sorting bug with default values by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7817](https://togithub.com/pydantic/pydantic/pull/7817 )
- Use generated alias for aliases that are not specified otherwise by
[@​alexmojaki](https://togithub.com/alexmojaki ) in
[#​7802](https://togithub.com/pydantic/pydantic/pull/7802 )
- Support `strict` specification for `UUID` types by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7865](https://togithub.com/pydantic/pydantic/pull/7865 )
- JSON schema: fix extra parameter handling by
[@​me-and](https://togithub.com/me-and ) in
[#​7810](https://togithub.com/pydantic/pydantic/pull/7810 )
- Fix: support `pydantic.Field(kw_only=True)` with inherited dataclasses
by [@​PrettyWood](https://togithub.com/PrettyWood ) in
[#​7827](https://togithub.com/pydantic/pydantic/pull/7827 )
- Support `validate_call` decorator for methods in classes with
`__slots__` by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7883](https://togithub.com/pydantic/pydantic/pull/7883 )
- Fix pydantic dataclass problem with `dataclasses.field` default by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7898](https://togithub.com/pydantic/pydantic/pull/7898 )
- Fix schema generation for generics with union type bounds by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7899](https://togithub.com/pydantic/pydantic/pull/7899 )
- Fix version for `importlib_metadata` on python 3.7 by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7904](https://togithub.com/pydantic/pydantic/pull/7904 )
- Support `|` operator (Union) in PydanticRecursiveRef by
[@​alexmojaki](https://togithub.com/alexmojaki ) in
[#​7892](https://togithub.com/pydantic/pydantic/pull/7892 )
- Fix `display_as_type` for `TypeAliasType` in python 3.12 by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7929](https://togithub.com/pydantic/pydantic/pull/7929 )
- Add support for `NotRequired` generics in `TypedDict` by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7932](https://togithub.com/pydantic/pydantic/pull/7932 )
- Make generic `TypeAliasType` specifications produce different schema
definitions by [@​alexdrydew](https://togithub.com/alexdrydew ) in
[#​7893](https://togithub.com/pydantic/pydantic/pull/7893 )
- Added fix for signature of inherited dataclass by
[@​howsunjow](https://togithub.com/howsunjow ) in
[#​7925](https://togithub.com/pydantic/pydantic/pull/7925 )
- Make the model name generation more robust in JSON schema by
[@​joakimnordling](https://togithub.com/joakimnordling ) in
[#​7881](https://togithub.com/pydantic/pydantic/pull/7881 )
- Fix plurals in validation error messages (in tests) by
[@​Iipin](https://togithub.com/Iipin ) in
[#​7972](https://togithub.com/pydantic/pydantic/pull/7972 )
- `PrivateAttr` is passed from `Annotated` default position by
[@​tabassco](https://togithub.com/tabassco ) in
[#​8004](https://togithub.com/pydantic/pydantic/pull/8004 )
- Don't decode bytes (which may not be UTF8) when displaying SecretBytes
by [@​alexmojaki](https://togithub.com/alexmojaki ) in
[#​8012](https://togithub.com/pydantic/pydantic/pull/8012 )
- Use `classmethod` instead of `classmethod[Any, Any, Any]` by
[@​Mr-Pepe](https://togithub.com/Mr-Pepe ) in
[#​7979](https://togithub.com/pydantic/pydantic/pull/7979 )
- Clearer error on invalid Plugin by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​8023](https://togithub.com/pydantic/pydantic/pull/8023 )
- Correct pydantic dataclasses import by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​8027](https://togithub.com/pydantic/pydantic/pull/8027 )
- Fix misbehavior for models referencing redefined type aliases by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​8050](https://togithub.com/pydantic/pydantic/pull/8050 )
- Fix `Optional` field with `validate_default` only performing one field
validation by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[pydantic/pydantic-core#1002 ](https://togithub.com/pydantic/pydantic-core/pull/1002 )
- Fix `definition-ref` bug with `Dict` keys by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[pydantic/pydantic-core#1014 ](https://togithub.com/pydantic/pydantic-core/pull/1014 )
- Fix bug allowing validation of `bool` types with
`coerce_numbers_to_str=True` by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[pydantic/pydantic-core#1017 ](https://togithub.com/pydantic/pydantic-core/pull/1017 )
- Don't accept `NaN` in float and decimal constraints by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[pydantic/pydantic-core#1037 ](https://togithub.com/pydantic/pydantic-core/pull/1037 )
- Add `lax_str` and `lax_int` support for enum values not inherited from
str/int by [@​michaelhly](https://togithub.com/michaelhly ) in
[pydantic/pydantic-core#1015 ](https://togithub.com/pydantic/pydantic-core/pull/1015 )
- Support subclasses in lists in `Union` of `List` types by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[pydantic/pydantic-core#1039 ](https://togithub.com/pydantic/pydantic-core/pull/1039 )
- Allow validation against `max_digits` and `decimals` to pass if
normalized or non-normalized input is valid by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[pydantic/pydantic-core#1049 ](https://togithub.com/pydantic/pydantic-core/pull/1049 )
- Fix: proper pluralization in `ValidationError` messages by
[@​Iipin](https://togithub.com/Iipin ) in
[pydantic/pydantic-core#1050 ](https://togithub.com/pydantic/pydantic-core/pull/1050 )
- Disallow the string `'-'` as `datetime` input by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[pydantic/speedate#52 ](https://togithub.com/pydantic/speedate/pull/52 ) &
[pydantic/pydantic-core#1060 ](https://togithub.com/pydantic/pydantic-core/pull/1060 )
- Fix: NaN and Inf float serialization by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[pydantic/pydantic-core#1062 ](https://togithub.com/pydantic/pydantic-core/pull/1062 )
- Restore manylinux-compatible PGO builds by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[pydantic/pydantic-core#1068 ](https://togithub.com/pydantic/pydantic-core/pull/1068 )
##### New Contributors
##### `pydantic`
- [@​schneebuzz](https://togithub.com/schneebuzz ) made their first
contribution in
[#​7699](https://togithub.com/pydantic/pydantic/pull/7699 )
- [@​edoakes](https://togithub.com/edoakes ) made their first
contribution in
[#​7780](https://togithub.com/pydantic/pydantic/pull/7780 )
- [@​alexmojaki](https://togithub.com/alexmojaki ) made their first
contribution in
[#​7775](https://togithub.com/pydantic/pydantic/pull/7775 )
- [@​NickG123](https://togithub.com/NickG123 ) made their first
contribution in
[#​7751](https://togithub.com/pydantic/pydantic/pull/7751 )
- [@​gowthamgts](https://togithub.com/gowthamgts ) made their first
contribution in
[#​7830](https://togithub.com/pydantic/pydantic/pull/7830 )
- [@​jamesbraza](https://togithub.com/jamesbraza ) made their first
contribution in
[#​7848](https://togithub.com/pydantic/pydantic/pull/7848 )
- [@​laundmo](https://togithub.com/laundmo ) made their first
contribution in
[#​7850](https://togithub.com/pydantic/pydantic/pull/7850 )
- [@​rahmatnazali](https://togithub.com/rahmatnazali ) made their
first contribution in
[#​7870](https://togithub.com/pydantic/pydantic/pull/7870 )
- [@​waterfountain1996](https://togithub.com/waterfountain1996 )
made their first contribution in
[#​7878](https://togithub.com/pydantic/pydantic/pull/7878 )
- [@​chris-spann](https://togithub.com/chris-spann ) made their
first contribution in
[#​7863](https://togithub.com/pydantic/pydantic/pull/7863 )
- [@​me-and](https://togithub.com/me-and ) made their first
contribution in
[#​7810](https://togithub.com/pydantic/pydantic/pull/7810 )
- [@​utkini](https://togithub.com/utkini ) made their first
contribution in
[#​7768](https://togithub.com/pydantic/pydantic/pull/7768 )
- [@​bn-l](https://togithub.com/bn-l ) made their first
contribution in
[#​7744](https://togithub.com/pydantic/pydantic/pull/7744 )
- [@​alexdrydew](https://togithub.com/alexdrydew ) made their first
contribution in
[#​7893](https://togithub.com/pydantic/pydantic/pull/7893 )
- [@​Luca-Blight](https://togithub.com/Luca-Blight ) made their
first contribution in
[#​7930](https://togithub.com/pydantic/pydantic/pull/7930 )
- [@​howsunjow](https://togithub.com/howsunjow ) made their first
contribution in
[#​7925](https://togithub.com/pydantic/pydantic/pull/7925 )
- [@​joakimnordling](https://togithub.com/joakimnordling ) made
their first contribution in
[#​7881](https://togithub.com/pydantic/pydantic/pull/7881 )
- [@​icfly2](https://togithub.com/icfly2 ) made their first
contribution in
[#​7976](https://togithub.com/pydantic/pydantic/pull/7976 )
- [@​Yummy-Yums](https://togithub.com/Yummy-Yums ) made their first
contribution in
[#​8003](https://togithub.com/pydantic/pydantic/pull/8003 )
- [@​Iipin](https://togithub.com/Iipin ) made their first
contribution in
[#​7972](https://togithub.com/pydantic/pydantic/pull/7972 )
- [@​tabassco](https://togithub.com/tabassco ) made their first
contribution in
[#​8004](https://togithub.com/pydantic/pydantic/pull/8004 )
- [@​Mr-Pepe](https://togithub.com/Mr-Pepe ) made their first
contribution in
[#​7979](https://togithub.com/pydantic/pydantic/pull/7979 )
- [@​0x00cl](https://togithub.com/0x00cl ) made their first
contribution in
[#​8010](https://togithub.com/pydantic/pydantic/pull/8010 )
- [@​barraponto](https://togithub.com/barraponto ) made their first
contribution in
[#​8032](https://togithub.com/pydantic/pydantic/pull/8032 )
##### `pydantic-core`
- [@​sisp](https://togithub.com/sisp ) made their first
contribution in
[pydantic/pydantic-core#995 ](https://togithub.com/pydantic/pydantic-core/pull/995 )
- [@​michaelhly](https://togithub.com/michaelhly ) made their first
contribution in
[pydantic/pydantic-core#1015 ](https://togithub.com/pydantic/pydantic-core/pull/1015 )
###
[`v2.4.2`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v242-2023-09-27 )
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.4.1...v2.4.2 )
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.4.2 )
##### What's Changed
##### Fixes
- Fix bug with JSON schema for sequence of discriminated union by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7647](https://togithub.com/pydantic/pydantic/pull/7647 )
- Fix schema references in discriminated unions by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7646](https://togithub.com/pydantic/pydantic/pull/7646 )
- Fix json schema generation for recursive models by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7653](https://togithub.com/pydantic/pydantic/pull/7653 )
- Fix `models_json_schema` for generic models by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7654](https://togithub.com/pydantic/pydantic/pull/7654 )
- Fix xfailed test for generic model signatures by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7658](https://togithub.com/pydantic/pydantic/pull/7658 )
##### New Contributors
- [@​austinorr](https://togithub.com/austinorr ) made their first
contribution in
[#​7657](https://togithub.com/pydantic/pydantic/pull/7657 )
- [@​peterHoburg](https://togithub.com/peterHoburg ) made their
first contribution in
[#​7670](https://togithub.com/pydantic/pydantic/pull/7670 )
###
[`v2.4.1`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v241-2023-09-26 )
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.4.0...v2.4.1 )
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.4.1 )
##### What's Changed
##### Packaging
- Update pydantic-core to 2.10.1 by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​7633](https://togithub.com/pydantic/pydantic/pull/7633 )
##### Fixes
- Serialize unsubstituted type vars as `Any` by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7606](https://togithub.com/pydantic/pydantic/pull/7606 )
- Remove schema building caches by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7624](https://togithub.com/pydantic/pydantic/pull/7624 )
- Fix an issue where JSON schema extras weren't JSON encoded by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7625](https://togithub.com/pydantic/pydantic/pull/7625 )
###
[`v2.4.0`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v240-2023-09-22 )
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.3.0...v2.4.0 )
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.4.0 )
##### What's Changed
##### Packaging
- Update pydantic-core to 2.10.0 by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7542](https://togithub.com/pydantic/pydantic/pull/7542 )
##### New Features
- Add `Base64Url` types by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7286](https://togithub.com/pydantic/pydantic/pull/7286 )
- Implement optional `number` to `str` coercion by
[@​lig](https://togithub.com/lig ) in
[#​7508](https://togithub.com/pydantic/pydantic/pull/7508 )
- Allow access to `field_name` and `data` in all validators if there is
data and a field name by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7542](https://togithub.com/pydantic/pydantic/pull/7542 )
- Add `BaseModel.model_validate_strings` and
`TypeAdapter.validate_strings` by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7552](https://togithub.com/pydantic/pydantic/pull/7552 )
- Add Pydantic `plugins` experimental implementation by
[@​lig](https://togithub.com/lig )
[@​samuelcolvin](https://togithub.com/samuelcolvin ) and
[@​Kludex](https://togithub.com/Kludex ) in
[#​6820](https://togithub.com/pydantic/pydantic/pull/6820 )
##### Changes
- Do not override `model_post_init` in subclass with private attrs by
[@​Viicos](https://togithub.com/Viicos ) in
[#​7302](https://togithub.com/pydantic/pydantic/pull/7302 )
- Make fields with defaults not required in the serialization schema by
default by [@​dmontagu](https://togithub.com/dmontagu ) in
[#​7275](https://togithub.com/pydantic/pydantic/pull/7275 )
- Mark `Extra` as deprecated by
[@​disrupted](https://togithub.com/disrupted ) in
[#​7299](https://togithub.com/pydantic/pydantic/pull/7299 )
- Make `EncodedStr` a dataclass by
[@​Kludex](https://togithub.com/Kludex ) in
[#​7396](https://togithub.com/pydantic/pydantic/pull/7396 )
- Move `annotated_handlers` to be public by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7569](https://togithub.com/pydantic/pydantic/pull/7569 )
##### Performance
- Simplify flattening and inlining of `CoreSchema` by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7523](https://togithub.com/pydantic/pydantic/pull/7523 )
- Remove unused copies in `CoreSchema` walking by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7528](https://togithub.com/pydantic/pydantic/pull/7528 )
- Add caches for collecting definitions and invalid schemas from a
CoreSchema by [@​adriangb](https://togithub.com/adriangb ) in
[#​7527](https://togithub.com/pydantic/pydantic/pull/7527 )
- Eagerly resolve discriminated unions and cache cases where we can't by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7529](https://togithub.com/pydantic/pydantic/pull/7529 )
- Replace `dict.get` and `dict.setdefault` with more verbose versions in
`CoreSchema` building hot paths by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7536](https://togithub.com/pydantic/pydantic/pull/7536 )
- Cache invalid `CoreSchema` discovery by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7535](https://togithub.com/pydantic/pydantic/pull/7535 )
- Allow disabling `CoreSchema` validation for faster startup times by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7565](https://togithub.com/pydantic/pydantic/pull/7565 )
##### Fixes
- Fix config detection for `TypedDict` from grandparent classes by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7272](https://togithub.com/pydantic/pydantic/pull/7272 )
- Fix hash function generation for frozen models with unusual MRO by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7274](https://togithub.com/pydantic/pydantic/pull/7274 )
- Make `strict` config overridable in field for Path by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7281](https://togithub.com/pydantic/pydantic/pull/7281 )
- Use `ser_json_<timedelta|bytes>` on default in `GenerateJsonSchema` by
[@​Kludex](https://togithub.com/Kludex ) in
[#​7269](https://togithub.com/pydantic/pydantic/pull/7269 )
- Adding a check that alias is validated as an identifier for Python by
[@​andree0](https://togithub.com/andree0 ) in
[#​7319](https://togithub.com/pydantic/pydantic/pull/7319 )
- Raise an error when computed field overrides field by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7346](https://togithub.com/pydantic/pydantic/pull/7346 )
- Fix applying `SkipValidation` to referenced schemas by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7381](https://togithub.com/pydantic/pydantic/pull/7381 )
- Enforce behavior of private attributes having double leading
underscore by [@​lig](https://togithub.com/lig ) in
[#​7265](https://togithub.com/pydantic/pydantic/pull/7265 )
- Standardize `__get_pydantic_core_schema__` signature by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7415](https://togithub.com/pydantic/pydantic/pull/7415 )
- Fix generic dataclass fields mutation bug (when using `TypeAdapter`)
by [@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7435](https://togithub.com/pydantic/pydantic/pull/7435 )
- Fix `TypeError` on `model_validator` in `wrap` mode by
[@​pmmmwh](https://togithub.com/pmmmwh ) in
[#​7496](https://togithub.com/pydantic/pydantic/pull/7496 )
- Improve enum error message by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7506](https://togithub.com/pydantic/pydantic/pull/7506 )
- Make `repr` work for instances that failed initialization when
handling `ValidationError`s by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7439](https://togithub.com/pydantic/pydantic/pull/7439 )
- Fixed a regular expression denial of service issue by limiting
whitespaces by [@​prodigysml](https://togithub.com/prodigysml ) in
[#​7360](https://togithub.com/pydantic/pydantic/pull/7360 )
- Fix handling of `UUID` values having `UUID.version=None` by
[@​lig](https://togithub.com/lig ) in
[#​7566](https://togithub.com/pydantic/pydantic/pull/7566 )
- Fix `__iter__` returning private `cached_property` info by
[@​sydney-runkle](https://togithub.com/sydney-runkle ) in
[#​7570](https://togithub.com/pydantic/pydantic/pull/7570 )
- Improvements to version info message by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7594](https://togithub.com/pydantic/pydantic/pull/7594 )
##### New Contributors
- [@​15498th](https://togithub.com/15498th ) made their first
contribution in
[#​7238](https://togithub.com/pydantic/pydantic/pull/7238 )
- [@​GabrielCappelli](https://togithub.com/GabrielCappelli ) made
their first contribution in
[#​7213](https://togithub.com/pydantic/pydantic/pull/7213 )
- [@​tobni](https://togithub.com/tobni ) made their first
contribution in
[#​7184](https://togithub.com/pydantic/pydantic/pull/7184 )
- [@​redruin1](https://togithub.com/redruin1 ) made their first
contribution in
[#​7282](https://togithub.com/pydantic/pydantic/pull/7282 )
- [@​FacerAin](https://togithub.com/FacerAin ) made their first
contribution in
[#​7288](https://togithub.com/pydantic/pydantic/pull/7288 )
- [@​acdha](https://togithub.com/acdha ) made their first
contribution in
[#​7297](https://togithub.com/pydantic/pydantic/pull/7297 )
- [@​andree0](https://togithub.com/andree0 ) made their first
contribution in
[#​7319](https://togithub.com/pydantic/pydantic/pull/7319 )
- [@​gordonhart](https://togithub.com/gordonhart ) made their first
contribution in
[#​7375](https://togithub.com/pydantic/pydantic/pull/7375 )
- [@​pmmmwh](https://togithub.com/pmmmwh ) made their first
contribution in
[#​7496](https://togithub.com/pydantic/pydantic/pull/7496 )
- [@​disrupted](https://togithub.com/disrupted ) made their first
contribution in
[#​7299](https://togithub.com/pydantic/pydantic/pull/7299 )
- [@​prodigysml](https://togithub.com/prodigysml ) made their first
contribution in
[#​7360](https://togithub.com/pydantic/pydantic/pull/7360 )
###
[`v2.3.0`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v230-2023-08-23 )
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.2.1...v2.3.0 )
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.3.0 )
- 🔥 Remove orphaned changes file from repo by
[@​lig](https://togithub.com/lig ) in
[#​7168](https://togithub.com/pydantic/pydantic/pull/7168 )
- Add copy button on documentation by
[@​Kludex](https://togithub.com/Kludex ) in
[#​7190](https://togithub.com/pydantic/pydantic/pull/7190 )
- Fix docs on JSON type by [@​Kludex](https://togithub.com/Kludex )
in [#​7189](https://togithub.com/pydantic/pydantic/pull/7189 )
- Update mypy 1.5.0 to 1.5.1 in CI by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7191](https://togithub.com/pydantic/pydantic/pull/7191 )
- fix download links badge by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7200](https://togithub.com/pydantic/pydantic/pull/7200 )
- add 2.2.1 to changelog by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7212](https://togithub.com/pydantic/pydantic/pull/7212 )
- Make ModelWrapValidator protocols generic by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7154](https://togithub.com/pydantic/pydantic/pull/7154 )
- Correct `Field(..., exclude: bool)` docs by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7214](https://togithub.com/pydantic/pydantic/pull/7214 )
- Make shadowing attributes a warning instead of an error by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7193](https://togithub.com/pydantic/pydantic/pull/7193 )
- Document `Base64Str` and `Base64Bytes` by
[@​Kludex](https://togithub.com/Kludex ) in
[#​7192](https://togithub.com/pydantic/pydantic/pull/7192 )
- Fix `config.defer_build` for serialization first cases by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7024](https://togithub.com/pydantic/pydantic/pull/7024 )
- clean Model docstrings in JSON Schema by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7210](https://togithub.com/pydantic/pydantic/pull/7210 )
- fix [#​7228](https://togithub.com/pydantic/pydantic/pull/7228 )
(typo): docs in `validators.md` to correct `validate_default` kwarg by
[@​lmmx](https://togithub.com/lmmx ) in
[#​7229](https://togithub.com/pydantic/pydantic/pull/7229 )
- ✅ Implement `tzinfo.fromutc` method for `TzInfo` in `pydantic-core` by
[@​lig](https://togithub.com/lig ) in
[#​7019](https://togithub.com/pydantic/pydantic/pull/7019 )
- Support `__get_validators__` by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7197](https://togithub.com/pydantic/pydantic/pull/7197 )
###
[`v2.2.1`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v221-2023-08-18 )
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.2.0...v2.2.1 )
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.2.1 )
- Make `xfail`ing test for root model extra stop `xfail`ing by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6937](https://togithub.com/pydantic/pydantic/pull/6937 )
- Optimize recursion detection by stopping on the second visit for the
same object by [@​mciucu](https://togithub.com/mciucu ) in
[#​7160](https://togithub.com/pydantic/pydantic/pull/7160 )
- fix link in docs by
[@​tlambert03](https://togithub.com/tlambert03 ) in
[#​7166](https://togithub.com/pydantic/pydantic/pull/7166 )
- Replace MiMalloc w/ default allocator by
[@​adriangb](https://togithub.com/adriangb ) in
[pydantic/pydantic-core#900 ](https://togithub.com/pydantic/pydantic-core/pull/900 )
- Bump pydantic-core to 2.6.1 and prepare 2.2.1 release by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7176](https://togithub.com/pydantic/pydantic/pull/7176 )
###
[`v2.2.0`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v220-2023-08-17 )
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.1.1...v2.2.0 )
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.2.0 )
- Split "pipx install" setup command into two commands on the
documentation site by [@​nomadmtb](https://togithub.com/nomadmtb )
in [#​6869](https://togithub.com/pydantic/pydantic/pull/6869 )
- Deprecate `Field.include` by
[@​hramezani](https://togithub.com/hramezani ) in
[#​6852](https://togithub.com/pydantic/pydantic/pull/6852 )
- Fix typo in default factory error msg by
[@​hramezani](https://togithub.com/hramezani ) in
[#​6880](https://togithub.com/pydantic/pydantic/pull/6880 )
- Simplify handling of typing.Annotated in GenerateSchema by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6887](https://togithub.com/pydantic/pydantic/pull/6887 )
- Re-enable fastapi tests in CI by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6883](https://togithub.com/pydantic/pydantic/pull/6883 )
- Make it harder to hit collisions with json schema defrefs by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6566](https://togithub.com/pydantic/pydantic/pull/6566 )
- Cleaner error for invalid input to `Path` fields by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​6903](https://togithub.com/pydantic/pydantic/pull/6903 )
- 📝 support Coordinate Type by
[@​yezz123](https://togithub.com/yezz123 ) in
[#​6906](https://togithub.com/pydantic/pydantic/pull/6906 )
- Fix `ForwardRef` wrapper for py 3.10.0 (shim until bpo-45166) by
[@​randomir](https://togithub.com/randomir ) in
[#​6919](https://togithub.com/pydantic/pydantic/pull/6919 )
- Fix misbehavior related to copying of RootModel by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6918](https://togithub.com/pydantic/pydantic/pull/6918 )
- Fix issue with recursion error caused by ParamSpec by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6923](https://togithub.com/pydantic/pydantic/pull/6923 )
- Add section about Constrained classes to the Migration Guide by
[@​Kludex](https://togithub.com/Kludex ) in
[#​6924](https://togithub.com/pydantic/pydantic/pull/6924 )
- Use `main` branch for badge links by
[@​Viicos](https://togithub.com/Viicos ) in
[#​6925](https://togithub.com/pydantic/pydantic/pull/6925 )
- Add test for v1/v2 Annotated discrepancy by
[@​carlbordum](https://togithub.com/carlbordum ) in
[#​6926](https://togithub.com/pydantic/pydantic/pull/6926 )
- Make the v1 mypy plugin work with both v1 and v2 by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6921](https://togithub.com/pydantic/pydantic/pull/6921 )
- Fix issue where generic models couldn't be parametrized with BaseModel
by [@​dmontagu](https://togithub.com/dmontagu ) in
[#​6933](https://togithub.com/pydantic/pydantic/pull/6933 )
- Remove xfail for discriminated union with alias by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6938](https://togithub.com/pydantic/pydantic/pull/6938 )
- add field_serializer to computed_field by
[@​andresliszt](https://togithub.com/andresliszt ) in
[#​6965](https://togithub.com/pydantic/pydantic/pull/6965 )
- Use union_schema with Type\[Union\[...]] by
[@​JeanArhancet](https://togithub.com/JeanArhancet ) in
[#​6952](https://togithub.com/pydantic/pydantic/pull/6952 )
- Fix inherited typeddict attributes / config by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6981](https://togithub.com/pydantic/pydantic/pull/6981 )
- fix dataclass annotated before validator called twice by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​6998](https://togithub.com/pydantic/pydantic/pull/6998 )
- Update test-fastapi deselected tests by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7014](https://togithub.com/pydantic/pydantic/pull/7014 )
- Fix validator doc format by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7015](https://togithub.com/pydantic/pydantic/pull/7015 )
- Fix typo in docstring of model_json_schema by
[@​AdamVinch-Federated](https://togithub.com/AdamVinch-Federated )
in [#​7032](https://togithub.com/pydantic/pydantic/pull/7032 )
- remove unused "type ignores" with pyright by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7026](https://togithub.com/pydantic/pydantic/pull/7026 )
- Add benchmark representing FastAPI startup time by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7030](https://togithub.com/pydantic/pydantic/pull/7030 )
- Fix json_encoders for Enum subclasses by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7029](https://togithub.com/pydantic/pydantic/pull/7029 )
- Update docstring of `ser_json_bytes` regarding base64 encoding by
[@​Viicos](https://togithub.com/Viicos ) in
[#​7052](https://togithub.com/pydantic/pydantic/pull/7052 )
- Allow `@validate_call` to work on async methods by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7046](https://togithub.com/pydantic/pydantic/pull/7046 )
- Fix: mypy error with `Settings` and `SettingsConfigDict` by
[@​JeanArhancet](https://togithub.com/JeanArhancet ) in
[#​7002](https://togithub.com/pydantic/pydantic/pull/7002 )
- Fix some typos (repeated words and it's/its) by
[@​eumiro](https://togithub.com/eumiro ) in
[#​7063](https://togithub.com/pydantic/pydantic/pull/7063 )
- Fix the typo in docstring by
[@​harunyasar](https://togithub.com/harunyasar ) in
[#​7062](https://togithub.com/pydantic/pydantic/pull/7062 )
- Docs: Fix broken URL in the pydantic-settings package recommendation
by [@​swetjen](https://togithub.com/swetjen ) in
[#​6995](https://togithub.com/pydantic/pydantic/pull/6995 )
- Handle constraints being applied to schemas that don't accept it by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6951](https://togithub.com/pydantic/pydantic/pull/6951 )
- Replace almost_equal_floats with math.isclose by
[@​eumiro](https://togithub.com/eumiro ) in
[#​7082](https://togithub.com/pydantic/pydantic/pull/7082 )
- bump pydantic-core to 2.5.0 by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​7077](https://togithub.com/pydantic/pydantic/pull/7077 )
- Add `short_version` and use it in links by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7115](https://togithub.com/pydantic/pydantic/pull/7115 )
- 📝 Add usage link to `RootModel` by
[@​Kludex](https://togithub.com/Kludex ) in
[#​7113](https://togithub.com/pydantic/pydantic/pull/7113 )
- Revert "Fix default port for mongosrv DSNs
([#​6827](https://togithub.com/pydantic/pydantic/issues/6827 ))" by
[@​Kludex](https://togithub.com/Kludex ) in
[#​7116](https://togithub.com/pydantic/pydantic/pull/7116 )
- Clarify validate_default and \_Unset handling in usage docs and
migration guide by [@​benbenbang](https://togithub.com/benbenbang )
in [#​6950](https://togithub.com/pydantic/pydantic/pull/6950 )
- Tweak documentation of `Field.exclude` by
[@​Viicos](https://togithub.com/Viicos ) in
[#​7086](https://togithub.com/pydantic/pydantic/pull/7086 )
- Do not require `validate_assignment` to use `Field.frozen` by
[@​Viicos](https://togithub.com/Viicos ) in
[#​7103](https://togithub.com/pydantic/pydantic/pull/7103 )
- tweaks to `_core_utils` by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​7040](https://togithub.com/pydantic/pydantic/pull/7040 )
- Make DefaultDict working with set by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7126](https://togithub.com/pydantic/pydantic/pull/7126 )
- Don't always require typing.Generic as a base for partially
parametrized models by [@​dmontagu](https://togithub.com/dmontagu )
in [#​7119](https://togithub.com/pydantic/pydantic/pull/7119 )
- Fix issue with JSON schema incorrectly using parent class core schema
by [@​dmontagu](https://togithub.com/dmontagu ) in
[#​7020](https://togithub.com/pydantic/pydantic/pull/7020 )
- Fix xfailed test related to TypedDict and alias_generator by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6940](https://togithub.com/pydantic/pydantic/pull/6940 )
- Improve error message for NameEmail by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6939](https://togithub.com/pydantic/pydantic/pull/6939 )
- Fix generic computed fields by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6988](https://togithub.com/pydantic/pydantic/pull/6988 )
- Reflect namedtuple default values during validation by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7144](https://togithub.com/pydantic/pydantic/pull/7144 )
- Update dependencies, fix pydantic-core usage, fix CI issues by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7150](https://togithub.com/pydantic/pydantic/pull/7150 )
- Add mypy 1.5.0 by [@​hramezani](https://togithub.com/hramezani )
in [#​7118](https://togithub.com/pydantic/pydantic/pull/7118 )
- Handle non-json native enum values by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7056](https://togithub.com/pydantic/pydantic/pull/7056 )
- document `round_trip` in Json type documentation by
[@​jc-louis](https://togithub.com/jc-louis ) in
[#​7137](https://togithub.com/pydantic/pydantic/pull/7137 )
- Relax signature checks to better support builtins and C extension
functions as validators by
[@​adriangb](https://togithub.com/adriangb ) in
[#​7101](https://togithub.com/pydantic/pydantic/pull/7101 )
- add union_mode='left_to_right' by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​7151](https://togithub.com/pydantic/pydantic/pull/7151 )
- Include an error message hint for inherited ordering by
[@​yvalencia91](https://togithub.com/yvalencia91 ) in
[#​7124](https://togithub.com/pydantic/pydantic/pull/7124 )
- Fix one docs link and resolve some warnings for two others by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​7153](https://togithub.com/pydantic/pydantic/pull/7153 )
- Include Field extra keys name in warning by
[@​hramezani](https://togithub.com/hramezani ) in
[#​7136](https://togithub.com/pydantic/pydantic/pull/7136 )
###
[`v2.1.1`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v211-2023-07-25 )
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.1.0...v2.1.1 )
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.1.1 )
- Skip FieldInfo merging when unnecessary by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6862](https://togithub.com/pydantic/pydantic/pull/6862 )
###
[`v2.1.0`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v210-2023-07-25 )
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.0.3...v2.1.0 )
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.1.0 )
- Add `StringConstraints` for use as Annotated metadata by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6605](https://togithub.com/pydantic/pydantic/pull/6605 )
- Try to fix intermittently failing CI by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6683](https://togithub.com/pydantic/pydantic/pull/6683 )
- Remove redundant example of optional vs default. by
[@​ehiggs-deliverect](https://togithub.com/ehiggs-deliverect ) in
[#​6676](https://togithub.com/pydantic/pydantic/pull/6676 )
- Docs update by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​6692](https://togithub.com/pydantic/pydantic/pull/6692 )
- Remove the Validate always section in validator docs by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6679](https://togithub.com/pydantic/pydantic/pull/6679 )
- Fix recursion error in json schema generation by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6720](https://togithub.com/pydantic/pydantic/pull/6720 )
- Fix incorrect subclass check for secretstr by
[@​AlexVndnblcke](https://togithub.com/AlexVndnblcke ) in
[#​6730](https://togithub.com/pydantic/pydantic/pull/6730 )
- update pdm / pdm lockfile to 2.8.0 by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​6714](https://togithub.com/pydantic/pydantic/pull/6714 )
- unpin pdm on more CI jobs by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​6755](https://togithub.com/pydantic/pydantic/pull/6755 )
- improve source locations for auxiliary packages in docs by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​6749](https://togithub.com/pydantic/pydantic/pull/6749 )
- Assume builtins don't accept an info argument by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6754](https://togithub.com/pydantic/pydantic/pull/6754 )
- Fix bug where calling `help(BaseModelSubclass)` raises errors by
[@​hramezani](https://togithub.com/hramezani ) in
[#​6758](https://togithub.com/pydantic/pydantic/pull/6758 )
- Fix mypy plugin handling of `@model_validator(mode="after")` by
[@​ljodal](https://togithub.com/ljodal ) in
[#​6753](https://togithub.com/pydantic/pydantic/pull/6753 )
- update pydantic-core to 2.3.1 by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​6756](https://togithub.com/pydantic/pydantic/pull/6756 )
- Mypy plugin for settings by
[@​hramezani](https://togithub.com/hramezani ) in
[#​6760](https://togithub.com/pydantic/pydantic/pull/6760 )
- Use `contentSchema` keyword for JSON schema by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6715](https://togithub.com/pydantic/pydantic/pull/6715 )
- fast-path checking finite decimals by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​6769](https://togithub.com/pydantic/pydantic/pull/6769 )
- Docs update by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​6771](https://togithub.com/pydantic/pydantic/pull/6771 )
- Improve json schema doc by
[@​hramezani](https://togithub.com/hramezani ) in
[#​6772](https://togithub.com/pydantic/pydantic/pull/6772 )
- Update validator docs by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6695](https://togithub.com/pydantic/pydantic/pull/6695 )
- Fix typehint for wrap validator by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6788](https://togithub.com/pydantic/pydantic/pull/6788 )
- 🐛 Fix validation warning for unions of Literal and other type by
[@​lig](https://togithub.com/lig ) in
[#​6628](https://togithub.com/pydantic/pydantic/pull/6628 )
- Update documentation for generics support in V2 by
[@​tpdorsey](https://togithub.com/tpdorsey ) in
[#​6685](https://togithub.com/pydantic/pydantic/pull/6685 )
- add pydantic-core build info to `version_info()` by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​6785](https://togithub.com/pydantic/pydantic/pull/6785 )
- Fix pydantic dataclasses that use slots with default values by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6796](https://togithub.com/pydantic/pydantic/pull/6796 )
- Fix inheritance of hash function for frozen models by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6789](https://togithub.com/pydantic/pydantic/pull/6789 )
- ✨ Add `SkipJsonSchema` annotation by
[@​Kludex](https://togithub.com/Kludex ) in
[#​6653](https://togithub.com/pydantic/pydantic/pull/6653 )
- Error if an invalid field name is used with Field by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6797](https://togithub.com/pydantic/pydantic/pull/6797 )
- Add `GenericModel` to `MOVED_IN_V2` by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6776](https://togithub.com/pydantic/pydantic/pull/6776 )
- Remove unused code from `docs/usage/types/custom.md` by
[@​hramezani](https://togithub.com/hramezani ) in
[#​6803](https://togithub.com/pydantic/pydantic/pull/6803 )
- Fix `float` -> `Decimal` coercion precision loss by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6810](https://togithub.com/pydantic/pydantic/pull/6810 )
- remove email validation from the north star benchmark by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​6816](https://togithub.com/pydantic/pydantic/pull/6816 )
- Fix link to mypy by
[@​progsmile](https://togithub.com/progsmile ) in
[#​6824](https://togithub.com/pydantic/pydantic/pull/6824 )
- Improve initialization hooks example by
[@​hramezani](https://togithub.com/hramezani ) in
[#​6822](https://togithub.com/pydantic/pydantic/pull/6822 )
- Fix default port for mongosrv DSNs by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6827](https://togithub.com/pydantic/pydantic/pull/6827 )
- Improve API documentation, in particular more links between usage and
API docs by [@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​6780](https://togithub.com/pydantic/pydantic/pull/6780 )
- update pydantic-core to 2.4.0 by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​6831](https://togithub.com/pydantic/pydantic/pull/6831 )
- Fix `annotated_types.MaxLen` validator for custom sequence types by
[@​ImogenBits](https://togithub.com/ImogenBits ) in
[#​6809](https://togithub.com/pydantic/pydantic/pull/6809 )
- Update V1 by [@​hramezani](https://togithub.com/hramezani ) in
[#​6833](https://togithub.com/pydantic/pydantic/pull/6833 )
- Make it so callable JSON schema extra works by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6798](https://togithub.com/pydantic/pydantic/pull/6798 )
- Fix serialization issue with `InstanceOf` by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6829](https://togithub.com/pydantic/pydantic/pull/6829 )
- Add back support for `json_encoders` by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6811](https://togithub.com/pydantic/pydantic/pull/6811 )
- Update field annotations when building the schema by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6838](https://togithub.com/pydantic/pydantic/pull/6838 )
- Use `WeakValueDictionary` to fix generic memory leak by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6681](https://togithub.com/pydantic/pydantic/pull/6681 )
- Add `config.defer_build` to optionally make model building lazy by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​6823](https://togithub.com/pydantic/pydantic/pull/6823 )
- delegate `UUID` serialization to pydantic-core by
[@​davidhewitt](https://togithub.com/davidhewitt ) in
[#​6850](https://togithub.com/pydantic/pydantic/pull/6850 )
- Update `json_encoders` docs by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6848](https://togithub.com/pydantic/pydantic/pull/6848 )
- Fix error message for `staticmethod`/`classmethod` order with
validate_call by [@​dmontagu](https://togithub.com/dmontagu ) in
[#​6686](https://togithub.com/pydantic/pydantic/pull/6686 )
- Improve documentation for `Config` by
[@​samuelcolvin](https://togithub.com/samuelcolvin ) in
[#​6847](https://togithub.com/pydantic/pydantic/pull/6847 )
- Update serialization doc to mention `Field.exclude` takes priority
over call-time `include/exclude` by
[@​hramezani](https://togithub.com/hramezani ) in
[#​6851](https://togithub.com/pydantic/pydantic/pull/6851 )
- Allow customizing core schema generation by making `GenerateSchema`
public by [@​adriangb](https://togithub.com/adriangb ) in
[#​6737](https://togithub.com/pydantic/pydantic/pull/6737 )
###
[`v2.0.3`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v203-2023-07-05 )
[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.0.2...v2.0.3 )
[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.0.3 )
- Mention PyObject (v1) moving to ImportString (v2) in migration doc by
[@​slafs](https://togithub.com/slafs ) in
[#​6456](https://togithub.com/pydantic/pydantic/pull/6456 )
- Fix release-tweet CI by [@​Kludex](https://togithub.com/Kludex )
in [#​6461](https://togithub.com/pydantic/pydantic/pull/6461 )
- Revise the section on required / optional / nullable fields. by
[@​ybressler](https://togithub.com/ybressler ) in
[#​6468](https://togithub.com/pydantic/pydantic/pull/6468 )
- Warn if a type hint is not in fact a type by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6479](https://togithub.com/pydantic/pydantic/pull/6479 )
- Replace TransformSchema with GetPydanticSchema by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6484](https://togithub.com/pydantic/pydantic/pull/6484 )
- Fix the un-hashability of various annotation types, for use in caching
generic containers by [@​dmontagu](https://togithub.com/dmontagu )
in [#​6480](https://togithub.com/pydantic/pydantic/pull/6480 )
- PYD-164: Rework custom types docs by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6490](https://togithub.com/pydantic/pydantic/pull/6490 )
- Fix ci by [@​adriangb](https://togithub.com/adriangb ) in
[#​6507](https://togithub.com/pydantic/pydantic/pull/6507 )
- Fix forward ref in generic by
[@​adriangb](https://togithub.com/adriangb ) in
[#​6511](https://togithub.com/pydantic/pydantic/pull/6511 )
- Fix generation of serialization JSON schemas for
core_schema.ChainSchema by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6515](https://togithub.com/pydantic/pydantic/pull/6515 )
- Document the change in `Field.alias` behavior in Pydantic V2 by
[@​hramezani](https://togithub.com/hramezani ) in
[#​6508](https://togithub.com/pydantic/pydantic/pull/6508 )
- Give better error message attempting to compute the json schema of a
model with undefined fields by
[@​dmontagu](https://togithub.com/dmontagu ) in
[#​6519](https://togithub.com/pydantic/pydantic/pull/6519 )
- Document `alias_priority` by
[@​tpdorsey](https://togithub.com/tpdorsey ) in
[#​6520](https://togithub.com/pydantic/pydantic/pull/6520 )
- Add redirect for types documentation by
[@​tpdorsey](https://togithub.com/tpdorsey ) in
[#​6513](https://t
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/ ). View
repository job log
[here](https://developer.mend.io/github/libretime/libretime ).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xNDQuMiIsInVwZGF0ZWRJblZlciI6IjM3LjEwMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-12-27 13:35:19 +01:00
renovate[bot]
1618d72469
chore(deps): update pre-commit hook codespell-project/codespell to v2.2.6 (stable) ( #2732 )
...
* chore(deps): update pre-commit hook codespell-project/codespell to v2.2.6
* fix spell checks
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-10-03 22:19:56 +02:00
jo
67af6cfa53
fix(playout): liquidsoap aac output syntax errors
2023-05-29 12:14:08 +01:00
jo
b2fc3a5ecf
feat(playout): allow harbor ssl configuration
2023-04-24 14:58:34 +01:00
jo
43cc2bc4f0
chore: fix comment wording
2023-04-03 15:29:36 +01:00
jo
ce27615a24
refactor(playout): rename PypoLiquidsoap to Liquidsoap
2023-04-03 15:29:36 +01:00
jo
f68bc2da88
refactor(playout): remove irrelevant try/except
2023-04-03 15:29:36 +01:00
jo
964ee7e07c
refactor(playout): add ended check to event class
2023-04-03 15:29:36 +01:00
jo
161f2ccdcb
refactor(playout): merge liquidsoap modules
2023-04-03 15:29:36 +01:00
jo
4c63ef71fc
feat(playout): replace thread timeout with socket timeout
...
Prefer the lower level socket timeout feature, to the hand made threaded
timeout. The thread timeout does not raise or log the errors that may occur
during the communication with liquidsoap, and we should handle them
instead.
2023-04-03 15:29:36 +01:00
jo
028eafb1b6
test(playout): liquidsoap wait for version
2023-03-30 20:49:07 +01:00
jo
6412b17996
fix(playout): catch oserror in liquidsoap client
...
Prevent playout crash when liquidsoap is not yet reachable.
2023-03-30 20:49:07 +01:00
jo
a1db2a157a
feat(playout): replace schedule event dicts with objects
2023-03-22 13:05:57 +00:00
jo
684e7a6f24
chore: move mime type utils
2023-03-22 13:05:57 +00:00
jo
3f4ebab788
feat(playout): move liquidsoap auth to notify cli
2023-03-22 12:13:59 +00:00
jo
114a599993
fix(playout): use new api-client v1
2023-03-22 12:13:59 +00:00
jo
74af2112a6
fix(playout): quote incompatible <py3.9 type hints
2023-03-22 09:11:56 +00:00
jo
b7214b5d46
feat: add sentry sdk
2023-03-14 14:59:45 +00:00
jo
a60d83311b
feat: add python packages version
2023-03-14 14:59:45 +00:00
jo
719464a272
refactor(playout): add more typings
2023-03-04 17:06:16 +02:00
jo
1bdfeb570d
fix(playout): use int for liquidsoap queues map
2023-03-04 17:06:16 +02:00
jo
b17ff4afad
test(playout): silence existing broad-exception-caught errors
2023-03-04 17:06:16 +02:00
jo
a77321190f
refactor(playout): fix linting errors
2023-03-04 17:06:16 +02:00
jo
c6c5b1125f
refactor(playout): generate entrypoint to string
2023-03-04 17:06:16 +02:00
jo
f09d0ec3c6
refactor(playout): remove unused recorder
2023-03-04 17:06:16 +02:00
jo
0a9848efdd
refactor(playout): init mimetypes only once
2023-03-04 17:06:16 +02:00
jo
c7c3dba712
fix(playout): prevent unbound variables
2023-03-04 17:06:16 +02:00
jo
4a14b6b01f
refactor(playout): update liquidsoap input auth handler
2023-03-04 17:06:16 +02:00
jo
ac8917e3fc
fix(playout): explicit ogg vorbis icecast encoder
2023-03-04 17:06:16 +02:00
jo
7f81915eb4
fix(playout): legacy pushes non validated data
...
When querying the API we serialize the message format into a dict, but legacy pushes the data and we don't yet serialize that data.
2023-03-04 17:06:16 +02:00
jo
0b3dbe8505
chore(playout): disable amqp debug logs
2023-03-04 17:06:16 +02:00
jo
5042704d42
feat(playout): don't serialize message twice
2023-03-04 17:06:16 +02:00