Compare commits

...

255 Commits
3.2.1 ... main

Author SHA1 Message Date
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 a14f1bec0b
ci: only check last commit for API schema in PRs (#3133)
### Description

PRs are intended to be squashed to a single commit. Only checking the
last commit gives us the intended state of the repo and ensures that if
the author commits the schema fixes later, the CI passes as expected.
Currently, the CI will fail because the earlier commits still have an
out of date schema.
2025-01-10 16:56:39 +00:00
nosbig 203c927554
feat: add flac support to Web player (#3128)
### Description

Added support for previewing FLAC files in the web interface, provided
in #509 by marmotte32 on Github in the comments for this issue.

I have tested this against a script-installed copy of 4.2.0, and FLAC
preview is working, although auto-play isn't. I haven't tested to
confirm if this behavior matches MP3 and OGG uploads.

**This is a new feature**:

_Do the changes in this PR implement a new feature?_

**I have updated the documentation to reflect these changes**:

No changes needed; this bug is a missing file format in preview, and it
requires no updates to the documentation.

### Testing Notes

**What I did:**

I installed a LibreTime 4.2.0 system using the default installation
script against a fully-updated, brand new Debian 11 system. I logged
into the web interface, uploaded some FLAC files, and attempted to
preview them. They failed to preview.

I then replaced the preview_jplayer.js file with the contents in this PR
and then refreshed the page. I was able to preview the FLAC files and
hear the results in my local browser audio output.

**How you can replicate my testing:**

Perform the same steps above, or replace the same file in the
libretime_legacy_1 docker image to see the same results.

### **Links**

Closes: #509

---------

Co-authored-by: Kyle Robbertze <kyle@paddatrapper.com>
2025-01-10 15:46:18 +00:00
Kyle Robbertze 6f5275176e
chore: update docker compose commands (#3132)
### Description

Upstream has renamed docker-compose to docker compose for all commands

**This is a new feature**:

_Do the changes in this PR implement a new feature?_

**I have updated the documentation to reflect these changes**:

Yes
2025-01-09 16:09:28 +00:00
Scott McGrath 644d2b9ce5
fix(legacy): additional specifics added to CSVexport.js for RFC 4180 (#3131)
### Description

The existing implementation for exporting playout logs to a CSV file
incorporates a very simplified CSV format. Some aspects of the complete
[RFC](https://www.rfc-editor.org/rfc/rfc4180) are missing, such as
escaping of quotes, and quoting of fields that contain certain
characters. This is problematic for common office spreadsheet tools, and
practically, anything else. Many radio stations rely on this
functionality to work well for exporting playout data, for example, in
order to compile data for reporting requirements.

**This is a new feature**:

The changes in this PR add quoting of fields containing a comma, as well
as those containing a CR/LF. It also escapes quotes by doubling them.
I'm not sure it makes CSVexport.js completely RFC 4180 compliant, but it
is much closer than it was.

**I have updated the documentation to reflect these changes**:

I don't think there are any documentation changes necessary; this is
probably expected behavior for anyone trying to use the CSV exporter.

### Testing Notes

**What I did:**

To validate this, I did a clean install of Debian, cloned from the
official libretime repo, and applied the code as a patch to the
installer. I then proceeded with the install and then loaded a database
from a running system (so that I had some playout data to test with). I
then performed the playout history export and examined the resulting CSV
file and after seeing previously problematic fields properly quoted, was
convinced it looked the way I expected. I loaded the csv file into
Libreoffice Calc and did not see any errors.

**How you can replicate my testing:**

See "What I did" above, basically run the patch after cloning the
installer from the repo. You could also apply the changes to a running
system by applying the patch to the file:
/usr/share/libretime/legacy/public/js/libs/CSVexport.js
Be sure to clear your browser cache and do a hard reload of the web
interface, before re-testing.

### **Links**

Closes: #2477
2025-01-09 08:34:13 +00:00
Kyle Robbertze 267da9e438
chore: add pre-commit API check (#3120)
### Description

This is a way of ensuring the schema is up to date with every change.
This should be extended by fixing the PR api schema pipeline to squash
down all PR commits into a single change and checking the API schema for
that. Otherwise people will fix the schema after a failed pipeline and
the pipeline will continue to fail
2025-01-09 07:53:49 +00:00
Keoni Mahelona b1bdd6d9be
feat(api): added filters on genre & md5 for files api (#3127)
### Description
Added filters for genre and md5 to the files API, e.g.
`/api/v2/files?genre=soul`

**This is a new feature**: Yes

**I have updated the documentation to reflect these changes**: No
There should be a schema and docs that are generated automatically. I
don't know where that is.


### Testing Notes

**What I did:**
- Used docker to deploy locally
- Confirmed filters work at
http://localhost:8080/api/v2/files?genre=Soul

**How you can replicate my testing:**
- `make clean dev`
- Upload some files!
- Visit http://localhost:8080/api/v2/files
- You can use the filters
<img width="658" alt="Screenshot 2024-12-23 at 01 36 01"
src="https://github.com/user-attachments/assets/ba19f7f3-fb3e-495d-8937-d451c70d326c"
/>
<img width="652" alt="Screenshot 2024-12-23 at 01 35 56"
src="https://github.com/user-attachments/assets/c7191131-a963-463a-b52f-9d0952192555"
/>

_How can the reviewer validate this PR?_
- See above
- wrote tests to confirm filters work
2025-01-08 16:54:53 +00:00
Kyle Robbertze 92ca6b0341
ci: make libretime test user owner of test database (#3130)
Fix the legacy tests
2025-01-08 16:53:45 +00:00
Weblate (bot) 7f40743d83
chore(legacy): translations update from Hosted Weblate (#3129)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: marmotte <serge@e.email>
2025-01-08 10:48:31 +00:00
Scott McGrath 82d5af2dfb
fix(legacy): migrations from airtime 2.5.1 (#3123)
### Description

This fixes various problems in legacy migrations that were preventing a
successful database migration from Airtime 2.5.1. Previously, following
[the
procedure](https://libretime.org/docs/admin-manual/install/migrate-from-airtime/)
using the migrations provided in the Libretime 4.2.0 installer, without
the fixes in this PR, would either fail completely, or cause all of the
imported data to be completely deleted.


_migrations.py
If schema_version is not found in the table cc_prefs, it then checks for
system_version to have a value of '2.5.1' (in case this is an airtime
2.5.1 migration which will not have any schema_version in cc_pref). If
found, it prevents loading of the schema file, which is critical to
preserving the imported Airtime data.

0006_2_5_5
Removed a redundant addition of the image_path and description columns
to cc_show (done in earlier migration 003_2_5_2)

0015_2_5_17
Fixed a syntax error with adding the artwork column to cc_files

0023_3_0_0_alpha_9_1
Removed a redundant addition of the artwork column to cc_files (done in
earlier migration 0015_2_5_7)

### Documentation Changes

The [airtime migration
documentation](https://libretime.org/docs/admin-manual/install/migrate-from-airtime/)
already suggests a procedure to be followed, it just didn't work because
of problems within these migrations. The procedure as documented should
now work for those coming from Airtime 2.5.1.

### Testing Notes

**What I did:**

I attempted to migrate an actual airtime 2.5.1 database from a
production system containing a large amount of shows, tracks, and users.
I observed that the migration completed without errors, and that the
expected system state was achieved within Libretime. Specifically, the
calendar, library, authentication, and other aspects are populated with
the data that was present in the migrated Airtime database, and
Libretime is able to function using this data.

**How you can replicate my testing:**

Install Libretime 4.2.0. Restore a sample postrgresql database backup
from an Airtime 2.5.1 server. Apply the database migration. Restart the
services. Login and view the library, calender, etc.

### **Links**

Closes: #3121  
May also be related to, or even close (as a duplicate): #2563
2024-12-21 10:09:19 +00:00
libretime-bot cf172d5c7c chore(legacy): update locales 2024-12-09 02:37:27 +00:00
renovate[bot] f1c9ebf6f2
chore(deps): update dependency drf-spectacular to >=0.22.1,<0.29 (#3117)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[drf-spectacular](https://redirect.github.com/tfranzel/drf-spectacular)
| `>=0.22.1,<0.28` -> `>=0.22.1,<0.29` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/drf-spectacular/0.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/drf-spectacular/0.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/drf-spectacular/0.27.2/0.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/drf-spectacular/0.27.2/0.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>tfranzel/drf-spectacular (drf-spectacular)</summary>

###
[`v0.28.0`](https://redirect.github.com/tfranzel/drf-spectacular/blob/HEAD/CHANGELOG.rst#0280-2024-11-30)

[Compare
Source](https://redirect.github.com/tfranzel/drf-spectacular/compare/0.27.2...0.28.0)

- Fix lazy_reverse bug in views (`#&#8203;1339
<https://github.com/tfranzel/drf-spectacular/issues/1339>`\_)
- Extend query params explosion of non-DRF serializer `#&#8203;1315
<https://github.com/tfranzel/drf-spectacular/issues/1315>`\_
- consider pk_field on PrimaryKeyRelatedField when set `#&#8203;1335
<https://github.com/tfranzel/drf-spectacular/issues/1335>`\_
- fix unused OAuth2 scopes override `#&#8203;1319
<https://github.com/tfranzel/drf-spectacular/issues/1319>`\_
-   bugfix @&#8203;extend_schema_field raw schema already in OAS3.1
- some minors (resolves `#&#8203;1147
<https://github.com/tfranzel/drf-spectacular/issues/1147>`\_)
- fix OAS3.1 validator omission `#&#8203;1302
<https://github.com/tfranzel/drf-spectacular/issues/1302>`\_
- guard against broken **dir** impl `#&#8203;1296
<https://github.com/tfranzel/drf-spectacular/issues/1296>`\_
-   Add Django 5.1 as classifier \[jelmert]
-   No extra items in the oneOf list \[Vladimir]
- parametrize component registry identity `#&#8203;1288
<https://github.com/tfranzel/drf-spectacular/issues/1288>`\_
- make operation_id action position configurable `#&#8203;1264
<https://github.com/tfranzel/drf-spectacular/issues/1264>`\_
-   Fix for incorrect `issubclass()` check. \[Mike Moore]
- Correct the documentation of how to import extension snippets \[Alan
Crosswell]
-   Update OpenAPI docs links \[Nils Van Zuijlen]
- mitigate false positive in Django Debug Toolbar `#&#8203;1159
<https://github.com/tfranzel/drf-spectacular/issues/1159>`\_
-   Additional testcase \[Marti Raudsepp]
- Fix ChoiceField schema type with empty `choices=[]` \[Marti Raudsepp]
-   handle examples with nested properties pagination \[François Rejeté]
- add choice field display method handling `#&#8203;1228
<https://github.com/tfranzel/drf-spectacular/issues/1228>`\_
- Add support for stateless user authentication in SimpleJWT
(`#&#8203;1221
<https://github.com/tfranzel/drf-spectacular/issues/1221>`\_) \[Willem
Meints]
-   fix: set pydantic json mode to serialization \[Eric Butler]
-   fix: extend_schema_field with dict param and oas 3.1 \[Eric Butler]

Breaking changes / important additions:

-   Y-stream release due to the amount of small but important changes.
- Pydantic users might see a slightly different schema due to the change
in serialization method.

</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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuNDIuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicHl0aG9uIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-07 12:13:03 +00:00
dakriy 2985d8554a
feat(legacy): trused header sso auth (#3095)
### Description

Allows LibreTime to support Trusted Header SSO Authentication.

**This is a new feature**:

Yes

**I have updated the documentation to reflect these changes**:

Yes

### Testing Notes

**What I did:**

I spun up an Authelia/Traefik pair and configured them to protect
LibreTime according to Authelia's documentation, I then tested that you
could log in via the trusted headers, and tested that old methods of
authentication were not affected.

**How you can replicate my testing:**

Using the following `docker-compose.yml` file

```yml
services:
  postgres:
    image: postgres:15
    networks:
      - internal
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-libretime}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-libretime} # Change me !
    healthcheck:
      test: pg_isready -U libretime

  rabbitmq:
    image: rabbitmq:3.13-alpine
    networks:
      - internal
    environment:
      RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_DEFAULT_VHOST:-/libretime}
      RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER:-libretime}
      RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS:-libretime} # Change me !
    healthcheck:
      test: nc -z 127.0.0.1 5672

  playout:
    image: ghcr.io/libretime/libretime-playout:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    init: true
    ulimits:
      nofile: 1024
    depends_on:
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
      - libretime_playout:/app
    environment:
      LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080

  liquidsoap:
    image: ghcr.io/libretime/libretime-playout:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    command: /usr/local/bin/libretime-liquidsoap
    init: true
    ulimits:
      nofile: 1024
    ports:
      - 8001:8001
      - 8002:8002
    depends_on:
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
      - libretime_playout:/app
    environment:
      LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080

  analyzer:
    image: ghcr.io/libretime/libretime-analyzer:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    init: true
    ulimits:
      nofile: 1024
    depends_on:
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
      - libretime_storage:/srv/libretime
    environment:
      LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080

  worker:
    image: ghcr.io/libretime/libretime-worker:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    init: true
    ulimits:
      nofile: 1024
    depends_on:
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
    environment:
      LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080

  api:
    image: ghcr.io/libretime/libretime-api:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    init: true
    ulimits:
      nofile: 1024
    depends_on:
      - postgres
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
      - libretime_storage:/srv/libretime

  legacy:
    image: ghcr.io/libretime/libretime-legacy:${LIBRETIME_VERSION:-latest}
    networks:
      - internal
    init: true
    ulimits:
      nofile: 1024
    depends_on:
      - postgres
      - rabbitmq
    volumes:
      - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
      - libretime_assets:/var/www/html
      - libretime_storage:/srv/libretime

  nginx:
    image: nginx
    networks:
      - internal
      - net
    ports:
      - 8080:8080
    depends_on:
      - legacy
    volumes:
      - libretime_assets:/var/www/html:ro
      - libretime_storage:/srv/libretime:ro
      - ${NGINX_CONFIG_FILEPATH:-./nginx.conf}:/etc/nginx/conf.d/default.conf:ro
    labels:
      - 'traefik.enable=true'
      - 'traefik.docker.network=libretime_net'
      - 'traefik.http.routers.libretime.rule=Host(`libretime.example.com`)'
      - 'traefik.http.routers.libretime.entrypoints=https'
      - 'traefik.http.routers.libretime.tls=true'
      - 'traefik.http.routers.libretime.tls.options=default'
      - 'traefik.http.routers.libretime.middlewares=authelia@docker'
      - 'traefik.http.services.libretime.loadbalancer.server.port=8080'

  icecast:
    image: ghcr.io/libretime/icecast:2.4.4
    networks:
      - internal
    ports:
      - 8000:8000
    environment:
      ICECAST_SOURCE_PASSWORD: ${ICECAST_SOURCE_PASSWORD:-hackme} # Change me !
      ICECAST_ADMIN_PASSWORD: ${ICECAST_ADMIN_PASSWORD:-hackme} # Change me !
      ICECAST_RELAY_PASSWORD: ${ICECAST_RELAY_PASSWORD:-hackme} # Change me !

  traefik:
    image: traefik:v2.11.12
    container_name: traefik
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - net
    labels:
      - 'traefik.enable=true'
      - 'traefik.http.routers.api.rule=Host(`traefik.example.com`)'
      - 'traefik.http.routers.api.entrypoints=https'
      - 'traefik.http.routers.api.service=api@internal'
      - 'traefik.http.routers.api.tls=true'
      - 'traefik.http.routers.api.tls.options=default'
      - 'traefik.http.routers.api.middlewares=authelia@docker'
    ports:
      - '80:80'
      - '443:443'
    command:
      - '--api'
      - '--providers.docker=true'
      - '--providers.docker.exposedByDefault=false'
      - '--entrypoints.http=true'
      - '--entrypoints.http.address=:80'
      - '--entrypoints.http.http.redirections.entrypoint.to=https'
      - '--entrypoints.http.http.redirections.entrypoint.scheme=https'
      - '--entrypoints.https=true'
      - '--entrypoints.https.address=:443'
      - '--log=true'
      - '--log.level=DEBUG'

  authelia:
    image: authelia/authelia
    container_name: authelia
    networks:
      - net
    volumes:
      - ./authelia:/config
    labels:
      - 'traefik.enable=true'
      - 'traefik.http.routers.authelia.rule=Host(`auth.example.com`)'
      - 'traefik.http.routers.authelia.entrypoints=https'
      - 'traefik.http.routers.authelia.tls=true'
      - 'traefik.http.routers.authelia.tls.options=default'
      - 'traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/authz/forward-auth'  # yamllint disable-line rule:line-length
      - 'traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true'
      - 'traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email'  # yamllint disable-line rule:line-length
      - 'traefik.http.services.authelia.loadbalancer.server.port=9091'
    restart: unless-stopped
    environment:
      - TZ=America/Los_Angeles

volumes:
  postgres_data: {}
  libretime_storage: {}
  libretime_assets: {}
  libretime_playout: {}

networks:
  internal:
  net:
```

The following libretime dev config modification:
```yml
general:
  public_url: https://libretime.example.com
  auth: LibreTime_Auth_Adaptor_Header

header_auth:
  group_map:
    host: lt-host
    program_manager: lt-pm
    admin: lt-admin
    superadmin: lt-superadmin
```

And the following authelia config file:

```yml
---
###############################################################
#                   Authelia configuration                    #
###############################################################

server:
  address: 'tcp://:9091'
  buffers:
    read: 16384
    write: 16384

log:
  level: 'debug'

totp:
  issuer: 'authelia.com'

identity_validation:
  reset_password:
    jwt_secret: 'a_very_important_secret'

authentication_backend:
  file:
    path: '/config/users_database.yml'

access_control:
  default_policy: 'deny'
  rules:
    - domain: 'traefik.example.com'
      policy: 'one_factor'
    - domain: 'libretime.example.com'
      policy: 'one_factor'

session:
  secret: 'insecure_session_secret'

  cookies:
    - name: 'authelia_session'
      domain: 'example.com'  # Should match whatever your root protected domain is
      authelia_url: 'https://auth.example.com'
      expiration: '1 hour'  # 1 hour
      inactivity: '5 minutes'  # 5 minutes

regulation:
  max_retries: 3
  find_time: '2 minutes'
  ban_time: '5 minutes'

storage:
  encryption_key: 'you_must_generate_a_random_string_of_more_than_twenty_chars_and_configure_this'
  local:
    path: '/config/db.sqlite3'

notifier:
  filesystem:
    filename: '/config/notification.txt'
...
```

And the following authelia users database:

```yml
---
###############################################################
#                         Users Database                      #
###############################################################

# This file can be used if you do not have an LDAP set up.

# List of users
users:
  test:
    disabled: false
    displayname: "First Last"
    password: "$argon2id$v=19$m=16,t=2,p=1$SWVVVzcySlRLUEFkWWh2eA$qPs1ZmzmDXR/9WckDzIN9Q"
    email: test@example.com
    groups:
      - admins
      - dev
      - lt-admin
...
```

add the following entries to your `hosts` file:

```
127.0.0.1 traefik.example.com
127.0.0.1 auth.example.com
127.0.0.1 libretime.example.com
```

Then visit `libretime.example.com` in your browser, and login as the
user `test` with password of `password`. You should then be taken to the
LibreTime homepage, and when you click on login, you should be
automatically logged in.

### **Links**

https://www.authelia.com/integration/trusted-header-sso/introduction/
https://doc.traefik.io/traefik/middlewares/http/forwardauth/

---------

Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
2024-12-07 10:21:57 +00:00
Weblate (bot) f709c5026d
chore(legacy): translations update from Hosted Weblate (#3116)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: gfbdrgng <hnaofegnp@hldrive.com>
2024-12-07 10:12:20 +00:00
Kyle Robbertze 38a0bf98b2 fix: regenerate API schema 2024-12-07 10:06:24 +00:00
renovate[bot] 3be4bd7da1
chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.22.2 (#3119)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[adamchainz/django-upgrade](https://redirect.github.com/adamchainz/django-upgrade)
| repository | patch | `1.22.1` -> `1.22.2` |

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://redirect.github.com/renovatebot/renovate/discussions/new)
if you have any questions.

---

### Release Notes

<details>
<summary>adamchainz/django-upgrade (adamchainz/django-upgrade)</summary>

###
[`v1.22.2`](https://redirect.github.com/adamchainz/django-upgrade/blob/HEAD/CHANGELOG.rst#1222-2024-12-02)

[Compare
Source](https://redirect.github.com/adamchainz/django-upgrade/compare/1.22.1...1.22.2)

- Make these fixers work when `django.contrib.gis.db.models` is used to
import objects from `django.db.models`:

    -   `check_constraint_condition`
    -   `index_together`

`Issue #&#8203;513
<https://github.com/adamchainz/django-upgrade/issues/513>`\__.

</details>

---

### Configuration

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

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS40Mi40IiwidXBkYXRlZEluVmVyIjoiMzkuNDIuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-04 10:22:41 +00:00
renovate[bot] c0bb7df0ed
chore(deps): lock file maintenance (legacy/composer.json) (#3118)
This PR contains the following updates:

| Update | Change |
|---|---|
| lockFileMaintenance | All locks refreshed |

🔧 This Pull Request updates lock files to use the latest dependency
versions.

---

### Configuration

📅 **Schedule**: Branch creation - "after 4am and before 5am on monday"
(UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

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

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS40Mi40IiwidXBkYXRlZEluVmVyIjoiMzkuNDIuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicGhwIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-03 06:39:40 +00:00
renovate[bot] d09bf04379
chore(deps): lock file maintenance (legacy/composer.json) (#3115)
This PR contains the following updates:

| Update | Change |
|---|---|
| lockFileMaintenance | All locks refreshed |

🔧 This Pull Request updates lock files to use the latest dependency
versions.

---

### Configuration

📅 **Schedule**: Branch creation - "after 4am and before 5am on monday"
(UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

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

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicGhwIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-26 06:13:26 +00:00
dakriy 02a779b413
feat(analyzer): parse comment fields from mp3 files (#3082)
### Description

Upload comments from mp3 files into libretime `comments` and
`description` fields.

**This is a new feature**:

Yes

**I have updated the documentation to reflect these changes**:

No none required

### Testing Notes

**What I did:**

I uploaded tracks that contained comments into LibreTime and checked the
database to ensure that the `comments` and `description` fields were
correctly populated. I then went to the UI and confirmed that the
description field had the MP3 comment in it inside of the metadata
editor. I then uploaded some files that did not have comments to make
sure I did not break any existing functionality.

**How you can replicate my testing:**

Follow the steps in what I did

### **Links**

Fixes #526

---------

Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
2024-11-22 18:28:06 +00:00
Kyle Robbertze ce257a1f35 fix: regenerate API schema 2024-11-22 18:21:03 +00:00
Weblate (bot) 1939b0aec0
chore(legacy): translations update from Hosted Weblate (#3112)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2024-11-18 20:35:19 +00:00
Thomas Göttgens 2ac7e8a506
feat(api): enable writes to schedule table (#3109)
this fixes #3088

---------

Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
2024-11-18 16:10:54 +00:00
renovate[bot] 824f6d2f1b
chore(deps): update codecov/codecov-action action to v5 (#3111)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[codecov/codecov-action](https://redirect.github.com/codecov/codecov-action)
| action | major | `v4` -> `v5` |

---

### Release Notes

<details>
<summary>codecov/codecov-action (codecov/codecov-action)</summary>

###
[`v5`](https://redirect.github.com/codecov/codecov-action/compare/v4...v5)

[Compare
Source](https://redirect.github.com/codecov/codecov-action/compare/v4...v5)

</details>

---

### Configuration

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

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMS41IiwidXBkYXRlZEluVmVyIjoiMzkuMTEuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2kiLCJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-16 00:29:08 +00:00
Weblate (bot) 013d68e880
chore(legacy): translations update from Hosted Weblate (#3110)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2024-11-14 00:00:22 +00:00
renovate[bot] 83b56f9cd0
chore(deps): update lycheeverse/lychee-action action to v2.1.0 (#3108)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[lycheeverse/lychee-action](https://redirect.github.com/lycheeverse/lychee-action)
| action | minor | `v2.0.2` -> `v2.1.0` |

---

### Release Notes

<details>
<summary>lycheeverse/lychee-action (lycheeverse/lychee-action)</summary>

###
[`v2.1.0`](https://redirect.github.com/lycheeverse/lychee-action/releases/tag/v2.1.0):
Version 2.1.0

[Compare
Source](https://redirect.github.com/lycheeverse/lychee-action/compare/v2.0.2...v2.1.0)

#### What's Changed

- Add missing argument `failIfEmpty` by
[@&#8203;LitoMore](https://redirect.github.com/LitoMore) in
[https://github.com/lycheeverse/lychee-action/pull/261](https://redirect.github.com/lycheeverse/lychee-action/pull/261)
- Fix bugs about the exit code by
[@&#8203;YDX-2147483647](https://redirect.github.com/YDX-2147483647) in
[https://github.com/lycheeverse/lychee-action/pull/262](https://redirect.github.com/lycheeverse/lychee-action/pull/262)
- Bump lychee version to 0.17.0 by
[@&#8203;mre](https://redirect.github.com/mre) in
[https://github.com/lycheeverse/lychee-action/pull/263](https://redirect.github.com/lycheeverse/lychee-action/pull/263)

#### New Contributors

- [@&#8203;LitoMore](https://redirect.github.com/LitoMore) made their
first contribution in
[https://github.com/lycheeverse/lychee-action/pull/261](https://redirect.github.com/lycheeverse/lychee-action/pull/261)
- [@&#8203;YDX-2147483647](https://redirect.github.com/YDX-2147483647)
made their first contribution in
[https://github.com/lycheeverse/lychee-action/pull/262](https://redirect.github.com/lycheeverse/lychee-action/pull/262)

**Full Changelog**:
https://github.com/lycheeverse/lychee-action/compare/v2...v2.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 is behind base branch, 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS43LjEiLCJ1cGRhdGVkSW5WZXIiOiIzOS43LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImNpIiwiZGVwZW5kZW5jaWVzIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-08 18:08:43 +00:00
renovate[bot] c4e10ed861 chore(deps): lock file maintenance (legacy/composer.json) 2024-10-29 09:42:02 +00:00
libretime-bot 8d80e70580 chore(legacy): update locales 2024-10-28 02:21:53 +00:00
Weblate (bot) 26db439d34
chore(legacy): translations update from Hosted Weblate (#3105)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2024-10-26 17:03:52 +01:00
renovate[bot] 380c6d0944 chore(deps): update pre-commit hook asottile/pyupgrade to v3.19.0 2024-10-23 11:21:05 +00:00
Thomas Göttgens 7992a9be2d
fix: intro/outro playlist unset was impossible (#3101)
this reinstates the boolean fields in the database from the original PR
to work around a foreign key contraint. THE UI remains unchanged
2024-10-21 18:34:39 +01:00
libretime-bot 2870857abc chore(legacy): update locales 2024-10-21 02:20:09 +00:00
Thomas Göttgens 0b221f4fff
fix(legacy): support Postgresql 12 syntax (#3103)
fixes #3102
2024-10-19 23:20:30 +01:00
renovate[bot] 188cd5d671
chore(deps): update dependency uvicorn to >=0.17.6,<0.33.0 (#3096)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [uvicorn](https://redirect.github.com/encode/uvicorn)
([changelog](https://redirect.github.com/encode/uvicorn/blob/master/CHANGELOG.md))
| `>=0.17.6,<0.32.0` -> `>=0.17.6,<0.33.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/uvicorn/0.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/uvicorn/0.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/uvicorn/0.31.1/0.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/uvicorn/0.31.1/0.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>encode/uvicorn (uvicorn)</summary>

###
[`v0.32.0`](https://redirect.github.com/encode/uvicorn/blob/HEAD/CHANGELOG.md#0320-2024-10-15)

[Compare
Source](https://redirect.github.com/encode/uvicorn/compare/0.31.1...0.32.0)

##### Added

- Officially support Python 3.13
([#&#8203;2482](https://redirect.github.com/encode/uvicorn/issues/2482))
- Warn when `max_request_limit` is exceeded
([#&#8203;2430](https://redirect.github.com/encode/uvicorn/issues/2430))

</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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJweXRob24iXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-17 17:49:25 +01:00
Weblate (bot) 74da2ef0b4
chore(legacy): translations update from Hosted Weblate (#3099)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: Maurizio Castelvetro <castelvetro@gmail.com>
2024-10-17 17:49:06 +01:00
renovate[bot] 08b85a44bc chore(deps): lock file maintenance (legacy/composer.json) 2024-10-17 08:23:20 +00:00
renovate[bot] 2f0422b1ae chore(deps): update lycheeverse/lychee-action action to v2.0.2 2024-10-16 00:51:33 +00:00
renovate[bot] 9ce88538d3 chore(deps): update pre-commit hook asottile/pyupgrade to v3.18.0 2024-10-15 22:03:30 +00:00
Thomas Göttgens 299be3c142
feat: use custom intro/outro playlists per show (#2941)
### Description

Having a global intro and outro playlist in settings is not very
flexible for special programming. This adds an override intro/outro
playlist per show. If it is not set, the global one is used. also it's
ignored if there's no autloading at all.

**I have updated the documentation to reflect these changes**:

Yes

### Testing Notes

**What I did:**
Schedule 2 shows, one without defining custom lists, one with defining
custom lists. one hour before the show starts it should be populated
correctly. If you define a global list it shojuld be replaced with the
per-show list.

---------

Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
2024-10-14 21:07:41 +01:00
dakriy 5b5c68c628
feat(legacy): implement subset sum solution to show scheduling (#3019)
### Description

When running a radio station it is generally a good idea to reduce dead
air time. The current algorithm for adding tracks to a block/show can
leave a lot of dead air time at the end as it doesn't use a very good
algorithm. Adding tracks to a show until it is full while making it as
full as possible is a well known problem in computer science. It is the
[Subset Sum Problem](https://en.wikipedia.org/wiki/Subset_sum_problem).
This PR implements a Randomized Greedy with Local Improvement (RGLI)
approximation solution for the Subset Sum Problem. The new algorithm is
only used when sort type is random and overflow is not enabled and there
is no limit on the number of tracks that can be used.

**This is a new feature**:

Improvement on an existing feature. 

**I have not updated the documentation to reflect these changes**:

I did not update the documentation because the current scheduling
algorithm is not currently documented and its existing features have not
changed.

### Testing Notes

**What I did:**

I first attempted a fully polynomial time approximation scheme solution,
however it is really bad at finding good solutions for high density
values and can kinda slow the more tracks/time you have. So I instead
implemented an RGLI which is O(nlogn) and has been giving much better
results.

I implemented the solution in a separate project and tested it and timed
the values with a normal distribution of 500 songs with a mean of 3
minutes and a standard deviation of 1 minute. With a show size of 1 hour
the algorithm took around 10-15 ms to run. When adjusting the block size
and track size the algorithm still was pretty quick to run. Am going to
be testing on an instance with lots of tracks later, will update PR when
I have done that.

**How you can replicate my testing:**

_How can the reviewer validate this PR?_

### **Links**

Closes #3018
2024-10-13 15:31:08 +02:00
dakriy 16deaf08c6
feat(legacy): show filename and size on edit page and add filename datatable column (#3083)
### Description

Add File Name and Size to the metadata editor screen, and added a File
Name column to the tracks data table.

**This is a new feature**:

Yes

**I have updated the documentation to reflect these changes**:

No, just some simple UI additions so no documentation needed.

### Testing Notes

**What I did:**

I uploaded some tracks, clicked on edit, and saw that the filename and
size showed up at the top. I also went out to the tracks view and added
the File Name column and saw that the filename displayed properly.

**How you can replicate my testing:**

Do what I did

### **Links**

Fixes #3053
2024-10-13 08:45:54 +01:00
renovate[bot] 6d474c2733 chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.22.1 2024-10-12 15:04:49 +00:00
renovate[bot] 2202618150
chore(deps): update lycheeverse/lychee-action action to v2 (#3091)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[lycheeverse/lychee-action](https://redirect.github.com/lycheeverse/lychee-action)
| action | major | `v1.10.0` -> `v2.0.0` |

---

### Release Notes

<details>
<summary>lycheeverse/lychee-action (lycheeverse/lychee-action)</summary>

###
[`v2.0.0`](https://redirect.github.com/lycheeverse/lychee-action/releases/tag/v2.0.0):
Version 2.0.0

[Compare
Source](https://redirect.github.com/lycheeverse/lychee-action/compare/v1.10.0...v2.0.0)

#### Breaking Changes

**Note:** This release improves the action's robustness by changing
default behaviors. Changes are only required if you want to opt out of
the new failure conditions. Most users won't need to modify their
existing configurations.

##### Fail pipeline on error by default

We've changed the default behavior: pipelines will now fail on broken
links automatically. This addresses user feedback that not failing on
broken links was unexpected (see [issue
#&#8203;71](https://redirect.github.com/lycheeverse/lychee-action/issues/71)).

**What you need to do:**

-   Update to version 2 of this action to apply this change.
- Users of the `lychee-action@master` branch don't need to make any
changes, as `fail: true` has been the default there for a while.
- If you prefer the old behavior, explicitly set `fail` to `false` when
updating:

```yaml
- name: Link Checker
  id: lychee
  uses: lycheeverse/lychee-action@v2
  with:
    fail: false  # Don't fail action on broken links
```

##### Fail pipeline if no links were found

Similar to the above change, we now fail the pipeline if no links are
found during a run. This helps warn users about potential configuration
issues.

**What you need to do:**

- If you expect links to be found in your pipeline run, you don't need
to do anything.
- If you expect no links in your pipeline run, you can opt out like
this:

```yaml
- name: Link Checker
  id: lychee
  uses: lycheeverse/lychee-action@v2
  with:
    failIfEmpty: false  # Don't fail action if no links were found
```

For a more detailed description of the technical aspects behind these
changes, please see the full changelog below.

#### What's Changed

- feat: change to use the full version tag with v-\* prefix by
[@&#8203;kemingy](https://redirect.github.com/kemingy) in
[https://github.com/lycheeverse/lychee-action/pull/204](https://redirect.github.com/lycheeverse/lychee-action/pull/204)
- Add `failIfEmpty` argument (fixes
[#&#8203;84](https://redirect.github.com/lycheeverse/lychee-action/issues/84))
by [@&#8203;mre](https://redirect.github.com/mre) in
[https://github.com/lycheeverse/lychee-action/pull/86](https://redirect.github.com/lycheeverse/lychee-action/pull/86)
- Fail pipeline on error by default (fixes
[#&#8203;71](https://redirect.github.com/lycheeverse/lychee-action/issues/71))
by [@&#8203;mre](https://redirect.github.com/mre) in
[https://github.com/lycheeverse/lychee-action/pull/85](https://redirect.github.com/lycheeverse/lychee-action/pull/85)
- Exit in case output is set in args and action input by
[@&#8203;mre](https://redirect.github.com/mre) in
[https://github.com/lycheeverse/lychee-action/pull/227](https://redirect.github.com/lycheeverse/lychee-action/pull/227)
- v1 will automatically use latest version by
[@&#8203;jacobdalamb](https://redirect.github.com/jacobdalamb) in
[https://github.com/lycheeverse/lychee-action/pull/228](https://redirect.github.com/lycheeverse/lychee-action/pull/228)
- Remove unneeded text by
[@&#8203;jacobdalamb](https://redirect.github.com/jacobdalamb) in
[https://github.com/lycheeverse/lychee-action/pull/229](https://redirect.github.com/lycheeverse/lychee-action/pull/229)
- Clarify README.md defaults by
[@&#8203;paddyroddy](https://redirect.github.com/paddyroddy) in
[https://github.com/lycheeverse/lychee-action/pull/230](https://redirect.github.com/lycheeverse/lychee-action/pull/230)
- Adjust for new asset naming scheme by
[@&#8203;dscho](https://redirect.github.com/dscho) in
[https://github.com/lycheeverse/lychee-action/pull/234](https://redirect.github.com/lycheeverse/lychee-action/pull/234)
- Test various lychee versions by
[@&#8203;mre](https://redirect.github.com/mre) in
[https://github.com/lycheeverse/lychee-action/pull/235](https://redirect.github.com/lycheeverse/lychee-action/pull/235)
- Better cleanup of old lychee assets by
[@&#8203;mre](https://redirect.github.com/mre) in
[https://github.com/lycheeverse/lychee-action/pull/237](https://redirect.github.com/lycheeverse/lychee-action/pull/237)
- Bump peter-evans/create-issue-from-file from v4 to v5 by
[@&#8203;AndreiCherniaev](https://redirect.github.com/AndreiCherniaev)
in
[https://github.com/lycheeverse/lychee-action/pull/241](https://redirect.github.com/lycheeverse/lychee-action/pull/241)
- Remove dots from table by
[@&#8203;AndreiCherniaev](https://redirect.github.com/AndreiCherniaev)
in
[https://github.com/lycheeverse/lychee-action/pull/242](https://redirect.github.com/lycheeverse/lychee-action/pull/242)
- README: update actions/cache to v4 by
[@&#8203;sebastiaanspeck](https://redirect.github.com/sebastiaanspeck)
in
[https://github.com/lycheeverse/lychee-action/pull/243](https://redirect.github.com/lycheeverse/lychee-action/pull/243)
- Set exit_code correctly as output by
[@&#8203;sebastiaanspeck](https://redirect.github.com/sebastiaanspeck)
in
[https://github.com/lycheeverse/lychee-action/pull/245](https://redirect.github.com/lycheeverse/lychee-action/pull/245)
- action: fix failing CI by
[@&#8203;sebastiaanspeck](https://redirect.github.com/sebastiaanspeck)
in
[https://github.com/lycheeverse/lychee-action/pull/246](https://redirect.github.com/lycheeverse/lychee-action/pull/246)
- Split up steps in action by
[@&#8203;mre](https://redirect.github.com/mre) in
[https://github.com/lycheeverse/lychee-action/pull/248](https://redirect.github.com/lycheeverse/lychee-action/pull/248)
- Bump version to 0.16.x, respect new tag names by
[@&#8203;mre](https://redirect.github.com/mre) in
[https://github.com/lycheeverse/lychee-action/pull/249](https://redirect.github.com/lycheeverse/lychee-action/pull/249)
- Test latest lychee version tag by
[@&#8203;mre](https://redirect.github.com/mre) in
[https://github.com/lycheeverse/lychee-action/pull/236](https://redirect.github.com/lycheeverse/lychee-action/pull/236)

#### New Contributors

- [@&#8203;kemingy](https://redirect.github.com/kemingy) made their
first contribution in
[https://github.com/lycheeverse/lychee-action/pull/204](https://redirect.github.com/lycheeverse/lychee-action/pull/204)
- [@&#8203;paddyroddy](https://redirect.github.com/paddyroddy) made
their first contribution in
[https://github.com/lycheeverse/lychee-action/pull/230](https://redirect.github.com/lycheeverse/lychee-action/pull/230)
- [@&#8203;dscho](https://redirect.github.com/dscho) made their first
contribution in
[https://github.com/lycheeverse/lychee-action/pull/234](https://redirect.github.com/lycheeverse/lychee-action/pull/234)
- [@&#8203;AndreiCherniaev](https://redirect.github.com/AndreiCherniaev)
made their first contribution in
[https://github.com/lycheeverse/lychee-action/pull/241](https://redirect.github.com/lycheeverse/lychee-action/pull/241)
- [@&#8203;sebastiaanspeck](https://redirect.github.com/sebastiaanspeck)
made their first contribution in
[https://github.com/lycheeverse/lychee-action/pull/243](https://redirect.github.com/lycheeverse/lychee-action/pull/243)

**Full Changelog**:
https://github.com/lycheeverse/lychee-action/compare/v1...v1.11.0

</details>

---

### Configuration

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

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMTQuMCIsInVwZGF0ZWRJblZlciI6IjM4LjExNC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaSIsImRlcGVuZGVuY2llcyJdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-10 10:17:10 +01:00
renovate[bot] ba69de0a2b chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v24.10.0 2024-10-09 04:05:54 +00:00
dakriy 32cad0faa4
fix(analyzer): make ffmpeg filters less aggressive (#3086)
### Description

FFMPEG filters for silence detection are too aggressive.

**This is a new feature**:

No

**I have updated the documentation to reflect these changes**:

No

### Testing Notes

**What I did:**

Ran tests and made sure they passed

**How you can replicate my testing:**

Upload files that start out quiet or end quiet and see that the
cue-in/cue-out points don't cut off the track. Or just run tests as
there are files that do that

### **Links**

Closes: #2629
2024-10-07 20:55:18 +01:00
renovate[bot] 2643813fb7 chore(deps): update pre-commit hook pre-commit/pre-commit-hooks to v5 2024-10-07 03:56:39 +00:00
renovate[bot] a37050df9e
chore(deps): update dependency uvicorn to >=0.17.6,<0.32.0 (#3081)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [uvicorn](https://redirect.github.com/encode/uvicorn)
([changelog](https://redirect.github.com/encode/uvicorn/blob/master/CHANGELOG.md))
| `>=0.17.6,<0.31.0` -> `>=0.17.6,<0.32.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/uvicorn/0.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/uvicorn/0.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/uvicorn/0.30.6/0.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/uvicorn/0.30.6/0.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>encode/uvicorn (uvicorn)</summary>

###
[`v0.31.0`](https://redirect.github.com/encode/uvicorn/blob/HEAD/CHANGELOG.md#0310-2024-09-27)

[Compare
Source](https://redirect.github.com/encode/uvicorn/compare/0.30.6...0.31.0)

##### Added

Improve `ProxyHeadersMiddleware`
([#&#8203;2468](https://redirect.github.com/encode/uvicorn/issues/2468))
and
([#&#8203;2231](https://redirect.github.com/encode/uvicorn/issues/2231)):

- Fix the host for requests from clients running on the proxy server
itself.
- Fallback to host that was already set for empty x-forwarded-for
headers.
- Also allow to specify IP Networks as trusted hosts. This greatly
simplifies deployments
on docker swarm/kubernetes, where the reverse proxy might have a dynamic
IP.
    -   This includes support for IPv6 Address/Networks.

</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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC45Ny4wIiwidXBkYXRlZEluVmVyIjoiMzguOTcuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicHl0aG9uIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 16:32:04 +01:00
Kyle Robbertze bac903f4e5
chore: update django-stubs version (#3085)
Upstream has fixed the issue.

Closes: #3064
2024-09-30 16:15:28 +01: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
renovate[bot] 004b784d09 chore(deps): lock file maintenance (legacy/composer.json) 2024-09-17 09:26:00 +00:00
Weblate (bot) 1ae9a7b368
chore(legacy): translations update from Hosted Weblate (#3077)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2024-09-11 21:37:19 +01:00
Weblate (bot) 905008d72c
chore(legacy): translations update from Hosted Weblate (#3076)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2024-09-10 21:40:35 +01:00
libretime-bot 3b768644b2 chore(legacy): update locales 2024-09-09 02:14:15 +00:00
renovate[bot] 43f286c53d
chore(deps): update dependency friendsofphp/php-cs-fixer to <3.64.1 (#3058) 2024-09-07 21:14:32 +02:00
Jonas L. a3865aa6ee
fix: add missing file for nb_NO locale (#3075)
### Description

Related to #3073
2024-09-07 21:13:52 +02:00
renovate[bot] 4d737319d8 chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.21.0 2024-09-07 18:41:07 +00:00
Jonas L. e614fbcf6c
feat: add Norwegian Bokmål locale (#3073)
### Description

Locale was requested on Weblate.
2024-09-06 14:43:40 +01:00
renovate[bot] d929871060 chore(deps): lock file maintenance (legacy/composer.json) 2024-09-03 10:37:34 +00:00
cdr78621 e344154d42
docs: update SoundExchange costs (#3070)
updated the minimum SoundExchange royalties for
non-profits/non-commercial

### Description

_Short summary of what is the issue and the solution._

**This is a new feature**:

_Do the changes in this PR implement a new feature?_

**I have updated the documentation to reflect these changes**:

_Are there documentation changes required as a result of these changes?
See
https://github.com/libretime/libretime/wiki/Documentation-Requirements_

### Testing Notes

**What I did:**

_What did you do to validate this PR?_

**How you can replicate my testing:**

_How can the reviewer validate this PR?_

### **Links**

_Issues links or other related resources. Use the line Closes:
#bug_number to
link a bug in the issue tracker._
2024-08-29 08:57:12 +01:00
dakriy 8c26505622
feat(legacy): order by filename when lptime is null (#3069)
### Description

It is good to have a deterministic order when doing explicit file
sorting. This sorts by filename when last played time is null. I would
expect filename to be the next sort after last played time in case of a
tie, and was surprised to find it was not explicit. It should not break
any existing use cases.

**This is a new feature**:

Kind of?

**I have updated the documentation to reflect these changes**:

I did not update any documentation as this way seems like the logical
expected way to do the sort.

### Testing Notes

**What I did:**

I loaded up some tracks into a local libretime instance, let some of
them play, and tested that all the old sorts worked as before as well as
tracks getting sorted by filepath in case of a last played time
2024-08-24 07:47:25 +01:00
dakriy c883d0f2d5
fix(legacy): fix filename criteria searching (#3068)
### Description

The filename criteria searched the full file path and as such does not
work as expected.

**This is a new feature**:

No

**I have updated the documentation to reflect these changes**:

No docs changes are required as this is fixing a bug to make things work
as expected and documented.

### Testing Notes

**What I did:**

I uploaded some files, and tested that the file name criteria worked as
expected.

**How you can replicate my testing:**

Spin up the stack, upload some files and make sure the filename criteria
works as expected.
2024-08-20 22:39:53 +01:00
renovate[bot] f5355d6b61
chore(deps): lock file maintenance (legacy/composer.json) (#3067)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Update | Change |
|---|---|
| lockFileMaintenance | All locks refreshed |

🔧 This Pull Request updates lock files to use the latest dependency
versions.

---

### Configuration

📅 **Schedule**: Branch creation - "after 4am and before 5am on monday"
(UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

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

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

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

---

This PR was generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View the
[repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yMC4xIiwidXBkYXRlZEluVmVyIjoiMzguMjAuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicGhwIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-13 12:39:37 +01:00
renovate[bot] fdad983b48
chore(deps): update dependency gunicorn to v23 (#3066)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [gunicorn](https://togithub.com/benoitc/gunicorn)
([changelog](https://docs.gunicorn.org/en/stable/news.html)) |
`>=22.0.0,<22.1` -> `>=22.0.0,<23.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/gunicorn/23.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/gunicorn/23.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/gunicorn/22.0.0/23.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/gunicorn/22.0.0/23.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>benoitc/gunicorn (gunicorn)</summary>

###
[`v23.0.0`](https://togithub.com/benoitc/gunicorn/releases/tag/23.0.0)

[Compare
Source](https://togithub.com/benoitc/gunicorn/compare/22.0.0...23.0.0)

Gunicorn 23.0.0 has been released. This version fix the numerous
security vulnerabilities. You're invited to upgrade asap your own
installation.

# 23.0.0 - 2024-08-10

-   minor docs fixes (:pr:`3217`, :pr:`3089`, :pr:`3167`)
-   worker_class parameter accepts a class (:pr:`3079`)
- fix deadlock if request terminated during chunked parsing (:pr:`2688`)
- permit receiving Transfer-Encodings: compress, deflate, gzip
(:pr:`3261`)
- permit Transfer-Encoding headers specifying multiple encodings. note:
no parameters, still (:pr:`3261`)
- sdist generation now explicitly excludes sphinx build folder
(:pr:`3257`)
- decode bytes-typed status (as can be passed by gevent) as utf-8
instead of raising `TypeError` (:pr:`2336`)
- raise correct Exception when encounting invalid chunked requests
(:pr:`3258`)
- the SCRIPT_NAME and PATH_INFO headers, when received from allowed
forwarders, are no longer restricted for containing an underscore
(:pr:`3192`)
- include IPv6 loopback address `[::1]` in default for
:ref:`forwarded-allow-ips` and :ref:`proxy-allow-ips` (:pr:`3192`)

\*\* NOTE \*\*

- The SCRIPT_NAME change mitigates a regression that appeared first in
the 22.0.0 release
- Review your :ref:`forwarded-allow-ips` setting if you are still not
seeing the SCRIPT_NAME transmitted
- Review your :ref:`forwarder-headers` setting if you are missing
headers after upgrading from a version prior to 22.0.0

\*\* Breaking changes \*\*

-   refuse requests where the uri field is empty (:pr:`3255`)
- refuse requests with invalid CR/LR/NUL in heade field values
(:pr:`3253`)
- remove temporary `--tolerate-dangerous-framing` switch from 22.0
(:pr:`3260`)
- If any of the breaking changes affect you, be aware that now refused
requests can post a security problem, especially so in setups involving
request pipe-lining and/or proxies.

</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 was generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View the
[repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yMC4xIiwidXBkYXRlZEluVmVyIjoiMzguMjAuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicHl0aG9uIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-12 09:11:02 +01:00
renovate[bot] 4b5ab6a2ad
chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v24.8.0 (#3065)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](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 | minor | `24.4.2` -> `24.8.0` |

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.8.0`](https://togithub.com/psf/black-pre-commit-mirror/compare/24.4.2...24.8.0)

[Compare
Source](https://togithub.com/psf/black-pre-commit-mirror/compare/24.4.2...24.8.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 was generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View the
[repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yMC4xIiwidXBkYXRlZEluVmVyIjoiMzguMjAuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 16:29:11 +01:00
renovate[bot] 72692c4b77
chore(deps): update dependency django-filter to >=2.4.0,<24.4 (#3060)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [django-filter](https://togithub.com/carltongibson/django-filter)
([changelog](https://togithub.com/carltongibson/django-filter/blob/main/CHANGES.rst))
| `>=2.4.0,<24.3` -> `>=2.4.0,<24.4` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/django-filter/24.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/django-filter/24.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/django-filter/24.2/24.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/django-filter/24.2/24.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>carltongibson/django-filter (django-filter)</summary>

###
[`v24.3`](https://togithub.com/carltongibson/django-filter/blob/HEAD/CHANGES.rst#Version-243-2024-08-02)

[Compare
Source](https://togithub.com/carltongibson/django-filter/compare/24.2...24.3)

-   Adds official support for Django 5.1.

-   Allow using dictionaries for grouped choices on Django 5.0+.

    Thanks to Sævar Öfjörð Magnússon.

- Adds `unknown_field_behavior` FilterSet option to allowing warning and
ignore behaviours for unknown field types during FilterSet generation.

    Thanks to Loes.

</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 was generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View the
[repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJweXRob24iXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-04 12:43:07 +09:00
Kyle Robbertze 1f9a504996
ci: downgrade django-stubs to not install v5.x (#3062)
### Description

This is until upstream fixes
https://github.com/typeddjango/django-stubs/issues/2304
2024-08-04 12:00:56 +09:00
Kyle Robbertze 65d435d9e7
ci: fix broken link check (#3061)
### Description

Ubuntu no longer maintains the package list for bionic. Linked to from
old release notes
2024-08-04 11:47:37 +09:00
renovate[bot] 8136160125
chore(deps): update pre-commit hook asottile/pyupgrade to v3.17.0 (#3059)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [asottile/pyupgrade](https://togithub.com/asottile/pyupgrade) |
repository | minor | `v3.16.0` -> `v3.17.0` |

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>asottile/pyupgrade (asottile/pyupgrade)</summary>

###
[`v3.17.0`](https://togithub.com/asottile/pyupgrade/compare/v3.16.0...v3.17.0)

[Compare
Source](https://togithub.com/asottile/pyupgrade/compare/v3.16.0...v3.17.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 was generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View the
[repository job
log](https://developer.mend.io/github/libretime/libretime).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-30 10:20:07 +09:00
renovate[bot] 9ee1783afd
chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.20.0 (#3057)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[adamchainz/django-upgrade](https://togithub.com/adamchainz/django-upgrade)
| repository | minor | `1.19.0` -> `1.20.0` |

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>adamchainz/django-upgrade (adamchainz/django-upgrade)</summary>

###
[`v1.20.0`](https://togithub.com/adamchainz/django-upgrade/blob/HEAD/CHANGELOG.rst#1200-2024-07-19)

[Compare
Source](https://togithub.com/adamchainz/django-upgrade/compare/1.19.0...1.20.0)

- Fix the `admin_register` fixer to avoid rewriting when there are
duplicate `ModelAdmin` classes in the file.

`Issue #&#8203;471
<https://github.com/adamchainz/django-upgrade/issues/471>`\__.

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjQzMS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-20 17:48:56 +01:00
Weblate (bot) 482f2215a0
chore(legacy): translations update from Hosted Weblate (#3055)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2024-07-08 21:20:21 +01:00
Harry W 70735d4431
docs: use new docker compose command (#3054)
Improve the Docker install documentation, along with the `docker
compose` commands.
2024-07-06 10:48:30 +01:00
renovate[bot] e0b1eba1bb chore(deps): update amannn/action-semantic-pull-request action to v5.5.3 2024-06-30 21:04:32 +00:00
Thomas Göttgens e095cb2a5f
fix: docker warnings "keywords casing do not match" (#3048)
### Description

docker wants the 'AS' in uppercase if the 'FROM' is also in uppercase

### Testing Notes

These warnings are eliminated with this patch

``` => WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 5)                                                                                                                                    0.1s
 => WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 21)                                                                                                                                   0.1s
 => WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 51)                                                                                                                                   0.1s
 => WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 62)
[...]
```
2024-06-29 20:26:44 +01:00
Weblate (bot) dad3d74188
chore(legacy): translations update from Hosted Weblate (#3046)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2024-06-28 19:23:03 +01:00
renovate[bot] d97c4d427a
chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.19.0 (#3047)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[adamchainz/django-upgrade](https://togithub.com/adamchainz/django-upgrade)
| repository | minor | `1.18.0` -> `1.19.0` |

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>adamchainz/django-upgrade (adamchainz/django-upgrade)</summary>

###
[`v1.19.0`](https://togithub.com/adamchainz/django-upgrade/blob/HEAD/CHANGELOG.rst#1190-2024-06-27)

[Compare
Source](https://togithub.com/adamchainz/django-upgrade/compare/1.18.0...1.19.0)

- Add Django 4.2+ fixer to rewrite `index_together` declarations into
`indexes` declarations in model `Meta` classes.
    This fixer can make changes that require migrations.
Add a `test for pending migrations
<https://adamj.eu/tech/2024/06/23/django-test-pending-migrations/>`\__
to ensure that you do not miss these.

`PR #&#8203;464
<https://github.com/adamchainz/django-upgrade/pull/464>`\__.

-   Fix tracking of AST node parents.
    This may have fixed some subtle bugs in these fixers:

    -   `admin_register`
    -   `assert_form_error`
    -   `default_app_config`
    -   `management_commands`
    -   `request_headers`
    -   `settings_database_postgresql`
    -   `settings_storages`
    -   `testcase_databases`
    -   `use_l10n`
    -   `utils_timezone`

If you see any new changes, or had them previously disabled, please
report an issue so we can extra tests to the test suite.

`PR #&#8203;465
<https://github.com/adamchainz/django-upgrade/pull/465>`\__.

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjAuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-28 13:59:31 +01:00
renovate[bot] 609b4e7a03 chore(deps): lock file maintenance (legacy/composer.json) 2024-06-25 09:45:08 +00:00
libretime-bot e5aceef71a chore(legacy): update locales 2024-06-24 02:01:54 +00:00
Jonas L 63572fdab9
docs: add missing v4.2.0 release note (#3044)
Forgot to prepare the release note for v4.2.0.
2024-06-22 22:58:15 +02:00
libretime-bot 60db15e8e5
chore(main): release 4.2.0 (#3028)
🤖 I have created a release *beep* *boop*
---


## [4.2.0](https://github.com/libretime/libretime/compare/4.1.0...4.2.0)
(2024-06-22)


### Features

* **legacy:** add current date macro to string block criteria
([#3013](https://github.com/libretime/libretime/issues/3013))
([451652b](451652bc40))
* **legacy:** add filename block criteria
([#3015](https://github.com/libretime/libretime/issues/3015))
([4642b6c](4642b6c08e))


### Bug Fixes

* pin pip version to &lt;24.1 to allow installing pytz (celery)
([#3043](https://github.com/libretime/libretime/issues/3043))
([646bc81](646bc81724))
* playlist allocates inaccurate time to smartblocks
([#3026](https://github.com/libretime/libretime/issues/3026))
([2b43e51](2b43e51ed1))


### Performance Improvements

* optimize the api image health check
([#3038](https://github.com/libretime/libretime/issues/3038))
([d99d6e1](d99d6e1a68))
* optimize the rabbitmq health check
([#3037](https://github.com/libretime/libretime/issues/3037))
([9684214](9684214425))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
2024-06-22 18:16:49 +02:00
Cristian Oneț 9684214425
perf: optimize the rabbitmq health check (#3037)
### Description

Running `rabbitmq-diagnostics` every 30s is a resource intensive
operation wasting cpu cycles.
2024-06-22 18:10:55 +02:00
renovate[bot] 97b2f0e257
chore(deps): update dependency requests to >=2.32.2,<2.33 [security] (#3032)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [requests](https://requests.readthedocs.io)
([source](https://togithub.com/psf/requests),
[changelog](https://togithub.com/psf/requests/blob/master/HISTORY.md)) |
`>=2.31.0,<2.32` -> `>=2.32.2,<2.33` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/requests/2.32.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/requests/2.32.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/requests/2.31.0/2.32.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/requests/2.31.0/2.32.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

### GitHub Vulnerability Alerts

####
[CVE-2024-35195](https://togithub.com/psf/requests/security/advisories/GHSA-9wx4-h78v-vm56)

When making requests through a Requests `Session`, if the first request
is made with `verify=False` to disable cert verification, all subsequent
requests to the same origin will continue to ignore cert verification
regardless of changes to the value of `verify`. This behavior will
continue for the lifecycle of the connection in the connection pool.

### Remediation
Any of these options can be used to remediate the current issue, we
highly recommend upgrading as the preferred mitigation.

* Upgrade to `requests>=2.32.0`.
* For `requests<2.32.0`, avoid setting `verify=False` for the first
request to a host while using a Requests Session.
* For `requests<2.32.0`, call `close()` on `Session` objects to clear
existing connections if `verify=False` is used.

### Related Links
*
[https://github.com/psf/requests/pull/6655](https://togithub.com/psf/requests/pull/6655)

---

### Release Notes

<details>
<summary>psf/requests (requests)</summary>

###
[`v2.32.2`](https://togithub.com/psf/requests/blob/HEAD/HISTORY.md#2322-2024-05-21)

[Compare
Source](https://togithub.com/psf/requests/compare/v2.32.1...v2.32.2)

**Deprecations**

-   To provide a more stable migration for custom HTTPAdapters impacted
    by the CVE changes in 2.32.0, we've renamed `_get_connection` to
    a new public API, `get_connection_with_tls_context`. Existing custom
    HTTPAdapters will need to migrate their code to use this new API.
`get_connection` is considered deprecated in all versions of
Requests>=2.32.0.

A minimal (2-line) example has been provided in the linked PR to ease
migration, but we strongly urge users to evaluate if their custom
adapter
is subject to the same issue described in CVE-2024-35195.
([#&#8203;6710](https://togithub.com/psf/requests/issues/6710))

###
[`v2.32.1`](https://togithub.com/psf/requests/blob/HEAD/HISTORY.md#2321-2024-05-20)

[Compare
Source](https://togithub.com/psf/requests/compare/v2.32.0...v2.32.1)

**Bugfixes**

-   Add missing test certs to the sdist distributed on PyPI.

###
[`v2.32.0`](https://togithub.com/psf/requests/blob/HEAD/HISTORY.md#2320-2024-05-20)

[Compare
Source](https://togithub.com/psf/requests/compare/v2.31.0...v2.32.0)

**Security**

- Fixed an issue where setting `verify=False` on the first request from
a
Session will cause subsequent requests to the *same origin* to also
ignore
    cert verification, regardless of the value of `verify`.

(https://github.com/psf/requests/security/advisories/GHSA-9wx4-h78v-vm56)

**Improvements**

-   `verify=True` now reuses a global SSLContext which should improve
request time variance between first and subsequent requests. It should
also minimize certificate load time on Windows systems when using a
Python
version built with OpenSSL 3.x.
([#&#8203;6667](https://togithub.com/psf/requests/issues/6667))
-   Requests now supports optional use of character detection
    (`chardet` or `charset_normalizer`) when repackaged or vendored.
    This enables `pip` and other projects to minimize their vendoring
    surface area. The `Response.text()` and `apparent_encoding` APIs
will default to `utf-8` if neither library is present.
([#&#8203;6702](https://togithub.com/psf/requests/issues/6702))

**Bugfixes**

-   Fixed bug in length detection where emoji length was incorrectly
calculated in the request content-length.
([#&#8203;6589](https://togithub.com/psf/requests/issues/6589))
- Fixed deserialization bug in JSONDecodeError.
([#&#8203;6629](https://togithub.com/psf/requests/issues/6629))
-   Fixed bug where an extra leading `/` (path separator) could lead
urllib3 to unnecessarily reparse the request URI.
([#&#8203;6644](https://togithub.com/psf/requests/issues/6644))

**Deprecations**

- Requests has officially added support for CPython 3.12
([#&#8203;6503](https://togithub.com/psf/requests/issues/6503))
- Requests has officially added support for PyPy 3.9 and 3.10
([#&#8203;6641](https://togithub.com/psf/requests/issues/6641))
- Requests has officially dropped support for CPython 3.7
([#&#8203;6642](https://togithub.com/psf/requests/issues/6642))
- Requests has officially dropped support for PyPy 3.7 and 3.8
([#&#8203;6641](https://togithub.com/psf/requests/issues/6641))

**Documentation**

-   Various typo fixes and doc improvements.

**Packaging**

-   Requests has started adopting some modern packaging practices.
The source files for the projects (formerly `requests`) is now located
in `src/requests` in the Requests sdist.
([#&#8203;6506](https://togithub.com/psf/requests/issues/6506))
- Starting in Requests 2.33.0, Requests will migrate to a PEP 517 build
system
using `hatchling`. This should not impact the average user, but
extremely old
versions of packaging utilities may have issues with the new packaging
format.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "" (UTC), 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:eyJjcmVhdGVkSW5WZXIiOiIzNy40MTAuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQxMy4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJweXRob24iXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-22 17:47:09 +02:00
Jonas L 646bc81724
fix: pin pip version to <24.1 to allow installing pytz (celery) (#3043)
Related to https://github.com/libretime/libretime/issues/2983
2024-06-22 17:35:30 +02:00
Jonas L 4e0953d513
refactor: remove non existent asset file (#3042)
The file is non existent.

Added in c669d3cb47

Removed in ea2a6b3f68
2024-06-22 17:18:16 +02:00
Jonas L c96f78df9f
fix: pin pip version to <21.4 to allow installing pytz (celery) (#3041)
Related to https://github.com/libretime/libretime/issues/2983
2024-06-22 16:33:23 +02:00
Jonas L 6958070eec
test: ensure the context cleanup is executed (#3040)
See
https://pylint.readthedocs.io/en/latest/user_guide/messages/warning/contextmanager-generator-missing-cleanup.html
2024-06-22 13:31:13 +02:00
Cristian Oneț d99d6e1a68
perf: optimize the api image health check (#3038)
### Description

Having curl installed in the API container improves operations and the
efficiency of the health check. Launching python to do a single http
call is an overkill.


Co-authored-by: Jonas L <jooola@users.noreply.github.com>
2024-06-22 13:18:50 +02:00
dakriy 4642b6c08e
feat(legacy): add filename block criteria (#3015)
### Description

Adds filename block criteria because sometimes you just need the
filename and the ID3 tags won't do.

Closes  #3014
2024-06-22 11:51:59 +02:00
renovate[bot] 7f3f318601
chore(deps): update dependency friendsofphp/php-cs-fixer to <3.59.4 (#3030)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.58.2` -> `<3.59.4` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.59.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.59.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.58.1/3.59.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.58.1/3.59.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.59.3`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3593)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.59.2...v3.59.3)

- refactor: refactor to templated trait+interface
([#&#8203;7988](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7988))

###
[`v3.59.2`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3592)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.59.1...v3.59.2)

- fix: "list" is reserved type
([#&#8203;8087](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8087))
- chore: add missing type in method prototype
([#&#8203;8088](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8088))
- CI: bump Ubuntu version
([#&#8203;8086](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8086))
- deps: bump infection to unblock PHPUnit 11, and few more as chore
([#&#8203;8083](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8083))

###
[`v3.59.1`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3591)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.59.0...v3.59.1)

- fix: Bump React's JSON decoder buffer size
([#&#8203;8068](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8068))
- docs: options - handle enums in dicts
([#&#8203;8082](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8082))

###
[`v3.59.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3590)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.58.1...v3.59.0)

- feat(Docker): Multi-arch build (support for `arm64`)
([#&#8203;8079](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8079))
- feat: `@PhpCsFixer` ruleset - normalise implicit backslashes in single
quoted strings
([#&#8203;7965](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7965))
- feat: `SimpleToComplexStringVariableFixer` - support variable being an
array
([#&#8203;8064](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8064))
- fix: Look up for PHPDoc's variable name by only chars allowed in the
variables
([#&#8203;8062](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8062))
- fix: Update `PhpUnitTestCaseStaticMethodCallsFixer::STATIC_METHODS`
([#&#8203;8073](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8073))
- fix: `native_constant_invocation` - array constants with native
constant names
([#&#8203;8008](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8008))
- chore: update PHPStan
([#&#8203;8060](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8060))
- CI: Update PHPStan to 1.11.4
([#&#8203;8074](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8074))
- docs: don't expose list as config type for dicts
([#&#8203;8081](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8081))
- docs: Make wording in `final_class` docs less dismissive
([#&#8203;8065](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8065))
- docs: Update 1-bug_report.yml
([#&#8203;8067](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8067))
- DX: Remove version from Docker Compose files
([#&#8203;8061](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8061))

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4zOTMuMCIsInVwZGF0ZWRJblZlciI6IjM3LjM5My4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJwaHAiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-22 11:45:50 +02:00
renovate[bot] f12392e276
chore(deps): update dependency django-cors-headers to >=3.14.0,<4.5 (#3036)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[django-cors-headers](https://togithub.com/adamchainz/django-cors-headers)
([changelog](https://togithub.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst))
| `>=3.14.0,<4.4` -> `>=3.14.0,<4.5` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/django-cors-headers/4.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/django-cors-headers/4.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/django-cors-headers/4.3.1/4.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/django-cors-headers/4.3.1/4.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>adamchainz/django-cors-headers (django-cors-headers)</summary>

###
[`v4.4.0`](https://togithub.com/adamchainz/django-cors-headers/blob/HEAD/CHANGELOG.rst#440-2024-06-19)

[Compare
Source](https://togithub.com/adamchainz/django-cors-headers/compare/4.3.1...4.4.0)

-   Support Django 5.1.

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy40MTAuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQxMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJweXRob24iXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-22 11:45:37 +02:00
Jonas L e5a8baafa8
chore: fix broken link check (#3039)
Only show organizations avatars.
2024-06-22 11:44:35 +02:00
dakriy 451652bc40
feat(legacy): add current date macro to string block criteria (#3013)
### Description

It is useful to be able to automatically filter tracks to a certain date
or day when scheduling tracks for playback. This adds the ability to do
just that in any string filter with the `date{format}` macro.

 
 Closes:  #3012
2024-06-22 11:19:21 +02:00
renovate[bot] 13a8e38beb chore(deps): update docker/build-push-action action to v6 2024-06-19 14:52:05 +00:00
renovate[bot] 02cd85a845 chore(deps): update docker/bake-action action to v5 2024-06-19 14:51:31 +00:00
renovate[bot] 826aac1c05
chore(deps): lock file maintenance (legacy/composer.json) (#3033)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Update | Change |
|---|---|
| lockFileMaintenance | All locks refreshed |

🔧 This Pull Request updates lock files to use the latest dependency
versions.

---

### Configuration

📅 **Schedule**: Branch creation - "after 4am and before 5am on monday"
(UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

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

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- 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:eyJjcmVhdGVkSW5WZXIiOiIzNy40MTAuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQxMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJwaHAiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-18 09:18:21 +01:00
libretime-bot 01253b31fc chore(legacy): update locales 2024-06-10 02:02:19 +00:00
renovate[bot] f09bae6856 chore(deps): update pre-commit hook asottile/pyupgrade to v3.16.0 2024-06-10 01:03:36 +00:00
renovate[bot] 5ed15f9722
chore(deps): update dependency friendsofphp/php-cs-fixer to <3.58.2 (#3016)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.56.2` -> `<3.58.2` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.58.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.58.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.56.1/3.58.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.56.1/3.58.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.58.1`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3581)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.58.0...v3.58.1)

- fix: `ConstantCaseFixer` - do not change class constant usages
([#&#8203;8055](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8055))
- fix: `PhpUnitTestClassRequiresCoversFixer` - do not add annotation
when attribute with leading slash present
([#&#8203;8054](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8054))

###
[`v3.58.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3580)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.57.2...v3.58.0)

- chore(doc): Use FQCN for parallel config in documentation
([#&#8203;8029](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8029))
- chore: fix typo in `PhpUnitTestClassRequiresCoversFixerTest`
([#&#8203;8047](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8047))
- chore: RandomApiMigrationFixer - do not modify configuration property
([#&#8203;8033](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8033))
- chore: Tokens::setCode - further improvements to cache
([#&#8203;8053](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8053))
- chore: update PHPStan
([#&#8203;8045](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8045))
- docs: Add missing imports in a cookbook about creating custom rules
([#&#8203;8031](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8031))
- docs: fix deprecated string interpolation style
([#&#8203;8036](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8036))
- docs: global_namespace_import - simplify allowed config types
([#&#8203;8023](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8023))
- feat(GroupImportFixer): Ability to configure which type of imports
should be grouped
([#&#8203;8046](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8046))
- fix: clear `Tokens::$blockStartCache` and `Tokens::$blockEndCache`
when calling `Tokens::setCode`
([#&#8203;8051](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8051))
- fix: correctly handle PHP closing tag with `simplified_null_return`
([#&#8203;8049](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8049))
- fix: `ConstantCaseFixer` - do not change namespace
([#&#8203;8004](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8004))
- fix: `PhpUnitAttributesFixer` - do not add attribute if already
present
([#&#8203;8043](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8043))
- fix: `PhpUnitSizeClassFixer` - do not add annotation when there are
attributes
([#&#8203;8044](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8044))
- fix: `PhpUnitTestClassRequiresCoversFixer` - attribute detection when
class is `readonly`
([#&#8203;8042](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8042))

###
[`v3.57.2`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3572)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.57.1...v3.57.2)

- docs: better ConfigurableFixer allowed types
([#&#8203;8024](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8024))
- docs: Improve Docker usage example
([#&#8203;8021](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8021))
- feat: Report used memory to 2 decimal digits only
([#&#8203;8017](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8017))
- fix: Support named args in `ParallelConfigFactory::detect()`
([#&#8203;8026](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8026))
- fix: `php_unit_test_class_requires_covers` Attribute detection when
class is final
([#&#8203;8016](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8016))

###
[`v3.57.1`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3571)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.57.0...v3.57.1)

- chore: update PHPDoc in `Preg::matchAll`
([#&#8203;8012](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8012))
- fix: Runner - handle no files while in parallel runner
([#&#8203;8015](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8015))

###
[`v3.57.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3570)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.56.2...v3.57.0)

- feat: Ability to run Fixer with parallel runner 🎉
([#&#8203;7777](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7777))

###
[`v3.56.2`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3562)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.56.1...v3.56.2)

- chore: update PHPStan
([#&#8203;8010](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8010))
- DX: Fix Mess Detector violations
([#&#8203;8007](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8007))
- DX: Install PCov extension for local Docker
([#&#8203;8006](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8006))

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNjMuNSIsInVwZGF0ZWRJblZlciI6IjM3LjM3Ny44IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJwaHAiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-07 21:52:47 +02:00
renovate[bot] 23c7411996
chore(deps): update dependency uvicorn to >=0.17.6,<0.31.0 (#3022)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [uvicorn](https://togithub.com/encode/uvicorn)
([changelog](https://togithub.com/encode/uvicorn/blob/master/CHANGELOG.md))
| `>=0.17.6,<0.30.0` -> `>=0.17.6,<0.31.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/uvicorn/0.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/uvicorn/0.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/uvicorn/0.29.0/0.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/uvicorn/0.29.0/0.30.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>encode/uvicorn (uvicorn)</summary>

###
[`v0.30.0`](https://togithub.com/encode/uvicorn/blob/HEAD/CHANGELOG.md#0300-2024-05-28)

[Compare
Source](https://togithub.com/encode/uvicorn/compare/0.29.0...0.30.0)

##### Added

- New multiprocess manager
([#&#8203;2183](https://togithub.com/encode/uvicorn/issues/2183))
- Allow `ConfigParser` or a `io.IO[Any]` on `log_config`
([#&#8203;1976](https://togithub.com/encode/uvicorn/issues/1976))

##### Fixed

- Suppress side-effects of signal propagation
([#&#8203;2317](https://togithub.com/encode/uvicorn/issues/2317))
- Send `content-length` header on 5xx
([#&#8203;2304](https://togithub.com/encode/uvicorn/issues/2304))

##### Deprecated

- Deprecate the `uvicorn.workers` module
([#&#8203;2302](https://togithub.com/encode/uvicorn/issues/2302))

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNzcuOCIsInVwZGF0ZWRJblZlciI6IjM3LjM3Ny44IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJweXRob24iXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-07 21:52:36 +02:00
Rob Hailman 2b43e51ed1
fix: playlist allocates inaccurate time to smartblocks (#3026)
### Description

In the existing logic of `retrieveMediaFiles`, the time remaining in
show is calculated incorrectly in some scenarios. Each time a duration
is subtracted from `showLimit`, it is not the duration of the files just
added, but instead the length of all files scheduled. This can cause
cases where a smart block set to "time remaining in show" fails to
completely fill the program.

For example, given a 30 minute show, and a playlist like follows:

1. a 5 minute track
2. another 5 minute track
3. smart block, set to time remaining in show

When item 1 is added, `showLimit` is reduced by 5 minutes as expected.
When item 2 is added, `showLimit` is reduced by 10 minutes (as both
items 1 and 2 are counted). As a result, the smart block is only run to
fill 15 minutes, leaving 5 minutes unfilled.

This PR resolves this issue, by recalculating `showLimit` from the
original duration rather than subtracting from a running total.

This change not does implement a new feature and should not require any
changes to documentation.

### Testing Notes

**What I did:**

- On a dev environment, set up a playlist as described above.
- Before applying this PR, created a show and scheduled playlist, and
confirmed issue was reproducible
- Applied PR and repeated, and confirmed show was filled completely.

Also repeated this testing with sample data from our production
instance.

Here is a sample schedule of the "before" case with sample data, showing
the issue

![image](https://github.com/libretime/libretime/assets/8541186/f91849fb-606f-410e-bef5-a7abc8e7b7f4)
The smartblock that scheduled the music is set to allow last track to
overflow, but 3m55s was left unscheduled.

Using the same playlist and same track library, here is a sample
schedule after the PR applied:

![image](https://github.com/libretime/libretime/assets/8541186/e9d46fbb-50e6-4859-a3de-f5a90a6021c0)
As expected, the show is fully scheduled with the last track
overflowing.
 
Additionally, I've applied this PR as a hot fix to our production
instance, where it has been running for a week without issue.

Also performed spot tests of playlists without smart blocks, smart
blocks scheduled directly (not in playlists) and autoloading playlists,
with no change in behaviour observed as a result of this change.

**How you can replicate my testing:**

Same test steps as I followed should be able to reproduce issue &
validate fix on any instance.

### **Links**

Not directly related to issue fixed by #3019, but also addresses the
issue of dead air left at end of blocks.

Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
2024-06-05 17:01:57 +01:00
renovate[bot] 10996e847b chore(deps): lock file maintenance (legacy/composer.json) 2024-06-05 15:55:53 +00:00
Kyle Robbertze 6432efd791
docs: fix typo (#3027)
Minor typo that was being picked up by pre-commit
2024-06-05 16:54:12 +01:00
renovate[bot] c3e30f1857 chore(deps): update pre-commit hook codespell-project/codespell to v2.3.0 2024-05-30 01:58:26 +00:00
renovate[bot] 9974b4631d chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.18.0 2024-05-30 01:57:22 +00:00
renovate[bot] 5d2ad43039 chore(deps): lock file maintenance (legacy/composer.json) 2024-05-14 11:11:50 +00:00
renovate[bot] 848612ae6f chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.17.0 2024-05-12 16:43:03 +00:00
renovate[bot] f77c8dbaaa
chore(deps): update dependency friendsofphp/php-cs-fixer to <3.56.2 (#3008)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.54.1` -> `<3.56.2` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.54.0/3.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.54.0/3.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.56.1`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3561)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.56.0...v3.56.1)

- chore: improve PHPDoc typehints
([#&#8203;7994](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7994))
- CI: Allow any integer in PHPStan error for Token's constructor
([#&#8203;8000](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/8000))
- fix: Better array shape in `PhpUnitDedicateAssertFixer`
([#&#8203;7999](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7999))
- fix: `ConstantCaseFixer` - do not touch typed constants
([#&#8203;7998](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7998))

###
[`v3.56.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3560)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.55.0...v3.56.0)

- feat: `TrailingCommaInMultilineFixer` - handle trailing comma in
language constructs
([#&#8203;7989](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7989))
- fix: `TrailingCommaInMultilineFixer` - language constructs should be
covered by arguments, not parameters
([#&#8203;7990](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7990))
- chore: remove invalid comment
([#&#8203;7987](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7987))
- DX: Cache optimisation
([#&#8203;7985](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7985))

###
[`v3.55.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3550)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.54.0...v3.55.0)

- feat: Introduce `OrderedAttributesFixer`
([#&#8203;7395](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7395))
- chore: few SCA fixes and dev-tools update
([#&#8203;7969](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7969))
- chore: fix phpdoc types
([#&#8203;7977](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7977))
- chore: narrow PHPDoc types
([#&#8203;7979](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7979))
- chore: Normalize implicit backslahes in single quoted strings
internally
([#&#8203;7786](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7786))
- chore: phpdoc - rely on strict list/tuple/assoc instead of array
([#&#8203;7978](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7978))
- chore: PhpUnitDataProviderNameFixer - follow config creation pattern
([#&#8203;7980](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7980))
- chore: Preg - drop half-support for array-pattern
([#&#8203;7976](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7976))
- chore: re-use CodeHasher
([#&#8203;7984](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7984))
- chore: RuleSetsTest - assert that Fixer is configurable
([#&#8203;7961](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7961))
- chore: sugar syntax
([#&#8203;7986](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7986))
- chore: Tokens should be always a list
([#&#8203;7698](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7698))
- CI: Ad-hoc fix for MacOS jobs
([#&#8203;7970](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7970))
- CI: Fix calculating diff between branches in PRs
([#&#8203;7973](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7973))
- DX: allow to enforce cache mechanism by env var
([#&#8203;7983](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7983))
- DX: do not typehint fixed-length arrays as lists
([#&#8203;7974](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7974))
- DX: Prevent having deprecated fixers listed as successors of other
deprecated fixers
([#&#8203;7967](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7967))
- DX: Resolve/Ignore PHPStan issues on level 6 + bump to level 7 with
new baseline
([#&#8203;7971](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7971))
- DX: use `list` type in PHPDoc
([#&#8203;7975](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7975))
- fix: `PhpUnitAttributesFixer` - fix for `#[RequiresPhp]` exceeding its
constructor parameters
([#&#8203;7966](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7966))
- test: don't count comment after class as another classy element
([#&#8203;7982](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7982))

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNDAuMTAiLCJ1cGRhdGVkSW5WZXIiOiIzNy4zNTEuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicGhwIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-11 11:10:18 +02:00
libretime-bot 4442664c36 chore(legacy): update locales 2024-05-06 01:56:09 +00:00
libretime-bot 1a985a4b37
chore(main): release 4.1.0 (#2893)
🤖 I have created a release *beep* *boop*
---


## [4.1.0](https://github.com/libretime/libretime/compare/4.0.0...4.1.0)
(2024-05-05)


### Features

* **api:** implement file deletion
([#2960](https://github.com/libretime/libretime/issues/2960))
([9757b1b](9757b1b78c))
* build schedule events exclusively in playout
([#2946](https://github.com/libretime/libretime/issues/2946))
([40b4fc7](40b4fc7f66))
* **legacy:** add aac/opus support to dashboard player
([#2881](https://github.com/libretime/libretime/issues/2881))
([95283ef](95283efc1f))
* **legacy:** disable public radio page and redirect to login
([#2903](https://github.com/libretime/libretime/issues/2903))
([170d095](170d09545e))
* **legacy:** trim overbooked shows after autoloading a playlist
([#2897](https://github.com/libretime/libretime/issues/2897))
([a95ce3d](a95ce3d229))
* **legacy:** visual cue point editor
([#2947](https://github.com/libretime/libretime/issues/2947))
([da02e74](da02e74f21))
* start celery worker programmatically
([#2988](https://github.com/libretime/libretime/issues/2988))
([9c548b3](9c548b365e))


### Bug Fixes

* **analyzer:** backslash non utf-8 data when probing replaygain
([#2931](https://github.com/libretime/libretime/issues/2931))
([29f73e0](29f73e0dcb)),
closes [#2910](https://github.com/libretime/libretime/issues/2910)
* apply replay gain preferences on scheduled files
([#2945](https://github.com/libretime/libretime/issues/2945))
([35d0dec](35d0dec4a8))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.49.1
([#2899](https://github.com/libretime/libretime/issues/2899))
([3e05748](3e05748d2d))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.51.1
([#2963](https://github.com/libretime/libretime/issues/2963))
([22c303c](22c303cfff))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.53.1
([#2972](https://github.com/libretime/libretime/issues/2972))
([9192aaa](9192aaa2bb))
* **deps:** update dependency gunicorn to v22 (security)
([#2993](https://github.com/libretime/libretime/issues/2993))
([a2cf769](a2cf7697a9))
* incorrect docker compose version
([#2975](https://github.com/libretime/libretime/issues/2975))
([634e6e2](634e6e236d))
* **installer:** setup the worker entrypoint
([#2996](https://github.com/libretime/libretime/issues/2996))
([71b20ae](71b20ae3c9))
* **legacy:** allow deleting file with api token
([#2995](https://github.com/libretime/libretime/issues/2995))
([86da46e](86da46ee3a))
* **legacy:** allow updating track types code
([#2955](https://github.com/libretime/libretime/issues/2955))
([270aa08](270aa08ae6))
* **legacy:** avoid crash when lot of streams in configuration
([#2915](https://github.com/libretime/libretime/issues/2915))
([12dd477](12dd477312))
* **legacy:** ensure validation is performed on the track type form
([#2985](https://github.com/libretime/libretime/issues/2985))
([5ad69bf](5ad69bf0b7))
* **legacy:** fix hidden fields in edit file form
([#2932](https://github.com/libretime/libretime/issues/2932))
([f4b260f](f4b260fdf7))
* **legacy:** replay_gain_modifier should be a system preference
([#2943](https://github.com/libretime/libretime/issues/2943))
([37d1a76](37d1a7685e))
* remove obsolete docker compose version
([#2982](https://github.com/libretime/libretime/issues/2982))
([fb0584b](fb0584b021))
* trigger legacy tasks manager every 5m
([#2987](https://github.com/libretime/libretime/issues/2987))
([7040d0e](7040d0e4bd))
* **worker:** ensure celery beat is started
([#3007](https://github.com/libretime/libretime/issues/3007))
([bfde17e](bfde17edf7))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: jo <ljonas@riseup.net>
2024-05-05 23:45:39 +02:00
Jonas L bfde17edf7
fix(worker): ensure celery beat is started (#3007)
The celery seem to ignore the first flag when `worker` is not part of
the `argv`.
2024-05-05 23:32:29 +02:00
Thomas Göttgens 9757b1b78c
feat(api): implement file deletion (#2960)
This implements the file delete to the Django API. Previously, the code was only manipulating the database while leaving the file in place.

Co-authored-by: jo <ljonas@riseup.net>
2024-05-05 22:44:30 +02:00
Thomas Göttgens 86da46ee3a
fix(legacy): allow deleting file with api token (#2995)
When calling DELETE "/rest/media/<id>" the call fails with 'unknown error'
if it's not within a GUI session. The StoredFile delete method checks
for user permissions regardless of if a user is even known.
2024-05-05 22:26:27 +02:00
renovate[bot] 201e85e537
chore(deps): update dependency django-stubs to v5 (#3006)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [django-stubs](https://togithub.com/typeddjango/django-stubs)
([changelog](https://togithub.com/typeddjango/django-stubs/releases)) |
`>=1.14.0,<5` -> `>=1.14.0,<6` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/django-stubs/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/django-stubs/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/django-stubs/4.2.7/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/django-stubs/4.2.7/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>typeddjango/django-stubs (django-stubs)</summary>

###
[`v5.0.0`](https://togithub.com/typeddjango/django-stubs/releases/tag/5.0.0)

[Compare
Source](https://togithub.com/typeddjango/django-stubs/compare/4.2.7...5.0.0)

#### Announcements

- `QuerySet` class no longer derives from `Collection`. If you run into
errors like `incompatible type "_QuerySet[User, User]"; expected
"Collection[User]"`, [please read this
announcement](https://togithub.com/typeddjango/django-stubs/discussions/2095).

#### Headline changes

- Remove incorrect `Collection` base class and `__contains__` method
from `QuerySet` by [@&#8203;fidoriel](https://togithub.com/fidoriel) in
[https://github.com/typeddjango/django-stubs/pull/1925](https://togithub.com/typeddjango/django-stubs/pull/1925)
- Pyright joins the workflow in an advisory capacity by
[@&#8203;jorenham](https://togithub.com/jorenham) in
[https://github.com/typeddjango/django-stubs/pull/2019](https://togithub.com/typeddjango/django-stubs/pull/2019)
- feat: Allow setting django_settings_module from env by
[@&#8203;armanckeser](https://togithub.com/armanckeser) in
[https://github.com/typeddjango/django-stubs/pull/2021](https://togithub.com/typeddjango/django-stubs/pull/2021)
- Add `ManyRelatedManager.through` attribute and generic type parameter
by [@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/2026](https://togithub.com/typeddjango/django-stubs/pull/2026)

#### What's Changed

- Make `StrPromise` not inherit from `Sequence[str]` by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1841](https://togithub.com/typeddjango/django-stubs/pull/1841)
- Update and prepare for Django 5.0 by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1859](https://togithub.com/typeddjango/django-stubs/pull/1859)
- Ensure mypy plugin processes inherited many to many fields by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/1864](https://togithub.com/typeddjango/django-stubs/pull/1864)
- Include ModelBase subclasses in plugin base class hook condition by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/1863](https://togithub.com/typeddjango/django-stubs/pull/1863)
- \[5.0] Added many new a-prefixed asynchronous methods by
[@&#8203;bigfootjon](https://togithub.com/bigfootjon) in
[https://github.com/typeddjango/django-stubs/pull/1741](https://togithub.com/typeddjango/django-stubs/pull/1741)
- Remove section regarding custom queryset methods from README by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/1865](https://togithub.com/typeddjango/django-stubs/pull/1865)
- Fix type of `AppConfig.models_module` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1866](https://togithub.com/typeddjango/django-stubs/pull/1866)
- Allow `None` in settings `MIGRATION_MODULES` dict values by
[@&#8203;asottile](https://togithub.com/asottile) in
[https://github.com/typeddjango/django-stubs/pull/1871](https://togithub.com/typeddjango/django-stubs/pull/1871)
- Add type hints for `JSONField.from_db_value` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/1879](https://togithub.com/typeddjango/django-stubs/pull/1879)
- Fix/pyright unknown by
[@&#8203;dephiros](https://togithub.com/dephiros) in
[https://github.com/typeddjango/django-stubs/pull/1873](https://togithub.com/typeddjango/django-stubs/pull/1873)
- Fix type hints of `converters` in `urls.resolvers` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1892](https://togithub.com/typeddjango/django-stubs/pull/1892)
- Update mypy to 1.8.0 by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1885](https://togithub.com/typeddjango/django-stubs/pull/1885)
- Add `@type_check_only` to all Protocols and known stubs-only classes
by [@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1894](https://togithub.com/typeddjango/django-stubs/pull/1894)
- Fix types for UniqueConstraint instantiation by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/1880](https://togithub.com/typeddjango/django-stubs/pull/1880)
- Add `ModuleType` as a possible type to `URLResolver.urlconf_name` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1891](https://togithub.com/typeddjango/django-stubs/pull/1891)
- Fix type hint of `URLPattern.default_args` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1895](https://togithub.com/typeddjango/django-stubs/pull/1895)
- Update ruff and silence `PYI046` by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1907](https://togithub.com/typeddjango/django-stubs/pull/1907)
- Use PEP 570 syntax by [@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1908](https://togithub.com/typeddjango/django-stubs/pull/1908)
- Fix readme settings example by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1910](https://togithub.com/typeddjango/django-stubs/pull/1910)
- Fix type hint of `EmailBackend.ssl_keyfile` and
`EmailBackend.ssl_certfile` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1911](https://togithub.com/typeddjango/django-stubs/pull/1911)
- Add type of `django.VERSION` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1916](https://togithub.com/typeddjango/django-stubs/pull/1916)
- Added `CommandParser` to `commands.__init__` by
[@&#8203;jamesbraza](https://togithub.com/jamesbraza) in
[https://github.com/typeddjango/django-stubs/pull/1927](https://togithub.com/typeddjango/django-stubs/pull/1927)
- \[5.0] add `assume_scheme` to forms.URLField by
[@&#8203;asottile](https://togithub.com/asottile) in
[https://github.com/typeddjango/django-stubs/pull/1929](https://togithub.com/typeddjango/django-stubs/pull/1929)
- Fix return type of `BaseModelAdmin.formfield_for_dbfield` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1934](https://togithub.com/typeddjango/django-stubs/pull/1934)
- Revert `pre-commit==3.6.1` by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1936](https://togithub.com/typeddjango/django-stubs/pull/1936)
- Fix type hint of `Response.set_cookie.max_age` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1941](https://togithub.com/typeddjango/django-stubs/pull/1941)
- 5.0: Add ChoicesType by [@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1942](https://togithub.com/typeddjango/django-stubs/pull/1942)
- Add through_defaults for RelatedManager methods by
[@&#8203;mfosterw](https://togithub.com/mfosterw) in
[https://github.com/typeddjango/django-stubs/pull/1943](https://togithub.com/typeddjango/django-stubs/pull/1943)
- Update type hints of `core.signing` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1945](https://togithub.com/typeddjango/django-stubs/pull/1945)
- \[5.0] Update `core.validators` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1947](https://togithub.com/typeddjango/django-stubs/pull/1947)
- \[5.0] Update `core.paginator` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1946](https://togithub.com/typeddjango/django-stubs/pull/1946)
- Generic `forms.ModelChoiceField` by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[https://github.com/typeddjango/django-stubs/pull/1889](https://togithub.com/typeddjango/django-stubs/pull/1889)
- Support processing of other relations and fields when one is broken by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/1877](https://togithub.com/typeddjango/django-stubs/pull/1877)
- Allowing `set` in `model_to_dict`'s `exclude` by
[@&#8203;jamesbraza](https://togithub.com/jamesbraza) in
[https://github.com/typeddjango/django-stubs/pull/1952](https://togithub.com/typeddjango/django-stubs/pull/1952)
- \[5.0] Add django.db.models.GeneratedField by
[@&#8203;palfrey](https://togithub.com/palfrey) in
[https://github.com/typeddjango/django-stubs/pull/1944](https://togithub.com/typeddjango/django-stubs/pull/1944)
- Fix type hint of `BaseEngine.template_dirs` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1954](https://togithub.com/typeddjango/django-stubs/pull/1954)
- Update type hints of contrib.auth.hashers by
[@&#8203;yhay81](https://togithub.com/yhay81) in
[https://github.com/typeddjango/django-stubs/pull/1955](https://togithub.com/typeddjango/django-stubs/pull/1955)
- deps: Upgrade pre-commit for newer versions of python by
[@&#8203;delfick](https://togithub.com/delfick) in
[https://github.com/typeddjango/django-stubs/pull/1961](https://togithub.com/typeddjango/django-stubs/pull/1961)
- 5.0: Add auth.middleware.auser by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1966](https://togithub.com/typeddjango/django-stubs/pull/1966)
- 5.0: Add ModelAdmin.show_facets by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1967](https://togithub.com/typeddjango/django-stubs/pull/1967)
- ruff: Fix config warnings by [@&#8203;q0w](https://togithub.com/q0w)
in
[https://github.com/typeddjango/django-stubs/pull/1964](https://togithub.com/typeddjango/django-stubs/pull/1964)
- 5.0: Add BaseConstraint.violation_error_code by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1969](https://togithub.com/typeddjango/django-stubs/pull/1969)
- 5.0: Add Signal.asend and Signal.asend_robust by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1965](https://togithub.com/typeddjango/django-stubs/pull/1965)
- 5.0: Add QuerySet.(a)update_or_create new create_defaults arg by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1970](https://togithub.com/typeddjango/django-stubs/pull/1970)
- 5.0: Add AdminSite.get_log_entries by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1963](https://togithub.com/typeddjango/django-stubs/pull/1963)
- 5.0: Add gis ClosestPoint by [@&#8203;q0w](https://togithub.com/q0w)
in
[https://github.com/typeddjango/django-stubs/pull/1968](https://togithub.com/typeddjango/django-stubs/pull/1968)
- 5.0: Rename save_existing arg instance to obj by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1971](https://togithub.com/typeddjango/django-stubs/pull/1971)
- 5.0: Remove admin.helpers.checkbox by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1972](https://togithub.com/typeddjango/django-stubs/pull/1972)
- 5.0: Change annotation_select_mask from set\[str] to list\[str] by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1973](https://togithub.com/typeddjango/django-stubs/pull/1973)
- fixup: Pass violation_error_code to init by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1975](https://togithub.com/typeddjango/django-stubs/pull/1975)
- Avoid returning None from get_field_related_model_cls by
[@&#8203;SingingTree](https://togithub.com/SingingTree) in
[https://github.com/typeddjango/django-stubs/pull/1956](https://togithub.com/typeddjango/django-stubs/pull/1956)
- 5.0: Pass positional args name and violation_error_message to
BaseConstraint by [@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1974](https://togithub.com/typeddjango/django-stubs/pull/1974)
- 5.0: Remove pytz support by [@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1980](https://togithub.com/typeddjango/django-stubs/pull/1980)
- 5.0: Remove global setting USE_L10N by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1979](https://togithub.com/typeddjango/django-stubs/pull/1979)
- 5.0: Remove OSMGeoAdmin, GeoModelAdmin by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1981](https://togithub.com/typeddjango/django-stubs/pull/1981)
- 5.0: Remove extra_tests arg for DiscoverRunner.build_suite/run_tests
by [@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1978](https://togithub.com/typeddjango/django-stubs/pull/1978)
- 5.0: Remove django.utils baseconv and datetime_safe modules by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1977](https://togithub.com/typeddjango/django-stubs/pull/1977)
- 5.0: Add request arg to ModelAdmin.lookup_allowed by
[@&#8203;q0w](https://togithub.com/q0w) in
[https://github.com/typeddjango/django-stubs/pull/1976](https://togithub.com/typeddjango/django-stubs/pull/1976)
- Add URL converter protocol type by
[@&#8203;adamchainz](https://togithub.com/adamchainz) in
[https://github.com/typeddjango/django-stubs/pull/1984](https://togithub.com/typeddjango/django-stubs/pull/1984)
- Fix type annotation for RegisterLookupMixin.class_lookups by
[@&#8203;avoronov-box](https://togithub.com/avoronov-box) in
[https://github.com/typeddjango/django-stubs/pull/1962](https://togithub.com/typeddjango/django-stubs/pull/1962)
- Update django to 5.0.3 by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1990](https://togithub.com/typeddjango/django-stubs/pull/1990)
- Remove some deprecated Django 3.x APIs by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1991](https://togithub.com/typeddjango/django-stubs/pull/1991)
- Fix BaseModelAdmin.view_on_site annotation by
[@&#8203;cuu508](https://togithub.com/cuu508) in
[https://github.com/typeddjango/django-stubs/pull/1993](https://togithub.com/typeddjango/django-stubs/pull/1993)
- Allow immutable `extra_context` on `TemplateView`s by
[@&#8203;samueljsb](https://togithub.com/samueljsb) in
[https://github.com/typeddjango/django-stubs/pull/1994](https://togithub.com/typeddjango/django-stubs/pull/1994)
- Add BoundField.**html**() by
[@&#8203;pelme](https://togithub.com/pelme) in
[https://github.com/typeddjango/django-stubs/pull/1999](https://togithub.com/typeddjango/django-stubs/pull/1999)
- Allow timedelta type for session.set_expiry() argument by
[@&#8203;mlazar-endear](https://togithub.com/mlazar-endear) in
[https://github.com/typeddjango/django-stubs/pull/2001](https://togithub.com/typeddjango/django-stubs/pull/2001)
- Bump `pytest-mypy-plugins` to 3.1.1 by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/2003](https://togithub.com/typeddjango/django-stubs/pull/2003)
- Update mypy, add a bit more metadata by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1997](https://togithub.com/typeddjango/django-stubs/pull/1997)
- 5.0: Update `django.contrib.auth` by
[@&#8203;ngnpope](https://togithub.com/ngnpope) in
[https://github.com/typeddjango/django-stubs/pull/2009](https://togithub.com/typeddjango/django-stubs/pull/2009)
- 5.0: Update `django.conf` by
[@&#8203;ngnpope](https://togithub.com/ngnpope) in
[https://github.com/typeddjango/django-stubs/pull/2008](https://togithub.com/typeddjango/django-stubs/pull/2008)
- 5.0: Update `django.views` by
[@&#8203;ngnpope](https://togithub.com/ngnpope) in
[https://github.com/typeddjango/django-stubs/pull/2007](https://togithub.com/typeddjango/django-stubs/pull/2007)
- 5.0: Update `django.test` by
[@&#8203;ngnpope](https://togithub.com/ngnpope) in
[https://github.com/typeddjango/django-stubs/pull/2005](https://togithub.com/typeddjango/django-stubs/pull/2005)
- 5.0: Update `django.utils` by
[@&#8203;ngnpope](https://togithub.com/ngnpope) in
[https://github.com/typeddjango/django-stubs/pull/2006](https://togithub.com/typeddjango/django-stubs/pull/2006)
- Specify d.c.serializers.base.DeserializedObject.object type by
[@&#8203;j00bar](https://togithub.com/j00bar) in
[https://github.com/typeddjango/django-stubs/pull/2010](https://togithub.com/typeddjango/django-stubs/pull/2010)
- Clean the cache on each run of `stubtest` by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/2015](https://togithub.com/typeddjango/django-stubs/pull/2015)
- Keep abstract Django models internally in the plugin by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/2017](https://togithub.com/typeddjango/django-stubs/pull/2017)
- Add GitHub actions release workflow by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/1950](https://togithub.com/typeddjango/django-stubs/pull/1950)
- Adding missing `Q` methods: `check()`, `flatten()` by
[@&#8203;Alexerson](https://togithub.com/Alexerson) in
[https://github.com/typeddjango/django-stubs/pull/1899](https://togithub.com/typeddjango/django-stubs/pull/1899)
- Improve types in `utils.termcolors` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1901](https://togithub.com/typeddjango/django-stubs/pull/1901)
- Set the calculated metaclass when creating type info in the plugin by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/2025](https://togithub.com/typeddjango/django-stubs/pull/2025)
- Do not annotate PRs with pyright by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/2023](https://togithub.com/typeddjango/django-stubs/pull/2023)
- Use `PRI_MYPY` in `get_additional_deps` hook by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/2024](https://togithub.com/typeddjango/django-stubs/pull/2024)
- Update `_default_manager` and `_base_manager` to be `Manager` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/2022](https://togithub.com/typeddjango/django-stubs/pull/2022)
- Determine the type of queryset methods on unions by
[@&#8203;delfick](https://togithub.com/delfick) in
[https://github.com/typeddjango/django-stubs/pull/2027](https://togithub.com/typeddjango/django-stubs/pull/2027)
- Add first stub for get_model_admin by
[@&#8203;nebiyuelias1](https://togithub.com/nebiyuelias1) in
[https://github.com/typeddjango/django-stubs/pull/2029](https://togithub.com/typeddjango/django-stubs/pull/2029)
- 5.0: Update `django.contrib.admin` by
[@&#8203;ngnpope](https://togithub.com/ngnpope) in
[https://github.com/typeddjango/django-stubs/pull/2004](https://togithub.com/typeddjango/django-stubs/pull/2004)
- \[5.0] Update `core.files` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1949](https://togithub.com/typeddjango/django-stubs/pull/1949)
- \[5.0] Update `core.cache.backends`, add `RedisCache` and related
classes by [@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/1948](https://togithub.com/typeddjango/django-stubs/pull/1948)
- Fix `AsyncClient.defaults` attribute typing by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/1878](https://togithub.com/typeddjango/django-stubs/pull/1878)
- Relax type for `fields` argument of `Model.refresh_from_db()` by
[@&#8203;mthuurne](https://togithub.com/mthuurne) in
[https://github.com/typeddjango/django-stubs/pull/2035](https://togithub.com/typeddjango/django-stubs/pull/2035)
- \[5.0] Add missing stubs for geos by
[@&#8203;nebiyuelias1](https://togithub.com/nebiyuelias1) in
[https://github.com/typeddjango/django-stubs/pull/2034](https://togithub.com/typeddjango/django-stubs/pull/2034)
- Make `AdminSite.get_model_admin` generic by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[https://github.com/typeddjango/django-stubs/pull/2038](https://togithub.com/typeddjango/django-stubs/pull/2038)
- \[5.0] Add `db_default=` parameter to models `Field` classes by
[@&#8203;Skorpyon](https://togithub.com/Skorpyon) in
[https://github.com/typeddjango/django-stubs/pull/1876](https://togithub.com/typeddjango/django-stubs/pull/1876)
- Remove `class Meta` from `Model` and `Form` class stubs by
[@&#8203;jorenham](https://togithub.com/jorenham) in
[https://github.com/typeddjango/django-stubs/pull/2000](https://togithub.com/typeddjango/django-stubs/pull/2000)
- Add datetime.timedelta as valid type for
HttpRequest.get_signed_cookie() max_age argument. by
[@&#8203;pelme](https://togithub.com/pelme) in
[https://github.com/typeddjango/django-stubs/pull/2045](https://togithub.com/typeddjango/django-stubs/pull/2045)
- CI: Update Django 4.2 version used for test suite by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/2049](https://togithub.com/typeddjango/django-stubs/pull/2049)
- Refine return type for `ManyToOneRel.get_accessor_name()` by
[@&#8203;mthuurne](https://togithub.com/mthuurne) in
[https://github.com/typeddjango/django-stubs/pull/2052](https://togithub.com/typeddjango/django-stubs/pull/2052)
- Add `DeferredAttribute.__get__()` by
[@&#8203;mthuurne](https://togithub.com/mthuurne) in
[https://github.com/typeddjango/django-stubs/pull/2050](https://togithub.com/typeddjango/django-stubs/pull/2050)
- Add missing methods and superclass to `FieldFile` by
[@&#8203;mthuurne](https://togithub.com/mthuurne) in
[https://github.com/typeddjango/django-stubs/pull/2051](https://togithub.com/typeddjango/django-stubs/pull/2051)
- Add `db_comment=` parameter to Postgres and GIS model fields by
[@&#8203;saJaeHyukc](https://togithub.com/saJaeHyukc) in
[https://github.com/typeddjango/django-stubs/pull/2054](https://togithub.com/typeddjango/django-stubs/pull/2054)
- Correct type for `db.models.sql.query.Query.join()` argument by
[@&#8203;mthuurne](https://togithub.com/mthuurne) in
[https://github.com/typeddjango/django-stubs/pull/2055](https://togithub.com/typeddjango/django-stubs/pull/2055)
- 5.0: Update `django.db.backends.oracle.base` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2057](https://togithub.com/typeddjango/django-stubs/pull/2057)
- 5.0: Update `django.test.client` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2059](https://togithub.com/typeddjango/django-stubs/pull/2059)
- 5.0: Update `django.test.html` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2060](https://togithub.com/typeddjango/django-stubs/pull/2060)
- 5.0: Update `django.test.runner` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2061](https://togithub.com/typeddjango/django-stubs/pull/2061)
- 5.0: Update `django.template`, `django.templatetags` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2063](https://togithub.com/typeddjango/django-stubs/pull/2063)
- 5.0: Update `django.test.testcases` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2062](https://togithub.com/typeddjango/django-stubs/pull/2062)
- 5.0: Update `django.http` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2064](https://togithub.com/typeddjango/django-stubs/pull/2064)
- 5.0: Update `django.core.management` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2067](https://togithub.com/typeddjango/django-stubs/pull/2067)
- 5.0: Update `django.core.handlers` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2066](https://togithub.com/typeddjango/django-stubs/pull/2066)
- 5.0: Update `django.contrib.sessions.serializers`,
`django.core.serializers` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2068](https://togithub.com/typeddjango/django-stubs/pull/2068)
- Update django app related types by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2071](https://togithub.com/typeddjango/django-stubs/pull/2071)
- Add a `returncode` attribute to `CommandError` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/2072](https://togithub.com/typeddjango/django-stubs/pull/2072)
- Disable mypy `ignore_missing_imports` option by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2058](https://togithub.com/typeddjango/django-stubs/pull/2058)
- fix typing for URL validator.**call** by
[@&#8203;asottile](https://togithub.com/asottile) in
[https://github.com/typeddjango/django-stubs/pull/2074](https://togithub.com/typeddjango/django-stubs/pull/2074)
- Use field generic types for descriptors by
[@&#8203;md384](https://togithub.com/md384) in
[https://github.com/typeddjango/django-stubs/pull/2048](https://togithub.com/typeddjango/django-stubs/pull/2048)
- 5.0: Update `django.core.servers.basehttp` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2070](https://togithub.com/typeddjango/django-stubs/pull/2070)
- Update `django.template.base.Template.render()` argument type by
[@&#8203;Majsvaffla](https://togithub.com/Majsvaffla) in
[https://github.com/typeddjango/django-stubs/pull/1160](https://togithub.com/typeddjango/django-stubs/pull/1160)
- 5.0: Add `django.utils.choices` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2075](https://togithub.com/typeddjango/django-stubs/pull/2075)
- 5.0: Update `django.contrib.sitemaps`, `django.contrib.staticfiles` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2076](https://togithub.com/typeddjango/django-stubs/pull/2076)
- Update pyright report options (`reportMissingTypeArgument`,
`reportPrivateUsage`) by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2077](https://togithub.com/typeddjango/django-stubs/pull/2077)
- 5.0: Update `django.contrib.postgres` by
[@&#8203;sudosubin](https://togithub.com/sudosubin) in
[https://github.com/typeddjango/django-stubs/pull/2078](https://togithub.com/typeddjango/django-stubs/pull/2078)
- Add `path` signature for async views by
[@&#8203;jlost](https://togithub.com/jlost) in
[https://github.com/typeddjango/django-stubs/pull/2085](https://togithub.com/typeddjango/django-stubs/pull/2085)
- Remove incorrect `Reversible` base class from `QuerySet` by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/2094](https://togithub.com/typeddjango/django-stubs/pull/2094)
- Version 5.0.0 release (django-stubs, django-stubs-ext) by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[https://github.com/typeddjango/django-stubs/pull/2087](https://togithub.com/typeddjango/django-stubs/pull/2087)

#### New Contributors

- [@&#8203;Viicos](https://togithub.com/Viicos) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1866](https://togithub.com/typeddjango/django-stubs/pull/1866)
- [@&#8203;dephiros](https://togithub.com/dephiros) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1873](https://togithub.com/typeddjango/django-stubs/pull/1873)
- [@&#8203;jamesbraza](https://togithub.com/jamesbraza) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1927](https://togithub.com/typeddjango/django-stubs/pull/1927)
- [@&#8203;mfosterw](https://togithub.com/mfosterw) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1943](https://togithub.com/typeddjango/django-stubs/pull/1943)
- [@&#8203;palfrey](https://togithub.com/palfrey) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1944](https://togithub.com/typeddjango/django-stubs/pull/1944)
- [@&#8203;yhay81](https://togithub.com/yhay81) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1955](https://togithub.com/typeddjango/django-stubs/pull/1955)
- [@&#8203;delfick](https://togithub.com/delfick) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1961](https://togithub.com/typeddjango/django-stubs/pull/1961)
- [@&#8203;SingingTree](https://togithub.com/SingingTree) made their
first contribution in
[https://github.com/typeddjango/django-stubs/pull/1956](https://togithub.com/typeddjango/django-stubs/pull/1956)
- [@&#8203;avoronov-box](https://togithub.com/avoronov-box) made their
first contribution in
[https://github.com/typeddjango/django-stubs/pull/1962](https://togithub.com/typeddjango/django-stubs/pull/1962)
- [@&#8203;cuu508](https://togithub.com/cuu508) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1993](https://togithub.com/typeddjango/django-stubs/pull/1993)
- [@&#8203;samueljsb](https://togithub.com/samueljsb) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1994](https://togithub.com/typeddjango/django-stubs/pull/1994)
- [@&#8203;pelme](https://togithub.com/pelme) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1999](https://togithub.com/typeddjango/django-stubs/pull/1999)
- [@&#8203;mlazar-endear](https://togithub.com/mlazar-endear) made their
first contribution in
[https://github.com/typeddjango/django-stubs/pull/2001](https://togithub.com/typeddjango/django-stubs/pull/2001)
- [@&#8203;j00bar](https://togithub.com/j00bar) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/2010](https://togithub.com/typeddjango/django-stubs/pull/2010)
- [@&#8203;jorenham](https://togithub.com/jorenham) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/2019](https://togithub.com/typeddjango/django-stubs/pull/2019)
- [@&#8203;fidoriel](https://togithub.com/fidoriel) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1925](https://togithub.com/typeddjango/django-stubs/pull/1925)
- [@&#8203;armanckeser](https://togithub.com/armanckeser) made their
first contribution in
[https://github.com/typeddjango/django-stubs/pull/2021](https://togithub.com/typeddjango/django-stubs/pull/2021)
- [@&#8203;nebiyuelias1](https://togithub.com/nebiyuelias1) made their
first contribution in
[https://github.com/typeddjango/django-stubs/pull/2029](https://togithub.com/typeddjango/django-stubs/pull/2029)
- [@&#8203;Skorpyon](https://togithub.com/Skorpyon) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1876](https://togithub.com/typeddjango/django-stubs/pull/1876)
- [@&#8203;saJaeHyukc](https://togithub.com/saJaeHyukc) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/2054](https://togithub.com/typeddjango/django-stubs/pull/2054)
- [@&#8203;sudosubin](https://togithub.com/sudosubin) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/2057](https://togithub.com/typeddjango/django-stubs/pull/2057)
- [@&#8203;md384](https://togithub.com/md384) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/2048](https://togithub.com/typeddjango/django-stubs/pull/2048)
- [@&#8203;Majsvaffla](https://togithub.com/Majsvaffla) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1160](https://togithub.com/typeddjango/django-stubs/pull/1160)
- [@&#8203;jlost](https://togithub.com/jlost) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/2085](https://togithub.com/typeddjango/django-stubs/pull/2085)

**Full Changelog**:
https://github.com/typeddjango/django-stubs/compare/4.2.7...5.0.0

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMjEuMiIsInVwZGF0ZWRJblZlciI6IjM3LjMyMS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJweXRob24iXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-05 21:21:20 +02:00
Thomas Göttgens 064c435b09
refactor(legacy): remove unused waveform related code (#3003)
Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
2024-05-05 21:15:11 +02:00
renovate[bot] a556b73d2a chore(deps): lock file maintenance (legacy/composer.json) 2024-04-30 09:09:41 +00:00
libretime-bot ad16a9b3f8 chore(legacy): update locales 2024-04-29 01:54:43 +00: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
renovate[bot] c02502ad9d chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v24.4.2 2024-04-27 10:51:08 +00:00
renovate[bot] c5a9c75946 chore(deps): update lycheeverse/lychee-action action to v1.10.0 2024-04-27 07:25:29 +00:00
renovate[bot] 50e5767963 chore(deps): update amannn/action-semantic-pull-request action to v5.5.2 2024-04-26 00:50:54 +00:00
renovate[bot] 8615c85572
chore(deps): update dependency friendsofphp/php-cs-fixer to <3.54.1 (#2994)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.53.1` -> `<3.54.1` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.53.0/3.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.53.0/3.54.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.54.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3540)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.53.0...v3.54.0)

- feat: introduce `PhpUnitAttributesFixer`
([#&#8203;7831](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7831))
- chore: Properly determine self-approval trigger commit
([#&#8203;7936](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7936))
- chore: Revert ref for self-approval Git checkout
([#&#8203;7944](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7944))
- CI: check if proper array key is declared
([#&#8203;7912](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7912))
- DX: cleanup `FullyQualifiedStrictTypesFixerTest`
([#&#8203;7954](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7954))
- DX: cleanup `PhpdocNoAccessFixerTest`
([#&#8203;7933](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7933))
- DX: cleanup `PhpUnitMethodCasingFixerTest`
([#&#8203;7948](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7948))
- DX: cleanup `PhpUnitStrictFixerTest`
([#&#8203;7938](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7938))
- DX: Improve internal dist config for Fixer
([#&#8203;7952](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7952))
- DX: Improve issue templates
([#&#8203;7942](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7942))
- DX: there is no namespace if there is no PHP code
([#&#8203;7953](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7953))
- DX: update .gitattributes
([#&#8203;7931](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7931))
- fix: Remove Infection during Docker release
([#&#8203;7937](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7937))
- fix: `FullyQualifiedStrictTypesFixer` - do not add imports before PHP
opening tag
([#&#8203;7955](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7955))
- fix: `PhpUnitMethodCasingFixer` - do not double underscore
([#&#8203;7949](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7949))
- fix: `PhpUnitTestClassRequiresCoversFixer` - do not add annotation
when there are attributes
([#&#8203;7880](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7880))
- test: Ignore PHP version related mutations
([#&#8203;7935](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7935))

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMDEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjMwMS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJwaHAiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-23 18:54:41 +02:00
Weblate (bot) 7e92bc50cc
chore(legacy): translations update from Hosted Weblate (#2998)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2024-04-23 11:20:55 +01:00
libretime-bot 046aa724cc chore(legacy): update locales 2024-04-22 01:54:41 +00:00
Thomas Göttgens da02e74f21
feat(legacy): visual cue point editor (#2947)
A visual cue point editor in the track editor view. This view displays the track as a waveform and allows you to set where the in- and out-cue points are set. These cue points determine the start and end points of the track.

---------

Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
2024-04-21 10:13:43 +01:00
Thomas Göttgens 71b20ae3c9
fix(installer): setup the worker entrypoint (#2996)
Worker service fails after upgrade.

Related to #2988
2024-04-18 14:27:20 +02:00
renovate[bot] a2cf7697a9
fix(deps): update dependency gunicorn to v22 (security) (#2993)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [gunicorn](https://gunicorn.org)
([source](https://togithub.com/benoitc/gunicorn),
[changelog](https://docs.gunicorn.org/en/stable/news.html)) |
`>=20.1.0,<21.3` -> `>=22.0.0,<22.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/gunicorn/22.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/gunicorn/22.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/gunicorn/20.1.0/22.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/gunicorn/20.1.0/22.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

### GitHub Vulnerability Alerts

#### [CVE-2024-1135](https://nvd.nist.gov/vuln/detail/CVE-2024-1135)

Gunicorn fails to properly validate Transfer-Encoding headers, leading
to HTTP Request Smuggling (HRS) vulnerabilities. By crafting requests
with conflicting Transfer-Encoding headers, attackers can bypass
security restrictions and access restricted endpoints. This issue is due
to Gunicorn's handling of Transfer-Encoding headers, where it
incorrectly processes requests with multiple, conflicting
Transfer-Encoding headers, treating them as chunked regardless of the
final encoding specified. This vulnerability has been shown to allow
access to endpoints restricted by gunicorn. This issue has been
addressed in version 22.0.0.

To be affected users must have a network path which does not filter out
invalid requests. These users are advised to block access to restricted
endpoints via a firewall or other mechanism if they are unable to
update.

---

### Release Notes

<details>
<summary>benoitc/gunicorn (gunicorn)</summary>

###
[`v22.0.0`](https://togithub.com/benoitc/gunicorn/releases/tag/22.0.0):
Gunicorn 22.0 has been released

[Compare
Source](https://togithub.com/benoitc/gunicorn/compare/21.2.0...22.0.0)

**Gunicorn 22.0.0 has been released.** This version fix the numerous
security vulnerabilities. You're invited to upgrade asap your own
installation.

Changes:

    22.0.0 - 2024-04-17
    ===================

    - use `utime` to notify workers liveness
    - migrate setup to pyproject.toml
- fix numerous security vulnerabilities in HTTP parser (closing some
request smuggling vectors)
- parsing additional requests is no longer attempted past unsupported
request framing
- on HTTP versions < 1.1 support for chunked transfer is refused (only
used in exploits)
- requests conflicting configured or passed SCRIPT_NAME now produce a
verbose error
- Trailer fields are no longer inspected for headers indicating secure
scheme
    - support Python 3.12

    ** Breaking changes **

    - minimum version is Python 3.7
- the limitations on valid characters in the HTTP method have been
bounded to Internet Standards
- requests specifying unsupported transfer coding (order) are refused by
default (rare)
- HTTP methods are no longer casefolded by default (IANA method registry
contains none affected)
- HTTP methods containing the number sign (#) are no longer accepted by
default (rare)
- HTTP versions < 1.0 or >= 2.0 are no longer accepted by default (rare,
only HTTP/1.1 is supported)
- HTTP versions consisting of multiple digits or containing a
prefix/suffix are no longer accepted
- HTTP header field names Gunicorn cannot safely map to variables are
silently dropped, as in other software
- HTTP headers with empty field name are refused by default (no
legitimate use cases, used in exploits)
- requests with both Transfer-Encoding and Content-Length are refused by
default (such a message might indicate an attempt to perform request
smuggling)
- empty transfer codings are no longer permitted (reportedly seen with
really old & broken proxies)

    ** SECURITY **

    - fix CVE-2024-1135

1. Documentation is available there:
https://docs.gunicorn.org/en/stable/news.html
2.  Packages: https://pypi.org/project/gunicorn/

###
[`v21.2.0`](https://togithub.com/benoitc/gunicorn/releases/tag/21.2.0):
Gunicorn 21.2.0 has been released

[Compare
Source](https://togithub.com/benoitc/gunicorn/compare/21.1.0...21.2.0)

**Gunicorn 21.2.0 has been released.** This version fix the issue
introduced in the threaded worker.

Changes:

    21.2.0 - 2023-07-19
    ===================
    fix thread worker: revert change considering connection as idle .

    *** NOTE ***

    This is fixing the bad file description error.

1. Documentation is available there:
https://docs.gunicorn.org/en/stable/news.html
2.  Packages: https://pypi.org/project/gunicorn/

###
[`v21.1.0`](https://togithub.com/benoitc/gunicorn/releases/tag/21.1.0):
Gunicorn 21.1.0 has been released

[Compare
Source](https://togithub.com/benoitc/gunicorn/compare/21.0.1...21.1.0)

gunicorn 21.1.0 has been released. This version fix the issue introduced
in the threaded worker.

# 21.1.0 - 2023-07-18

-   fix thread worker: fix socket removal from the queuet checkout 21.x

###
[`v21.0.1`](https://togithub.com/benoitc/gunicorn/releases/tag/21.0.1):
Gunicorn 21 has been released

[Compare
Source](https://togithub.com/benoitc/gunicorn/compare/21.0.0...21.0.1)

Gunicorn 21 is out with miscellaneous changes.  Enjoy!

We made this release major to start our new release cycle. More info
will be provided on our discussion forum.

##### 21.0.1 - 2023-07-17

fix documentation build

##### 21.0.0 - 2023-07-17

support python 3.11
fix gevent and eventlet workers
fix threads support (gththread): improve performance and unblock
requests
SSL: noaw use SSLContext object
HTTP parser: miscellaneous fixes
remove unecessary setuid calls
fix testing
improve logging
miscellaneous fixes to core engine

**Full Changelog**:
https://github.com/benoitc/gunicorn/compare/21.0.0...21.0.1

###
[`v21.0.0`](https://togithub.com/benoitc/gunicorn/compare/20.1.0...21.0.0)

[Compare
Source](https://togithub.com/benoitc/gunicorn/compare/20.1.0...21.0.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "" (UTC), 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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMDEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjMwMS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJweXRob24iXX0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-04-17 08:43:11 +02:00
libretime-bot a56edd9e98 chore(legacy): update locales 2024-04-15 03:48:57 +00:00
renovate[bot] b721dbecd1 chore(deps): lock file maintenance (legacy/composer.json) 2024-04-15 01:39:59 +00:00
renovate[bot] 7575b68472 chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v24.4.0 2024-04-15 01:38:50 +00:00
Jonas L 9c548b365e
feat: start celery worker programmatically (#2988)
### Description

Allow us to be more flexible with the option passed the celery worker,
for example, to change the logging level.
2024-04-13 21:03:57 +02:00
Jonas L 7040d0e4bd
fix: trigger legacy tasks manager every 5m (#2987)
### Description

This ensures that when the LibreTime interface is not used for a long
time, we still have the task manager run essential tasks for the
schedule.

Related to #2670
2024-04-13 19:12:45 +02:00
renovate[bot] bcaa77ff3c
chore(deps): update dependency djangorestframework to >=3.14.0,<3.16 (#2969)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [djangorestframework](https://www.django-rest-framework.org/)
([source](https://togithub.com/encode/django-rest-framework),
[changelog](https://www.django-rest-framework.org/community/release-notes/))
| `>=3.14.0,<3.15` -> `>=3.14.0,<3.16` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/djangorestframework/3.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/djangorestframework/3.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/djangorestframework/3.14.0/3.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/djangorestframework/3.14.0/3.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>encode/django-rest-framework (djangorestframework)</summary>

###
[`v3.15.1`](https://togithub.com/encode/django-rest-framework/compare/3.15.0...3.15.1)

[Compare
Source](https://togithub.com/encode/django-rest-framework/compare/3.15.0...3.15.1)

###
[`v3.15.0`](https://togithub.com/encode/django-rest-framework/compare/3.14.0...3.15.0)

[Compare
Source](https://togithub.com/encode/django-rest-framework/compare/3.14.0...3.15.0)

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNDUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-13 16:13:32 +02:00
Jonas L a63df8c989
chore: mark php-cs-fixer as dev dependency (#2986)
### Description

This should remove the update entries from the release-please changelog,
as renovate will now consider updates for this dep as `chore` and not
`fix`.
2024-04-13 16:08:45 +02:00
Jonas L 5ad69bf0b7
fix(legacy): ensure validation is performed on the track type form (#2985)
### Description

Fixes #2939

The zend form validation was not performed, only a custom method to
validate the code was used. This merge both validation, and leverage the
Zend form validation framework.

Also allow updating the track type code from the track type form.
Related to #2955
2024-04-13 15:54:47 +02:00
Jonas L f1c7dd89f1
docs: prevent reverse proxy from constraining the upload limits (#2984)
### Description

The upload limits settings are configured in the libretime nginx config,
but must also be part of the reverse proxy.
2024-04-13 15:12:07 +02:00
Jonas L fb0584b021
fix: remove obsolete docker compose version (#2982)
### Description

```
WARN[0000] /home/jo/code/github.com/libretime/libretime/docker-compose.yml: `version` is obsolete 
WARN[0000] /home/jo/code/github.com/libretime/libretime/docker-compose.override.yml: `version` is obsolete 
```
2024-04-13 14:37:04 +02:00
renovate[bot] 9192aaa2bb
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.53.1 (#2972)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.51.1` -> `<3.53.1` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.51.0/3.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.51.0/3.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.53.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3530)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.52.1...v3.53.0)

- chore: Use `list` over `array` in more places
([#&#8203;7905](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7905))
- CI: allow for self-approvals for maintainers
([#&#8203;7921](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7921))
- CI: Improve Infection setup
([#&#8203;7913](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7913))
- CI: no need to trigger enable auto-merge when self-approve
([#&#8203;7929](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7929))
- DX: reduce `array_filter` function usages
([#&#8203;7923](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7923))
- DX: remove duplicated character from `trim` call
([#&#8203;7930](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7930))
- DX: update actions producing warnings
([#&#8203;7925](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7925))
- DX: update actions producing warnings
([#&#8203;7928](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7928))
- DX: update `phpstan/phpstan-strict-rules`
([#&#8203;7924](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7924))
- feat: Add trailing comma in multiline to PER-CS 2.0
([#&#8203;7916](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7916))
- feat: Introduce `AttributeAnalysis`
([#&#8203;7909](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7909))
- feat: `@PHP84Migration` introduction
([#&#8203;7774](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7774))
- fix: Constant invocation detected in typed constants
([#&#8203;7892](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7892))
- fix: `PhpdocArrayTypeFixer` - JIT stack limit exhausted
([#&#8203;7895](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7895))
- test: Introduce Infection for mutation tests
([#&#8203;7874](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7874))

###
[`v3.52.1`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3521)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.52.0...v3.52.1)

- fix: StatementIndentationFixer - do not crash on ternary operator in
class property
([#&#8203;7899](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7899))
- fix: `PhpCsFixer\Tokenizer\Tokens::setSize` return type
([#&#8203;7900](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7900))

###
[`v3.52.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3520)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.51.0...v3.52.0)

- chore: fix PHP 8.4 deprecations
([#&#8203;7894](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7894))
- chore: fix PHPStan 1.10.60 issues
([#&#8203;7873](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7873))
- chore: list over array in more places
([#&#8203;7876](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7876))
- chore: replace template with variable in Preg class
([#&#8203;7882](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7882))
- chore: update PHPStan
([#&#8203;7871](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7871))
- depr: `nullable_type_declaration_for_default_null_value` - deprecate
option that is against `@PHP84Migration`
([#&#8203;7872](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7872))
- docs: Fix typo
([#&#8203;7889](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7889))
- feat: Add support for callable template in PHPDoc parser
([#&#8203;7084](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7084))
- feat: Add `array_indentation` to `PER-CS2.0` ruleset
([#&#8203;7881](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7881))
- feat: `@Symfony:risky` - add `no_unreachable_default_argument_value`
([#&#8203;7863](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7863))
- feat: `PhpCsFixer` ruleset - enable
`nullable_type_declaration_for_default_null_value`
([#&#8203;7870](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7870))
- fix: Constant invocation detected in DNF types
([#&#8203;7869](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7869))
- fix: Correctly indent multiline constants and properties
([#&#8203;7875](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7875))
- fix: `no_useless_concat_operator` - do not break variable
([#&#8203;7827](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7827))
- fix: `TokensAnalyzer` - handle unary operator in arrow functions
([#&#8203;7862](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7862))
- fix: `TypeExpression` - fix "JIT stack limit exhausted" error
([#&#8203;7843](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7843))

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNDUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-04-13 14:36:31 +02:00
renovate[bot] 0296446b70
chore(deps): update dependency pydantic to >=2.5.0,<2.8 (#2981)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](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/)) |
`>=2.5.0,<2.7` -> `>=2.5.0,<2.8` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pydantic/2.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pydantic/2.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pydantic/2.6.4/2.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pydantic/2.6.4/2.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v2.7.0`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v270-2024-04-11)

[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.6.4...v2.7.0)

[GitHub
release](https://togithub.com/pydantic/pydantic/releases/tag/v2.7.0)

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

##### What's Changed

##### Packaging

- Reorganize `pyproject.toml` sections by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;8899](https://togithub.com/pydantic/pydantic/pull/8899)
- Bump `pydantic-core` to `v2.18.1` by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;9211](https://togithub.com/pydantic/pydantic/pull/9211)
- Adopt `jiter` `v0.2.0` by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[pydantic/pydantic-core#1250](https://togithub.com/pydantic/pydantic-core/pull/1250)

##### New Features

- Extract attribute docstrings from `FieldInfo.description` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;6563](https://togithub.com/pydantic/pydantic/pull/6563)
- Add a `with_config` decorator to comply with typing spec by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;8611](https://togithub.com/pydantic/pydantic/pull/8611)
- Allow an optional separator splitting the value and unit of the result
of `ByteSize.human_readable` by
[@&#8203;jks15satoshi](https://togithub.com/jks15satoshi) in
[#&#8203;8706](https://togithub.com/pydantic/pydantic/pull/8706)
- Add generic `Secret` base type by
[@&#8203;conradogarciaberrotaran](https://togithub.com/conradogarciaberrotaran)
in [#&#8203;8519](https://togithub.com/pydantic/pydantic/pull/8519)
- Make use of `Sphinx` inventories for cross references in docs by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;8682](https://togithub.com/pydantic/pydantic/pull/8682)
- Add environment variable to disable plugins by
[@&#8203;geospackle](https://togithub.com/geospackle) in
[#&#8203;8767](https://togithub.com/pydantic/pydantic/pull/8767)
- Add support for `deprecated` fields by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;8237](https://togithub.com/pydantic/pydantic/pull/8237)
- Allow `field_serializer('*')` by
[@&#8203;ornariece](https://togithub.com/ornariece) in
[#&#8203;9001](https://togithub.com/pydantic/pydantic/pull/9001)
- Handle a case when `model_config` is defined as a model property by
[@&#8203;alexeyt101](https://togithub.com/alexeyt101) in
[#&#8203;9004](https://togithub.com/pydantic/pydantic/pull/9004)
- Update `create_model()` to support `typing.Annotated` as input by
[@&#8203;wannieman98](https://togithub.com/wannieman98) in
[#&#8203;8947](https://togithub.com/pydantic/pydantic/pull/8947)
- Add `ClickhouseDsn` support by
[@&#8203;solidguy7](https://togithub.com/solidguy7) in
[#&#8203;9062](https://togithub.com/pydantic/pydantic/pull/9062)
- Add support for `re.Pattern[str]` to `pattern` field by
[@&#8203;jag-k](https://togithub.com/jag-k) in
[#&#8203;9053](https://togithub.com/pydantic/pydantic/pull/9053)
- Support for `serialize_as_any` runtime setting by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8830](https://togithub.com/pydantic/pydantic/pull/8830)
- Add support for `typing.Self` by
[@&#8203;Youssefares](https://togithub.com/Youssefares) in
[#&#8203;9023](https://togithub.com/pydantic/pydantic/pull/9023)
- Ability to pass `context` to serialization by
[@&#8203;ornariece](https://togithub.com/ornariece) in
[#&#8203;8965](https://togithub.com/pydantic/pydantic/pull/8965)
- Add feedback widget to docs with flarelytics integration by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;9129](https://togithub.com/pydantic/pydantic/pull/9129)
- Support for parsing partial JSON strings in Python by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[pydantic/jiter#66](https://togithub.com/pydantic/jiter/pull/66)

**Finalized in v2.7.0, rather than v2.7.0b1:**

- Add support for field level number to str coercion option by
[@&#8203;NeevCohen](https://togithub.com/NeevCohen) in
[#&#8203;9137](https://togithub.com/pydantic/pydantic/pull/9137)
- Update `warnings` parameter for serialization utilities to allow
raising a warning by
[@&#8203;Lance-Drane](https://togithub.com/Lance-Drane) in
[#&#8203;9166](https://togithub.com/pydantic/pydantic/pull/9166)

##### Changes

- Correct docs, logic for `model_construct` behavior with `extra` by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8807](https://togithub.com/pydantic/pydantic/pull/8807)
- Improve error message for improper `RootModel` subclasses by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8857](https://togithub.com/pydantic/pydantic/pull/8857)
- Use `PEP570` syntax by [@&#8203;Viicos](https://togithub.com/Viicos)
in [#&#8203;8940](https://togithub.com/pydantic/pydantic/pull/8940)
- Add `enum` and `type` to the JSON schema for single item literals by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;8944](https://togithub.com/pydantic/pydantic/pull/8944)
- Deprecate `update_json_schema` internal function by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;9125](https://togithub.com/pydantic/pydantic/pull/9125)
- Serialize duration to hour minute second, instead of just seconds by
[@&#8203;kakilangit](https://togithub.com/kakilangit) in
[pydantic/speedate#50](https://togithub.com/pydantic/speedate/pull/50)
- Trimming str before parsing to int and float by
[@&#8203;hungtsetse](https://togithub.com/hungtsetse) in
[pydantic/pydantic-core#1203](https://togithub.com/pydantic/pydantic-core/pull/1203)

##### Performance

- `enum` validator improvements by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;9045](https://togithub.com/pydantic/pydantic/pull/9045)
- Move `enum` validation and serialization to Rust by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;9064](https://togithub.com/pydantic/pydantic/pull/9064)
- Improve schema generation for nested dataclasses by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;9114](https://togithub.com/pydantic/pydantic/pull/9114)
- Fast path for ASCII python string creation in JSON by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in in
[pydantic/jiter#72](https://togithub.com/pydantic/jiter/pull/72)
- SIMD integer and string JSON parsing on `aarch64`(**Note:** SIMD on
x86 will be implemented in a future release) by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in in
[pydantic/jiter#65](https://togithub.com/pydantic/jiter/pull/65)
- Support JSON `Cow<str>` from `jiter` by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[pydantic/pydantic-core#1231](https://togithub.com/pydantic/pydantic-core/pull/1231)
- MAJOR performance improvement: update to PyO3 0.21 final by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[pydantic/pydantic-core#1248](https://togithub.com/pydantic/pydantic-core/pull/1248)
- cache Python strings by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[pydantic/pydantic-core#1240](https://togithub.com/pydantic/pydantic-core/pull/1240)

##### Fixes

- Fix strict parsing for some `Sequence`s by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8614](https://togithub.com/pydantic/pydantic/pull/8614)
- Add a check on the existence of `__qualname__` by
[@&#8203;anci3ntr0ck](https://togithub.com/anci3ntr0ck) in
[#&#8203;8642](https://togithub.com/pydantic/pydantic/pull/8642)
- Handle `__pydantic_extra__` annotation being a string or inherited by
[@&#8203;alexmojaki](https://togithub.com/alexmojaki) in
[#&#8203;8659](https://togithub.com/pydantic/pydantic/pull/8659)
- Fix json validation for `NameEmail` by
[@&#8203;Holi0317](https://togithub.com/Holi0317) in
[#&#8203;8650](https://togithub.com/pydantic/pydantic/pull/8650)
- Fix type-safety of attribute access in `BaseModel` by
[@&#8203;bluenote10](https://togithub.com/bluenote10) in
[#&#8203;8651](https://togithub.com/pydantic/pydantic/pull/8651)
- Fix bug with `mypy` plugin and `no_strict_optional = True` by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;8666](https://togithub.com/pydantic/pydantic/pull/8666)
- Fix `ByteSize` error `type` change by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8681](https://togithub.com/pydantic/pydantic/pull/8681)
- Fix inheriting annotations in dataclasses by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8679](https://togithub.com/pydantic/pydantic/pull/8679)
- Fix regression in core schema generation for indirect definition
references by [@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;8702](https://togithub.com/pydantic/pydantic/pull/8702)
- Fix unsupported types bug with plain validator by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8710](https://togithub.com/pydantic/pydantic/pull/8710)
- Reverting problematic fix from 2.6 release, fixing schema building bug
by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8718](https://togithub.com/pydantic/pydantic/pull/8718)
- fixes `__pydantic_config__` ignored for TypeDict by
[@&#8203;13sin](https://togithub.com/13sin) in
[#&#8203;8734](https://togithub.com/pydantic/pydantic/pull/8734)
- Fix test failures with `pytest v8.0.0` due to `pytest.warns()`
starting to work inside `pytest.raises()` by
[@&#8203;mgorny](https://togithub.com/mgorny) in
[#&#8203;8678](https://togithub.com/pydantic/pydantic/pull/8678)
- Use `is_valid_field` from 1.x for `mypy` plugin by
[@&#8203;DanielNoord](https://togithub.com/DanielNoord) in
[#&#8203;8738](https://togithub.com/pydantic/pydantic/pull/8738)
- Better-support `mypy` strict equality flag by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;8799](https://togithub.com/pydantic/pydantic/pull/8799)
- model_json_schema export with Annotated types misses 'required'
parameters by [@&#8203;LouisGobert](https://togithub.com/LouisGobert) in
[#&#8203;8793](https://togithub.com/pydantic/pydantic/pull/8793)
- Fix default inclusion in `FieldInfo.__repr_args__` by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8801](https://togithub.com/pydantic/pydantic/pull/8801)
- Fix resolution of forward refs in dataclass base classes that are not
present in the subclass module namespace by
[@&#8203;matsjoyce-refeyn](https://togithub.com/matsjoyce-refeyn) in
[#&#8203;8751](https://togithub.com/pydantic/pydantic/pull/8751)
- Fix `BaseModel` type annotations to be resolvable by
`typing.get_type_hints` by
[@&#8203;devmonkey22](https://togithub.com/devmonkey22) in
[#&#8203;7680](https://togithub.com/pydantic/pydantic/pull/7680)
- Fix: allow empty string aliases with `AliasGenerator` by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8810](https://togithub.com/pydantic/pydantic/pull/8810)
- Fix test along with `date` -> `datetime` timezone assumption fix by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8823](https://togithub.com/pydantic/pydantic/pull/8823)
- Fix deprecation warning with usage of `ast.Str` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;8837](https://togithub.com/pydantic/pydantic/pull/8837)
- Add missing `deprecated` decorators by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;8877](https://togithub.com/pydantic/pydantic/pull/8877)
- Fix serialization of `NameEmail` if name includes an email address by
[@&#8203;NeevCohen](https://togithub.com/NeevCohen) in
[#&#8203;8860](https://togithub.com/pydantic/pydantic/pull/8860)
- Add information about class in error message of schema generation by
[@&#8203;Czaki](https://togithub.com/Czaki) in
[#&#8203;8917](https://togithub.com/pydantic/pydantic/pull/8917)
- Make `TypeAdapter`'s typing compatible with special forms by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;8923](https://togithub.com/pydantic/pydantic/pull/8923)
- Fix issue with config behavior being baked into the ref schema for
`enum`s by [@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;8920](https://togithub.com/pydantic/pydantic/pull/8920)
- More helpful error re wrong `model_json_schema` usage by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8928](https://togithub.com/pydantic/pydantic/pull/8928)
- Fix nested discriminated union schema gen, pt 2 by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8932](https://togithub.com/pydantic/pydantic/pull/8932)
- Fix schema build for nested dataclasses / TypedDicts with
discriminators by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8950](https://togithub.com/pydantic/pydantic/pull/8950)
- Remove unnecessary logic for definitions schema gen with discriminated
unions by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8951](https://togithub.com/pydantic/pydantic/pull/8951)
- Fix handling of optionals in `mypy` plugin by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;9008](https://togithub.com/pydantic/pydantic/pull/9008)
- Fix `PlainSerializer` usage with std type constructor by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;9031](https://togithub.com/pydantic/pydantic/pull/9031)
- Remove unnecessary warning for config in plugin by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;9039](https://togithub.com/pydantic/pydantic/pull/9039)
- Fix default value serializing by
[@&#8203;NeevCohen](https://togithub.com/NeevCohen) in
[#&#8203;9066](https://togithub.com/pydantic/pydantic/pull/9066)
- Fix extra fields check in `Model.__getattr__()` by
[@&#8203;NeevCohen](https://togithub.com/NeevCohen) in
[#&#8203;9082](https://togithub.com/pydantic/pydantic/pull/9082)
- Fix `ClassVar` forward ref inherited from parent class by
[@&#8203;alexmojaki](https://togithub.com/alexmojaki) in
[#&#8203;9097](https://togithub.com/pydantic/pydantic/pull/9097)
- fix sequence like validator with strict `True` by
[@&#8203;andresliszt](https://togithub.com/andresliszt) in
[#&#8203;8977](https://togithub.com/pydantic/pydantic/pull/8977)
- Improve warning message when a field name shadows a field in a parent
model by [@&#8203;chan-vince](https://togithub.com/chan-vince) in
[#&#8203;9105](https://togithub.com/pydantic/pydantic/pull/9105)
- Do not warn about shadowed fields if they are not redefined in a child
class by [@&#8203;chan-vince](https://togithub.com/chan-vince) in
[#&#8203;9111](https://togithub.com/pydantic/pydantic/pull/9111)
- Fix discriminated union bug with unsubstituted type var by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;9124](https://togithub.com/pydantic/pydantic/pull/9124)
- Support serialization of `deque` when passed to `Sequence[blah blah
blah]` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;9128](https://togithub.com/pydantic/pydantic/pull/9128)
- Init private attributes from super-types in `model_post_init` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;9134](https://togithub.com/pydantic/pydantic/pull/9134)
- fix `model_construct` with `validation_alias` by
[@&#8203;ornariece](https://togithub.com/ornariece) in
[#&#8203;9144](https://togithub.com/pydantic/pydantic/pull/9144)
- Ensure json-schema generator handles `Literal` `null` types by
[@&#8203;bruno-f-cruz](https://togithub.com/bruno-f-cruz) in
[#&#8203;9135](https://togithub.com/pydantic/pydantic/pull/9135)
- **Fixed in v2.7.0**: Fix allow extra generic by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;9193](https://togithub.com/pydantic/pydantic/pull/9193)

##### New Contributors

- [@&#8203;hungtsetse](https://togithub.com/hungtsetse) made their first
contribution in
[#&#8203;8546](https://togithub.com/pydantic/pydantic/pull/8546)
- [@&#8203;StrawHatDrag0n](https://togithub.com/StrawHatDrag0n) made
their first contribution in
[#&#8203;8583](https://togithub.com/pydantic/pydantic/pull/8583)
- [@&#8203;anci3ntr0ck](https://togithub.com/anci3ntr0ck) made their
first contribution in
[#&#8203;8642](https://togithub.com/pydantic/pydantic/pull/8642)
- [@&#8203;Holi0317](https://togithub.com/Holi0317) made their first
contribution in
[#&#8203;8650](https://togithub.com/pydantic/pydantic/pull/8650)
- [@&#8203;bluenote10](https://togithub.com/bluenote10) made their first
contribution in
[#&#8203;8651](https://togithub.com/pydantic/pydantic/pull/8651)
- [@&#8203;ADSteele916](https://togithub.com/ADSteele916) made their
first contribution in
[#&#8203;8703](https://togithub.com/pydantic/pydantic/pull/8703)
- [@&#8203;musicinmybrain](https://togithub.com/musicinmybrain) made
their first contribution in
[#&#8203;8731](https://togithub.com/pydantic/pydantic/pull/8731)
- [@&#8203;jks15satoshi](https://togithub.com/jks15satoshi) made their
first contribution in
[#&#8203;8706](https://togithub.com/pydantic/pydantic/pull/8706)
- [@&#8203;13sin](https://togithub.com/13sin) made their first
contribution in
[#&#8203;8734](https://togithub.com/pydantic/pydantic/pull/8734)
- [@&#8203;DanielNoord](https://togithub.com/DanielNoord) made their
first contribution in
[#&#8203;8738](https://togithub.com/pydantic/pydantic/pull/8738)
-
[@&#8203;conradogarciaberrotaran](https://togithub.com/conradogarciaberrotaran)
made their first contribution in
[#&#8203;8519](https://togithub.com/pydantic/pydantic/pull/8519)
- [@&#8203;chris-griffin](https://togithub.com/chris-griffin) made their
first contribution in
[#&#8203;8775](https://togithub.com/pydantic/pydantic/pull/8775)
- [@&#8203;LouisGobert](https://togithub.com/LouisGobert) made their
first contribution in
[#&#8203;8793](https://togithub.com/pydantic/pydantic/pull/8793)
- [@&#8203;matsjoyce-refeyn](https://togithub.com/matsjoyce-refeyn) made
their first contribution in
[#&#8203;8751](https://togithub.com/pydantic/pydantic/pull/8751)
- [@&#8203;devmonkey22](https://togithub.com/devmonkey22) made their
first contribution in
[#&#8203;7680](https://togithub.com/pydantic/pydantic/pull/7680)
- [@&#8203;adamency](https://togithub.com/adamency) made their first
contribution in
[#&#8203;8847](https://togithub.com/pydantic/pydantic/pull/8847)
- [@&#8203;MamfTheKramf](https://togithub.com/MamfTheKramf) made their
first contribution in
[#&#8203;8851](https://togithub.com/pydantic/pydantic/pull/8851)
- [@&#8203;ornariece](https://togithub.com/ornariece) made their first
contribution in
[#&#8203;9001](https://togithub.com/pydantic/pydantic/pull/9001)
- [@&#8203;alexeyt101](https://togithub.com/alexeyt101) made their first
contribution in
[#&#8203;9004](https://togithub.com/pydantic/pydantic/pull/9004)
- [@&#8203;wannieman98](https://togithub.com/wannieman98) made their
first contribution in
[#&#8203;8947](https://togithub.com/pydantic/pydantic/pull/8947)
- [@&#8203;solidguy7](https://togithub.com/solidguy7) made their first
contribution in
[#&#8203;9062](https://togithub.com/pydantic/pydantic/pull/9062)
- [@&#8203;kloczek](https://togithub.com/kloczek) made their first
contribution in
[#&#8203;9047](https://togithub.com/pydantic/pydantic/pull/9047)
- [@&#8203;jag-k](https://togithub.com/jag-k) made their first
contribution in
[#&#8203;9053](https://togithub.com/pydantic/pydantic/pull/9053)
- [@&#8203;priya-gitTest](https://togithub.com/priya-gitTest) made their
first contribution in
[#&#8203;9088](https://togithub.com/pydantic/pydantic/pull/9088)
- [@&#8203;Youssefares](https://togithub.com/Youssefares) made their
first contribution in
[#&#8203;9023](https://togithub.com/pydantic/pydantic/pull/9023)
- [@&#8203;chan-vince](https://togithub.com/chan-vince) made their first
contribution in
[#&#8203;9105](https://togithub.com/pydantic/pydantic/pull/9105)
- [@&#8203;bruno-f-cruz](https://togithub.com/bruno-f-cruz) made their
first contribution in
[#&#8203;9135](https://togithub.com/pydantic/pydantic/pull/9135)
- [@&#8203;Lance-Drane](https://togithub.com/Lance-Drane) made their
first contribution in
[#&#8203;9166](https://togithub.com/pydantic/pydantic/pull/9166)

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-04-13 14:29:58 +02:00
renovate[bot] 66436a7b9e chore(deps): update pre-commit hook pre-commit/pre-commit-hooks to v4.6.0 2024-04-08 03:37:17 +00:00
renovate[bot] a5949ee155
chore(deps): update dependency django-filter to >=2.4.0,<24.3 (#2978)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [django-filter](https://togithub.com/carltongibson/django-filter)
([changelog](https://togithub.com/carltongibson/django-filter/blob/main/CHANGES.rst))
| `>=2.4.0,<24.2` -> `>=2.4.0,<24.3` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/django-filter/24.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/django-filter/24.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/django-filter/24.1/24.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/django-filter/24.1/24.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>carltongibson/django-filter (django-filter)</summary>

###
[`v24.2`](https://togithub.com/carltongibson/django-filter/blob/HEAD/CHANGES.rst#Version-242-2024-03-27)

[Compare
Source](https://togithub.com/carltongibson/django-filter/compare/24.1...24.2)

- Fixed a regression in v23.4 where callable choices were incorrectly
evaluated
    at filter instantiation, on Django versions prior to 5.0.

    Thanks to Craig de Stigter for the report and reproduce.

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-06 18:48:14 +02:00
renovate[bot] d31d4fc5bf
chore(deps): update dependency uvicorn to >=0.17.6,<0.30.0 (#2974)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [uvicorn](https://togithub.com/encode/uvicorn)
([changelog](https://togithub.com/encode/uvicorn/blob/master/CHANGELOG.md))
| `>=0.17.6,<0.29.0` -> `>=0.17.6,<0.30.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/uvicorn/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/uvicorn/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/uvicorn/0.28.1/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/uvicorn/0.28.1/0.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>encode/uvicorn (uvicorn)</summary>

###
[`v0.29.0`](https://togithub.com/encode/uvicorn/blob/HEAD/CHANGELOG.md#0290---2024-03-19)

[Compare
Source](https://togithub.com/encode/uvicorn/compare/0.28.1...0.29.0)

##### Added

- Cooperative signal handling
([#&#8203;1600](https://togithub.com/encode/uvicorn/issues/1600))
19/03/24

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNDUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI2MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-06 18:48:02 +02:00
renovate[bot] 78f4fcfec8
chore(deps): update dependency pytest-cov to v5 (#2976)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [pytest-cov](https://togithub.com/pytest-dev/pytest-cov)
([changelog](https://pytest-cov.readthedocs.io/en/latest/changelog.html))
| `>=4.0.0,<5` -> `>=4.0.0,<6` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest-cov/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest-cov/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest-cov/4.1.0/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest-cov/4.1.0/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>pytest-dev/pytest-cov (pytest-cov)</summary>

###
[`v5.0.0`](https://togithub.com/pytest-dev/pytest-cov/blob/HEAD/CHANGELOG.rst#500-2024-03-24)

[Compare
Source](https://togithub.com/pytest-dev/pytest-cov/compare/v4.1.0...v5.0.0)

-   Removed support for xdist rsync (now deprecated).
Contributed by Matthias Reichenbach in `#&#8203;623
<https://github.com/pytest-dev/pytest-cov/pull/623>`\_.
-   Switched docs theme to Furo.
-   Various legacy Python cleanup and CI improvements.
    Contributed by Christian Clauss and Hugo van Kemenade in
    `#&#8203;630 <https://github.com/pytest-dev/pytest-cov/pull/630>`*,
    `#&#8203;631 <https://github.com/pytest-dev/pytest-cov/pull/631>`*,
`#&#8203;632 <https://github.com/pytest-dev/pytest-cov/pull/632>`\_ and
    `#&#8203;633 <https://github.com/pytest-dev/pytest-cov/pull/633>`\_.
-   Added a `pyproject.toml` example in the docs.
Contributed by Dawn James in `#&#8203;626
<https://github.com/pytest-dev/pytest-cov/pull/626>`\_.
- Modernized project's pre-commit hooks to use ruff. Initial POC
contributed by
Christian Clauss in `#&#8203;584
<https://github.com/pytest-dev/pytest-cov/pull/584>`\_.

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-06 18:47:53 +02:00
renovate[bot] f6092e84d7 chore(deps): lock file maintenance (legacy/composer.json) 2024-03-27 15:29:40 +00:00
Keoni Mahelona 634e6e236d
fix: incorrect docker compose version (#2975)
### Description

There is no docker compose file version 3.9, see
https://docs.docker.com/compose/compose-file/compose-versioning/. The
`init` command is used in the compose file and I wonder if we can set
this to 3.7. When I followed the docs here
https://libretime.org/docs/admin-manual/install/install-using-docker/, I
was unable to get the docker compose to work because of a version issue.
So I upgraded docker (on Ubuntu focal) but realised that 3.9 isn't even
mentioned on the Docker website. 3.8 is, which I tried to use but it
failed. 3.7 worked for me.

**I have updated the documentation to reflect these changes**:

Docs are not affected.

### Testing Notes

**What I did:**

I was following the
[docs](https://libretime.org/docs/admin-manual/install/install-using-docker/)
but then rand into a docker compose file version error. I'm using docker
engine version 26,

```
Client: Docker Engine - Community
 Version:           26.0.0
 API version:       1.45
 Go version:        go1.21.8
 Git commit:        2ae903e
 Built:             Wed Mar 20 15:17:51 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.0.0
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.8
  Git commit:       8b79278
  Built:            Wed Mar 20 15:17:51 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.28
  GitCommit:        ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Ubuntu Version
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.6 LTS
Release:	20.04
Codename:	focal
```

which is very recent. When I checked the docker compose version
[page](https://docs.docker.com/compose/compose-file/compose-versioning/),
it doesn't even list 3.9 as a version, only 3.8. For whatever reason 3.8
did not work for me, but 3.7 does.

**How you can replicate my testing:**

Follow the docs,
https://libretime.org/docs/admin-manual/install/install-using-docker/.
If docker compose fails to run, and says
```
ERROR: Version in "./docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.
```
then change the version to 3.7.

### **Links**

N/A
2024-03-26 10:29:16 +01:00
renovate[bot] c286774e99 chore(deps): update pre-commit hook asottile/pyupgrade to v3.15.2 2024-03-25 21:13:53 +00:00
renovate[bot] e8e88f7d46 chore(deps): lock file maintenance (legacy/composer.json) 2024-03-19 19:32:13 +00:00
renovate[bot] f44445ae21 chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v24.3.0 2024-03-18 15:27:43 +00:00
Weblate (bot) d067d640dc
chore(legacy): translations update from Hosted Weblate (#2970)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: Mikachu <micah.sh@proton.me>
2024-03-17 08:49:52 +00:00
renovate[bot] 18a0eec000
chore(deps): update dependency django-filter to v24 (#2966)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [django-filter](https://togithub.com/carltongibson/django-filter)
([changelog](https://togithub.com/carltongibson/django-filter/blob/main/CHANGES.rst))
| `>=2.4.0,<23.6` -> `>=2.4.0,<24.2` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/django-filter/24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/django-filter/24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/django-filter/23.5/24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/django-filter/23.5/24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>carltongibson/django-filter (django-filter)</summary>

###
[`v24.1`](https://togithub.com/carltongibson/django-filter/blob/HEAD/CHANGES.rst#Version-241-2024-03-08)

[Compare
Source](https://togithub.com/carltongibson/django-filter/compare/23.5...24.1)

- Updated supported Python and Django versions, and resolved upcoming
Django
    deprecations.

    Required versions are now at least Python 3.8 and Django 4.2.

    Thanks to Michael Manganiello.

-   Allowed passing a FilterSet class to the filterset_factory().

    Thanks to Birger Schacht.

-   Set empty default value of filterset data to MultiValueDict.

    Thanks to Shlomo Gordon.

-   Preserve list values passed to the data dict in CSV widgets.

    Thanks to Bryan Brancotte.

-   Updates French and Ukrainian localisations.

    Thanks to Weblate.

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMzAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIzMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-10 11:46:52 +01:00
renovate[bot] 8ddd601b35
chore(deps): update dependency uvicorn to >=0.17.6,<0.29.0 (#2967)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [uvicorn](https://togithub.com/encode/uvicorn)
([changelog](https://togithub.com/encode/uvicorn/blob/master/CHANGELOG.md))
| `>=0.17.6,<0.28.0` -> `>=0.17.6,<0.29.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/uvicorn/0.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/uvicorn/0.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/uvicorn/0.27.1/0.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/uvicorn/0.27.1/0.28.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>encode/uvicorn (uvicorn)</summary>

###
[`v0.28.0`](https://togithub.com/encode/uvicorn/blob/HEAD/CHANGELOG.md#0280---2024-03-09)

[Compare
Source](https://togithub.com/encode/uvicorn/compare/0.27.1...0.28.0)

##### Added

- Raise `ClientDisconnected` on `send()` when client disconnected
([#&#8203;2220](https://togithub.com/encode/uvicorn/issues/2220))
12/02/24

##### Fixed

- Except `AttributeError` on `sys.stdin.fileno()` for Windows IIS10
([#&#8203;1947](https://togithub.com/encode/uvicorn/issues/1947))
29/02/24
- Use `X-Forwarded-Proto` for WebSockets scheme when the proxy provides
it ([#&#8203;2258](https://togithub.com/encode/uvicorn/issues/2258))
01/03/24

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMzAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIzMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-10 11:46:05 +01:00
renovate[bot] d92168ac19 chore(deps): update softprops/action-gh-release action to v2 2024-03-10 06:20:07 +00:00
Jonas L cc28293150
chore: reenable vale rule after fix (#2965)
Fixes #2957
2024-03-02 14:15:50 +01:00
renovate[bot] 200dffef44
chore(deps): update dependency python-dateutil to >=2.8.1,<2.10 (#2964)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [python-dateutil](https://togithub.com/dateutil/dateutil) |
`>=2.8.1,<2.9` -> `>=2.8.1,<2.10` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/python-dateutil/2.9.0.post0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/python-dateutil/2.9.0.post0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/python-dateutil/2.8.2/2.9.0.post0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/python-dateutil/2.8.2/2.9.0.post0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>dateutil/dateutil (python-dateutil)</summary>

###
[`v2.9.0.post0`](https://togithub.com/dateutil/dateutil/releases/tag/2.9.0.post0)

[Compare
Source](https://togithub.com/dateutil/dateutil/compare/2.9.0...2.9.0.post0)

### Version 2.9.0.post0 (2024-03-01)

#### Bugfixes

- Pinned `setuptools_scm` to `<8`, which should make the generated
`_version.py` file compatible with all supported versions of Python.

###
[`v2.9.0`](https://togithub.com/dateutil/dateutil/releases/tag/2.9.0)

[Compare
Source](https://togithub.com/dateutil/dateutil/compare/2.8.2...2.9.0)

### Version 2.9.0 (2024-02-29)

#### Data updates

- Updated tzdata version to 2024a. (gh pr
[#&#8203;1342](https://togithub.com/dateutil/dateutil/issues/1342))

#### Features

- Made all `dateutil` submodules lazily imported using [PEP
562](https://www.python.org/dev/peps/pep-0562/). On Python 3.7+, things
like `import dateutil; dateutil.tz.gettz("America/New_York")` will now
work without explicitly importing `dateutil.tz`, with the import
occurring behind the scenes on first use. The old behavior remains on
Python 3.6 and earlier. Fixed by Orson Adams. (gh issue
[#&#8203;771](https://togithub.com/dateutil/dateutil/issues/771), gh pr
[#&#8203;1007](https://togithub.com/dateutil/dateutil/issues/1007))

#### Bugfixes

- Removed a call to `datetime.utcfromtimestamp`, which is deprecated as
of Python 3.12. Reported by Hugo van Kemenade (gh pr
[#&#8203;1284](https://togithub.com/dateutil/dateutil/issues/1284)),
fixed by Thomas Grainger (gh pr
[#&#8203;1285](https://togithub.com/dateutil/dateutil/issues/1285)).

#### Documentation changes

- Added note into docs and tests where relativedelta would return last
day of the month only if the same day on a different month resolves to a
date that doesn't exist. Reported by
[@&#8203;hawkEye-01](https://togithub.com/hawkEye-01) (gh issue
[#&#8203;1167](https://togithub.com/dateutil/dateutil/issues/1167)).
Fixed by [@&#8203;Mifrill](https://togithub.com/Mifrill) (gh pr
[#&#8203;1168](https://togithub.com/dateutil/dateutil/issues/1168))

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMjAuMiIsInVwZGF0ZWRJblZlciI6IjM3LjIyMC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-02 14:12:37 +01:00
Thomas Göttgens feca75b28b
docs: get libfdk-aac from non-free source for debian 11 (#2954)
Co-authored-by: Jonas L <jooola@users.noreply.github.com>
2024-02-29 22:08:51 +01:00
renovate[bot] 22c303cfff
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.51.1 (#2963)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.49.1` -> `<3.51.1` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.51.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.51.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.49.0/3.51.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.49.0/3.51.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.51.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3510)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.50.0...v3.51.0)

- chore: add missing tests for non-documentation classes
([#&#8203;7848](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7848))
- chore: do not perform type analysis in tests
([#&#8203;7852](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7852))
- chore: list over array in more places
([#&#8203;7857](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7857))
- chore: tests documentation classes
([#&#8203;7855](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7855))
- feat: `@Symfony` - add nullable_type_declaration
([#&#8203;7856](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7856))
- test: fix wrong type in param annotation
([#&#8203;7858](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7858))

###
[`v3.50.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3500)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.49.0...v3.50.0)

- chore: add missing types
([#&#8203;7842](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7842))
- chore: BlocksAnalyzer - raise exception on invalid index
([#&#8203;7819](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7819))
- chore: DataProviderAnalysis - expect list over array
([#&#8203;7800](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7800))
- chore: do not use `@large` on method level
([#&#8203;7832](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7832))
- chore: do not use `@medium` on method level
([#&#8203;7833](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7833))
- chore: Fix typos
([#&#8203;7835](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7835))
- chore: rename variables
([#&#8203;7847](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7847))
- chore: some improvements around array typehints
([#&#8203;7799](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7799))
- CI: fix PHP 8.4 job
([#&#8203;7829](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7829))
- DX: Include `symfony/var-dumper` in dev tools
([#&#8203;7795](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7795))
- feat: Ability to remove unused imports from multi-use statements
([#&#8203;7815](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7815))
- feat: allow PHPUnit 11
([#&#8203;7824](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7824))
- feat: Allow shortening symbols from multi-use statements (only classes
for now)
([#&#8203;7816](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7816))
- feat: introduce `PhpdocArrayTypeFixer`
([#&#8203;7812](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7812))
- feat: PhpUnitTestCaseStaticMethodCallsFixer - cover PHPUnit v11
methods
([#&#8203;7822](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7822))
- feat: Support for multi-use statements in `NamespaceUsesAnalyzer`
([#&#8203;7814](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7814))
- feat: `MbStrFunctionsFixer` - add support for `mb_trim`, `mb_ltrim`
and `mb_rtrim` functions
([#&#8203;7840](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7840))
- feat: `NoEmptyPhpdocFixer` - do not leave empty line after removing
PHPDoc
([#&#8203;7820](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7820))
- feat: `no_superfluous_phpdoc_tags` - introduce `allow_future_params`
option
([#&#8203;7743](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7743))
- fix: do not use wrongly named arguments in data providers
([#&#8203;7823](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7823))
- fix: Ensure PCNTL extension is always installed in Docker
([#&#8203;7782](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7782))
- fix: PhpdocListTypeFixer - support key types containing `<…>`
([#&#8203;7817](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7817))
- fix: Proper build target for local Docker Compose
([#&#8203;7834](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7834))
- fix: union PHPDoc support in `fully_qualified_strict_types` fixer
([#&#8203;7719](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7719))
- fix: `ExecutorWithoutErrorHandler` - remove invalid PHP 7.4 type
([#&#8203;7845](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7845))
- fix: `fully_qualified_strict_types` must honor template/local type
identifiers
([#&#8203;7724](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7724))
- fix: `MethodArgumentSpaceFixer` - do not break heredoc/nowdoc
([#&#8203;7828](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7828))
- fix: `NumericLiteralSeparatorFixer` - do not change `float` to `int`
when there is nothing after the dot
([#&#8203;7805](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7805))
- fix: `PhpUnitStrictFixer` - do not crash on property having the name
of method to fix
([#&#8203;7804](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7804))
- fix: `SingleSpaceAroundConstructFixer` - correctly recognise multiple
constants
([#&#8203;7700](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7700))
- fix: `TypeExpression` - handle array shape key with dash
([#&#8203;7841](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7841))

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIxMi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-29 22:00:17 +01:00
renovate[bot] 9ef153fc6b
chore(deps): update rabbitmq docker tag to v3.13 (#2962)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| rabbitmq | minor | `3.12-alpine` -> `3.13-alpine` |

---

### 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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-25 05:39:10 +00:00
renovate[bot] 288a30d77b chore(deps): lock file maintenance (legacy/composer.json) 2024-02-21 17:12:41 +00:00
renovate[bot] 6acf2e3f5a
chore(deps): lock file maintenance (legacy/composer.json) (#2959)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Update | Change |
|---|---|
| lockFileMaintenance | All locks refreshed |

🔧 This Pull Request updates lock files to use the latest dependency
versions.

---

### Configuration

📅 **Schedule**: Branch creation - "after 4am and before 5am on monday"
(UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

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

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-20 10:37:45 +00:00
renovate[bot] 8deebb3f85
chore(deps): update pre-commit hook asottile/pyupgrade to v3.15.1 (#2958)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [asottile/pyupgrade](https://togithub.com/asottile/pyupgrade) |
repository | patch | `v3.15.0` -> `v3.15.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>asottile/pyupgrade (asottile/pyupgrade)</summary>

###
[`v3.15.1`](https://togithub.com/asottile/pyupgrade/compare/v3.15.0...v3.15.1)

[Compare
Source](https://togithub.com/asottile/pyupgrade/compare/v3.15.0...v3.15.1)

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-20 10:37:26 +00:00
Kyle Robbertze bace9ed917 ci: disable overly-sensitive vale rule 2024-02-19 08:27:23 +00:00
Kyle Robbertze 4584b52121 docs: fix broken link 2024-02-19 08:27:23 +00:00
Thomas Göttgens 270aa08ae6
fix(legacy): allow updating track types code (#2955)
Since moving to an indexed track_type model for 3.0, the constraint of the code being immutable is no longer
valid, since it's not used as index anymore. This commit removes the readonly flag from that form field.
2024-02-18 19:10:30 +01:00
renovate[bot] 0e6e9ff7ff chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v24.2.0 2024-02-14 16:39:07 +00:00
renovate[bot] 64401150b1 chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.16.0 2024-02-13 12:26:23 +00:00
Weblate (bot) 12461c4597
chore(legacy): translations update from Hosted Weblate (#2949)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2024-02-12 05:48:36 +00:00
renovate[bot] 117bc79809
chore(deps): update pre-commit/action action to v3.0.1 (#2948)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [pre-commit/action](https://togithub.com/pre-commit/action) | action |
patch | `v3.0.0` -> `v3.0.1` |

---

### Release Notes

<details>
<summary>pre-commit/action (pre-commit/action)</summary>

###
[`v3.0.1`](https://togithub.com/pre-commit/action/releases/tag/v3.0.1):
pre-commit/action@v3.0.1

[Compare
Source](https://togithub.com/pre-commit/action/compare/v3.0.0...v3.0.1)

##### Misc

-   Update actions/cache to v4
- [#&#8203;190](https://togithub.com/pre-commit/action/issues/190) PR by
[@&#8203;SukiCZ](https://togithub.com/SukiCZ).
- [#&#8203;189](https://togithub.com/pre-commit/action/issues/189) issue
by [@&#8203;bakerkj](https://togithub.com/bakerkj).

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xNzMuMCIsInVwZGF0ZWRJblZlciI6IjM3LjE3My4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-09 23:37:02 +00: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
Jonas L 37d1a7685e
fix(legacy): replay_gain_modifier should be a system preference (#2943) 2024-02-08 19:48:49 +01:00
Weblate (bot) 3b353ec74b
chore(legacy): translations update from Hosted Weblate (#2942)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2024-02-07 23:47:31 +00:00
renovate[bot] f7405f18ed chore(deps): update codecov/codecov-action action to v4 2024-02-05 03:32:06 +00:00
libretime-bot 2b119adab2 chore(legacy): update locales 2024-02-05 01:52:47 +00:00
Thomas Göttgens f4b260fdf7
fix(legacy): fix hidden fields in edit file form (#2932)
this removes a visual gap between artwork and editor fields. I stumbled
across this while updating the form to include replay gain.


![grafik](https://github.com/libretime/libretime/assets/25002/267f4d7b-e12e-4c86-b37e-420311dc3dec)
2024-02-03 22:31:00 +01:00
Jonas L 29f73e0dcb
fix(analyzer): backslash non utf-8 data when probing replaygain (#2931)
### Description

Fixes #2910
2024-02-02 20:44:15 +01:00
renovate[bot] 3e05748d2d
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.49.1 (#2899)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.46.1` -> `<3.49.1` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.46.0/3.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.46.0/3.49.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.49.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3490)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.48.0...v3.49.0)

- chore(checkbashisms): update to 2.23.7
([#&#8203;7780](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7780))
- chore: add missing key types in PHPDoc types
([#&#8203;7779](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7779))
- chore: Exclude `topic/core` issues/PRs from Stale Bot
([#&#8203;7788](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7788))
- chore: `DescribeCommand` - better handling of deprecations
([#&#8203;7778](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7778))
- docs: docker - use gitlab reporter in GitLab integration example
([#&#8203;7764](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7764))
- docs: docker in CI - don't suggest command that overrides path from
config file
([#&#8203;7763](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7763))
- DX: check deprecations exactly
([#&#8203;7742](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7742))
- feat: Add `ordered_types` to `@Symfony`
([#&#8203;7356](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7356))
- feat: introduce `PhpdocListTypeFixer`
([#&#8203;7796](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7796))
- feat: introduce `string_implicit_backslashes` as
`escape_implicit_backslashes` replacement
([#&#8203;7669](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7669))
- feat: update
`Symfony.nullable_type_declaration_for_default_null_value` config
([#&#8203;7773](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7773))
- feat: `@PhpCsFixer` ruleset - enable `php_unit_data_provider_static`
([#&#8203;7685](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7685))
- fix: Allow using cache when running in Docker distribution
([#&#8203;7769](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7769))
- fix: ClassDefinitionFixer for anonymous class with phpdoc/attribute on
separate line
([#&#8203;7546](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7546))
- fix: `ClassKeywordFixer` must run before
`FullyQualifiedStrictTypesFixer`
([#&#8203;7767](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7767))
- fix: `function_to_constant` `get_class()` replacement
([#&#8203;7770](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7770))
- fix: `LowercaseStaticReferenceFixer` - do not change typed constants
([#&#8203;7775](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7775))
- fix: `PhpdocTypesFixer` - handle more complex types
([#&#8203;7791](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7791))
- fix: `TypeExpression` - do not break type using `walkTypes` method
([#&#8203;7785](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7785))

###
[`v3.48.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3480)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.47.1...v3.48.0)

- chore: `FullyQualifiedStrictTypesFixer` must run before
`OrderedInterfacesFixer`
([#&#8203;7762](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7762))
- docs: Add PHP-CS-Fixer integration in a GitHub Action step
([#&#8203;7757](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7757))
- feat: `PhpdocTypesOrderFixer` Support DNF types
([#&#8203;7732](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7732))
- fix: Support shebang in fixers operating on PHP opening tag
([#&#8203;7687](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7687))
- fix: work correctly for a switch/case with ternary operator
([#&#8203;7756](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7756))
- fix: `NoUselessConcatOperatorFixer` - do not remove new line
([#&#8203;7759](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7759))

###
[`v3.47.1`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3471)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.47.0...v3.47.1)

- fix: Do not override short name with relative reference
([#&#8203;7752](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7752))
- fix: make `BinaryOperatorSpacesFixer` work as pre-v3.47
([#&#8203;7751](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7751))
- fix: Proper Docker image name suffix
([#&#8203;7739](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7739))
- fix: `FullyQualifiedStrictTypesFixer` - do not change case of the
symbol when there's name collision between imported class and imported
function
([#&#8203;7750](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7750))
- fix: `FullyQualifiedStrictTypesFixer` - do not modify statements with
property fetch and `::`
([#&#8203;7749](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7749))

###
[`v3.47.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3470)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.46.0...v3.47.0)

- chore: better identify EXPERIMENTAL rules
([#&#8203;7729](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7729))
- chore: fix issue detected by unlocked PHPStan + upgrade dev-tools
([#&#8203;7678](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7678))
- chore: handle extract()
([#&#8203;7684](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7684))
- chore: Mention contributors in app info
([#&#8203;7668](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7668))
- chore: no need to mark private methods as internal
([#&#8203;7715](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7715))
- chore: ProjectCodeTests - dry for function usage extractions
([#&#8203;7690](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7690))
- chore: reduce PHPStan baseline
([#&#8203;7644](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7644))
- chore: use numeric literal separator for PHP version IDs
([#&#8203;7712](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7712))
- chore: use numeric_literal_separator for project
([#&#8203;7713](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7713))
- chore: Utils::sortElements - better typing
([#&#8203;7646](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7646))
- CI: Allow running Stale Bot on demand
([#&#8203;7711](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7711))
- CI: Fix PHP 8.4
([#&#8203;7702](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7702))
- CI: Give write permissions to Stale Bot
([#&#8203;7716](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7716))
- CI: Use `actions/stale` v9
([#&#8203;7710](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7710))
- docs: Add information about allowing maintainers to update PRs
([#&#8203;7683](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7683))
- docs: CONTRIBUTING.md - update Opening a PR
([#&#8203;7691](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7691))
- docs: Display/include tool info/version by default in commands and
reports
([#&#8203;7733](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7733))
- DX: fix deprecation tests warnings for PHP 7.4
([#&#8203;7725](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7725))
- DX: update `host.docker.internal` in Compose override template
([#&#8203;7661](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7661))
- DX: `NumericLiteralSeparatorFixer` - change default strategy to
`use_separator`
([#&#8203;7730](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7730))
- feat: Add support for official Docker images of Fixer
([#&#8203;7555](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7555))
- feat: Add `spacing` option to `PhpdocAlignFixer`
([#&#8203;6505](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/6505))
- feat: Add `union_types` option to `phpdoc_to_param_type`,
`phpdoc_to_property_type`, and `phpdoc_to_return_type` fixers
([#&#8203;7672](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7672))
- feat: Introduce `heredoc_closing_marker` fixer
([#&#8203;7660](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7660))
- feat: Introduce `multiline_string_to_heredoc` fixer
([#&#8203;7665](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7665))
- feat: Introduce `NumericLiteralSeparatorFixer`
([#&#8203;6761](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/6761))
- feat: no_superfluous_phpdoc_tags - support for arrow function
([#&#8203;7666](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7666))
- feat: Simplify closing marker when possible in
`heredoc_closing_marker` fixer
([#&#8203;7676](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7676))
- feat: Support typed properties and attributes in
`fully_qualified_strict_types`
([#&#8203;7659](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7659))
- feat: `@PhpCsFixer` ruleset - enable
no_whitespace_before_comma_in_array.after_heredoc
([#&#8203;7670](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7670))
- fix: Improve progress bar visual layer
([#&#8203;7708](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7708))
- fix: indentation of control structure body without braces
([#&#8203;7663](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7663))
- fix: make sure all PHP extensions required by PHPUnit are installed
([#&#8203;7727](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7727))
- fix: PhpdocToReturnTypeFixerTest - support for arrow functions
([#&#8203;7645](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7645))
- fix: Several improvements for `fully_qualified_strict_types` (respect
declared symbols, relative imports, leading backslash in global
namespace)
([#&#8203;7679](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7679))
- fix: SimplifiedNullReturnFixer - support array return typehint
([#&#8203;7728](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7728))
- fix: Support numeric values without leading zero in
`numeric_literal_separator`
([#&#8203;7735](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7735))
- fix: `BinaryOperatorSpacesFixer` - align correctly when multiple
shifts occurs in single line
([#&#8203;7593](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7593))
- fix: `ClassReferenceNameCasingFixer` capitalizes the property name
after the nullsafe operator
([#&#8203;7696](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7696))
- fix: `fully_qualified_strict_types` with
`leading_backslash_in_global_namespace` enabled - handle reserved types
in phpDoc
([#&#8203;7648](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7648))
- fix: `NoSpaceAroundDoubleColonFixer` must run before
`MethodChainingIndentationFixer`
([#&#8203;7723](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7723))
- fix: `no_superfluous_phpdoc_tags` must honor multiline docs
([#&#8203;7697](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7697))
- fix: `numeric_literal_separator` - Handle zero-leading floats properly
([#&#8203;7737](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7737))
- refactor: increase performance by ~7% thanks to `Tokens::block*Cache`
hit increased by ~12%
([#&#8203;6176](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/6176))
- refactor: Tokens - fast check for non-block in 'detectBlockType',
evaluate definitions only once in 'getBlockEdgeDefinitions'
([#&#8203;7655](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7655))
- refactor: `Tokens::clearEmptyTokens` - play defensive with cache
clearing
([#&#8203;7658](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7658))
- test: ensure we do not forget to test any short_open_tag test
([#&#8203;7638](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7638))

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMjcuMCIsInVwZGF0ZWRJblZlciI6IjM3LjE1My4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-02-02 20:39:10 +01:00
renovate[bot] ed2f874633
chore(deps): update dependency black to v24 (#2916)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [black](https://togithub.com/psf/black)
([changelog](https://togithub.com/psf/black/blob/main/CHANGES.md)) |
`>=23.1.0,<24` -> `>=23.1.0,<25` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/black/24.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/black/24.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/black/23.12.1/24.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/black/23.12.1/24.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>psf/black (black)</summary>

###
[`v24.1.1`](https://togithub.com/psf/black/blob/HEAD/CHANGES.md#2411)

[Compare Source](https://togithub.com/psf/black/compare/24.1.0...24.1.1)

Bugfix release to fix a bug that made Black unusable on certain file
systems with strict
limits on path length.

##### Preview style

- Consistently add trailing comma on typed parameters
([#&#8203;4164](https://togithub.com/psf/black/issues/4164))

##### Configuration

- Shorten the length of the name of the cache file to fix crashes on
file systems that
do not support long paths
([#&#8203;4176](https://togithub.com/psf/black/issues/4176))

###
[`v24.1.0`](https://togithub.com/psf/black/blob/HEAD/CHANGES.md#2410)

[Compare
Source](https://togithub.com/psf/black/compare/23.12.1...24.1.0)

##### Highlights

This release introduces the new 2024 stable style
([#&#8203;4106](https://togithub.com/psf/black/issues/4106)),
stabilizing the following
changes:

- Add parentheses around `if`-`else` expressions
([#&#8203;2278](https://togithub.com/psf/black/issues/2278))
- Dummy class and function implementations consisting only of `...` are
formatted more
compactly ([#&#8203;3796](https://togithub.com/psf/black/issues/3796))
- If an assignment statement is too long, we now prefer splitting on the
right-hand side
    ([#&#8203;3368](https://togithub.com/psf/black/issues/3368))
- Hex codes in Unicode escape sequences are now standardized to
lowercase ([#&#8203;2916](https://togithub.com/psf/black/issues/2916))
- Allow empty first lines at the beginning of most blocks
([#&#8203;3967](https://togithub.com/psf/black/issues/3967),
[#&#8203;4061](https://togithub.com/psf/black/issues/4061))
- Add parentheses around long type annotations
([#&#8203;3899](https://togithub.com/psf/black/issues/3899))
- Enforce newline after module docstrings
([#&#8203;3932](https://togithub.com/psf/black/issues/3932),
[#&#8203;4028](https://togithub.com/psf/black/issues/4028))
- Fix incorrect magic trailing comma handling in return types
([#&#8203;3916](https://togithub.com/psf/black/issues/3916))
- Remove blank lines before class docstrings
([#&#8203;3692](https://togithub.com/psf/black/issues/3692))
- Wrap multiple context managers in parentheses if combined in a single
`with` statement
    ([#&#8203;3489](https://togithub.com/psf/black/issues/3489))
- Fix bug in line length calculations for power operations
([#&#8203;3942](https://togithub.com/psf/black/issues/3942))
- Add trailing commas to collection literals even if there's a comment
after the last
    entry ([#&#8203;3393](https://togithub.com/psf/black/issues/3393))
- When using `--skip-magic-trailing-comma` or `-C`, trailing commas are
stripped from
subscript expressions with more than 1 element
([#&#8203;3209](https://togithub.com/psf/black/issues/3209))
- Add extra blank lines in stubs in a few cases
([#&#8203;3564](https://togithub.com/psf/black/issues/3564),
[#&#8203;3862](https://togithub.com/psf/black/issues/3862))
- Accept raw strings as docstrings
([#&#8203;3947](https://togithub.com/psf/black/issues/3947))
- Split long lines in case blocks
([#&#8203;4024](https://togithub.com/psf/black/issues/4024))
- Stop removing spaces from walrus operators within subscripts
([#&#8203;3823](https://togithub.com/psf/black/issues/3823))
- Fix incorrect formatting of certain async statements
([#&#8203;3609](https://togithub.com/psf/black/issues/3609))
- Allow combining `# fmt: skip` with other comments
([#&#8203;3959](https://togithub.com/psf/black/issues/3959))

There are already a few improvements in the `--preview` style, which are
slated for the
2025 stable style. Try them out and
[share your feedback](https://togithub.com/psf/black/issues). In the
past, the preview
style has included some features that we were not able to stabilize.
This year, we're
adding a separate `--unstable` style for features with known problems.
Now, the
`--preview` style only includes features that we actually expect to make
it into next
year's stable style.

##### Stable style

Several bug fixes were made in features that are moved to the stable
style in this
release:

- Fix comment handling when parenthesising conditional expressions
([#&#8203;4134](https://togithub.com/psf/black/issues/4134))
- Fix bug where spaces were not added around parenthesized walruses in
subscripts,
unlike other binary operators
([#&#8203;4109](https://togithub.com/psf/black/issues/4109))
- Remove empty lines before docstrings in async functions
([#&#8203;4132](https://togithub.com/psf/black/issues/4132))
- Address a missing case in the change to allow empty lines at the
beginning of all
blocks, except immediately before a docstring
([#&#8203;4130](https://togithub.com/psf/black/issues/4130))
- For stubs, fix logic to enforce empty line after nested classes with
bodies ([#&#8203;4141](https://togithub.com/psf/black/issues/4141))

##### Preview style

- Add `--unstable` style, covering preview features that have known
problems that would
block them from going into the stable style. Also add the
`--enable-unstable-feature`
    flag; for example, use
`--enable-unstable-feature hug_parens_with_braces_and_square_brackets`
to apply this
preview feature throughout 2024, even if a later Black release
downgrades the feature
to unstable ([#&#8203;4096](https://togithub.com/psf/black/issues/4096))
- Format module docstrings the same as class and function docstrings
([#&#8203;4095](https://togithub.com/psf/black/issues/4095))
- Fix crash when using a walrus in a dictionary
([#&#8203;4155](https://togithub.com/psf/black/issues/4155))
- Fix unnecessary parentheses when wrapping long dicts
([#&#8203;4135](https://togithub.com/psf/black/issues/4135))
- Stop normalizing spaces before `# fmt: skip` comments
([#&#8203;4146](https://togithub.com/psf/black/issues/4146))

##### Configuration

- Print warning when configuration in `pyproject.toml` contains an
invalid key ([#&#8203;4165](https://togithub.com/psf/black/issues/4165))
- Fix symlink handling, properly ignoring symlinks that point outside of
root ([#&#8203;4161](https://togithub.com/psf/black/issues/4161))
- Fix cache mtime logic that resulted in false positive cache hits
([#&#8203;4128](https://togithub.com/psf/black/issues/4128))
- Remove the long-deprecated `--experimental-string-processing` flag.
This feature can
currently be enabled with `--preview --enable-unstable-feature
string_processing`.
    ([#&#8203;4096](https://togithub.com/psf/black/issues/4096))

##### Integrations

- Revert the change to run Black's pre-commit integration only on
specific git hooks
([#&#8203;3940](https://togithub.com/psf/black/issues/3940)) for better
compatibility with older versions of pre-commit
([#&#8203;4137](https://togithub.com/psf/black/issues/4137))

</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 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>
2024-02-02 20:39:00 +01:00
renovate[bot] 7a3fffd45f
chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v24 (#2917)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](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
Thomas Göttgens a95ce3d229
feat(legacy): trim overbooked shows after autoloading a playlist (#2897)
### Description

Some combination of preload/postload and autoloding playlists with
smartblocks generate massively overbooked shows that clutter up the
interface. This addition performs a 'trim overbooked' after filling up
the autoload list, and does the same as pushing the 'trim overbooked'
button in the UI.


### Testing Notes

Define an autoloading playlist of 2 hours and schedule it for a one hour
show. Without patch, you'll get entries for 2 hours, with the patch, you
only get one hour and a 'overboarding' orange entry at most.

---------

Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-02-02 20:17:23 +01:00
Thomas Göttgens 170d09545e
feat(legacy): disable public radio page and redirect to login (#2903)
### Description

Many people don't need the public page and use libretime purely for
playout management. This adds the ability to have libretime publicly
available but only present the login page to the user.

**I have updated the documentation to reflect these changes**:

no, but i will add documentation if this PR is accepted.

### Testing Notes

**What I did:**

Toggle the new ceckbox on the general settings, log out and back in and
check behaviour.

note: this may have conflicts with the trim overbooked PR since the
toggle sits in the same place. If both are accepted this needs to be
formatted nicely :-)

---------

Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
Co-authored-by: Jonas L. <jooola@users.noreply.github.com>
Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-02-02 19:04:12 +01:00
renovate[bot] 199831458f
chore(deps): update docker/metadata-action action to v5.5.1 (#2928)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [docker/metadata-action](https://togithub.com/docker/metadata-action)
| action | minor | `v5.4.0` -> `v5.5.1` |

---

### Release Notes

<details>
<summary>docker/metadata-action (docker/metadata-action)</summary>

###
[`v5.5.1`](https://togithub.com/docker/metadata-action/releases/tag/v5.5.1)

[Compare
Source](https://togithub.com/docker/metadata-action/compare/v5.5.0...v5.5.1)

- Don't set `cwd://` prefix for local bake files by
[@&#8203;crazy-max](https://togithub.com/crazy-max) in
[https://github.com/docker/metadata-action/pull/382](https://togithub.com/docker/metadata-action/pull/382)

**Full Changelog**:
https://github.com/docker/metadata-action/compare/v5.5.0...v5.5.1

###
[`v5.5.0`](https://togithub.com/docker/metadata-action/releases/tag/v5.5.0)

[Compare
Source](https://togithub.com/docker/metadata-action/compare/v5.4.0...v5.5.0)

- Set `cwd://` prefix for bake files path by
[@&#8203;crazy-max](https://togithub.com/crazy-max) in
[https://github.com/docker/metadata-action/pull/370](https://togithub.com/docker/metadata-action/pull/370)
- Bump
[@&#8203;docker/actions-toolkit](https://togithub.com/docker/actions-toolkit)
from 0.16.0 to 0.16.1 in
[https://github.com/docker/metadata-action/pull/371](https://togithub.com/docker/metadata-action/pull/371)
- Bump moment from 2.29.4 to 2.30.1 in
[https://github.com/docker/metadata-action/pull/373](https://togithub.com/docker/metadata-action/pull/373)
- Bump moment-timezone from 0.5.43 to 0.5.44 in
[https://github.com/docker/metadata-action/pull/374](https://togithub.com/docker/metadata-action/pull/374)

**Full Changelog**:
https://github.com/docker/metadata-action/compare/v5.4.0...v5.5.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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xNTMuMiIsInVwZGF0ZWRJblZlciI6IjM3LjE1My4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Kyle Robbertze <kyle@paddatrapper.com>
2024-02-01 16:23:04 +00:00
renovate[bot] 88a293370d
chore(deps): update dependency pytest to v8 (#2921)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [pytest](https://docs.pytest.org/en/latest/)
([source](https://togithub.com/pytest-dev/pytest),
[changelog](https://docs.pytest.org/en/stable/changelog.html)) |
`>=7.2.1,<8` -> `>=7.2.1,<9` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest/8.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest/8.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest/7.4.4/8.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest/7.4.4/8.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>pytest-dev/pytest (pytest)</summary>

###
[`v8.0.0`](https://togithub.com/pytest-dev/pytest/compare/7.4.4...8.0.0)

[Compare
Source](https://togithub.com/pytest-dev/pytest/compare/7.4.4...8.0.0)

</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 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>
2024-01-30 17:34:11 +00:00
renovate[bot] c2e6d15014
chore(deps): update dependency pydantic to >=2.5.0,<2.7 (#2922)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](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/)) |
`>=2.5.0,<2.6` -> `>=2.5.0,<2.7` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pydantic/2.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pydantic/2.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pydantic/2.5.3/2.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pydantic/2.5.3/2.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

[Compare
Source](https://togithub.com/pydantic/pydantic/compare/v2.5.3...v2.6.0)

[GitHub
release](https://togithub.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://togithub.com/commonism) in
[#&#8203;6033](https://togithub.com/pydantic/pydantic/pull/6033)
- Upgrade \`ruff\`\` target version to Python 3.8 by
[@&#8203;Elkiwa](https://togithub.com/Elkiwa) in
[#&#8203;8341](https://togithub.com/pydantic/pydantic/pull/8341)
- Update to `pydantic-extra-types==2.4.1` by
[@&#8203;yezz123](https://togithub.com/yezz123) in
[#&#8203;8478](https://togithub.com/pydantic/pydantic/pull/8478)
- Update to `pyright==1.1.345` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;8453](https://togithub.com/pydantic/pydantic/pull/8453)
- Update pydantic-core from 2.14.6 to 2.16.1, significant changes from
these updates are described below, full changelog
[here](https://togithub.com/pydantic/pydantic-core/compare/v2.14.6...v2.16.1)

##### New Features

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

##### Changes

- Drop Python3.7 support by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7188](https://togithub.com/pydantic/pydantic/pull/7188)
- Drop Python 3.7, and PyPy 3.7 and 3.8 by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[pydantic/pydantic-core#1129](https://togithub.com/pydantic/pydantic-core/pull/1129)
- Use positional-only `self` in `BaseModel` constructor, so no field
name can ever conflict with it by
[@&#8203;ariebovenberg](https://togithub.com/ariebovenberg) in
[#&#8203;8072](https://togithub.com/pydantic/pydantic/pull/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://togithub.com/alexmojaki) in
[#&#8203;8268](https://togithub.com/pydantic/pydantic/pull/8268)
- Exclude `BaseModel` docstring from JSON schema description by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8352](https://togithub.com/pydantic/pydantic/pull/8352)
- Introducing `classproperty` decorator for `model_computed_fields` by
[@&#8203;Jocelyn-Gas](https://togithub.com/Jocelyn-Gas) in
[#&#8203;8437](https://togithub.com/pydantic/pydantic/pull/8437)
- Explicitly raise an error if field names clashes with types by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;8243](https://togithub.com/pydantic/pydantic/pull/8243)
- Use stricter serializer for unions of simple types by
[@&#8203;alexdrydew](https://togithub.com/alexdrydew)
[pydantic/pydantic-core#1132](https://togithub.com/pydantic/pydantic-core/pull/1132)

##### Performance

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

##### Fixes

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

##### New Contributors

##### `pydantic`

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

##### `pydantic-core`

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

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xNTMuMiIsInVwZGF0ZWRJblZlciI6IjM3LjE1My4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 17:25:55 +00:00
Julien Valentin 12dd477312
fix(legacy): avoid crash when lot of streams in configuration (#2915)
### Description

lot of streams forbid
http://libretime.example.org/preference/stream-setting to open (max=4)
this patch prevent the crash by displaying an error message and truncate
streamcount to 4.

Co-authored-by: Kyle Robbertze <paddatrapper@users.noreply.github.com>
2024-01-30 17:24:28 +00:00
renovate[bot] f6d7be9b1c
chore(deps): update lycheeverse/lychee-action action to v1.9.3 (#2920)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[lycheeverse/lychee-action](https://togithub.com/lycheeverse/lychee-action)
| action | patch | `v1.9.1` -> `v1.9.3` |

---

### Release Notes

<details>
<summary>lycheeverse/lychee-action (lycheeverse/lychee-action)</summary>

###
[`v1.9.3`](https://togithub.com/lycheeverse/lychee-action/releases/tag/v1.9.3):
Version 1.9.3

[Compare
Source](https://togithub.com/lycheeverse/lychee-action/compare/v1.9.2...v1.9.3)

#### What's Changed

- Bugfix: Pass custom `token` as input argument to action by
[@&#8203;mre](https://togithub.com/mre) in
[https://github.com/lycheeverse/lychee-action/pull/222](https://togithub.com/lycheeverse/lychee-action/pull/222)
Previously, the name of the token was incorrect, leading to no token
being used if the user specified `with: [token: ...]`.
Thanks to [@&#8203;tobon4](https://togithub.com/tobon4) for pointing
this out.

**Full Changelog**:
https://github.com/lycheeverse/lychee-action/compare/v1...v1.9.3

###
[`v1.9.2`](https://togithub.com/lycheeverse/lychee-action/releases/tag/v1.9.2):
Version 1.9.2

[Compare
Source](https://togithub.com/lycheeverse/lychee-action/compare/v1.9.1...v1.9.2)

#### What's Changed

- Bump actions/cache from 3 to 4 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/lycheeverse/lychee-action/pull/221](https://togithub.com/lycheeverse/lychee-action/pull/221)
- Bump peter-evans/create-issue-from-file from 4 to 5 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/lycheeverse/lychee-action/pull/223](https://togithub.com/lycheeverse/lychee-action/pull/223)
- Bump to lychee 0.14.2 in
eeb9cb63fe

**Full Changelog**:
https://github.com/lycheeverse/lychee-action/compare/v1...v1.9.2

</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>
2024-01-30 17:22:44 +00:00
renovate[bot] 0c89350c2f
chore(deps): update peter-evans/dockerhub-description action to v4 (#2918)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[peter-evans/dockerhub-description](https://togithub.com/peter-evans/dockerhub-description)
| action | major | `v3` -> `v4` |

---

### Release Notes

<details>
<summary>peter-evans/dockerhub-description
(peter-evans/dockerhub-description)</summary>

###
[`v4`](https://togithub.com/peter-evans/dockerhub-description/compare/v3...v4)

[Compare
Source](https://togithub.com/peter-evans/dockerhub-description/compare/v3...v4)

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMzUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEzNS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 17:22:28 +00:00
Kyle Robbertze 3d13f41bbd
ci: pin docker/metadata-action to working version (#2924)
Pin docker/metadata-action to 5.4 until
https://github.com/docker/metadata-action/issues/381 is fixed
2024-01-30 17:15:15 +00:00
renovate[bot] dab6c486b8
chore(deps): update dependency uvicorn to >=0.17.6,<0.28.0 (#2913)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [uvicorn](https://togithub.com/encode/uvicorn)
([changelog](https://togithub.com/encode/uvicorn/blob/master/CHANGELOG.md))
| `>=0.17.6,<0.27.0` -> `>=0.17.6,<0.28.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/uvicorn/0.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/uvicorn/0.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/uvicorn/0.26.0/0.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/uvicorn/0.26.0/0.27.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>encode/uvicorn (uvicorn)</summary>

###
[`v0.27.0`](https://togithub.com/encode/uvicorn/blob/HEAD/CHANGELOG.md#0270---2024-01-20)

[Compare
Source](https://togithub.com/encode/uvicorn/compare/0.26.0...0.27.0)

##### Added

- Raise `ClientDisconnect(IOError)` on `send()` when client disconnected
([#&#8203;2218](https://togithub.com/encode/uvicorn/issues/2218))
19/01/24
- Bump ASGI WebSocket spec version to 2.4
([#&#8203;2221](https://togithub.com/encode/uvicorn/issues/2221))
20/01/24

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMzUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEzNS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-23 21:57:06 +01:00
Thomas Göttgens b14469722e
docs(playout): close warning box properly (#2911) 2024-01-20 17:06:35 +00:00
Kyle Robbertze 54ec07d2bd
docs: fix broken link to install guide (#2908)
### Description

Follow up to #2904
2024-01-19 17:12:30 +00:00
renovate[bot] 0b5d63c547
chore(deps): update actions/cache action to v4 (#2906)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/cache](https://togithub.com/actions/cache) | action | major |
`v3` -> `v4` |

---

### Release Notes

<details>
<summary>actions/cache (actions/cache)</summary>

### [`v4`](https://togithub.com/actions/cache/compare/v3...v4)

[Compare Source](https://togithub.com/actions/cache/compare/v3...v4)

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMzUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEzNS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-19 17:05:01 +00:00
Thomas Göttgens b6c3ece7d9
docs(playout): add a tutorial to enable AAC in liquidsoap (#2904)
Documentation update regarding #2184

---------

Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
2024-01-19 16:58:22 +00:00
Weblate (bot) c42a1c6660
chore(legacy): translations update from Hosted Weblate (#2907)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: Domenik Töfflinger <domenikt96@yahoo.de>
2024-01-19 16:56:16 +00:00
renovate[bot] 2a91320bb5
chore(deps): update dependency uvicorn to >=0.17.6,<0.27.0 (#2901)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [uvicorn](https://togithub.com/encode/uvicorn)
([changelog](https://togithub.com/encode/uvicorn/blob/master/CHANGELOG.md))
| `>=0.17.6,<0.26.0` -> `>=0.17.6,<0.27.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/uvicorn/0.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/uvicorn/0.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/uvicorn/0.25.0/0.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/uvicorn/0.25.0/0.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>encode/uvicorn (uvicorn)</summary>

###
[`v0.26.0`](https://togithub.com/encode/uvicorn/blob/HEAD/CHANGELOG.md#0260---2024-01-16)

[Compare
Source](https://togithub.com/encode/uvicorn/compare/0.25.0...0.26.0)

##### Changed

- Update `--root-path` to include the root path prefix in the full ASGI
`path` as per the ASGI spec
([#&#8203;2213](https://togithub.com/encode/uvicorn/issues/2213))
16/01/24
- Use `__future__.annotations` on some internal modules
([#&#8203;2199](https://togithub.com/encode/uvicorn/issues/2199))
16/01/24

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMzUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEzNS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-17 19:19:27 +01:00
renovate[bot] 5a581c034e chore(deps): lock file maintenance (legacy/composer.json) 2024-01-16 10:21:21 +00:00
Thomas Göttgens 95283efc1f
feat(legacy): add aac/opus support to dashboard player (#2881)
### Description

The Player on the dashbaord does not correctly play an AAC stream. The
rewritng logic only takes into account the ogg format. Add rewriting
from aac to m4a in the javascript calls so the player works.

**This is a new feature**:

AAC output currently only works with replacing liquidsoap, so
technically this is a new feature.

**I have updated the documentation to reflect these changes**:

The dashboard player is not documented. The player widget works with AAC
streams already.

### Testing Notes

**What I did:**

Swapped liquidsoap and reconfigured the default mp3 stream as AAC

**How you can replicate my testing:**

on ubuntu focal, drop in the upstream liquidsoap deb to enable aac, then
configure the secondary output to use 128kbit aac instead of mp3.
Restart the target, login to the dashboard and open the dashboard
player. Both streams from the dropdown should work.

---------

Co-authored-by: Thomas Göttgens <tgoettgens@mail.com>
Co-authored-by: Jonas L <jooola@users.noreply.github.com>
2024-01-13 13:47:54 +01:00
Jonas L f6d57d5f2d
chore: introduce the stable-4.x branch (#2888)
### Description

Related to https://github.com/libretime/libretime/issues/2887
2024-01-13 12:50:51 +01:00
renovate[bot] 4c40fab58e
chore(deps): update dependency lxml to >=4.5.0,<6.0.0 (main) (#2878)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [lxml](https://lxml.de/) ([source](https://togithub.com/lxml/lxml),
[changelog](https://git.launchpad.net/lxml/plain/CHANGES.txt)) |
`>=4.5.0,<5.1.0` -> `>=4.5.0,<6.0.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/lxml/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/lxml/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/lxml/5.0.1/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/lxml/5.0.1/5.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>lxml/lxml (lxml)</summary>

###
[`v5.1.0`](https://togithub.com/lxml/lxml/blob/HEAD/CHANGES.txt#510-2024-01-05)

[Compare
Source](https://togithub.com/lxml/lxml/compare/lxml-5.0.1...lxml-5.1.0)

\==================

## Features added

-   Parsing ASCII strings is slightly faster.

## Bugs fixed

- [GH#349](https://togithub.com/GH/lxml/issues/349): The HTML
`Cleaner()` interpreted an accidentally provided string parameter
for the `host_whitelist` as list of characters and silently failed to
reject any hosts.
    Passing a non-collection is now rejected.

## Other changes

-   Support for Python 2.7 and Python versions < 3.6 was removed.

-   The wheel build was migrated to use `cibuildwheel`.
    Patch by Primož Godec.

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMjEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEyMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-12 21:04:49 +01:00
renovate[bot] 02e258500b chore(deps): update lycheeverse/lychee-action action to v1.9.1 2024-01-11 06:01:32 +00:00
renovate[bot] ee33c0c56a chore(deps): lock file maintenance (legacy/composer.json) 2024-01-09 09:35:34 +00:00
libretime-bot 4795170feb
chore(main): release 4.0.0 (#2834)
🤖 I have created a release *beep* *boop*
---


## [4.0.0](https://github.com/libretime/libretime/compare/3.2.0...4.0.0)
(2024-01-07)


### ⚠ BREAKING CHANGES

* The media file serving is now handled by Nginx instead of the API
service. The `storage.path` field is now used in the Nginx
configuration, so make sure to update the Nginx configuration file if
you change it.
* **installer:** The default listen port for the installer is now
`8080`. We recommend that you put a reverse proxy in front of LibreTime.
* **installer:** The `--update-nginx` flag was removed from the
installer. The nginx configuration deployed by the installer will now
always be overwritten. Make sure to move your customizations to a
reverse proxy configuration.
* The default system output (`stream.outputs.system[].kind`) changed
from `alsa` to `pulseaudio`. Make sure to update your configuration file
if you rely on the default system output.
* The `general.secret_key` configuration field is now required. Make
sure to update your configuration file and add a secret key.

### Features

* default system output is now `pulseaudio`
([#2842](https://github.com/libretime/libretime/issues/2842))
([083ee3f](083ee3f1dd)),
closes [#2542](https://github.com/libretime/libretime/issues/2542)
* disable uvicorn worker lifespan
([#2845](https://github.com/libretime/libretime/issues/2845))
([8743c84](8743c84d0f))
* **installer:** add the `--storage-path` flag
([#2865](https://github.com/libretime/libretime/issues/2865))
([5b23852](5b23852f8d))
* **installer:** change default listen port to 8080
([#2852](https://github.com/libretime/libretime/issues/2852))
([f72b7f9](f72b7f9c97))
* **installer:** remove the `--update-nginx` flag
([#2851](https://github.com/libretime/libretime/issues/2851))
([35d7eac](35d7eace13))
* **playout:** configure device for alsa and pulseaudio system outputs
([#2654](https://github.com/libretime/libretime/issues/2654))
([06af18b](06af18b84e))
* rewrite cloud-init config
([#2853](https://github.com/libretime/libretime/issues/2853))
([8406d52](8406d520d7))
* run python in optimized mode
([#2874](https://github.com/libretime/libretime/issues/2874))
([3f7fc99](3f7fc99b6b))
* the `general.secret_key` configuration field is now required
([#2841](https://github.com/libretime/libretime/issues/2841))
([0d2d1a2](0d2d1a2673)),
closes [#2426](https://github.com/libretime/libretime/issues/2426)
* use nginx to serve media files
([#2860](https://github.com/libretime/libretime/issues/2860))
([4603c17](4603c1759f))


### Bug Fixes

* add parent function name in setValue exception
([#2777](https://github.com/libretime/libretime/issues/2777))
([c764a5a](c764a5a648))
* **api:** ensure non ascii paths are handled by X-Accel-Redirect
([#2861](https://github.com/libretime/libretime/issues/2861))
([0ce63f3](0ce63f3bf0))
* **api:** enum schema description
([#2803](https://github.com/libretime/libretime/issues/2803))
([976b70e](976b70ed32))
* **api:** let nginx handle the media file content type
([#2862](https://github.com/libretime/libretime/issues/2862))
([72268ad](72268ad9bb))
* **api:** move gunicorn worker config to python file
([#2854](https://github.com/libretime/libretime/issues/2854))
([43221d9](43221d9d7f))
* **api:** paths with question marks chars are handled by
X-Accel-Redirect
([#2875](https://github.com/libretime/libretime/issues/2875))
([b2c1ceb](b2c1ceb89f))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.42.1
(main) ([#2765](https://github.com/libretime/libretime/issues/2765))
([8ae4dce](8ae4dce9e7))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.43.2
(main) ([#2848](https://github.com/libretime/libretime/issues/2848))
([62e5f4d](62e5f4dfbb))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.45.1
(main) ([#2855](https://github.com/libretime/libretime/issues/2855))
([6f84328](6f84328380))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.46.1
(main) ([#2868](https://github.com/libretime/libretime/issues/2868))
([4827dbc](4827dbce71))
* **legacy:** allow uploading opus files
([#2804](https://github.com/libretime/libretime/issues/2804))
([f252a16](f252a16637))
* **legacy:** declare previously undeclared variable
([#2793](https://github.com/libretime/libretime/issues/2793))
([e2cfbf4](e2cfbf4c03))
* **legacy:** ensure last played criteria works with never played files
([#2840](https://github.com/libretime/libretime/issues/2840))
([24ee383](24ee3830c2))
* **playout:** increase file download chunk size to 8192 bytes
([#2863](https://github.com/libretime/libretime/issues/2863))
([7ed1be1](7ed1be1816))
* **playout:** remove empty file when the download request failed
([#2864](https://github.com/libretime/libretime/issues/2864))
([2facbfa](2facbfaff2))
* **worker:** unbound variable when episode url returns HTTP 404
([#2844](https://github.com/libretime/libretime/issues/2844))
([3f39689](3f396895e5))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: jo <ljonas@riseup.net>
2024-01-07 16:56:33 +01:00
Jonas L b2c1ceb89f
fix(api): paths with question marks chars are handled by X-Accel-Redirect (#2875)
Use the filepath_to_uri function instead.
2024-01-07 15:07:01 +01:00
Jonas L 3f7fc99b6b
feat: run python in optimized mode (#2874)
Set PYTHONOPTIMIZE=2 to enable
https://docs.python.org/3/using/cmdline.html#cmdoption-OO
2024-01-07 14:30:20 +01:00
renovate[bot] 4827dbce71
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.46.1 (main) (#2868)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.45.1` -> `<3.46.1` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.45.0/3.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.45.0/3.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.46.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3460)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.45.0...v3.46.0)

- chore: fix internal typehints in Tokens
([#&#8203;7656](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7656))
- chore: reduce PHPStan baseline
([#&#8203;7643](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7643))
- docs: Show class with unit tests and BC promise info
([#&#8203;7667](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7667))
- feat: change default ruleset to `@PER-CS` (only behind
PHP_CS_FIXER_FUTURE_MODE=1)
([#&#8203;7650](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7650))
- feat: Support new/instanceof/use trait in
`fully_qualified_strict_types`
([#&#8203;7653](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7653))
- fix: FQCN parse phpdoc using full grammar regex
([#&#8203;7649](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7649))
- fix: Handle FQCN properly with `leading_backslash_in_global_namespace`
option enabled
([#&#8203;7654](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7654))
- fix: PhpdocToParamTypeFixerTest - support for arrow functions
([#&#8203;7647](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7647))
- fix: PHP_CS_FIXER_FUTURE_MODE - proper boolean validation
([#&#8203;7651](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7651))

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMDMuMSIsInVwZGF0ZWRJblZlciI6IjM3LjEwMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-01-07 13:59:02 +01:00
renovate[bot] 4e22e8cc65
chore(deps): update dependency flake8 to v7 (main) (#2870)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [flake8](https://togithub.com/pycqa/flake8)
([changelog](https://flake8.pycqa.org/en/latest/release-notes/index.html))
| `>=6.0.0,<7` -> `>=6.0.0,<8` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/flake8/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/flake8/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/flake8/6.1.0/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/flake8/6.1.0/7.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>pycqa/flake8 (flake8)</summary>

### [`v7.0.0`](https://togithub.com/pycqa/flake8/compare/6.1.0...7.0.0)

[Compare
Source](https://togithub.com/pycqa/flake8/compare/6.1.0...7.0.0)

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMjEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEyMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-07 12:56:00 +01:00
renovate[bot] 9f82e5ffcd chore(deps): update lycheeverse/lychee-action action to v1.9.0 2024-01-06 22:00:48 +00:00
Jonas L 5b23852f8d
feat(installer): add the `--storage-path` flag (#2865)
### Description

Add the `--storage-path` flag to the installer to configure a custom
storage path out of the box.

On existing installation, we check that the 'storage.path' in the
configuration file is the same as the one provided by the installer.
This ensures that we don't update the nginx configuration file with an
invalid storage path.
2024-01-01 14:38:05 +01:00
renovate[bot] 5bd8ee0476
chore(deps): update dependency lxml to v5 (main) (#2856)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [lxml](https://lxml.de/) ([source](https://togithub.com/lxml/lxml),
[changelog](https://git.launchpad.net/lxml/plain/CHANGES.txt)) |
`>=4.5.0,<4.10.0` -> `>=4.5.0,<5.1.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/lxml/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/lxml/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/lxml/4.9.4/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/lxml/4.9.4/5.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>lxml/lxml (lxml)</summary>

###
[`v5.0.0`](https://togithub.com/lxml/lxml/blob/HEAD/CHANGES.txt#500-2023-12-29)

[Compare
Source](https://togithub.com/lxml/lxml/compare/lxml-4.9.4...lxml-5.0.0)

\==================

## Features added

- Character escaping in `C14N2` serialisation now uses a single pass
over the text
    instead of searching for each unescaped character separately.

-   Early support for Python 3.13a2 was added.

## Bugs fixed

- [LP#1976304](https://togithub.com/LP/lxml/issues/1976304): The
`Element.addnext()` method previously inserted the new element
before existing tail text. The tail text of both sibling elements now
stays on
    the respective elements.

- [LP#1980767](https://togithub.com/LP/lxml/issues/1980767),
[GH#379](https://togithub.com/GH/lxml/issues/379): `TreeBuilder.close()`
could fail with a `TypeError` after
    parsing incorrect input.  Original patch by Enrico Minack.

- `Element.itertext(with_tail=False)` returned the tail text of comments
and
    processing instructions, despite the explicit option.

- [GH#370](https://togithub.com/GH/lxml/issues/370): A crash with recent
libxml2 2.11.x versions was resolved.
    Patch by Michael Schlenker.

-   A compile problem with recent libxml2 2.12.x versions was resolved.

- The internal exception handling in C callbacks was improved for Cython
3.0.

- The exception declarations of `xmlInputReadCallback`,
`xmlInputCloseCallback`,
`xmlOutputWriteCallback` and `xmlOutputCloseCallback` in `tree.pxd` were
corrected to prevent running Python code or calling into the C-API with
a live
    exception set.

- [GH#385](https://togithub.com/GH/lxml/issues/385): The long deprecated
`unittest.m̀akeSuite()` function is no longer used.
    Patch by Miro Hrončok.

- [LP#1522052](https://togithub.com/LP/lxml/issues/1522052): A
file-system specific test is now optional and should no longer fail
    on systems that don't support it.

- [GH#392](https://togithub.com/GH/lxml/issues/392): Some tests were
adapted for libxml2 2.13.
    Patch by Nick Wellnhofer.

-   Contains all fixes from lxml 4.9.4.

## Other changes

- [LP#1742885](https://togithub.com/LP/lxml/issues/1742885): lxml no
longer expands external entities (XXE) by default to prevent
the security risk of loading arbitrary files and URLs. If this feature
is needed,
it can be enabled in a backwards compatible way by using a parser with
the option
`resolve_entities=True`. The new default is
`resolve_entities='internal'`.

- With libxml2 2.10.4 and later (as provided by the lxml 5.0 binary
wheels),
parsing HTML tags with "prefixes" no longer builds a namespace
dictionary
in `nsmap` but considers the `prefix:name` string the actual tag name.
With older libxml2 versions, since 2.9.11, the prefix was removed.
Before
    that, the prefix was parsed as XML prefix.

lxml 5.0 does not try to hide this difference but now changes the
ElementPath
implementation to let `element.find("part1:part2")` search for the tag
`part1:part2` in documents parsed as HTML, instead of looking only for
`part2`.

- [LP#2024343](https://togithub.com/LP/lxml/issues/2024343): The
validation of the schema file itself is now optional in the
ISO-Schematron implementation. This was done because some lxml
distributions
discard the RNG validation schema file due to licensing issues. The
validation
can now always be disabled with `Schematron(...,
validate_schema=False)`.
It is enabled by default if available and disabled otherwise. The module
constant `lxml.isoschematron.schematron_schema_valid_supported` can be
used
    to detect whether schema file validation is available.

-   Some redundant and long deprecated methods were removed:
    `parser.setElementClassLookup()`,
    `xslt_transform.apply()`,
    `xpath.evaluate()`.

- Some incorrect declarations were removed from `python.pxd`. In
general, this file
should not be used by external Cython code. Use the C-API declarations
provided by
    Cython itself instead.

- Binary wheels use the library versions libxml2 2.12.3 and libxslt
1.1.39.

- Built with Cython 3.0.7, updated to follow recent changes in Cython
3.1-dev.

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMDMuMSIsInVwZGF0ZWRJblZlciI6IjM3LjEwMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2024-01-01 13:18:55 +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 72268ad9bb
fix(api): let nginx handle the media file content type (#2862) 2024-01-01 13:07:35 +01:00
Jonas L 7ed1be1816
fix(playout): increase file download chunk size to 8192 bytes (#2863) 2024-01-01 13:07:27 +01:00
Jonas L 0ce63f3bf0
fix(api): ensure non ascii paths are handled by X-Accel-Redirect (#2861) 2024-01-01 12:58:19 +01:00
renovate[bot] 6f84328380
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.45.1 (main) (#2855)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.43.2` -> `<3.45.1` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.43.1/3.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.43.1/3.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.45.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3450)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.44.0...v3.45.0)

- feat: Enable symbol importing in `@PhpCsFixer` ruleset
([#&#8203;7629](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7629))
- fix: NoUnneededBracesFixer - improve handling of global namespace
([#&#8203;7639](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7639))
- test: run tests with "short_open_tag" enabled
([#&#8203;7637](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7637))

###
[`v3.44.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3440)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.43.1...v3.44.0)

- feat: Introduce percentage bar as new default progress output
([#&#8203;7603](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7603))

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMDMuMSIsInVwZGF0ZWRJblZlciI6IjM3LjEwMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-12-30 19:41:50 +01:00
Jonas L 4603c1759f
feat!: use nginx to serve media files (#2860)
Closes #2522

To reduce the strain on the API service, we moved the media file serving
to the Nginx web server. The API is still handling the authentication,
but delegates the serving using the `X-Accel-Redirect` header.

BREAKING CHANGE: The media file serving is now handled by Nginx instead
of the API service. The `storage.path` field is now used in the Nginx
configuration, so make sure to update the Nginx configuration file if
you change it.
2023-12-30 18:59:15 +01:00
Jonas L 8406d520d7
feat: rewrite cloud-init config (#2853)
### Description

Fix and update the could init config to install an insecure LibreTime
server.
2023-12-29 17:57:59 +01:00
Jonas L f72b7f9c97
feat(installer)!: change default listen port to 8080 (#2852)
Closes #2575
Closes #2543

BREAKING CHANGE: The default listen port for the installer is now
`8080`. We recommend that you put a reverse proxy in front of LibreTime.
2023-12-29 17:49:07 +01:00
Jonas L 43221d9d7f
fix(api): move gunicorn worker config to python file (#2854)
### Description

Passing the --lifespan flag to gunicorn does not forward the option to
uvicorn.
2023-12-29 17:47:50 +01:00
Jonas L 35d7eace13
feat(installer)!: remove the `--update-nginx` flag (#2851)
### Description

Related to #2543

BREAKING CHANGE: The `--update-nginx` flag was removed from the
installer. The nginx configuration deployed by the installer will now
always be overwritten. Make sure to move your customizations to a
reverse proxy configuration.
2023-12-29 15:55:35 +01:00
renovate[bot] 62e5f4dfbb
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.43.2 (main) (#2848)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.42.1` -> `<3.43.2` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.43.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.43.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.42.0/3.43.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.42.0/3.43.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.43.1`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3431)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.43.0...v3.43.1)

- fix: Import only unique symbols' short names
([#&#8203;7635](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7635))

###
[`v3.43.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3430)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.42.0...v3.43.0)

- chore: change base of `@Symfony` set to `@PER-CS2.0`
([#&#8203;7627](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7627))
- chore: PHPUnit - allow for v10
([#&#8203;7606](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7606))
- chore: Preg - rework catching the error
([#&#8203;7616](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7616))
- chore: Revert unneeded peer-dep-pin and re-gen lock file
([#&#8203;7618](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7618))
- docs: drop extra note about 8.0.0 bug in README.md
([#&#8203;7614](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7614))
- feat: add cast_spaces into `@PER-CS2.0`
([#&#8203;7625](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7625))
- feat: Configurable phpDoc tags for FQCN processing
([#&#8203;7628](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7628))
- feat: StatementIndentationFixer - introduce
stick_comment_to_next_continuous_control_statement config
([#&#8203;7624](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7624))
- feat: UnaryOperatorSpacesFixer - introduce only_dec_inc config
([#&#8203;7626](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7626))
- fix: FullyQualifiedStrictTypesFixer - better support annotations in
inline {}
([#&#8203;7633](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7633))
- fix: Improve how FQCN is handled in phpDoc
([#&#8203;7622](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7622))
- fix: phpdoc_align - fix multiline tag alignment issue
([#&#8203;7630](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7630))

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMDMuMSIsInVwZGF0ZWRJblZlciI6IjM3LjEwMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-12-29 15:28:57 +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
Jonas L 3f396895e5
fix(worker): unbound variable when episode url returns HTTP 404 (#2844)
### Description

When the episode URL return a 404, the tmp_file is never set, and we
have an unbound variable exception.
2023-12-28 14:05:35 +01:00
Jonas L 413b37d5e5
refactor(worker): add require secret_key config field (#2846)
Missing secret_key change from
https://github.com/libretime/libretime/pull/2841
2023-12-28 14:01:54 +01:00
Jonas L 8743c84d0f
feat: disable uvicorn worker lifespan (#2845)
### Description

Fix this Django exception: Django can only handle ASGI/HTTP connections,
not lifespan.
2023-12-28 14:00:58 +01:00
Weblate (bot) 0e91a7db7d
chore(legacy): translations update from Hosted Weblate (#2843)
Translations update from [Hosted Weblate](https://hosted.weblate.org)
for
[LibreTime/Legacy](https://hosted.weblate.org/projects/libretime/legacy/).



Current translation status:

![Weblate translation
status](https://hosted.weblate.org/widget/libretime/legacy/horizontal-auto.svg)

Co-authored-by: Maurizio Castelvetro <castelvetro@gmail.com>
2023-12-28 13:45:53 +01:00
Jonas L 083ee3f1dd
feat!: default system output is now `pulseaudio` (#2842)
BREAKING CHANGE: The default system output
(`stream.outputs.system[].kind`) changed from `alsa` to `pulseaudio`.
Make sure to update your configuration file if you rely on the default
system output.

Closes #2542
2023-12-27 18:23:40 +01:00
Jonas L 0d2d1a2673
feat!: the `general.secret_key` configuration field is now required (#2841)
BREAKING CHANGE: The `general.secret_key` configuration field is now
required. Make sure to update your configuration file and add a secret
key.

Closes #2426
2023-12-27 18:15:47 +01:00
Jonas L 24ee3830c2
fix(legacy): ensure last played criteria works with never played files (#2840)
### Description

Closes #2798

COALESCE last played null values with date -infinity, to ensure newly
added files are found by the last played smart block criteria.
2023-12-27 17:32:33 +01:00
Jonas L d80100a216
refactor(api): fix deprecation warnings (#2839)
Fix some deprecation warnings related to the pydantic upgrade.
2023-12-27 15:46:38 +01:00
renovate[bot] 8ae4dce9e7
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.42.1 (main) (#2765)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[friendsofphp/php-cs-fixer](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer)
| `<3.41.2` -> `<3.42.1` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/friendsofphp%2fphp-cs-fixer/3.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/friendsofphp%2fphp-cs-fixer/3.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/friendsofphp%2fphp-cs-fixer/3.41.1/3.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/friendsofphp%2fphp-cs-fixer/3.41.1/3.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>PHP-CS-Fixer/PHP-CS-Fixer (friendsofphp/php-cs-fixer)</summary>

###
[`v3.42.0`](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/HEAD/CHANGELOG.md#Changelog-for-v3420)

[Compare
Source](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/compare/v3.41.1...v3.42.0)

- chore: aim to not rely on internal array pointer but use
array_key_first
([#&#8203;7613](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7613))
- chore: deprecate Token::isKeyCaseSensitive
([#&#8203;7599](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7599))
- chore: deprecate Token::isKeyCaseSensitive, 2nd part
([#&#8203;7601](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7601))
- chore: do not check PHP_VERSION_ID
([#&#8203;7602](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7602))
- chore: FileFilterIteratorTest - more accurate type in docs
([#&#8203;7542](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7542))
- chore: minor code cleanup
([#&#8203;7607](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7607))
- chore: more types
([#&#8203;7598](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7598))
- chore: PHPDoc key-value spacing
([#&#8203;7592](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7592))
- chore: PHPUnit - run defects first
([#&#8203;7570](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7570))
- chore: ProjectCodeTest - DRY on Tokens creation
([#&#8203;7574](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7574))
- chore: ProjectCodeTest - prepare for symfony/console v7
([#&#8203;7605](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7605))
- chore: ProjectCodeTest::provide\*ClassCases to return iterable with
key for better tests execution log
([#&#8203;7572](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7572))
- chore: ProjectCodeTest::testDataProvidersDeclaredReturnType - use
better DataProvider to simplify test logic
([#&#8203;7573](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7573))
- chore: TokensAnalyzer - string-enum for better typehinting
([#&#8203;7571](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7571))
- chore: unify tests not agnostic of PHP version
([#&#8203;7581](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7581))
- chore: use ::class more
([#&#8203;7545](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7545))
- CI: Introduce `composer-unused`
([#&#8203;7536](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7536))
- DX: add types to anonymous functions
([#&#8203;7561](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7561))
- DX: Allow running smoke tests within Docker runtime
([#&#8203;7608](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7608))
- DX: check fixer's options for wording
([#&#8203;7543](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7543))
- DX: cleanup deprecation message
([#&#8203;7576](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7576))
- DX: do not allow overriding constructor of
`PHPUnit\Framework\TestCase`
([#&#8203;7563](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7563))
- DX: do not import ExpectDeprecationTrait in UtilsTest
([#&#8203;7562](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7562))
- DX: Enforce consistent naming in tests
([#&#8203;7556](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7556))
- DX: fix checking test class extends `PhpCsFixer\Tests\TestCase`
([#&#8203;7567](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7567))
- DX: make sure that exceptions in
`AbstractFixerTestCase::testProperMethodNaming` are not already fixed
([#&#8203;7588](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7588))
- DX: remove recursion from AbstractIntegrationTestCase::testIntegration
([#&#8203;7577](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7577))
- DX: remove `PhpUnitNamespacedFixerTest::testClassIsFixed`
([#&#8203;7564](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7564))
- DX: remove `symfony/phpunit-bridge`
([#&#8203;7578](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7578))
- DX: replace fixture classes with anonymous ones
([#&#8203;7533](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7533))
- DX: Unify Docker mount points and paths
([#&#8203;7549](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7549))
- DX: unify fixer's test method names - quick wins
([#&#8203;7584](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7584))
- DX: unify tests for casing fixers
([#&#8203;7558](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7558))
- DX: use anonymous function over concrete classes
([#&#8203;7553](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7553))
- feat(EXPERIMENTAL): ClassKeywordFixer
([#&#8203;2918](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/2918))
- feat(EXPERIMENTAL): ClassKeywordFixer, part 2
([#&#8203;7550](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7550))
- feat(PhpdocToCommentFixer): Add option to handle return as valid
docblock usage
([#&#8203;7401](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7401))
([#&#8203;7402](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7402))
- feat: Ability to import FQCNs found during analysis
([#&#8203;7597](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7597))
- feat: add phpDoc support for `fully_qualified_strict_types` fixer
([#&#8203;5620](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/5620))
- feat: Handle deprecated rule sets similarly to deprecated fixers
([#&#8203;7288](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7288))
- feat: PhpUnitTestCaseStaticMethodCallsFixer - cover PHPUnit v10
methods
([#&#8203;7604](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7604))
- feat: Support more FQCNs cases in `fully_qualified_strict_types`
([#&#8203;7459](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7459))
- fix: AbstractFixerTestCase - fix checking for correct casing
([#&#8203;7540](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7540))
- fix: Better OS detection in integration tests
([#&#8203;7547](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7547))
- fix: NativeTypeDeclarationCasingFixe - handle static property without
type
([#&#8203;7589](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7589))
- test: AutoReview - unify data provider returns
([#&#8203;7544](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7544))
- test: check to have DataProviders code agnostic of PHP version
([#&#8203;7575](https://togithub.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7575))

</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 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:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMS41IiwidXBkYXRlZEluVmVyIjoiMzcuMTAzLjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIn0=-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-12-27 13:40:15 +01:00
renovate[bot] 7db7eb083c
fix(deps): update dependency pydantic to v2 (main) (#2604)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](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` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pydantic/2.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pydantic/2.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pydantic/1.10.13/2.5.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pydantic/1.10.13/2.5.3?slim=true)](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 [@&#8203;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
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;8159](https://togithub.com/pydantic/pydantic/pull/8159)

##### Fixes

- Fix validation of `Literal` from JSON keys when used as `dict` key by
[@&#8203;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
[@&#8203;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
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;8190](https://togithub.com/pydantic/pydantic/pull/8159)
- Fix handling of unhashable inputs with `Literal` in `Union`s by
[@&#8203;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
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;8120](https://togithub.com/pydantic/pydantic/pull/8120)

##### Fixes

- Fix package description limit by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;8097](https://togithub.com/pydantic/pydantic/pull/8097)
- Fix `ValidateCallWrapper` error when creating a model which has a
@&#8203;validate_call wrapped field annotation by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;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
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;8075](https://togithub.com/pydantic/pydantic/pull/8075)

##### New Features

- Allow plugins to catch non `ValidationError` errors by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7806](https://togithub.com/pydantic/pydantic/pull/7806)
- Support `__doc__` argument in `create_model()` by
[@&#8203;chris-spann](https://togithub.com/chris-spann) in
[#&#8203;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
[@&#8203;utkini](https://togithub.com/utkini) in
[#&#8203;7768](https://togithub.com/pydantic/pydantic/pull/7768)
- Save return type generated from type annotation in `ComputedFieldInfo`
by [@&#8203;alexmojaki](https://togithub.com/alexmojaki) in
[#&#8203;7889](https://togithub.com/pydantic/pydantic/pull/7889)
- Adopting `ruff` formatter by
[@&#8203;Luca-Blight](https://togithub.com/Luca-Blight) in
[#&#8203;7930](https://togithub.com/pydantic/pydantic/pull/7930)
- Added `validation_error_cause` to config by
[@&#8203;zakstucke](https://togithub.com/zakstucke) in
[#&#8203;7626](https://togithub.com/pydantic/pydantic/pull/7626)
- Make path of the item to validate available in plugin by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7861](https://togithub.com/pydantic/pydantic/pull/7861)
- Add `CallableDiscriminator` and `Tag` by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7983](https://togithub.com/pydantic/pydantic/pull/7983)
- `CallableDiscriminator` renamed to `Discriminator` by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;8047](https://togithub.com/pydantic/pydantic/pull/8047)
- Make union case tags affect union error messages by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;8001](https://togithub.com/pydantic/pydantic/pull/8001)
- Add `examples` and `json_schema_extra` to `@computed_field` by
[@&#8203;alexmojaki](https://togithub.com/alexmojaki) in
[#&#8203;8013](https://togithub.com/pydantic/pydantic/pull/8013)
- Add `JsonValue` type by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7998](https://togithub.com/pydantic/pydantic/pull/7998)
- Allow `str` as argument to `Discriminator` by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;8047](https://togithub.com/pydantic/pydantic/pull/8047)
- Add `SchemaSerializer.__reduce__` method to enable pickle
serialization by [@&#8203;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
[@&#8203;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
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7683](https://togithub.com/pydantic/pydantic/pull/7683)
- Support JSON schema generation for `Enum` types with no cases by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7927](https://togithub.com/pydantic/pydantic/pull/7927)
- Warn if a class inherits from `Generic` before `BaseModel` by
[@&#8203;alexmojaki](https://togithub.com/alexmojaki) in
[#&#8203;7891](https://togithub.com/pydantic/pydantic/pull/7891)

##### Performance

- New custom JSON parser, `jiter` by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[pydantic/pydantic-core#974](https://togithub.com/pydantic/pydantic-core/pull/974)
- PGO build for MacOS M1 by
[@&#8203;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
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7947](https://togithub.com/pydantic/pydantic/pull/7947)

##### Fixes

- Fix `mypy` issue with subclasses of `RootModel` by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7677](https://togithub.com/pydantic/pydantic/pull/7677)
- Properly rebuild the `FieldInfo` when a forward ref gets evaluated by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7698](https://togithub.com/pydantic/pydantic/pull/7698)
- Fix failure to load `SecretStr` from JSON (regression in v2.4) by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7729](https://togithub.com/pydantic/pydantic/pull/7729)
- Fix `defer_build` behavior with `TypeAdapter` by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7736](https://togithub.com/pydantic/pydantic/pull/7736)
- Improve compatibility with legacy `mypy` versions by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7742](https://togithub.com/pydantic/pydantic/pull/7742)
- Fix: update `TypeVar` handling when default is not set by
[@&#8203;pmmmwh](https://togithub.com/pmmmwh) in
[#&#8203;7719](https://togithub.com/pydantic/pydantic/pull/7719)
- Support specification of `strict` on `Enum` type fields by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7761](https://togithub.com/pydantic/pydantic/pull/7761)
- Wrap `weakref.ref` instead of subclassing to fix `cloudpickle`
serialization by [@&#8203;edoakes](https://togithub.com/edoakes) in
[#&#8203;7780](https://togithub.com/pydantic/pydantic/pull/7780)
- Keep values of private attributes set within `model_post_init` in
subclasses by [@&#8203;alexmojaki](https://togithub.com/alexmojaki) in
[#&#8203;7775](https://togithub.com/pydantic/pydantic/pull/7775)
- Add more specific type for non-callable `json_schema_extra` by
[@&#8203;alexmojaki](https://togithub.com/alexmojaki) in
[#&#8203;7803](https://togithub.com/pydantic/pydantic/pull/7803)
- Raise an error when deleting frozen (model) fields by
[@&#8203;alexmojaki](https://togithub.com/alexmojaki) in
[#&#8203;7800](https://togithub.com/pydantic/pydantic/pull/7800)
- Fix schema sorting bug with default values by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7817](https://togithub.com/pydantic/pydantic/pull/7817)
- Use generated alias for aliases that are not specified otherwise by
[@&#8203;alexmojaki](https://togithub.com/alexmojaki) in
[#&#8203;7802](https://togithub.com/pydantic/pydantic/pull/7802)
- Support `strict` specification for `UUID` types by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7865](https://togithub.com/pydantic/pydantic/pull/7865)
- JSON schema: fix extra parameter handling by
[@&#8203;me-and](https://togithub.com/me-and) in
[#&#8203;7810](https://togithub.com/pydantic/pydantic/pull/7810)
- Fix: support `pydantic.Field(kw_only=True)` with inherited dataclasses
by [@&#8203;PrettyWood](https://togithub.com/PrettyWood) in
[#&#8203;7827](https://togithub.com/pydantic/pydantic/pull/7827)
- Support `validate_call` decorator for methods in classes with
`__slots__` by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7883](https://togithub.com/pydantic/pydantic/pull/7883)
- Fix pydantic dataclass problem with `dataclasses.field` default by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7898](https://togithub.com/pydantic/pydantic/pull/7898)
- Fix schema generation for generics with union type bounds by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7899](https://togithub.com/pydantic/pydantic/pull/7899)
- Fix version for `importlib_metadata` on python 3.7 by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7904](https://togithub.com/pydantic/pydantic/pull/7904)
- Support `|` operator (Union) in PydanticRecursiveRef by
[@&#8203;alexmojaki](https://togithub.com/alexmojaki) in
[#&#8203;7892](https://togithub.com/pydantic/pydantic/pull/7892)
- Fix `display_as_type` for `TypeAliasType` in python 3.12 by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7929](https://togithub.com/pydantic/pydantic/pull/7929)
- Add support for `NotRequired` generics in `TypedDict` by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7932](https://togithub.com/pydantic/pydantic/pull/7932)
- Make generic `TypeAliasType` specifications produce different schema
definitions by [@&#8203;alexdrydew](https://togithub.com/alexdrydew) in
[#&#8203;7893](https://togithub.com/pydantic/pydantic/pull/7893)
- Added fix for signature of inherited dataclass by
[@&#8203;howsunjow](https://togithub.com/howsunjow) in
[#&#8203;7925](https://togithub.com/pydantic/pydantic/pull/7925)
- Make the model name generation more robust in JSON schema by
[@&#8203;joakimnordling](https://togithub.com/joakimnordling) in
[#&#8203;7881](https://togithub.com/pydantic/pydantic/pull/7881)
- Fix plurals in validation error messages (in tests) by
[@&#8203;Iipin](https://togithub.com/Iipin) in
[#&#8203;7972](https://togithub.com/pydantic/pydantic/pull/7972)
- `PrivateAttr` is passed from `Annotated` default position by
[@&#8203;tabassco](https://togithub.com/tabassco) in
[#&#8203;8004](https://togithub.com/pydantic/pydantic/pull/8004)
- Don't decode bytes (which may not be UTF8) when displaying SecretBytes
by [@&#8203;alexmojaki](https://togithub.com/alexmojaki) in
[#&#8203;8012](https://togithub.com/pydantic/pydantic/pull/8012)
- Use `classmethod` instead of `classmethod[Any, Any, Any]` by
[@&#8203;Mr-Pepe](https://togithub.com/Mr-Pepe) in
[#&#8203;7979](https://togithub.com/pydantic/pydantic/pull/7979)
- Clearer error on invalid Plugin by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;8023](https://togithub.com/pydantic/pydantic/pull/8023)
- Correct pydantic dataclasses import by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;8027](https://togithub.com/pydantic/pydantic/pull/8027)
- Fix misbehavior for models referencing redefined type aliases by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;8050](https://togithub.com/pydantic/pydantic/pull/8050)
- Fix `Optional` field with `validate_default` only performing one field
validation by
[@&#8203;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
[@&#8203;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
[@&#8203;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
[@&#8203;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 [@&#8203;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
[@&#8203;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
[@&#8203;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
[@&#8203;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
[@&#8203;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
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[pydantic/pydantic-core#1062](https://togithub.com/pydantic/pydantic-core/pull/1062)
- Restore manylinux-compatible PGO builds by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[pydantic/pydantic-core#1068](https://togithub.com/pydantic/pydantic-core/pull/1068)

##### New Contributors

##### `pydantic`

- [@&#8203;schneebuzz](https://togithub.com/schneebuzz) made their first
contribution in
[#&#8203;7699](https://togithub.com/pydantic/pydantic/pull/7699)
- [@&#8203;edoakes](https://togithub.com/edoakes) made their first
contribution in
[#&#8203;7780](https://togithub.com/pydantic/pydantic/pull/7780)
- [@&#8203;alexmojaki](https://togithub.com/alexmojaki) made their first
contribution in
[#&#8203;7775](https://togithub.com/pydantic/pydantic/pull/7775)
- [@&#8203;NickG123](https://togithub.com/NickG123) made their first
contribution in
[#&#8203;7751](https://togithub.com/pydantic/pydantic/pull/7751)
- [@&#8203;gowthamgts](https://togithub.com/gowthamgts) made their first
contribution in
[#&#8203;7830](https://togithub.com/pydantic/pydantic/pull/7830)
- [@&#8203;jamesbraza](https://togithub.com/jamesbraza) made their first
contribution in
[#&#8203;7848](https://togithub.com/pydantic/pydantic/pull/7848)
- [@&#8203;laundmo](https://togithub.com/laundmo) made their first
contribution in
[#&#8203;7850](https://togithub.com/pydantic/pydantic/pull/7850)
- [@&#8203;rahmatnazali](https://togithub.com/rahmatnazali) made their
first contribution in
[#&#8203;7870](https://togithub.com/pydantic/pydantic/pull/7870)
- [@&#8203;waterfountain1996](https://togithub.com/waterfountain1996)
made their first contribution in
[#&#8203;7878](https://togithub.com/pydantic/pydantic/pull/7878)
- [@&#8203;chris-spann](https://togithub.com/chris-spann) made their
first contribution in
[#&#8203;7863](https://togithub.com/pydantic/pydantic/pull/7863)
- [@&#8203;me-and](https://togithub.com/me-and) made their first
contribution in
[#&#8203;7810](https://togithub.com/pydantic/pydantic/pull/7810)
- [@&#8203;utkini](https://togithub.com/utkini) made their first
contribution in
[#&#8203;7768](https://togithub.com/pydantic/pydantic/pull/7768)
- [@&#8203;bn-l](https://togithub.com/bn-l) made their first
contribution in
[#&#8203;7744](https://togithub.com/pydantic/pydantic/pull/7744)
- [@&#8203;alexdrydew](https://togithub.com/alexdrydew) made their first
contribution in
[#&#8203;7893](https://togithub.com/pydantic/pydantic/pull/7893)
- [@&#8203;Luca-Blight](https://togithub.com/Luca-Blight) made their
first contribution in
[#&#8203;7930](https://togithub.com/pydantic/pydantic/pull/7930)
- [@&#8203;howsunjow](https://togithub.com/howsunjow) made their first
contribution in
[#&#8203;7925](https://togithub.com/pydantic/pydantic/pull/7925)
- [@&#8203;joakimnordling](https://togithub.com/joakimnordling) made
their first contribution in
[#&#8203;7881](https://togithub.com/pydantic/pydantic/pull/7881)
- [@&#8203;icfly2](https://togithub.com/icfly2) made their first
contribution in
[#&#8203;7976](https://togithub.com/pydantic/pydantic/pull/7976)
- [@&#8203;Yummy-Yums](https://togithub.com/Yummy-Yums) made their first
contribution in
[#&#8203;8003](https://togithub.com/pydantic/pydantic/pull/8003)
- [@&#8203;Iipin](https://togithub.com/Iipin) made their first
contribution in
[#&#8203;7972](https://togithub.com/pydantic/pydantic/pull/7972)
- [@&#8203;tabassco](https://togithub.com/tabassco) made their first
contribution in
[#&#8203;8004](https://togithub.com/pydantic/pydantic/pull/8004)
- [@&#8203;Mr-Pepe](https://togithub.com/Mr-Pepe) made their first
contribution in
[#&#8203;7979](https://togithub.com/pydantic/pydantic/pull/7979)
- [@&#8203;0x00cl](https://togithub.com/0x00cl) made their first
contribution in
[#&#8203;8010](https://togithub.com/pydantic/pydantic/pull/8010)
- [@&#8203;barraponto](https://togithub.com/barraponto) made their first
contribution in
[#&#8203;8032](https://togithub.com/pydantic/pydantic/pull/8032)

##### `pydantic-core`

- [@&#8203;sisp](https://togithub.com/sisp) made their first
contribution in
[pydantic/pydantic-core#995](https://togithub.com/pydantic/pydantic-core/pull/995)
- [@&#8203;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
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7647](https://togithub.com/pydantic/pydantic/pull/7647)
- Fix schema references in discriminated unions by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7646](https://togithub.com/pydantic/pydantic/pull/7646)
- Fix json schema generation for recursive models by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7653](https://togithub.com/pydantic/pydantic/pull/7653)
- Fix `models_json_schema` for generic models by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7654](https://togithub.com/pydantic/pydantic/pull/7654)
- Fix xfailed test for generic model signatures by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7658](https://togithub.com/pydantic/pydantic/pull/7658)

##### New Contributors

- [@&#8203;austinorr](https://togithub.com/austinorr) made their first
contribution in
[#&#8203;7657](https://togithub.com/pydantic/pydantic/pull/7657)
- [@&#8203;peterHoburg](https://togithub.com/peterHoburg) made their
first contribution in
[#&#8203;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
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;7633](https://togithub.com/pydantic/pydantic/pull/7633)

##### Fixes

- Serialize unsubstituted type vars as `Any` by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7606](https://togithub.com/pydantic/pydantic/pull/7606)
- Remove schema building caches by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7624](https://togithub.com/pydantic/pydantic/pull/7624)
- Fix an issue where JSON schema extras weren't JSON encoded by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;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
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7542](https://togithub.com/pydantic/pydantic/pull/7542)

##### New Features

- Add `Base64Url` types by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7286](https://togithub.com/pydantic/pydantic/pull/7286)
- Implement optional `number` to `str` coercion by
[@&#8203;lig](https://togithub.com/lig) in
[#&#8203;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
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7542](https://togithub.com/pydantic/pydantic/pull/7542)
- Add `BaseModel.model_validate_strings` and
`TypeAdapter.validate_strings` by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7552](https://togithub.com/pydantic/pydantic/pull/7552)
- Add Pydantic `plugins` experimental implementation by
[@&#8203;lig](https://togithub.com/lig)
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) and
[@&#8203;Kludex](https://togithub.com/Kludex) in
[#&#8203;6820](https://togithub.com/pydantic/pydantic/pull/6820)

##### Changes

- Do not override `model_post_init` in subclass with private attrs by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;7302](https://togithub.com/pydantic/pydantic/pull/7302)
- Make fields with defaults not required in the serialization schema by
default by [@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7275](https://togithub.com/pydantic/pydantic/pull/7275)
- Mark `Extra` as deprecated by
[@&#8203;disrupted](https://togithub.com/disrupted) in
[#&#8203;7299](https://togithub.com/pydantic/pydantic/pull/7299)
- Make `EncodedStr` a dataclass by
[@&#8203;Kludex](https://togithub.com/Kludex) in
[#&#8203;7396](https://togithub.com/pydantic/pydantic/pull/7396)
- Move `annotated_handlers` to be public by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7569](https://togithub.com/pydantic/pydantic/pull/7569)

##### Performance

- Simplify flattening and inlining of `CoreSchema` by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7523](https://togithub.com/pydantic/pydantic/pull/7523)
- Remove unused copies in `CoreSchema` walking by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7528](https://togithub.com/pydantic/pydantic/pull/7528)
- Add caches for collecting definitions and invalid schemas from a
CoreSchema by [@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7527](https://togithub.com/pydantic/pydantic/pull/7527)
- Eagerly resolve discriminated unions and cache cases where we can't by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7529](https://togithub.com/pydantic/pydantic/pull/7529)
- Replace `dict.get` and `dict.setdefault` with more verbose versions in
`CoreSchema` building hot paths by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7536](https://togithub.com/pydantic/pydantic/pull/7536)
- Cache invalid `CoreSchema` discovery by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7535](https://togithub.com/pydantic/pydantic/pull/7535)
- Allow disabling `CoreSchema` validation for faster startup times by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7565](https://togithub.com/pydantic/pydantic/pull/7565)

##### Fixes

- Fix config detection for `TypedDict` from grandparent classes by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7272](https://togithub.com/pydantic/pydantic/pull/7272)
- Fix hash function generation for frozen models with unusual MRO by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7274](https://togithub.com/pydantic/pydantic/pull/7274)
- Make `strict` config overridable in field for Path by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7281](https://togithub.com/pydantic/pydantic/pull/7281)
- Use `ser_json_<timedelta|bytes>` on default in `GenerateJsonSchema` by
[@&#8203;Kludex](https://togithub.com/Kludex) in
[#&#8203;7269](https://togithub.com/pydantic/pydantic/pull/7269)
- Adding a check that alias is validated as an identifier for Python by
[@&#8203;andree0](https://togithub.com/andree0) in
[#&#8203;7319](https://togithub.com/pydantic/pydantic/pull/7319)
- Raise an error when computed field overrides field by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7346](https://togithub.com/pydantic/pydantic/pull/7346)
- Fix applying `SkipValidation` to referenced schemas by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7381](https://togithub.com/pydantic/pydantic/pull/7381)
- Enforce behavior of private attributes having double leading
underscore by [@&#8203;lig](https://togithub.com/lig) in
[#&#8203;7265](https://togithub.com/pydantic/pydantic/pull/7265)
- Standardize `__get_pydantic_core_schema__` signature by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7415](https://togithub.com/pydantic/pydantic/pull/7415)
- Fix generic dataclass fields mutation bug (when using `TypeAdapter`)
by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7435](https://togithub.com/pydantic/pydantic/pull/7435)
- Fix `TypeError` on `model_validator` in `wrap` mode by
[@&#8203;pmmmwh](https://togithub.com/pmmmwh) in
[#&#8203;7496](https://togithub.com/pydantic/pydantic/pull/7496)
- Improve enum error message by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7506](https://togithub.com/pydantic/pydantic/pull/7506)
- Make `repr` work for instances that failed initialization when
handling `ValidationError`s by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7439](https://togithub.com/pydantic/pydantic/pull/7439)
- Fixed a regular expression denial of service issue by limiting
whitespaces by [@&#8203;prodigysml](https://togithub.com/prodigysml) in
[#&#8203;7360](https://togithub.com/pydantic/pydantic/pull/7360)
- Fix handling of `UUID` values having `UUID.version=None` by
[@&#8203;lig](https://togithub.com/lig) in
[#&#8203;7566](https://togithub.com/pydantic/pydantic/pull/7566)
- Fix `__iter__` returning private `cached_property` info by
[@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in
[#&#8203;7570](https://togithub.com/pydantic/pydantic/pull/7570)
- Improvements to version info message by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7594](https://togithub.com/pydantic/pydantic/pull/7594)

##### New Contributors

- [@&#8203;15498th](https://togithub.com/15498th) made their first
contribution in
[#&#8203;7238](https://togithub.com/pydantic/pydantic/pull/7238)
- [@&#8203;GabrielCappelli](https://togithub.com/GabrielCappelli) made
their first contribution in
[#&#8203;7213](https://togithub.com/pydantic/pydantic/pull/7213)
- [@&#8203;tobni](https://togithub.com/tobni) made their first
contribution in
[#&#8203;7184](https://togithub.com/pydantic/pydantic/pull/7184)
- [@&#8203;redruin1](https://togithub.com/redruin1) made their first
contribution in
[#&#8203;7282](https://togithub.com/pydantic/pydantic/pull/7282)
- [@&#8203;FacerAin](https://togithub.com/FacerAin) made their first
contribution in
[#&#8203;7288](https://togithub.com/pydantic/pydantic/pull/7288)
- [@&#8203;acdha](https://togithub.com/acdha) made their first
contribution in
[#&#8203;7297](https://togithub.com/pydantic/pydantic/pull/7297)
- [@&#8203;andree0](https://togithub.com/andree0) made their first
contribution in
[#&#8203;7319](https://togithub.com/pydantic/pydantic/pull/7319)
- [@&#8203;gordonhart](https://togithub.com/gordonhart) made their first
contribution in
[#&#8203;7375](https://togithub.com/pydantic/pydantic/pull/7375)
- [@&#8203;pmmmwh](https://togithub.com/pmmmwh) made their first
contribution in
[#&#8203;7496](https://togithub.com/pydantic/pydantic/pull/7496)
- [@&#8203;disrupted](https://togithub.com/disrupted) made their first
contribution in
[#&#8203;7299](https://togithub.com/pydantic/pydantic/pull/7299)
- [@&#8203;prodigysml](https://togithub.com/prodigysml) made their first
contribution in
[#&#8203;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
[@&#8203;lig](https://togithub.com/lig) in
[#&#8203;7168](https://togithub.com/pydantic/pydantic/pull/7168)
- Add copy button on documentation by
[@&#8203;Kludex](https://togithub.com/Kludex) in
[#&#8203;7190](https://togithub.com/pydantic/pydantic/pull/7190)
- Fix docs on JSON type by [@&#8203;Kludex](https://togithub.com/Kludex)
in [#&#8203;7189](https://togithub.com/pydantic/pydantic/pull/7189)
- Update mypy 1.5.0 to 1.5.1 in CI by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7191](https://togithub.com/pydantic/pydantic/pull/7191)
- fix download links badge by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7200](https://togithub.com/pydantic/pydantic/pull/7200)
- add 2.2.1 to changelog by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7212](https://togithub.com/pydantic/pydantic/pull/7212)
- Make ModelWrapValidator protocols generic by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7154](https://togithub.com/pydantic/pydantic/pull/7154)
- Correct `Field(..., exclude: bool)` docs by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7214](https://togithub.com/pydantic/pydantic/pull/7214)
- Make shadowing attributes a warning instead of an error by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7193](https://togithub.com/pydantic/pydantic/pull/7193)
- Document `Base64Str` and `Base64Bytes` by
[@&#8203;Kludex](https://togithub.com/Kludex) in
[#&#8203;7192](https://togithub.com/pydantic/pydantic/pull/7192)
- Fix `config.defer_build` for serialization first cases by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7024](https://togithub.com/pydantic/pydantic/pull/7024)
- clean Model docstrings in JSON Schema by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7210](https://togithub.com/pydantic/pydantic/pull/7210)
- fix [#&#8203;7228](https://togithub.com/pydantic/pydantic/pull/7228)
(typo): docs in `validators.md` to correct `validate_default` kwarg by
[@&#8203;lmmx](https://togithub.com/lmmx) in
[#&#8203;7229](https://togithub.com/pydantic/pydantic/pull/7229)
-  Implement `tzinfo.fromutc` method for `TzInfo` in `pydantic-core` by
[@&#8203;lig](https://togithub.com/lig) in
[#&#8203;7019](https://togithub.com/pydantic/pydantic/pull/7019)
- Support `__get_validators__` by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;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
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6937](https://togithub.com/pydantic/pydantic/pull/6937)
- Optimize recursion detection by stopping on the second visit for the
same object by [@&#8203;mciucu](https://togithub.com/mciucu) in
[#&#8203;7160](https://togithub.com/pydantic/pydantic/pull/7160)
- fix link in docs by
[@&#8203;tlambert03](https://togithub.com/tlambert03) in
[#&#8203;7166](https://togithub.com/pydantic/pydantic/pull/7166)
- Replace MiMalloc w/ default allocator by
[@&#8203;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
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;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 [@&#8203;nomadmtb](https://togithub.com/nomadmtb)
in [#&#8203;6869](https://togithub.com/pydantic/pydantic/pull/6869)
- Deprecate `Field.include` by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;6852](https://togithub.com/pydantic/pydantic/pull/6852)
- Fix typo in default factory error msg by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;6880](https://togithub.com/pydantic/pydantic/pull/6880)
- Simplify handling of typing.Annotated in GenerateSchema by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6887](https://togithub.com/pydantic/pydantic/pull/6887)
- Re-enable fastapi tests in CI by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6883](https://togithub.com/pydantic/pydantic/pull/6883)
- Make it harder to hit collisions with json schema defrefs by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6566](https://togithub.com/pydantic/pydantic/pull/6566)
- Cleaner error for invalid input to `Path` fields by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;6903](https://togithub.com/pydantic/pydantic/pull/6903)
- 📝 support Coordinate Type by
[@&#8203;yezz123](https://togithub.com/yezz123) in
[#&#8203;6906](https://togithub.com/pydantic/pydantic/pull/6906)
- Fix `ForwardRef` wrapper for py 3.10.0 (shim until bpo-45166) by
[@&#8203;randomir](https://togithub.com/randomir) in
[#&#8203;6919](https://togithub.com/pydantic/pydantic/pull/6919)
- Fix misbehavior related to copying of RootModel by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6918](https://togithub.com/pydantic/pydantic/pull/6918)
- Fix issue with recursion error caused by ParamSpec by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6923](https://togithub.com/pydantic/pydantic/pull/6923)
- Add section about Constrained classes to the Migration Guide by
[@&#8203;Kludex](https://togithub.com/Kludex) in
[#&#8203;6924](https://togithub.com/pydantic/pydantic/pull/6924)
- Use `main` branch for badge links by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;6925](https://togithub.com/pydantic/pydantic/pull/6925)
- Add test for v1/v2 Annotated discrepancy by
[@&#8203;carlbordum](https://togithub.com/carlbordum) in
[#&#8203;6926](https://togithub.com/pydantic/pydantic/pull/6926)
- Make the v1 mypy plugin work with both v1 and v2 by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6921](https://togithub.com/pydantic/pydantic/pull/6921)
- Fix issue where generic models couldn't be parametrized with BaseModel
by [@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6933](https://togithub.com/pydantic/pydantic/pull/6933)
- Remove xfail for discriminated union with alias by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6938](https://togithub.com/pydantic/pydantic/pull/6938)
- add field_serializer to computed_field by
[@&#8203;andresliszt](https://togithub.com/andresliszt) in
[#&#8203;6965](https://togithub.com/pydantic/pydantic/pull/6965)
- Use union_schema with Type\[Union\[...]] by
[@&#8203;JeanArhancet](https://togithub.com/JeanArhancet) in
[#&#8203;6952](https://togithub.com/pydantic/pydantic/pull/6952)
- Fix inherited typeddict attributes / config by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6981](https://togithub.com/pydantic/pydantic/pull/6981)
- fix dataclass annotated before validator called twice by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;6998](https://togithub.com/pydantic/pydantic/pull/6998)
- Update test-fastapi deselected tests by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7014](https://togithub.com/pydantic/pydantic/pull/7014)
- Fix validator doc format by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7015](https://togithub.com/pydantic/pydantic/pull/7015)
- Fix typo in docstring of model_json_schema by
[@&#8203;AdamVinch-Federated](https://togithub.com/AdamVinch-Federated)
in [#&#8203;7032](https://togithub.com/pydantic/pydantic/pull/7032)
- remove unused "type ignores" with pyright by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7026](https://togithub.com/pydantic/pydantic/pull/7026)
- Add benchmark representing FastAPI startup time by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7030](https://togithub.com/pydantic/pydantic/pull/7030)
- Fix json_encoders for Enum subclasses by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7029](https://togithub.com/pydantic/pydantic/pull/7029)
- Update docstring of `ser_json_bytes` regarding base64 encoding by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;7052](https://togithub.com/pydantic/pydantic/pull/7052)
- Allow `@validate_call` to work on async methods by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7046](https://togithub.com/pydantic/pydantic/pull/7046)
- Fix: mypy error with `Settings` and `SettingsConfigDict` by
[@&#8203;JeanArhancet](https://togithub.com/JeanArhancet) in
[#&#8203;7002](https://togithub.com/pydantic/pydantic/pull/7002)
- Fix some typos (repeated words and it's/its) by
[@&#8203;eumiro](https://togithub.com/eumiro) in
[#&#8203;7063](https://togithub.com/pydantic/pydantic/pull/7063)
- Fix the typo in docstring by
[@&#8203;harunyasar](https://togithub.com/harunyasar) in
[#&#8203;7062](https://togithub.com/pydantic/pydantic/pull/7062)
- Docs: Fix broken URL in the pydantic-settings package recommendation
by [@&#8203;swetjen](https://togithub.com/swetjen) in
[#&#8203;6995](https://togithub.com/pydantic/pydantic/pull/6995)
- Handle constraints being applied to schemas that don't accept it by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6951](https://togithub.com/pydantic/pydantic/pull/6951)
- Replace almost_equal_floats with math.isclose by
[@&#8203;eumiro](https://togithub.com/eumiro) in
[#&#8203;7082](https://togithub.com/pydantic/pydantic/pull/7082)
- bump pydantic-core to 2.5.0 by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;7077](https://togithub.com/pydantic/pydantic/pull/7077)
- Add `short_version` and use it in links by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7115](https://togithub.com/pydantic/pydantic/pull/7115)
- 📝 Add usage link to `RootModel` by
[@&#8203;Kludex](https://togithub.com/Kludex) in
[#&#8203;7113](https://togithub.com/pydantic/pydantic/pull/7113)
- Revert "Fix default port for mongosrv DSNs
([#&#8203;6827](https://togithub.com/pydantic/pydantic/issues/6827))" by
[@&#8203;Kludex](https://togithub.com/Kludex) in
[#&#8203;7116](https://togithub.com/pydantic/pydantic/pull/7116)
- Clarify validate_default and \_Unset handling in usage docs and
migration guide by [@&#8203;benbenbang](https://togithub.com/benbenbang)
in [#&#8203;6950](https://togithub.com/pydantic/pydantic/pull/6950)
- Tweak documentation of `Field.exclude` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;7086](https://togithub.com/pydantic/pydantic/pull/7086)
- Do not require `validate_assignment` to use `Field.frozen` by
[@&#8203;Viicos](https://togithub.com/Viicos) in
[#&#8203;7103](https://togithub.com/pydantic/pydantic/pull/7103)
- tweaks to `_core_utils` by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;7040](https://togithub.com/pydantic/pydantic/pull/7040)
- Make DefaultDict working with set by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;7126](https://togithub.com/pydantic/pydantic/pull/7126)
- Don't always require typing.Generic as a base for partially
parametrized models by [@&#8203;dmontagu](https://togithub.com/dmontagu)
in [#&#8203;7119](https://togithub.com/pydantic/pydantic/pull/7119)
- Fix issue with JSON schema incorrectly using parent class core schema
by [@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7020](https://togithub.com/pydantic/pydantic/pull/7020)
- Fix xfailed test related to TypedDict and alias_generator by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6940](https://togithub.com/pydantic/pydantic/pull/6940)
- Improve error message for NameEmail by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6939](https://togithub.com/pydantic/pydantic/pull/6939)
- Fix generic computed fields by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6988](https://togithub.com/pydantic/pydantic/pull/6988)
- Reflect namedtuple default values during validation by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7144](https://togithub.com/pydantic/pydantic/pull/7144)
- Update dependencies, fix pydantic-core usage, fix CI issues by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7150](https://togithub.com/pydantic/pydantic/pull/7150)
- Add mypy 1.5.0 by [@&#8203;hramezani](https://togithub.com/hramezani)
in [#&#8203;7118](https://togithub.com/pydantic/pydantic/pull/7118)
- Handle non-json native enum values by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7056](https://togithub.com/pydantic/pydantic/pull/7056)
- document `round_trip` in Json type documentation by
[@&#8203;jc-louis](https://togithub.com/jc-louis) in
[#&#8203;7137](https://togithub.com/pydantic/pydantic/pull/7137)
- Relax signature checks to better support builtins and C extension
functions as validators by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;7101](https://togithub.com/pydantic/pydantic/pull/7101)
- add union_mode='left_to_right' by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;7151](https://togithub.com/pydantic/pydantic/pull/7151)
- Include an error message hint for inherited ordering by
[@&#8203;yvalencia91](https://togithub.com/yvalencia91) in
[#&#8203;7124](https://togithub.com/pydantic/pydantic/pull/7124)
- Fix one docs link and resolve some warnings for two others by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;7153](https://togithub.com/pydantic/pydantic/pull/7153)
- Include Field extra keys name in warning by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;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
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;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
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6605](https://togithub.com/pydantic/pydantic/pull/6605)
- Try to fix intermittently failing CI by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6683](https://togithub.com/pydantic/pydantic/pull/6683)
- Remove redundant example of optional vs default. by
[@&#8203;ehiggs-deliverect](https://togithub.com/ehiggs-deliverect) in
[#&#8203;6676](https://togithub.com/pydantic/pydantic/pull/6676)
- Docs update by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;6692](https://togithub.com/pydantic/pydantic/pull/6692)
- Remove the Validate always section in validator docs by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6679](https://togithub.com/pydantic/pydantic/pull/6679)
- Fix recursion error in json schema generation by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6720](https://togithub.com/pydantic/pydantic/pull/6720)
- Fix incorrect subclass check for secretstr by
[@&#8203;AlexVndnblcke](https://togithub.com/AlexVndnblcke) in
[#&#8203;6730](https://togithub.com/pydantic/pydantic/pull/6730)
- update pdm / pdm lockfile to 2.8.0 by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;6714](https://togithub.com/pydantic/pydantic/pull/6714)
- unpin pdm on more CI jobs by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;6755](https://togithub.com/pydantic/pydantic/pull/6755)
- improve source locations for auxiliary packages in docs by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;6749](https://togithub.com/pydantic/pydantic/pull/6749)
- Assume builtins don't accept an info argument by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6754](https://togithub.com/pydantic/pydantic/pull/6754)
- Fix bug where calling `help(BaseModelSubclass)` raises errors by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;6758](https://togithub.com/pydantic/pydantic/pull/6758)
- Fix mypy plugin handling of `@model_validator(mode="after")` by
[@&#8203;ljodal](https://togithub.com/ljodal) in
[#&#8203;6753](https://togithub.com/pydantic/pydantic/pull/6753)
- update pydantic-core to 2.3.1 by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;6756](https://togithub.com/pydantic/pydantic/pull/6756)
- Mypy plugin for settings by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;6760](https://togithub.com/pydantic/pydantic/pull/6760)
- Use `contentSchema` keyword for JSON schema by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6715](https://togithub.com/pydantic/pydantic/pull/6715)
- fast-path checking finite decimals by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;6769](https://togithub.com/pydantic/pydantic/pull/6769)
- Docs update by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;6771](https://togithub.com/pydantic/pydantic/pull/6771)
- Improve json schema doc by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;6772](https://togithub.com/pydantic/pydantic/pull/6772)
- Update validator docs by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6695](https://togithub.com/pydantic/pydantic/pull/6695)
- Fix typehint for wrap validator by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6788](https://togithub.com/pydantic/pydantic/pull/6788)
- 🐛 Fix validation warning for unions of Literal and other type by
[@&#8203;lig](https://togithub.com/lig) in
[#&#8203;6628](https://togithub.com/pydantic/pydantic/pull/6628)
- Update documentation for generics support in V2 by
[@&#8203;tpdorsey](https://togithub.com/tpdorsey) in
[#&#8203;6685](https://togithub.com/pydantic/pydantic/pull/6685)
- add pydantic-core build info to `version_info()` by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;6785](https://togithub.com/pydantic/pydantic/pull/6785)
- Fix pydantic dataclasses that use slots with default values by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6796](https://togithub.com/pydantic/pydantic/pull/6796)
- Fix inheritance of hash function for frozen models by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6789](https://togithub.com/pydantic/pydantic/pull/6789)
-  Add `SkipJsonSchema` annotation by
[@&#8203;Kludex](https://togithub.com/Kludex) in
[#&#8203;6653](https://togithub.com/pydantic/pydantic/pull/6653)
- Error if an invalid field name is used with Field by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6797](https://togithub.com/pydantic/pydantic/pull/6797)
- Add `GenericModel` to `MOVED_IN_V2` by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6776](https://togithub.com/pydantic/pydantic/pull/6776)
- Remove unused code from `docs/usage/types/custom.md` by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;6803](https://togithub.com/pydantic/pydantic/pull/6803)
- Fix `float` -> `Decimal` coercion precision loss by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6810](https://togithub.com/pydantic/pydantic/pull/6810)
- remove email validation from the north star benchmark by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;6816](https://togithub.com/pydantic/pydantic/pull/6816)
- Fix link to mypy by
[@&#8203;progsmile](https://togithub.com/progsmile) in
[#&#8203;6824](https://togithub.com/pydantic/pydantic/pull/6824)
- Improve initialization hooks example by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;6822](https://togithub.com/pydantic/pydantic/pull/6822)
- Fix default port for mongosrv DSNs by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6827](https://togithub.com/pydantic/pydantic/pull/6827)
- Improve API documentation, in particular more links between usage and
API docs by [@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;6780](https://togithub.com/pydantic/pydantic/pull/6780)
- update pydantic-core to 2.4.0 by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;6831](https://togithub.com/pydantic/pydantic/pull/6831)
- Fix `annotated_types.MaxLen` validator for custom sequence types by
[@&#8203;ImogenBits](https://togithub.com/ImogenBits) in
[#&#8203;6809](https://togithub.com/pydantic/pydantic/pull/6809)
- Update V1 by [@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;6833](https://togithub.com/pydantic/pydantic/pull/6833)
- Make it so callable JSON schema extra works by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6798](https://togithub.com/pydantic/pydantic/pull/6798)
- Fix serialization issue with `InstanceOf` by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6829](https://togithub.com/pydantic/pydantic/pull/6829)
- Add back support for `json_encoders` by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6811](https://togithub.com/pydantic/pydantic/pull/6811)
- Update field annotations when building the schema by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6838](https://togithub.com/pydantic/pydantic/pull/6838)
- Use `WeakValueDictionary` to fix generic memory leak by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6681](https://togithub.com/pydantic/pydantic/pull/6681)
- Add `config.defer_build` to optionally make model building lazy by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;6823](https://togithub.com/pydantic/pydantic/pull/6823)
- delegate `UUID` serialization to pydantic-core by
[@&#8203;davidhewitt](https://togithub.com/davidhewitt) in
[#&#8203;6850](https://togithub.com/pydantic/pydantic/pull/6850)
- Update `json_encoders` docs by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6848](https://togithub.com/pydantic/pydantic/pull/6848)
- Fix error message for `staticmethod`/`classmethod` order with
validate_call by [@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6686](https://togithub.com/pydantic/pydantic/pull/6686)
- Improve documentation for `Config` by
[@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in
[#&#8203;6847](https://togithub.com/pydantic/pydantic/pull/6847)
- Update serialization doc to mention `Field.exclude` takes priority
over call-time `include/exclude` by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;6851](https://togithub.com/pydantic/pydantic/pull/6851)
- Allow customizing core schema generation by making `GenerateSchema`
public by [@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;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
[@&#8203;slafs](https://togithub.com/slafs) in
[#&#8203;6456](https://togithub.com/pydantic/pydantic/pull/6456)
- Fix release-tweet CI by [@&#8203;Kludex](https://togithub.com/Kludex)
in [#&#8203;6461](https://togithub.com/pydantic/pydantic/pull/6461)
- Revise the section on required / optional / nullable fields. by
[@&#8203;ybressler](https://togithub.com/ybressler) in
[#&#8203;6468](https://togithub.com/pydantic/pydantic/pull/6468)
- Warn if a type hint is not in fact a type by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6479](https://togithub.com/pydantic/pydantic/pull/6479)
- Replace TransformSchema with GetPydanticSchema by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6484](https://togithub.com/pydantic/pydantic/pull/6484)
- Fix the un-hashability of various annotation types, for use in caching
generic containers by [@&#8203;dmontagu](https://togithub.com/dmontagu)
in [#&#8203;6480](https://togithub.com/pydantic/pydantic/pull/6480)
- PYD-164: Rework custom types docs by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6490](https://togithub.com/pydantic/pydantic/pull/6490)
- Fix ci by [@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6507](https://togithub.com/pydantic/pydantic/pull/6507)
- Fix forward ref in generic by
[@&#8203;adriangb](https://togithub.com/adriangb) in
[#&#8203;6511](https://togithub.com/pydantic/pydantic/pull/6511)
- Fix generation of serialization JSON schemas for
core_schema.ChainSchema by
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6515](https://togithub.com/pydantic/pydantic/pull/6515)
- Document the change in `Field.alias` behavior in Pydantic V2 by
[@&#8203;hramezani](https://togithub.com/hramezani) in
[#&#8203;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
[@&#8203;dmontagu](https://togithub.com/dmontagu) in
[#&#8203;6519](https://togithub.com/pydantic/pydantic/pull/6519)
- Document `alias_priority` by
[@&#8203;tpdorsey](https://togithub.com/tpdorsey) in
[#&#8203;6520](https://togithub.com/pydantic/pydantic/pull/6520)
- Add redirect for types documentation by
[@&#8203;tpdorsey](https://togithub.com/tpdorsey) in
[#&#8203;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
libretime-bot 8a8dd98417 chore(legacy): update locales 2023-12-25 01:55:32 +00:00
renovate[bot] ecdb68768a chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v23.12.1 2023-12-24 13:12:59 +00:00
Jonas L 9a60465163
ci: ensure release pipeline run after tag (#2830)
By default, Release Please uses the built-in GITHUB_TOKEN secret.
However, all resources created by release-please (release tag or release
pull request) will not trigger future GitHub actions workflows, and
workflows normally triggered by release.created events will also not
run.
2023-12-22 21:32:43 +01:00
Jonas L d5dea88521
docs: fix release note title (#2829) 2023-12-22 21:32:20 +01:00
Jonas L f24926acd5
ci: add branch names to commit scopes (#2824)
### Description
Ensure the release pull request does not fail the PR title check.
2023-12-22 20:55:06 +01:00
Jonas L 3ab9067c3f
ci: update backport bot templates (#2821)
### Description

Better integrations with release-please, using my action fork until
https://github.com/tibdex/backport/pull/109 is merged upstream.
2023-12-22 19:54:11 +01:00
Jonas L f252a16637
fix(legacy): allow uploading opus files (#2804) 2023-12-22 19:30:01 +01:00
Jonas L e7a678e91f
build: replace custom release script with release-please (#2817)
* build: replace custom release script with release-please

* include package-name
2023-12-22 19:19:12 +01:00
Jonas L 3e06cc1072
ci: update actions/*-artifact actions to v4 (#2818) 2023-12-22 18:23:56 +01:00
renovate[bot] 95fb85ad84
chore(deps): update dependency uvicorn to >=0.17.6,<0.26.0 (#2773)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-22 18:12:09 +01:00
renovate[bot] 7b9b9e43ef chore(deps): update actions/stale action to v9 2023-12-22 16:49:50 +00:00
renovate[bot] b6dae7e1e7 chore(deps): update actions/setup-python action to v5 2023-12-21 09:27:16 +00:00
renovate[bot] a1941fc97b chore(deps): update pre-commit hook pycqa/isort to v5.13.2 2023-12-20 04:08:18 +00:00
renovate[bot] 4255bab42d chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v23.12.0 2023-12-20 00:34:51 +00:00
jo 8e21c82968
Merge branch 'stable' 2023-12-18 19:33:38 +01:00
jo d2fc47941c
Merge branch 'stable' 2023-12-18 19:22:54 +01:00
Julien Valentin e2cfbf4c03
fix(legacy): declare previously undeclared variable (#2793) 2023-11-30 17:11:14 +00:00
renovate[bot] 580c935668 chore(deps): lock file maintenance (legacy/composer.json) 2023-11-21 10:33:15 +00:00
renovate[bot] 6b4149daf6 chore(deps): update pre-commit hook pre-commit/mirrors-prettier to v3.1.0 2023-11-15 15:59:00 +00:00
renovate[bot] ed0dbffb22 chore(deps): lock file maintenance (legacy/composer.json) 2023-11-14 10:06:19 +00:00
renovate[bot] c59a2c912d chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v23.11.0 2023-11-09 13:43:16 +00:00
renovate[bot] 2989be22b3 chore(deps): update amannn/action-semantic-pull-request action to v5.4.0 2023-11-04 16:08:49 +00:00
Weblate (bot) ffe2ffe711
chore(legacy): translated using weblate (Croatian) (#2767)
Currently translated at 71.9% (676 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/hr/

Co-authored-by: Milo Ivir <mail@milotype.de>
2023-11-01 07:43:26 +00:00
renovate[bot] 5e00d7c603 chore(deps): lock file maintenance (legacy/composer.json) 2023-10-31 10:56:59 +00:00
renovate[bot] 7ad2d7fce9 chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v23.10.1 2023-10-25 04:47:41 +00:00
renovate[bot] 2d860e963e chore(deps): update actions/setup-node action to v4 2023-10-25 01:32:28 +00:00
jo 2bb9270d4f
Merge branch 'stable' 2023-10-21 21:31:06 +02:00
renovate[bot] 89ede90f27 chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v23.10.0 2023-10-19 00:09:31 +00:00
273 changed files with 26161 additions and 10415 deletions

View File

@ -1,22 +0,0 @@
{{ range .Versions }}<a name="{{ .Tag.Name }}"></a>
## {{ if .Tag.Previous }}[{{ .Tag.Name }}]({{ $.Info.RepositoryURL }}/compare/{{ .Tag.Previous.Name }}...{{ .Tag.Name }}){{ else }}{{ .Tag.Name }}{{ end }} ({{ datetime "2006-01-02" .Tag.Date }})
- [Release note](https://libretime.org/docs/releases/{{ .Tag.Name }}/)
{{ range .CommitGroups -}}
### {{ .Title }}
{{ range reverse .Commits -}}
- {{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}
{{ end }}
{{ end -}}
{{- if .RevertCommits -}}
### Reverts
{{ range .RevertCommits -}}
- {{ .Revert.Header }}
{{ end }}
{{ end -}}
{{ end -}}

View File

@ -1,25 +0,0 @@
style: github
template: CHANGELOG.md.tpl
info:
title: CHANGELOG
repository_url: https://github.com/libretime/libretime
options:
commits:
filters:
Type: [feat, fix, docs, test, ci]
sort_by: Date
commit_groups:
title_maps:
feat: Features
fix: Bug Fixes
docs: Documentation
test: Tests
ci: CI
sort_by: Custom
title_order: [feat, fix, docs, test, ci]
header:
pattern: "^(\\w*)(?:\\(([\\w\\$\\.\\-\\*\\s]*)\\))?\\:\\s(.*)$"
pattern_maps:
- Type
- Scope
- Subject

20
.github/release-please-config.json vendored Normal file
View File

@ -0,0 +1,20 @@
{
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
"bootstrap-sha": "26737abad231d96fc198fbf12c043f2d867be79c",
"include-component-in-tag": false,
"include-v-in-tag": false,
"packages": {
".": {
"release-type": "simple",
"package-name": "libretime",
"extra-files": [
"analyzer/setup.py",
"api/setup.py",
"api-client/setup.py",
"playout/setup.py",
"shared/setup.py",
"worker/setup.py"
]
}
}
}

1
.github/release-please-manifest.json vendored Normal file
View File

@ -0,0 +1 @@
{".":"4.2.0"}

View File

@ -10,7 +10,7 @@
"automerge": true, "automerge": true,
"automergeType": "branch" "automergeType": "branch"
}, },
"baseBranches": ["main", "stable"], "baseBranches": ["main"],
"labels": ["dependencies"], "labels": ["dependencies"],
"packageRules": [ "packageRules": [
{ {

View File

@ -26,10 +26,10 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/setup-python@v4 - uses: actions/setup-python@v5
with: with:
python-version: "3.x" python-version: "3.x"
- uses: actions/cache@v3 - uses: actions/cache@v4
with: with:
path: ~/.cache/pip path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ inputs.context }}-${{ hashFiles(format('{0}/{1}', inputs.context, '**/setup.py')) }} key: ${{ runner.os }}-pip-${{ inputs.context }}-${{ hashFiles(format('{0}/{1}', inputs.context, '**/setup.py')) }}
@ -65,7 +65,7 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/cache@v3 - uses: actions/cache@v4
with: with:
path: ~/.cache/pip path: ~/.cache/pip
key: ${{ matrix.release }}-pip-${{ inputs.context }}-${{ hashFiles(format('{0}/{1}', inputs.context, '**/setup.py')) }} key: ${{ matrix.release }}-pip-${{ inputs.context }}-${{ hashFiles(format('{0}/{1}', inputs.context, '**/setup.py')) }}
@ -77,7 +77,7 @@ jobs:
working-directory: ${{ inputs.context }} working-directory: ${{ inputs.context }}
- name: Report coverage - name: Report coverage
uses: codecov/codecov-action@v3 uses: codecov/codecov-action@v5
with: with:
files: ${{ inputs.context }}/coverage.xml files: ${{ inputs.context }}/coverage.xml
flags: ${{ inputs.context }} flags: ${{ inputs.context }}

View File

@ -3,7 +3,7 @@ name: Analyzer
on: on:
workflow_dispatch: workflow_dispatch:
push: push:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/analyzer.yml - .github/workflows/analyzer.yml
@ -12,7 +12,7 @@ on:
- tools/python* - tools/python*
pull_request: pull_request:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/analyzer.yml - .github/workflows/analyzer.yml

View File

@ -3,7 +3,7 @@ name: API Client
on: on:
workflow_dispatch: workflow_dispatch:
push: push:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/api-client.yml - .github/workflows/api-client.yml
@ -12,7 +12,7 @@ on:
- tools/python* - tools/python*
pull_request: pull_request:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/api-client.yml - .github/workflows/api-client.yml

View File

@ -25,11 +25,11 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-python@v4 - uses: actions/setup-python@v5
with: with:
python-version: "3.x" python-version: "3.x"
- uses: actions/cache@v3 - uses: actions/cache@v4
with: with:
path: ~/.cache/pip path: ~/.cache/pip
key: ${{ runner.os }}-pip-api-${{ hashFiles('api/**/setup.py') }} key: ${{ runner.os }}-pip-api-${{ hashFiles('api/**/setup.py') }}
@ -42,7 +42,7 @@ jobs:
- name: Get pull request commit range - name: Get pull request commit range
if: github.event_name == 'pull_request' if: github.event_name == 'pull_request'
run: echo "COMMIT_RANGE=origin/${{ github.base_ref }}..${{ github.sha }}" >> $GITHUB_ENV run: echo "COMMIT_RANGE=${{ github.sha }}~1...${{ github.sha }}" >> $GITHUB_ENV
- name: Get push commit range - name: Get push commit range
if: github.event_name == 'push' if: github.event_name == 'push'

View File

@ -3,7 +3,7 @@ name: API
on: on:
workflow_dispatch: workflow_dispatch:
push: push:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/api.yml - .github/workflows/api.yml
@ -12,7 +12,7 @@ on:
- tools/python* - tools/python*
pull_request: pull_request:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/api.yml - .github/workflows/api.yml
@ -64,7 +64,7 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/cache@v3 - uses: actions/cache@v4
with: with:
path: ~/.cache/pip path: ~/.cache/pip
key: ${{ matrix.release }}-pip-api-${{ hashFiles('api/**/setup.py') }} key: ${{ matrix.release }}-pip-api-${{ hashFiles('api/**/setup.py') }}
@ -76,7 +76,7 @@ jobs:
working-directory: api working-directory: api
- name: Report coverage - name: Report coverage
uses: codecov/codecov-action@v3 uses: codecov/codecov-action@v5
with: with:
files: api/coverage.xml files: api/coverage.xml
flags: api flags: api

34
.github/workflows/backport.yml vendored Normal file
View File

@ -0,0 +1,34 @@
name: Backport
on:
pull_request_target:
types:
- closed
- labeled
jobs:
backport:
runs-on: ubuntu-latest
# Only react to merged PRs for security reasons.
# See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target.
if: >
github.event.pull_request.merged
&& (
github.event.action == 'closed'
|| (
github.event.action == 'labeled'
&& contains(github.event.label.name, 'backport')
)
)
steps:
- uses: jooola/backport@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
title_template: <%= title %> (<%= base %>)
body_template: |
Backport <%= mergeCommitSha %> from #<%= number %>.
BEGIN_COMMIT_OVERRIDE
<%= title %>
END_COMMIT_OVERRIDE

View File

@ -3,9 +3,9 @@ name: Container
on: on:
push: push:
tags: ["[0-9]+.[0-9]+.[0-9]+*"] tags: ["[0-9]+.[0-9]+.[0-9]+*"]
branches: [main, stable] branches: [main, stable-*]
pull_request: pull_request:
branches: [main, stable] branches: [main, stable-*]
concurrency: concurrency:
group: ${{ github.workflow }}-${{ github.ref }} group: ${{ github.workflow }}-${{ github.ref }}
@ -24,7 +24,7 @@ jobs:
- name: Update Docker Hub description - name: Update Docker Hub description
if: github.event_name == 'push' if: github.event_name == 'push'
uses: peter-evans/dockerhub-description@v3 uses: peter-evans/dockerhub-description@v4
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
@ -44,7 +44,7 @@ jobs:
type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}}.{{minor}}
- name: Upload metadata bake file - name: Upload metadata bake file
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v4
with: with:
name: meta-${{ matrix.target }} name: meta-${{ matrix.target }}
path: ${{ steps.meta.outputs.bake-file }} path: ${{ steps.meta.outputs.bake-file }}
@ -76,7 +76,9 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Download all metadata bake files - name: Download all metadata bake files
uses: actions/download-artifact@v3 uses: actions/download-artifact@v4
with:
pattern: meta-*
- name: Guess LIBRETIME_VERSION - name: Guess LIBRETIME_VERSION
run: | run: |
@ -84,7 +86,7 @@ jobs:
echo "LIBRETIME_VERSION=$(cat VERSION | tr -d [:blank:])" >> $GITHUB_ENV echo "LIBRETIME_VERSION=$(cat VERSION | tr -d [:blank:])" >> $GITHUB_ENV
- name: Build - name: Build
uses: docker/bake-action@v4 uses: docker/bake-action@v5
with: with:
pull: true pull: true
push: ${{ github.event_name == 'push' }} push: ${{ github.event_name == 'push' }}

View File

@ -78,7 +78,7 @@ jobs:
EOF EOF
- name: Build and push - name: Build and push
uses: docker/build-push-action@v5 uses: docker/build-push-action@v6
with: with:
context: . context: .
push: ${{ github.repository_owner == 'libretime' }} push: ${{ github.repository_owner == 'libretime' }}

View File

@ -2,14 +2,14 @@ name: Docs
on: on:
push: push:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/vale/** - .github/vale/**
- .github/workflows/docs.yml - .github/workflows/docs.yml
- docs/** - docs/**
pull_request: pull_request:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/vale/** - .github/vale/**
- .github/workflows/docs.yml - .github/workflows/docs.yml
@ -26,7 +26,7 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/cache@v3 - uses: actions/cache@v4
with: with:
path: | path: |
/usr/local/bin/vale* /usr/local/bin/vale*

View File

@ -40,7 +40,7 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/cache@v3 - uses: actions/cache@v4
with: with:
path: .lycheecache path: .lycheecache
key: housekeeping-find-broken-links-${{ github.sha }} key: housekeeping-find-broken-links-${{ github.sha }}
@ -48,13 +48,12 @@ jobs:
- name: Check Links - name: Check Links
id: lychee id: lychee
uses: lycheeverse/lychee-action@v1.8.0 uses: lycheeverse/lychee-action@v2.1.0
with: with:
args: >- args: >-
'**/*.md' '**/*.md'
--require-https --require-https
--exclude-all-private --exclude-all-private
--exclude-mail
--exclude 'example\.(com|org)' --exclude 'example\.(com|org)'
--exclude '\$server_name\$request_uri' --exclude '\$server_name\$request_uri'
--exclude '%7Bvars.version%7D' --exclude '%7Bvars.version%7D'
@ -63,6 +62,8 @@ jobs:
--exclude 'https://www.ascap.com' --exclude 'https://www.ascap.com'
--exclude 'https://www.youtube-nocookie.com' --exclude 'https://www.youtube-nocookie.com'
--exclude 'github\.com/libretime/libretime/(issues|pulls)' --exclude 'github\.com/libretime/libretime/(issues|pulls)'
--exclude 'https://packages.ubuntu.com/bionic/php7.2'
--exclude 'https://packages.ubuntu.com/bionic/python3'
--cache --cache
--max-cache-age 2d --max-cache-age 2d
fail: true fail: true
@ -75,7 +76,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/stale@v8 - uses: actions/stale@v9
with: with:
stale-issue-message: > stale-issue-message: >
This issue has been automatically marked as stale because it has not had This issue has been automatically marked as stale because it has not had

View File

@ -3,14 +3,14 @@ name: Legacy
on: on:
workflow_dispatch: workflow_dispatch:
push: push:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/legacy.yml - .github/workflows/legacy.yml
- api/** - api/**
- legacy/** - legacy/**
pull_request: pull_request:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/legacy.yml - .github/workflows/legacy.yml
- api/** - api/**
@ -62,6 +62,7 @@ jobs:
sudo -u postgres psql -c 'CREATE DATABASE libretime;' sudo -u postgres psql -c 'CREATE DATABASE libretime;'
sudo -u postgres psql -c "CREATE USER libretime WITH PASSWORD 'libretime';" sudo -u postgres psql -c "CREATE USER libretime WITH PASSWORD 'libretime';"
sudo -u postgres psql -c 'GRANT CONNECT ON DATABASE libretime TO libretime;' sudo -u postgres psql -c 'GRANT CONNECT ON DATABASE libretime TO libretime;'
sudo -u postgres psql -c 'ALTER DATABASE libretime OWNER TO libretime;'
sudo -u postgres psql -c 'ALTER USER libretime CREATEDB;' sudo -u postgres psql -c 'ALTER USER libretime CREATEDB;'
- name: Setup PHP - name: Setup PHP
@ -74,7 +75,7 @@ jobs:
run: | run: |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3 - uses: actions/cache@v4
with: with:
path: ${{ steps.composer-cache.outputs.dir }} path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}

View File

@ -3,7 +3,7 @@ name: Playout
on: on:
workflow_dispatch: workflow_dispatch:
push: push:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/playout.yml - .github/workflows/playout.yml
@ -13,7 +13,7 @@ on:
- tools/python* - tools/python*
pull_request: pull_request:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/playout.yml - .github/workflows/playout.yml

View File

@ -12,7 +12,7 @@ jobs:
name: Validate PR title name: Validate PR title
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: amannn/action-semantic-pull-request@v5.4.0 - uses: amannn/action-semantic-pull-request@v5.5.3
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with: with:
@ -27,6 +27,8 @@ jobs:
ui ui
worker worker
deps deps
main
stable
subjectPattern: ^(?![A-Z]).+$ subjectPattern: ^(?![A-Z]).+$
subjectPatternError: | subjectPatternError: |
The subject "{subject}" found in the pull request title "{title}" The subject "{subject}" found in the pull request title "{title}"

View File

@ -3,10 +3,10 @@ name: Project
on: on:
workflow_dispatch: workflow_dispatch:
push: push:
branches: [main, stable] branches: [main, stable-*]
pull_request: pull_request:
types: [opened, reopened, synchronize, edited] types: [opened, reopened, synchronize, edited]
branches: [main, stable] branches: [main, stable-*]
concurrency: concurrency:
group: ${{ github.workflow }}-${{ github.ref }} group: ${{ github.workflow }}-${{ github.ref }}
@ -17,24 +17,24 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/setup-python@v4 - uses: actions/setup-python@v5
with: with:
python-version: "3.x" python-version: "3.x"
- uses: actions/cache@v3 - uses: actions/cache@v4
with: with:
path: ~/.cache/pip path: ~/.cache/pip
key: ${{ runner.os }}-project-pre-commit-pip-${{ hashFiles('.pre-commit-config.yaml') }} key: ${{ runner.os }}-project-pre-commit-pip-${{ hashFiles('.pre-commit-config.yaml') }}
restore-keys: | restore-keys: |
${{ runner.os }}-project-pre-commit-pip ${{ runner.os }}-project-pre-commit-pip
- uses: pre-commit/action@v3.0.0 - uses: pre-commit/action@v3.0.1
test-tools: test-tools:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/setup-python@v4 - uses: actions/setup-python@v5
with: with:
python-version: "3.x" python-version: "3.x"
- run: make all - run: make all

21
.github/workflows/release-please.yml vendored Normal file
View File

@ -0,0 +1,21 @@
name: Release-Please
on:
push:
branches:
- main
- stable
jobs:
release-please:
# Do not run on forks.
if: github.repository == 'libretime/libretime'
runs-on: ubuntu-latest
steps:
- uses: google-github-actions/release-please-action@v4
with:
token: ${{ secrets.LIBRETIME_BOT_TOKEN }}
config-file: .github/release-please-config.json
manifest-file: .github/release-please-manifest.json
target-branch: ${{ github.ref_name }}

View File

@ -22,12 +22,9 @@ jobs:
- name: Build tarball - name: Build tarball
run: make tarball run: make tarball
- name: Create Release - name: Upload tarball
uses: softprops/action-gh-release@v1 uses: softprops/action-gh-release@v2
with: with:
body_path: docs/releases/${{ github.ref_name }}.md
draft: true
prerelease: true
files: | files: |
libretime-*.tar.gz libretime-*.tar.gz
sha256sums.txt sha256sums.txt

View File

@ -3,7 +3,7 @@ name: Shared
on: on:
workflow_dispatch: workflow_dispatch:
push: push:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/shared.yml - .github/workflows/shared.yml
@ -11,7 +11,7 @@ on:
- tools/python* - tools/python*
pull_request: pull_request:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/shared.yml - .github/workflows/shared.yml

View File

@ -3,7 +3,7 @@ name: Worker
on: on:
workflow_dispatch: workflow_dispatch:
push: push:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/worker.yml - .github/workflows/worker.yml
@ -11,7 +11,7 @@ on:
- tools/python* - tools/python*
pull_request: pull_request:
branches: [main, stable] branches: [main, stable-*]
paths: paths:
- .github/workflows/_python.yml - .github/workflows/_python.yml
- .github/workflows/worker.yml - .github/workflows/worker.yml

View File

@ -3,7 +3,7 @@
# See https://pre-commit.com/hooks.html for more hooks # See https://pre-commit.com/hooks.html for more hooks
repos: repos:
- repo: https://github.com/pre-commit/pre-commit-hooks - repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0 rev: v5.0.0
hooks: hooks:
- id: check-added-large-files - id: check-added-large-files
- id: check-case-conflict - id: check-case-conflict
@ -33,33 +33,33 @@ repos:
hooks: hooks:
- id: prettier - id: prettier
files: \.(md|mdx|yml|yaml|js|jsx|ts|tsx|json|css)$ files: \.(md|mdx|yml|yaml|js|jsx|ts|tsx|json|css)$
exclude: ^legacy/public(?!/js/airtime) exclude: ^(legacy/public(?!/js/airtime)|CHANGELOG.md$|.github/release-please-manifest.json)
- repo: https://github.com/asottile/pyupgrade - repo: https://github.com/asottile/pyupgrade
rev: v3.15.0 rev: v3.19.0
hooks: hooks:
- id: pyupgrade - id: pyupgrade
args: [--py38-plus] args: [--py38-plus]
- repo: https://github.com/adamchainz/django-upgrade - repo: https://github.com/adamchainz/django-upgrade
rev: 1.15.0 rev: 1.22.2
hooks: hooks:
- id: django-upgrade - id: django-upgrade
args: [--target-version, "4.2"] args: [--target-version, "4.2"]
- repo: https://github.com/pycqa/isort - repo: https://github.com/pycqa/isort
rev: 5.12.0 rev: 5.13.2
hooks: hooks:
- id: isort - id: isort
args: [--resolve-all-configs] args: [--resolve-all-configs]
- repo: https://github.com/psf/black-pre-commit-mirror - repo: https://github.com/psf/black-pre-commit-mirror
rev: 23.11.0 rev: 24.10.0
hooks: hooks:
- id: black - id: black
- repo: https://github.com/codespell-project/codespell - repo: https://github.com/codespell-project/codespell
rev: v2.2.6 rev: v2.3.0
hooks: hooks:
- id: codespell - id: codespell
args: [--ignore-words=.codespellignore] args: [--ignore-words=.codespellignore]
@ -110,3 +110,11 @@ repos:
pass_filenames: false pass_filenames: false
language: script language: script
files: ^legacy files: ^legacy
- id: api-schema-update
name: api-schema-update
description: Ensure API schema is up to date
entry: make -C api schema
pass_filenames: false
language: system
files: ^api

View File

@ -1,4 +1,102 @@
<a name="3.2.0"></a> # Changelog
## [4.2.0](https://github.com/libretime/libretime/compare/4.1.0...4.2.0) (2024-06-22)
### Features
* **legacy:** add current date macro to string block criteria ([#3013](https://github.com/libretime/libretime/issues/3013)) ([451652b](https://github.com/libretime/libretime/commit/451652bc4002b142ab9cf33ae517451c4966134f))
* **legacy:** add filename block criteria ([#3015](https://github.com/libretime/libretime/issues/3015)) ([4642b6c](https://github.com/libretime/libretime/commit/4642b6c08ef813ab5dc7354f73141239f5c145e0))
### Bug Fixes
* pin pip version to &lt;24.1 to allow installing pytz (celery) ([#3043](https://github.com/libretime/libretime/issues/3043)) ([646bc81](https://github.com/libretime/libretime/commit/646bc817246a1e3e0d8107c2b69d726681c643b6))
* playlist allocates inaccurate time to smartblocks ([#3026](https://github.com/libretime/libretime/issues/3026)) ([2b43e51](https://github.com/libretime/libretime/commit/2b43e51ed140bf307e491f0fcb7b84f95709d604))
### Performance Improvements
* optimize the api image health check ([#3038](https://github.com/libretime/libretime/issues/3038)) ([d99d6e1](https://github.com/libretime/libretime/commit/d99d6e1a68f20b3f4255296cd22ac80a90adc020))
* optimize the rabbitmq health check ([#3037](https://github.com/libretime/libretime/issues/3037)) ([9684214](https://github.com/libretime/libretime/commit/96842144257855df86085b052ed8ff87562bc049))
## [4.1.0](https://github.com/libretime/libretime/compare/4.0.0...4.1.0) (2024-05-05)
### Features
* **api:** implement file deletion ([#2960](https://github.com/libretime/libretime/issues/2960)) ([9757b1b](https://github.com/libretime/libretime/commit/9757b1b78c98a33f233163c77eb1b2ad6e0f0efe))
* build schedule events exclusively in playout ([#2946](https://github.com/libretime/libretime/issues/2946)) ([40b4fc7](https://github.com/libretime/libretime/commit/40b4fc7f66004ee3bcb61c9961ec2c48bbcbc6cb))
* **legacy:** add aac/opus support to dashboard player ([#2881](https://github.com/libretime/libretime/issues/2881)) ([95283ef](https://github.com/libretime/libretime/commit/95283efc1f9a63376a99184ef69b699beba45802))
* **legacy:** disable public radio page and redirect to login ([#2903](https://github.com/libretime/libretime/issues/2903)) ([170d095](https://github.com/libretime/libretime/commit/170d09545e4fcfeeb95f9fc5c355329764501854))
* **legacy:** trim overbooked shows after autoloading a playlist ([#2897](https://github.com/libretime/libretime/issues/2897)) ([a95ce3d](https://github.com/libretime/libretime/commit/a95ce3d2296bb864b379dcce14090bd821c1dfc9))
* **legacy:** visual cue point editor ([#2947](https://github.com/libretime/libretime/issues/2947)) ([da02e74](https://github.com/libretime/libretime/commit/da02e74f2115cb76a6435fab5ab2667a8c622b98))
* start celery worker programmatically ([#2988](https://github.com/libretime/libretime/issues/2988)) ([9c548b3](https://github.com/libretime/libretime/commit/9c548b365ec114c6789d2a69e66cc721da6ae100))
### Bug Fixes
* **analyzer:** backslash non utf-8 data when probing replaygain ([#2931](https://github.com/libretime/libretime/issues/2931)) ([29f73e0](https://github.com/libretime/libretime/commit/29f73e0dcb1fd668a79a2ffedc33e16172277376)), closes [#2910](https://github.com/libretime/libretime/issues/2910)
* apply replay gain preferences on scheduled files ([#2945](https://github.com/libretime/libretime/issues/2945)) ([35d0dec](https://github.com/libretime/libretime/commit/35d0dec4a887cdaea2d73dc9bee60eb6624a2aca))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.49.1 ([#2899](https://github.com/libretime/libretime/issues/2899)) ([3e05748](https://github.com/libretime/libretime/commit/3e05748d2d1180b8dad55b6f997e6aa7117735f1))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.51.1 ([#2963](https://github.com/libretime/libretime/issues/2963)) ([22c303c](https://github.com/libretime/libretime/commit/22c303cfffdc777177bd74273e2c24da58cf1682))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.53.1 ([#2972](https://github.com/libretime/libretime/issues/2972)) ([9192aaa](https://github.com/libretime/libretime/commit/9192aaa2bb2dada470e03537493160d9b14a42f4))
* **deps:** update dependency gunicorn to v22 (security) ([#2993](https://github.com/libretime/libretime/issues/2993)) ([a2cf769](https://github.com/libretime/libretime/commit/a2cf7697a97bbc4faf89fd7bc9ba9ecc235bf873))
* incorrect docker compose version ([#2975](https://github.com/libretime/libretime/issues/2975)) ([634e6e2](https://github.com/libretime/libretime/commit/634e6e236d908994d586c946bbe28bcba8a357fa))
* **installer:** setup the worker entrypoint ([#2996](https://github.com/libretime/libretime/issues/2996)) ([71b20ae](https://github.com/libretime/libretime/commit/71b20ae3c974680d814062c5a0bfa51a105dde61))
* **legacy:** allow deleting file with api token ([#2995](https://github.com/libretime/libretime/issues/2995)) ([86da46e](https://github.com/libretime/libretime/commit/86da46ee3a54676298e30301846be890d1ea93ae))
* **legacy:** allow updating track types code ([#2955](https://github.com/libretime/libretime/issues/2955)) ([270aa08](https://github.com/libretime/libretime/commit/270aa08ae6c7207de1cc3ea552dabeb018bcfe0d))
* **legacy:** avoid crash when lot of streams in configuration ([#2915](https://github.com/libretime/libretime/issues/2915)) ([12dd477](https://github.com/libretime/libretime/commit/12dd47731290bf539be7a2a81571f8ada223e9c4))
* **legacy:** ensure validation is performed on the track type form ([#2985](https://github.com/libretime/libretime/issues/2985)) ([5ad69bf](https://github.com/libretime/libretime/commit/5ad69bf0b76ff2e5065551b6a7d154cb26834605))
* **legacy:** fix hidden fields in edit file form ([#2932](https://github.com/libretime/libretime/issues/2932)) ([f4b260f](https://github.com/libretime/libretime/commit/f4b260fdf70c0dd1830166d3856239dae5366599))
* **legacy:** replay_gain_modifier should be a system preference ([#2943](https://github.com/libretime/libretime/issues/2943)) ([37d1a76](https://github.com/libretime/libretime/commit/37d1a7685e37e45734553a0eb4a4da793ca858cb))
* remove obsolete docker compose version ([#2982](https://github.com/libretime/libretime/issues/2982)) ([fb0584b](https://github.com/libretime/libretime/commit/fb0584b021fd1c966181c7ab3989938cdfe4e642))
* trigger legacy tasks manager every 5m ([#2987](https://github.com/libretime/libretime/issues/2987)) ([7040d0e](https://github.com/libretime/libretime/commit/7040d0e4bd92911a9072226f49ad59ce575d6ed9))
* **worker:** ensure celery beat is started ([#3007](https://github.com/libretime/libretime/issues/3007)) ([bfde17e](https://github.com/libretime/libretime/commit/bfde17edf7fcc2bfd55263756e6ec3e455f11740))
## [4.0.0](https://github.com/libretime/libretime/compare/3.2.0...4.0.0) (2024-01-07)
### ⚠ BREAKING CHANGES
* The media file serving is now handled by Nginx instead of the API service. The `storage.path` field is now used in the Nginx configuration, so make sure to update the Nginx configuration file if you change it.
* **installer:** The default listen port for the installer is now `8080`. We recommend that you put a reverse proxy in front of LibreTime.
* **installer:** The `--update-nginx` flag was removed from the installer. The nginx configuration deployed by the installer will now always be overwritten. Make sure to move your customizations to a reverse proxy configuration.
* The default system output (`stream.outputs.system[].kind`) changed from `alsa` to `pulseaudio`. Make sure to update your configuration file if you rely on the default system output.
* The `general.secret_key` configuration field is now required. Make sure to update your configuration file and add a secret key.
### Features
* default system output is now `pulseaudio` ([#2842](https://github.com/libretime/libretime/issues/2842)) ([083ee3f](https://github.com/libretime/libretime/commit/083ee3f1dd74441e288b4d63178ae9cea12ba286)), closes [#2542](https://github.com/libretime/libretime/issues/2542)
* disable uvicorn worker lifespan ([#2845](https://github.com/libretime/libretime/issues/2845)) ([8743c84](https://github.com/libretime/libretime/commit/8743c84d0f007a5430e9059c197a261e613cc642))
* **installer:** add the `--storage-path` flag ([#2865](https://github.com/libretime/libretime/issues/2865)) ([5b23852](https://github.com/libretime/libretime/commit/5b23852f8d144f0c7cdeb62831f7b1a27872b40e))
* **installer:** change default listen port to 8080 ([#2852](https://github.com/libretime/libretime/issues/2852)) ([f72b7f9](https://github.com/libretime/libretime/commit/f72b7f9c9727800a9d77d64c540c12f272bb0ae3))
* **installer:** remove the `--update-nginx` flag ([#2851](https://github.com/libretime/libretime/issues/2851)) ([35d7eac](https://github.com/libretime/libretime/commit/35d7eace13c2b9667fdb41fec0788118e0c5e63f))
* **playout:** configure device for alsa and pulseaudio system outputs ([#2654](https://github.com/libretime/libretime/issues/2654)) ([06af18b](https://github.com/libretime/libretime/commit/06af18b84e7dfaad95e3b55dda22ec1ddad27050))
* rewrite cloud-init config ([#2853](https://github.com/libretime/libretime/issues/2853)) ([8406d52](https://github.com/libretime/libretime/commit/8406d520d7a7bea4060be8a00e360bcf413cb2d5))
* run python in optimized mode ([#2874](https://github.com/libretime/libretime/issues/2874)) ([3f7fc99](https://github.com/libretime/libretime/commit/3f7fc99b6b343fbc8df319d8130ba8247aea96d8))
* the `general.secret_key` configuration field is now required ([#2841](https://github.com/libretime/libretime/issues/2841)) ([0d2d1a2](https://github.com/libretime/libretime/commit/0d2d1a26731a2b41ce5e574ed6de9950eaae4153)), closes [#2426](https://github.com/libretime/libretime/issues/2426)
* use nginx to serve media files ([#2860](https://github.com/libretime/libretime/issues/2860)) ([4603c17](https://github.com/libretime/libretime/commit/4603c1759f29b8a1adb3e83d610ca00e778d76bd))
### Bug Fixes
* add parent function name in setValue exception ([#2777](https://github.com/libretime/libretime/issues/2777)) ([c764a5a](https://github.com/libretime/libretime/commit/c764a5a648ac6cf6c1f63cd9be6de9fe07c40988))
* **api:** ensure non ascii paths are handled by X-Accel-Redirect ([#2861](https://github.com/libretime/libretime/issues/2861)) ([0ce63f3](https://github.com/libretime/libretime/commit/0ce63f3bf0448580170024cdde96ee351ee5c358))
* **api:** enum schema description ([#2803](https://github.com/libretime/libretime/issues/2803)) ([976b70e](https://github.com/libretime/libretime/commit/976b70ed32a0e774cc0b72b8332372be32799ed1))
* **api:** let nginx handle the media file content type ([#2862](https://github.com/libretime/libretime/issues/2862)) ([72268ad](https://github.com/libretime/libretime/commit/72268ad9bb1a96b24efda7143b9371d6fd98ca03))
* **api:** move gunicorn worker config to python file ([#2854](https://github.com/libretime/libretime/issues/2854)) ([43221d9](https://github.com/libretime/libretime/commit/43221d9d7f34ba98a14db9906e350cb494a86b25))
* **api:** paths with question marks chars are handled by X-Accel-Redirect ([#2875](https://github.com/libretime/libretime/issues/2875)) ([b2c1ceb](https://github.com/libretime/libretime/commit/b2c1ceb89fafc76f18ec650d19ec0ff03e4a20b0))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.42.1 (main) ([#2765](https://github.com/libretime/libretime/issues/2765)) ([8ae4dce](https://github.com/libretime/libretime/commit/8ae4dce9e7c013c1f66f1b4d5da4a8c91d3419b7))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.43.2 (main) ([#2848](https://github.com/libretime/libretime/issues/2848)) ([62e5f4d](https://github.com/libretime/libretime/commit/62e5f4dfbb76ab1919c4905570cc34274c685cef))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.45.1 (main) ([#2855](https://github.com/libretime/libretime/issues/2855)) ([6f84328](https://github.com/libretime/libretime/commit/6f8432838058be6ef1cfa7858f17b8272929896e))
* **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.46.1 (main) ([#2868](https://github.com/libretime/libretime/issues/2868)) ([4827dbc](https://github.com/libretime/libretime/commit/4827dbce711262e90238bb3b6c0a35b1ce3d6877))
* **legacy:** allow uploading opus files ([#2804](https://github.com/libretime/libretime/issues/2804)) ([f252a16](https://github.com/libretime/libretime/commit/f252a16637e113ceb1dd340fb7aad31af9c23ff0))
* **legacy:** declare previously undeclared variable ([#2793](https://github.com/libretime/libretime/issues/2793)) ([e2cfbf4](https://github.com/libretime/libretime/commit/e2cfbf4c038f28874a206df5805f04f69a40647b))
* **legacy:** ensure last played criteria works with never played files ([#2840](https://github.com/libretime/libretime/issues/2840)) ([24ee383](https://github.com/libretime/libretime/commit/24ee3830c23f7147f82febe3d3c6743d5ae8d4e6))
* **playout:** increase file download chunk size to 8192 bytes ([#2863](https://github.com/libretime/libretime/issues/2863)) ([7ed1be1](https://github.com/libretime/libretime/commit/7ed1be1816abef20b9ae59a8c66a9e48a34f37c5))
* **playout:** remove empty file when the download request failed ([#2864](https://github.com/libretime/libretime/issues/2864)) ([2facbfa](https://github.com/libretime/libretime/commit/2facbfaff23d4df0e7531b82f04f932bb2c4c9a4))
* **worker:** unbound variable when episode url returns HTTP 404 ([#2844](https://github.com/libretime/libretime/issues/2844)) ([3f39689](https://github.com/libretime/libretime/commit/3f396895e588e62183e01d17927d9bdbea512ee0))
## [3.2.0](https://github.com/libretime/libretime/compare/3.1.0...3.2.0) (2023-10-16) ## [3.2.0](https://github.com/libretime/libretime/compare/3.1.0...3.2.0) (2023-10-16)
@ -38,8 +136,6 @@
- **playout:** check unsupported liquidsoap aac output - **playout:** check unsupported liquidsoap aac output
<a name="3.1.0"></a>
## [3.1.0](https://github.com/libretime/libretime/compare/3.0.2...3.1.0) (2023-05-26) ## [3.1.0](https://github.com/libretime/libretime/compare/3.0.2...3.1.0) (2023-05-26)
- [Release note](https://libretime.org/docs/releases/3.1.0/) - [Release note](https://libretime.org/docs/releases/3.1.0/)
@ -230,8 +326,6 @@
- chore(api): install django-rest-framework from git ([#2518](https://github.com/libretime/libretime/issues/2518)) - chore(api): install django-rest-framework from git ([#2518](https://github.com/libretime/libretime/issues/2518))
<a name="3.0.2"></a>
## [3.0.2](https://github.com/libretime/libretime/compare/3.0.1...3.0.2) (2023-02-21) ## [3.0.2](https://github.com/libretime/libretime/compare/3.0.1...3.0.2) (2023-02-21)
- [Release note](https://libretime.org/docs/releases/3.0.2/) - [Release note](https://libretime.org/docs/releases/3.0.2/)
@ -263,8 +357,6 @@
- don't squash commits during docs sync - don't squash commits during docs sync
- test project weekly - test project weekly
<a name="3.0.1"></a>
## [3.0.1](https://github.com/libretime/libretime/compare/3.0.0...3.0.1) (2022-12-20) ## [3.0.1](https://github.com/libretime/libretime/compare/3.0.0...3.0.1) (2022-12-20)
- [Release note](https://libretime.org/docs/releases/3.0.1/) - [Release note](https://libretime.org/docs/releases/3.0.1/)
@ -293,8 +385,6 @@
- sync docs with libretime/website repository - sync docs with libretime/website repository
- pin vale version to v2.21.3 - pin vale version to v2.21.3
<a name="3.0.0"></a>
## [3.0.0](https://github.com/libretime/libretime/compare/3.0.0-beta.2...3.0.0) (2022-10-10) ## [3.0.0](https://github.com/libretime/libretime/compare/3.0.0-beta.2...3.0.0) (2022-10-10)
- [Release note](https://libretime.org/docs/releases/3.0.0/) - [Release note](https://libretime.org/docs/releases/3.0.0/)
@ -315,8 +405,6 @@
- **analyzer:** fix wrong bit_rate values - **analyzer:** fix wrong bit_rate values
<a name="3.0.0-beta.2"></a>
## [3.0.0-beta.2](https://github.com/libretime/libretime/compare/3.0.0-beta.1...3.0.0-beta.2) (2022-10-03) ## [3.0.0-beta.2](https://github.com/libretime/libretime/compare/3.0.0-beta.1...3.0.0-beta.2) (2022-10-03)
- [Release note](https://libretime.org/docs/releases/3.0.0-beta.2/) - [Release note](https://libretime.org/docs/releases/3.0.0-beta.2/)
@ -345,8 +433,6 @@
- allow failure when linting /docs/releases - allow failure when linting /docs/releases
- use github.ref_name to get tag - use github.ref_name to get tag
<a name="3.0.0-beta.1"></a>
## [3.0.0-beta.1](https://github.com/libretime/libretime/compare/3.0.0-beta.0...3.0.0-beta.1) (2022-09-23) ## [3.0.0-beta.1](https://github.com/libretime/libretime/compare/3.0.0-beta.0...3.0.0-beta.1) (2022-09-23)
- [Release note](https://libretime.org/docs/releases/3.0.0-beta.1/) - [Release note](https://libretime.org/docs/releases/3.0.0-beta.1/)
@ -379,8 +465,6 @@
- don't check github.com/libretime/libretime/(issues|pulls) links - don't check github.com/libretime/libretime/(issues|pulls) links
- run docs workflow on vale files changes - run docs workflow on vale files changes
<a name="3.0.0-beta.0"></a>
## [3.0.0-beta.0](https://github.com/libretime/libretime/compare/3.0.0-alpha.13...3.0.0-beta.0) (2022-09-16) ## [3.0.0-beta.0](https://github.com/libretime/libretime/compare/3.0.0-alpha.13...3.0.0-beta.0) (2022-09-16)
- [Release note](https://libretime.org/docs/releases/3.0.0-beta.0/) - [Release note](https://libretime.org/docs/releases/3.0.0-beta.0/)
@ -530,8 +614,6 @@
- improve containers build caching - improve containers build caching
- add container tags - add container tags
<a name="3.0.0-alpha.13"></a>
## [3.0.0-alpha.13](https://github.com/libretime/libretime/compare/3.0.0-alpha.12...3.0.0-alpha.13) (2022-07-15) ## [3.0.0-alpha.13](https://github.com/libretime/libretime/compare/3.0.0-alpha.12...3.0.0-alpha.13) (2022-07-15)
- [Release note](https://libretime.org/docs/releases/3.0.0-alpha.13/) - [Release note](https://libretime.org/docs/releases/3.0.0-alpha.13/)
@ -692,8 +774,6 @@
- disable codecov project status check - disable codecov project status check
- disable codecov patch status check - disable codecov patch status check
<a name="3.0.0-alpha.12"></a>
## [3.0.0-alpha.12](https://github.com/libretime/libretime/compare/3.0.0-alpha.11...3.0.0-alpha.12) (2022-03-29) ## [3.0.0-alpha.12](https://github.com/libretime/libretime/compare/3.0.0-alpha.11...3.0.0-alpha.12) (2022-03-29)
- [Release note](https://libretime.org/docs/releases/3.0.0-alpha.12/) - [Release note](https://libretime.org/docs/releases/3.0.0-alpha.12/)
@ -708,8 +788,6 @@
- add missing data to release note - add missing data to release note
- fix and update links ([#1714](https://github.com/libretime/libretime/issues/1714)) - fix and update links ([#1714](https://github.com/libretime/libretime/issues/1714))
<a name="3.0.0-alpha.11"></a>
## [3.0.0-alpha.11](https://github.com/libretime/libretime/compare/3.0.0-alpha.10...3.0.0-alpha.11) (2022-03-28) ## [3.0.0-alpha.11](https://github.com/libretime/libretime/compare/3.0.0-alpha.10...3.0.0-alpha.11) (2022-03-28)
- [Release note](https://libretime.org/docs/releases/3.0.0-alpha.11/) - [Release note](https://libretime.org/docs/releases/3.0.0-alpha.11/)

View File

@ -2,7 +2,7 @@ ARG LIBRETIME_VERSION
#======================================================================================# #======================================================================================#
# Python Builder # # Python Builder #
#======================================================================================# #======================================================================================#
FROM python:3.10-slim-bullseye as python-builder FROM python:3.10-slim-bullseye AS python-builder
WORKDIR /build WORKDIR /build
@ -18,7 +18,7 @@ RUN pip wheel --wheel-dir . --no-deps .
#======================================================================================# #======================================================================================#
# Python base # # Python base #
#======================================================================================# #======================================================================================#
FROM python:3.10-slim-bullseye as python-base FROM python:3.10-slim-bullseye AS python-base
ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1 ENV PYTHONUNBUFFERED=1
@ -48,7 +48,7 @@ RUN set -eux \
#======================================================================================# #======================================================================================#
# Python base with ffmpeg # # Python base with ffmpeg #
#======================================================================================# #======================================================================================#
FROM python-base as python-base-ffmpeg FROM python-base AS python-base-ffmpeg
RUN set -eux \ RUN set -eux \
&& DEBIAN_FRONTEND=noninteractive apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get update \
@ -59,7 +59,7 @@ RUN set -eux \
#======================================================================================# #======================================================================================#
# Analyzer # # Analyzer #
#======================================================================================# #======================================================================================#
FROM python-base-ffmpeg as libretime-analyzer FROM python-base-ffmpeg AS libretime-analyzer
COPY tools/packages.py /tmp/packages.py COPY tools/packages.py /tmp/packages.py
COPY analyzer/packages.ini /tmp/packages.ini COPY analyzer/packages.ini /tmp/packages.ini
@ -97,7 +97,7 @@ ENV LIBRETIME_VERSION=$LIBRETIME_VERSION
#======================================================================================# #======================================================================================#
# Playout # # Playout #
#======================================================================================# #======================================================================================#
FROM python-base-ffmpeg as libretime-playout FROM python-base-ffmpeg AS libretime-playout
COPY tools/packages.py /tmp/packages.py COPY tools/packages.py /tmp/packages.py
COPY playout/packages.ini /tmp/packages.ini COPY playout/packages.ini /tmp/packages.ini
@ -136,11 +136,12 @@ ENV LIBRETIME_VERSION=$LIBRETIME_VERSION
#======================================================================================# #======================================================================================#
# API # # API #
#======================================================================================# #======================================================================================#
FROM python-base as libretime-api FROM python-base AS libretime-api
RUN set -eux \ RUN set -eux \
&& DEBIAN_FRONTEND=noninteractive apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
curl \
gcc \ gcc \
libc6-dev \ libc6-dev \
libpq-dev \ libpq-dev \
@ -166,7 +167,7 @@ WORKDIR /app
CMD ["/usr/local/bin/gunicorn", \ CMD ["/usr/local/bin/gunicorn", \
"--workers=4", \ "--workers=4", \
"--worker-class=uvicorn.workers.UvicornWorker", \ "--worker-class=libretime_api.gunicorn.Worker", \
"--log-file", "-", \ "--log-file", "-", \
"--bind=0.0.0.0:9001", \ "--bind=0.0.0.0:9001", \
"libretime_api.asgi"] "libretime_api.asgi"]
@ -174,13 +175,12 @@ CMD ["/usr/local/bin/gunicorn", \
ARG LIBRETIME_VERSION ARG LIBRETIME_VERSION
ENV LIBRETIME_VERSION=$LIBRETIME_VERSION ENV LIBRETIME_VERSION=$LIBRETIME_VERSION
HEALTHCHECK CMD ["python3", "-c", \ HEALTHCHECK CMD ["curl", "--fail", "http://localhost:9001/api/v2/version"]
"import requests; requests.get('http://localhost:9001/api/v2/version').raise_for_status()"]
#======================================================================================# #======================================================================================#
# Worker # # Worker #
#======================================================================================# #======================================================================================#
FROM python-base as libretime-worker FROM python-base AS libretime-worker
WORKDIR /src WORKDIR /src
@ -189,6 +189,7 @@ RUN --mount=type=cache,target=/root/.cache/pip \
pip install --no-compile -r requirements.txt pip install --no-compile -r requirements.txt
COPY --from=python-builder /build/shared/*.whl . COPY --from=python-builder /build/shared/*.whl .
COPY --from=python-builder /build/api-client/*.whl .
RUN --mount=type=cache,target=/root/.cache/pip \ RUN --mount=type=cache,target=/root/.cache/pip \
pip install --no-compile *.whl && rm -Rf *.whl pip install --no-compile *.whl && rm -Rf *.whl
@ -200,20 +201,14 @@ RUN --mount=type=cache,target=/root/.cache/pip \
USER ${UID}:${GID} USER ${UID}:${GID}
WORKDIR /app WORKDIR /app
CMD ["/usr/local/bin/celery", "worker", \ CMD ["/usr/local/bin/libretime-worker"]
"--app=libretime_worker.tasks:worker", \
"--config=libretime_worker.config", \
"--time-limit=1800", \
"--concurrency=1", \
"--loglevel=info"]
ARG LIBRETIME_VERSION ARG LIBRETIME_VERSION
ENV LIBRETIME_VERSION=$LIBRETIME_VERSION ENV LIBRETIME_VERSION=$LIBRETIME_VERSION
#======================================================================================# #======================================================================================#
# Legacy # # Legacy #
#======================================================================================# #======================================================================================#
FROM php:7.4-fpm as libretime-legacy FROM php:7.4-fpm AS libretime-legacy
ENV LIBRETIME_CONFIG_FILEPATH=/etc/libretime/config.yml ENV LIBRETIME_CONFIG_FILEPATH=/etc/libretime/config.yml
ENV LIBRETIME_LOG_FILEPATH=php://stderr ENV LIBRETIME_LOG_FILEPATH=php://stderr

View File

@ -22,18 +22,15 @@ dev-certs:
cat dev/certs/fake.{key,crt} > dev/certs/fake.pem cat dev/certs/fake.{key,crt} > dev/certs/fake.pem
dev: .env dev-certs dev: .env dev-certs
DOCKER_BUILDKIT=1 docker-compose build DOCKER_BUILDKIT=1 docker compose build
docker-compose run --rm legacy make build docker compose run --rm legacy make build
docker-compose run --rm api libretime-api migrate docker compose run --rm api libretime-api migrate
docker-compose up -d docker compose up -d
.PHONY: VERSION .PHONY: VERSION
VERSION: VERSION:
tools/version.sh tools/version.sh
changelog:
tools/changelog.sh
.PHONY: tarball .PHONY: tarball
tarball: VERSION tarball: VERSION
$(MAKE) -C legacy build $(MAKE) -C legacy build

View File

@ -52,23 +52,8 @@ Become a financial contributor and help us sustain our community on
[Support](https://opencollective.com/libretime/contribute) this project with [Support](https://opencollective.com/libretime/contribute) this project with
your organization. Your logo will show up here with a link to your website. your organization. Your logo will show up here with a link to your website.
<a href="https://opencollective.com/libretime/organization/0/website"> <a href="https://opencollective.com/libretime">
<img src="https://opencollective.com/libretime/organization/0/avatar.svg"> <img src="https://opencollective.com/libretime/organizations.svg?width=890">
</a>
<a href="https://opencollective.com/libretime/organization/1/website">
<img src="https://opencollective.com/libretime/organization/1/avatar.svg">
</a>
<a href="https://opencollective.com/libretime/organization/2/website">
<img src="https://opencollective.com/libretime/organization/2/avatar.svg">
</a>
<a href="https://opencollective.com/libretime/organization/3/website">
<img src="https://opencollective.com/libretime/organization/3/avatar.svg">
</a>
<a href="https://opencollective.com/libretime/organization/4/website">
<img src="https://opencollective.com/libretime/organization/4/avatar.svg">
</a>
<a href="https://opencollective.com/libretime/organization/5/website">
<img src="https://opencollective.com/libretime/organization/5/avatar.svg">
</a> </a>
## License ## License

1
Vagrantfile vendored
View File

@ -79,7 +79,6 @@ Vagrant.configure('2') do |config|
LIBRETIME_POSTGRESQL_PASSWORD=libretime \ LIBRETIME_POSTGRESQL_PASSWORD=libretime \
LIBRETIME_RABBITMQ_PASSWORD=libretime \ LIBRETIME_RABBITMQ_PASSWORD=libretime \
bash install \ bash install \
--listen-port 8080 \
--in-place \ --in-place \
http://192.168.10.100:8080 http://192.168.10.100:8080

View File

@ -17,6 +17,7 @@ ProtectKernelTunables=true
ProtectProc=invisible ProtectProc=invisible
ProtectSystem=full ProtectSystem=full
Environment=PYTHONOPTIMIZE=2
Environment=LIBRETIME_CONFIG_FILEPATH=@@CONFIG_FILEPATH@@ Environment=LIBRETIME_CONFIG_FILEPATH=@@CONFIG_FILEPATH@@
Environment=LIBRETIME_LOG_FILEPATH=@@LOG_DIR@@/analyzer.log Environment=LIBRETIME_LOG_FILEPATH=@@LOG_DIR@@/analyzer.log
WorkingDirectory=@@WORKING_DIR@@/analyzer WorkingDirectory=@@WORKING_DIR@@/analyzer

View File

@ -36,7 +36,7 @@ def probe_replaygain(filepath: Path) -> Optional[float]:
""" """
Probe replaygain will probe the given audio file and return the replaygain if available. Probe replaygain will probe the given audio file and return the replaygain if available.
""" """
cmd = _ffprobe("-i", filepath) cmd = _ffprobe("-i", filepath, errors="backslashreplace")
track_gain_match = _PROBE_REPLAYGAIN_RE.search(cmd.stderr) track_gain_match = _PROBE_REPLAYGAIN_RE.search(cmd.stderr)
@ -75,8 +75,7 @@ def compute_silences(filepath: Path) -> List[Tuple[float, float]]:
cmd = _ffmpeg( cmd = _ffmpeg(
*("-i", filepath), *("-i", filepath),
"-vn", "-vn",
*("-filter", "highpass=frequency=1000"), *("-filter", "highpass=frequency=80,silencedetect=noise=-60dB:duration=0.9"),
*("-filter", "silencedetect=noise=0.15:duration=1"),
) )
starts, ends = [], [] starts, ends = [], []

View File

@ -5,10 +5,24 @@ from typing import Any, Dict
import mutagen import mutagen
from libretime_shared.files import compute_md5 from libretime_shared.files import compute_md5
from mutagen.easyid3 import EasyID3
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def flatten(xss):
return [x for xs in xss for x in xs]
def comment_get(id3, _):
comments = [v.text for k, v in id3.items() if "COMM" in k or "comment" in k]
return flatten(comments)
EasyID3.RegisterKey("comment", comment_get)
def analyze_metadata(filepath_: str, metadata: Dict[str, Any]): def analyze_metadata(filepath_: str, metadata: Dict[str, Any]):
""" """
Extract audio metadata from tags embedded in the file using mutagen. Extract audio metadata from tags embedded in the file using mutagen.
@ -71,34 +85,36 @@ def analyze_metadata(filepath_: str, metadata: Dict[str, Any]):
except (AttributeError, KeyError, IndexError): except (AttributeError, KeyError, IndexError):
pass pass
extracted_tags_mapping = { extracted_tags_mapping = [
"title": "track_title", ("title", "track_title"),
"artist": "artist_name", ("artist", "artist_name"),
"album": "album_title", ("album", "album_title"),
"bpm": "bpm", ("bpm", "bpm"),
"composer": "composer", ("composer", "composer"),
"conductor": "conductor", ("conductor", "conductor"),
"copyright": "copyright", ("copyright", "copyright"),
"comment": "comment", ("comment", "comment"),
"encoded_by": "encoder", ("comment", "comments"),
"genre": "genre", ("comment", "description"),
"isrc": "isrc", ("encoded_by", "encoder"),
"label": "label", ("genre", "genre"),
"organization": "label", ("isrc", "isrc"),
# "length": "length", ("label", "label"),
"language": "language", ("organization", "label"),
"last_modified": "last_modified", # ("length", "length"),
"mood": "mood", ("language", "language"),
"bit_rate": "bit_rate", ("last_modified", "last_modified"),
"replay_gain": "replaygain", ("mood", "mood"),
# "tracknumber": "track_number", ("bit_rate", "bit_rate"),
# "track_total": "track_total", ("replay_gain", "replaygain"),
"website": "website", # ("tracknumber", "track_number"),
"date": "year", # ("track_total", "track_total"),
# "mime_type": "mime", ("website", "website"),
} ("date", "year"),
# ("mime_type", "mime"),
]
for extracted_key, metadata_key in extracted_tags_mapping.items(): for extracted_key, metadata_key in extracted_tags_mapping:
try: try:
metadata[metadata_key] = extracted[extracted_key] metadata[metadata_key] = extracted[extracted_key]
if isinstance(metadata[metadata_key], list): if isinstance(metadata[metadata_key], list):

View File

@ -16,8 +16,7 @@ logger = logging.getLogger(__name__)
class Step(Protocol): class Step(Protocol):
@staticmethod @staticmethod
def __call__(filename: str, metadata: Dict[str, Any]): def __call__(filename: str, metadata: Dict[str, Any]): ...
...
class PipelineStatus(int, Enum): class PipelineStatus(int, Enum):

View File

@ -2,5 +2,5 @@
# This file is auto-generated by tools/extract_requirements.py. # This file is auto-generated by tools/extract_requirements.py.
mutagen>=1.45.1,<1.48 mutagen>=1.45.1,<1.48
pika>=1.0.0,<1.4 pika>=1.0.0,<1.4
requests>=2.31.0,<2.32 requests>=2.32.2,<2.33
typing_extensions typing_extensions

View File

@ -1,8 +1,10 @@
from setuptools import find_packages, setup from setuptools import find_packages, setup
version = "4.2.0" # x-release-please-version
setup( setup(
name="libretime-analyzer", name="libretime-analyzer",
version="3.2.0", version=version,
description="Libretime Analyzer", description="Libretime Analyzer",
author="LibreTime Contributors", author="LibreTime Contributors",
url="https://github.com/libretime/libretime", url="https://github.com/libretime/libretime",
@ -22,7 +24,7 @@ setup(
install_requires=[ install_requires=[
"mutagen>=1.45.1,<1.48", "mutagen>=1.45.1,<1.48",
"pika>=1.0.0,<1.4", "pika>=1.0.0,<1.4",
"requests>=2.31.0,<2.32", "requests>=2.32.2,<2.33",
"typing_extensions", "typing_extensions",
], ],
extras_require={ extras_require={

View File

@ -23,28 +23,28 @@ FILES = [
# 8s -> 9s: silence # 8s -> 9s: silence
# 9s -> 12s: musik # 9s -> 12s: musik
# 12s -> 15s: pink noise fade out # 12s -> 15s: pink noise fade out
Fixture(here / "s1-jointstereo.mp3", 15.0, 6.0, 13.0, -5.9 ), Fixture(here / "s1-jointstereo.mp3", 15.0, 1.4, 15.0, -5.9 ),
Fixture(here / "s1-mono.mp3", 15.0, 6.0, 13.0, -2.0 ), Fixture(here / "s1-mono.mp3", 15.0, 1.5, 15.0, -2.0 ),
Fixture(here / "s1-stereo.mp3", 15.0, 6.0, 13.0, -5.9 ), Fixture(here / "s1-stereo.mp3", 15.0, 1.4, 15.0, -5.9 ),
Fixture(here / "s1-mono-12.mp3", 15.0, 9.0, 12.0, +7.0 ), Fixture(here / "s1-mono-12.mp3", 15.0, 1.2, 15.0, +7.0 ),
Fixture(here / "s1-stereo-12.mp3", 15.0, 9.0, 12.0, +6.1 ), Fixture(here / "s1-stereo-12.mp3", 15.0, 1.2, 15.0, +6.1 ),
Fixture(here / "s1-mono+12.mp3", 15.0, 3.5, 13.0, -17.0 ), Fixture(here / "s1-mono+12.mp3", 15.0, 1.2, 15.0, -17.0 ),
Fixture(here / "s1-stereo+12.mp3", 15.0, 3.5, 13.0, -17.8 ), Fixture(here / "s1-stereo+12.mp3", 15.0, 1.2, 15.0, -17.8 ),
Fixture(here / "s1-mono.flac", 15.0, 6.0, 13.0, -2.3 ), Fixture(here / "s1-mono.flac", 15.0, 1.4, 15.0, -2.3 ),
Fixture(here / "s1-stereo.flac", 15.0, 6.0, 13.0, -6.0 ), Fixture(here / "s1-stereo.flac", 15.0, 1.4, 15.0, -6.0 ),
Fixture(here / "s1-mono-12.flac", 15.0, 9.0, 12.0, +10.0 ), Fixture(here / "s1-mono-12.flac", 15.0, 2.0, 15.0, +10.0 ),
Fixture(here / "s1-stereo-12.flac", 15.0, 9.0, 12.0, +5.9 ), Fixture(here / "s1-stereo-12.flac", 15.0, 1.8, 15.0, +5.9 ),
Fixture(here / "s1-mono+12.flac", 15.0, 3.5, 13.0, -12.0 ), Fixture(here / "s1-mono+12.flac", 15.0, 0.0, 15.0, -12.0 ),
Fixture(here / "s1-stereo+12.flac", 15.0, 3.5, 13.0, -14.9 ), Fixture(here / "s1-stereo+12.flac", 15.0, 0.0, 15.0, -14.9 ),
Fixture(here / "s1-mono.m4a", 15.0, 6.0, 13.0, -4.5 ), Fixture(here / "s1-mono.m4a", 15.0, 1.4, 15.0, -4.5 ),
Fixture(here / "s1-stereo.m4a", 15.0, 6.0, 13.0, -5.8 ), Fixture(here / "s1-stereo.m4a", 15.0, 1.4, 15.0, -5.8 ),
Fixture(here / "s1-mono.ogg", 15.0, 6.0, 13.0, -4.9 ), Fixture(here / "s1-mono.ogg", 15.0, 1.4, 15.0, -4.9 ),
Fixture(here / "s1-stereo.ogg", 15.0, 6.0, 13.0, -5.7 ), Fixture(here / "s1-stereo.ogg", 15.0, 1.4, 15.0, -5.7 ),
Fixture(here / "s1-stereo", 15.0, 6.0, 13.0, -5.7 ), Fixture(here / "s1-stereo", 15.0, 1.4, 15.0, -5.7 ),
Fixture(here / "s1-mono.wav", 15.0, 6.0, 13.0, -2.3 ), Fixture(here / "s1-mono.wav", 15.0, 1.5, 15.0, -2.3 ),
Fixture(here / "s1-stereo.wav", 15.0, 6.0, 13.0, -6.0 ), Fixture(here / "s1-stereo.wav", 15.0, 1.4, 15.0, -6.0 ),
# sample 1 large (looped for 2 hours) # sample 1 large (looped for 2 hours)
Fixture(here / "s1-large.flac", 7200, 6.0, 7198, -6.0 ), Fixture(here / "s1-large.flac", 7200, 1.4, 7200, -6.0 ),
# sample 2 # sample 2
# 0s -> 1.8s: silence # 0s -> 1.8s: silence
# 1.8s : noise # 1.8s : noise
@ -96,12 +96,18 @@ tags = {
"comment": "Test Comment", "comment": "Test Comment",
} }
mp3Tags = {
**tags,
"comments": tags["comment"],
"description": tags["comment"],
}
FILES_TAGGED = [ FILES_TAGGED = [
FixtureMeta( FixtureMeta(
here / "s1-jointstereo-tagged.mp3", here / "s1-jointstereo-tagged.mp3",
{ {
**meta, **meta,
**tags, **mp3Tags,
"bit_rate": approx(128000, abs=1e2), "bit_rate": approx(128000, abs=1e2),
"channels": 2, "channels": 2,
"mime": "audio/mp3", "mime": "audio/mp3",
@ -111,7 +117,7 @@ FILES_TAGGED = [
here / "s1-mono-tagged.mp3", here / "s1-mono-tagged.mp3",
{ {
**meta, **meta,
**tags, **mp3Tags,
"bit_rate": approx(64000, abs=1e2), "bit_rate": approx(64000, abs=1e2),
"channels": 1, "channels": 1,
"mime": "audio/mp3", "mime": "audio/mp3",
@ -121,7 +127,7 @@ FILES_TAGGED = [
here / "s1-stereo-tagged.mp3", here / "s1-stereo-tagged.mp3",
{ {
**meta, **meta,
**tags, **mp3Tags,
"bit_rate": approx(128000, abs=1e2), "bit_rate": approx(128000, abs=1e2),
"channels": 2, "channels": 2,
"mime": "audio/mp3", "mime": "audio/mp3",
@ -151,7 +157,7 @@ FILES_TAGGED = [
here / "s1-mono-tagged.m4a", here / "s1-mono-tagged.m4a",
{ {
**meta, **meta,
**tags, **mp3Tags,
"bit_rate": approx(65000, abs=5e4), "bit_rate": approx(65000, abs=5e4),
"channels": 2, # Weird "channels": 2, # Weird
"mime": "audio/mp4", "mime": "audio/mp4",
@ -161,7 +167,7 @@ FILES_TAGGED = [
here / "s1-stereo-tagged.m4a", here / "s1-stereo-tagged.m4a",
{ {
**meta, **meta,
**tags, **mp3Tags,
"bit_rate": approx(128000, abs=1e5), "bit_rate": approx(128000, abs=1e5),
"channels": 2, "channels": 2,
"mime": "audio/mp4", "mime": "audio/mp4",
@ -228,12 +234,18 @@ tags = {
"comment": "Ł Ą Ż Ę Ć Ń Ś Ź", "comment": "Ł Ą Ż Ę Ć Ń Ś Ź",
} }
mp3Tags = {
**tags,
"comments": tags["comment"],
"description": tags["comment"],
}
FILES_TAGGED += [ FILES_TAGGED += [
FixtureMeta( FixtureMeta(
here / "s1-jointstereo-tagged-utf8.mp3", here / "s1-jointstereo-tagged-utf8.mp3",
{ {
**meta, **meta,
**tags, **mp3Tags,
"bit_rate": approx(128000, abs=1e2), "bit_rate": approx(128000, abs=1e2),
"channels": 2, "channels": 2,
"mime": "audio/mp3", "mime": "audio/mp3",
@ -243,7 +255,7 @@ FILES_TAGGED += [
here / "s1-mono-tagged-utf8.mp3", here / "s1-mono-tagged-utf8.mp3",
{ {
**meta, **meta,
**tags, **mp3Tags,
"bit_rate": approx(64000, abs=1e2), "bit_rate": approx(64000, abs=1e2),
"channels": 1, "channels": 1,
"mime": "audio/mp3", "mime": "audio/mp3",
@ -253,7 +265,7 @@ FILES_TAGGED += [
here / "s1-stereo-tagged-utf8.mp3", here / "s1-stereo-tagged-utf8.mp3",
{ {
**meta, **meta,
**tags, **mp3Tags,
"bit_rate": approx(128000, abs=1e2), "bit_rate": approx(128000, abs=1e2),
"channels": 2, "channels": 2,
"mime": "audio/mp3", "mime": "audio/mp3",
@ -283,7 +295,7 @@ FILES_TAGGED += [
here / "s1-mono-tagged-utf8.m4a", here / "s1-mono-tagged-utf8.m4a",
{ {
**meta, **meta,
**tags, **mp3Tags,
"bit_rate": approx(65000, abs=5e4), "bit_rate": approx(65000, abs=5e4),
"channels": 2, # Weird "channels": 2, # Weird
"mime": "audio/mp4", "mime": "audio/mp4",
@ -293,7 +305,7 @@ FILES_TAGGED += [
here / "s1-stereo-tagged-utf8.m4a", here / "s1-stereo-tagged-utf8.m4a",
{ {
**meta, **meta,
**tags, **mp3Tags,
"bit_rate": approx(128000, abs=1e5), "bit_rate": approx(128000, abs=1e5),
"channels": 2, "channels": 2,
"mime": "audio/mp4", "mime": "audio/mp4",

View File

@ -27,8 +27,8 @@ def test_analyze_metadata(filepath: Path, metadata: dict):
del metadata["length"] del metadata["length"]
del found["length"] del found["length"]
# mp3,ogg,flac files does not support comments yet # ogg,flac files does not support comments yet
if not filepath.suffix == ".m4a": if not filepath.suffix == ".m4a" and not filepath.suffix == ".mp3":
if "comment" in metadata: if "comment" in metadata:
del metadata["comment"] del metadata["comment"]

View File

@ -214,3 +214,6 @@ class ApiClient:
def update_metadata_on_tunein(self): def update_metadata_on_tunein(self):
self._base_client.update_metadata_on_tunein() self._base_client.update_metadata_on_tunein()
def trigger_task_manager(self):
self._base_client.version()

View File

@ -1,4 +1,4 @@
# Please do not edit this file, edit the setup.py file! # Please do not edit this file, edit the setup.py file!
# This file is auto-generated by tools/extract_requirements.py. # This file is auto-generated by tools/extract_requirements.py.
python-dateutil>=2.8.1,<2.9 python-dateutil>=2.8.1,<2.10
requests>=2.31.0,<2.32 requests>=2.32.2,<2.33

View File

@ -1,8 +1,10 @@
from setuptools import find_packages, setup from setuptools import find_packages, setup
version = "4.2.0" # x-release-please-version
setup( setup(
name="libretime-api-client", name="libretime-api-client",
version="3.2.0", version=version,
description="LibreTime API Client", description="LibreTime API Client",
author="LibreTime Contributors", author="LibreTime Contributors",
url="https://github.com/libretime/libretime", url="https://github.com/libretime/libretime",
@ -16,8 +18,8 @@ setup(
package_data={"": ["py.typed"]}, package_data={"": ["py.typed"]},
python_requires=">=3.8", python_requires=">=3.8",
install_requires=[ install_requires=[
"python-dateutil>=2.8.1,<2.9", "python-dateutil>=2.8.1,<2.10",
"requests>=2.31.0,<2.32", "requests>=2.32.2,<2.33",
], ],
extras_require={ extras_require={
"dev": [ "dev": [

View File

@ -18,6 +18,7 @@ ProtectKernelTunables=true
ProtectProc=invisible ProtectProc=invisible
ProtectSystem=full ProtectSystem=full
Environment=PYTHONOPTIMIZE=2
Environment=LIBRETIME_CONFIG_FILEPATH=@@CONFIG_FILEPATH@@ Environment=LIBRETIME_CONFIG_FILEPATH=@@CONFIG_FILEPATH@@
Environment=LIBRETIME_LOG_FILEPATH=@@LOG_DIR@@/api.log Environment=LIBRETIME_LOG_FILEPATH=@@LOG_DIR@@/api.log
@ -25,7 +26,7 @@ Type=notify
KillMode=mixed KillMode=mixed
ExecStart=@@VENV_DIR@@/bin/gunicorn \ ExecStart=@@VENV_DIR@@/bin/gunicorn \
--workers 4 \ --workers 4 \
--worker-class uvicorn.workers.UvicornWorker \ --worker-class libretime_api.gunicorn.Worker \
--log-file - \ --log-file - \
--bind unix:/run/libretime-api.sock \ --bind unix:/run/libretime-api.sock \
libretime_api.asgi libretime_api.asgi

View File

@ -18,12 +18,13 @@ class StreamPreferences(BaseModel):
input_fade_transition: float input_fade_transition: float
message_format: MessageFormatKind message_format: MessageFormatKind
message_offline: str message_offline: str
replay_gain_enabled: bool
replay_gain_offset: float
# input_auto_switch_off: bool # input_auto_switch_off: bool
# input_auto_switch_on: bool # input_auto_switch_on: bool
# input_main_user: str # input_main_user: str
# input_main_password: str # input_main_password: str
# replay_gain_enabled: bool
# replay_gain_offset: float
# track_fade_in: float # track_fade_in: float
# track_fade_out: float # track_fade_out: float
# track_fade_transition: float # track_fade_transition: float
@ -82,6 +83,8 @@ class Preference(models.Model):
int(entries.get("stream_label_format") or 0) int(entries.get("stream_label_format") or 0)
), ),
message_offline=entries.get("off_air_meta") or "Offline", message_offline=entries.get("off_air_meta") or "Offline",
replay_gain_enabled=entries.get("enable_replay_gain") == "1",
replay_gain_offset=float(entries.get("replay_gain_modifier") or 0.0),
) )
@classmethod @classmethod

View File

@ -8,6 +8,7 @@ from .role import Role
class UserManager(BaseUserManager): class UserManager(BaseUserManager):
# pylint: disable=too-many-positional-arguments
def create_user(self, role, username, password, email, first_name, last_name): def create_user(self, role, username, password, email, first_name, last_name):
user = self.model( user = self.model(
role=role, role=role,
@ -20,6 +21,7 @@ class UserManager(BaseUserManager):
user.save(using=self._db) user.save(using=self._db)
return user return user
# pylint: disable=too-many-positional-arguments
def create_superuser(self, username, password, email, first_name, last_name): def create_superuser(self, username, password, email, first_name, last_name):
return self.create_user( return self.create_user(
Role.ADMIN, Role.ADMIN,

View File

@ -6,6 +6,8 @@ class StreamPreferencesSerializer(serializers.Serializer):
input_fade_transition = serializers.FloatField(read_only=True) input_fade_transition = serializers.FloatField(read_only=True)
message_format = serializers.IntegerField(read_only=True) message_format = serializers.IntegerField(read_only=True)
message_offline = serializers.CharField(read_only=True) message_offline = serializers.CharField(read_only=True)
replay_gain_enabled = serializers.BooleanField(read_only=True)
replay_gain_offset = serializers.FloatField(read_only=True)
# pylint: disable=abstract-method # pylint: disable=abstract-method

View File

@ -4,7 +4,7 @@ from libretime_api.core.models.preference import Preference
# pylint: disable=invalid-name,unused-argument # pylint: disable=invalid-name,unused-argument
def test_preference_get_site_preferences(db): def test_preference_get_site_preferences(db):
result = Preference.get_site_preferences() result = Preference.get_site_preferences()
assert result.dict() == { assert result.model_dump() == {
"station_name": "LibreTime", "station_name": "LibreTime",
} }
@ -12,17 +12,19 @@ def test_preference_get_site_preferences(db):
# pylint: disable=invalid-name,unused-argument # pylint: disable=invalid-name,unused-argument
def test_preference_get_stream_preferences(db): def test_preference_get_stream_preferences(db):
result = Preference.get_stream_preferences() result = Preference.get_stream_preferences()
assert result.dict() == { assert result.model_dump() == {
"input_fade_transition": 0.0, "input_fade_transition": 0.0,
"message_format": 0, "message_format": 0,
"message_offline": "LibreTime - offline", "message_offline": "LibreTime - offline",
"replay_gain_enabled": True,
"replay_gain_offset": 0.0,
} }
# pylint: disable=invalid-name,unused-argument # pylint: disable=invalid-name,unused-argument
def test_preference_get_stream_state(db): def test_preference_get_stream_state(db):
result = Preference.get_stream_state() result = Preference.get_stream_state()
assert result.dict() == { assert result.model_dump() == {
"input_main_connected": False, "input_main_connected": False,
"input_main_streaming": False, "input_main_streaming": False,
"input_show_connected": False, "input_show_connected": False,

View File

@ -9,6 +9,8 @@ def test_stream_preferences_get(db, api_client: APIClient):
"input_fade_transition": 0.0, "input_fade_transition": 0.0,
"message_format": 0, "message_format": 0,
"message_offline": "LibreTime - offline", "message_offline": "LibreTime - offline",
"replay_gain_enabled": True,
"replay_gain_offset": 0.0,
} }

View File

@ -22,7 +22,7 @@ class InfoView(APIView):
def get(self, request): def get(self, request):
data = Preference.get_site_preferences() data = Preference.get_site_preferences()
return Response( return Response(
data.dict( data.model_dump(
include={ include={
"station_name", "station_name",
} }

View File

@ -14,11 +14,13 @@ class StreamPreferencesView(views.APIView):
def get(self, request): def get(self, request):
data = Preference.get_stream_preferences() data = Preference.get_stream_preferences()
return Response( return Response(
data.dict( data.model_dump(
include={ include={
"input_fade_transition", "input_fade_transition",
"message_format", "message_format",
"message_offline", "message_offline",
"replay_gain_enabled",
"replay_gain_offset",
} }
) )
) )
@ -32,7 +34,7 @@ class StreamStateView(views.APIView):
def get(self, request): def get(self, request):
data = Preference.get_stream_state() data = Preference.get_stream_state()
return Response( return Response(
data.dict( data.model_dump(
include={ include={
"input_main_connected", "input_main_connected",
"input_main_streaming", "input_main_streaming",

View File

@ -0,0 +1,5 @@
from uvicorn.workers import UvicornWorker # pylint: disable=import-error
class Worker(UvicornWorker):
CONFIG_KWARGS = {"lifespan": "off"}

View File

@ -8,8 +8,6 @@ UP = """
-- DELETE FROM cc_pref WHERE keystr = 'system_version'; -- DELETE FROM cc_pref WHERE keystr = 'system_version';
-- INSERT INTO cc_pref (keystr, valstr) VALUES ('system_version', '2.5.5'); -- INSERT INTO cc_pref (keystr, valstr) VALUES ('system_version', '2.5.5');
ALTER TABLE cc_show ADD COLUMN image_path varchar(255) DEFAULT '';
ALTER TABLE cc_show_instances ADD COLUMN description varchar(255) DEFAULT '';
""" """
DOWN = None DOWN = None

View File

@ -5,7 +5,7 @@ from django.db import migrations
from ._migrations import legacy_migration_factory from ._migrations import legacy_migration_factory
UP = """ UP = """
ALTER TABLE cc_files ADD COLUMN artwork TYPE character varying(255); ALTER TABLE cc_files ADD COLUMN artwork VARCHAR(255);
""" """
DOWN = None DOWN = None

View File

@ -4,12 +4,18 @@ from django.db import migrations
from ._migrations import legacy_migration_factory from ._migrations import legacy_migration_factory
# This migration is currently a placeholder for 3.0.0-alpha.9.1.
# Please do not remove it. There are currently no actions, but it
# needs to remain intact so it does not fail when called from the
# migrations script. Any future migrations that may apply to
# 3.0.0-alpha.9.1 will be added to this file.
UP = """ UP = """
ALTER TABLE cc_files ADD COLUMN artwork VARCHAR(4096);
""" """
DOWN = """ DOWN = """
ALTER TABLE cc_files DROP COLUMN IF EXISTS artwork;
""" """

View File

@ -0,0 +1,37 @@
# pylint: disable=invalid-name
from django.db import migrations
from ._migrations import legacy_migration_factory
UP = """
ALTER TABLE cc_show ADD COLUMN override_intro_playlist boolean default 'f' NOT NULL;
ALTER TABLE cc_show ADD COLUMN intro_playlist_id integer DEFAULT NULL;
ALTER TABLE cc_show ADD CONSTRAINT cc_playlist_intro_playlist_fkey FOREIGN KEY (intro_playlist_id) REFERENCES cc_playlist (id) ON DELETE SET NULL;
ALTER TABLE cc_show ADD COLUMN override_outro_playlist boolean default 'f' NOT NULL;
ALTER TABLE cc_show ADD COLUMN outro_playlist_id integer DEFAULT NULL;
ALTER TABLE cc_show ADD CONSTRAINT cc_playlist_outro_playlist_fkey FOREIGN KEY (outro_playlist_id) REFERENCES cc_playlist (id) ON DELETE SET NULL;
"""
DOWN = """
ALTER TABLE cc_show DROP COLUMN IF EXISTS override_intro_playlist;
ALTER TABLE cc_show DROP COLUMN IF EXISTS intro_playlist_id;
ALTER TABLE cc_show DROP CONSTRAINT IF EXISTS cc_playlist_intro_playlist_fkey;
ALTER TABLE cc_show DROP COLUMN IF EXISTS override_outro_playlist;
ALTER TABLE cc_show DROP COLUMN IF EXISTS outro_playlist_id;
ALTER TABLE cc_show DROP CONSTRAINT IF EXISTS cc_playlist_outro_playlist_fkey;
"""
class Migration(migrations.Migration):
dependencies = [
("legacy", "0045_add_sessions_table"),
]
operations = [
migrations.RunPython(
code=legacy_migration_factory(
target="46",
sql=UP,
)
)
]

View File

@ -1,2 +1,2 @@
# The schema version is defined using the migration file prefix number # The schema version is defined using the migration file prefix number
LEGACY_SCHEMA_VERSION = "45" LEGACY_SCHEMA_VERSION = "46"

View File

@ -11,15 +11,28 @@ def get_schema_version():
Don't use django models as they might break in the future. Our concern is to upgrade Don't use django models as they might break in the future. Our concern is to upgrade
the legacy database schema to the point where django is in charge of the migrations. the legacy database schema to the point where django is in charge of the migrations.
An airtime 2.5.1 migration will not have schema_version, in that case, we look for
system_version to have a value of 2.5.1 and return that as the schema version value
(really just needs to be anything besides None, so that the next migration doesn't overwrite
the database)
""" """
if "cc_pref" not in connection.introspection.table_names(): if "cc_pref" not in connection.introspection.table_names():
return None return None
with connection.cursor() as cursor: with connection.cursor() as cursor:
cursor.execute("SELECT valstr FROM cc_pref WHERE keystr = 'schema_version'") cursor.execute(
"""
SELECT valstr AS version
FROM cc_pref
WHERE (keystr = 'schema_version') OR (keystr = 'system_version' AND valstr = '2.5.1')
"""
)
row = cursor.fetchone() row = cursor.fetchone()
return row[0] if row else None if row and row[0]:
return row[0]
return None
def set_schema_version(cursor, version: str): def set_schema_version(cursor, version: str):

View File

@ -126,6 +126,10 @@ CREATE TABLE "cc_show"
"has_autoplaylist" BOOLEAN DEFAULT 'f' NOT NULL, "has_autoplaylist" BOOLEAN DEFAULT 'f' NOT NULL,
"autoplaylist_id" INTEGER, "autoplaylist_id" INTEGER,
"autoplaylist_repeat" BOOLEAN DEFAULT 'f' NOT NULL, "autoplaylist_repeat" BOOLEAN DEFAULT 'f' NOT NULL,
"override_intro_playlist" BOOLEAN DEFAULT 'f' NOT NULL,
"intro_playlist_id" INTEGER,
"override_outro_playlist" BOOLEAN DEFAULT 'f' NOT NULL,
"outro_playlist_id" INTEGER,
PRIMARY KEY ("id") PRIMARY KEY ("id")
); );
@ -718,6 +722,16 @@ ALTER TABLE "cc_show" ADD CONSTRAINT "cc_playlist_autoplaylist_fkey"
REFERENCES "cc_playlist" ("id") REFERENCES "cc_playlist" ("id")
ON DELETE SET NULL; ON DELETE SET NULL;
ALTER TABLE "cc_show" ADD CONSTRAINT "cc_playlist_intro_playlist_fkey"
FOREIGN KEY ("intro_playlist_id")
REFERENCES "cc_playlist" ("id")
ON DELETE SET NULL;
ALTER TABLE "cc_show" ADD CONSTRAINT "cc_playlist_outro_playlist_fkey"
FOREIGN KEY ("outro_playlist_id")
REFERENCES "cc_playlist" ("id")
ON DELETE SET NULL;
ALTER TABLE "cc_show_instances" ADD CONSTRAINT "cc_show_fkey" ALTER TABLE "cc_show_instances" ADD CONSTRAINT "cc_show_fkey"
FOREIGN KEY ("show_id") FOREIGN KEY ("show_id")
REFERENCES "cc_show" ("id") REFERENCES "cc_show" ("id")

View File

@ -0,0 +1 @@
from .readwriteserializer import ReadWriteSerializerMixin

View File

@ -0,0 +1,33 @@
from rest_framework.serializers import Serializer
class ReadWriteSerializerMixin:
"""
Overrides get_serializer_class to choose the read serializer
for GET requests and the write serializer for POST requests.
Set read_serializer_class and write_serializer_class attributes on a
viewset.
"""
read_serializer_class = Serializer
write_serializer_class = Serializer
def get_serializer_class(self):
if self.action in ["create"]:
return self.get_write_serializer_class()
return self.get_read_serializer_class()
def get_read_serializer_class(self):
assert self.read_serializer_class is not None, (
f"'{self.__class__.__name__}' should either include a `read_serializer_class`"
"attribute, or override the `get_read_serializer_class()` method."
)
return self.read_serializer_class
def get_write_serializer_class(self):
assert self.write_serializer_class is not None, (
f"'{self.__class__.__name__}' should either include a `write_serializer_class`"
"attribute, or override the `get_write_serializer_class()` method."
)
return self.write_serializer_class

View File

@ -1,4 +1,5 @@
from django.db import models from django.db import models
from django.utils.timezone import now
class Schedule(models.Model): class Schedule(models.Model):
@ -115,6 +116,14 @@ class Schedule(models.Model):
return self.instance.ends_at return self.instance.ends_at
return self.ends_at return self.ends_at
@staticmethod
def is_file_scheduled_in_the_future(file_id):
count = Schedule.objects.filter(
file_id=file_id,
ends_at__gt=now(),
).count()
return count > 0
class Meta: class Meta:
managed = False managed = False
db_table = "cc_schedule" db_table = "cc_schedule"

View File

@ -69,6 +69,28 @@ class Show(models.Model):
auto_playlist_enabled = models.BooleanField(db_column="has_autoplaylist") auto_playlist_enabled = models.BooleanField(db_column="has_autoplaylist")
auto_playlist_repeat = models.BooleanField(db_column="autoplaylist_repeat") auto_playlist_repeat = models.BooleanField(db_column="autoplaylist_repeat")
intro_playlist = models.ForeignKey(
"schedule.Playlist",
on_delete=models.DO_NOTHING,
blank=True,
null=True,
db_column="intro_playlist_id",
related_name="intro_playlist",
)
override_intro_playlist = models.BooleanField(db_column="override_intro_playlist")
outro_playlist = models.ForeignKey(
"schedule.Playlist",
on_delete=models.DO_NOTHING,
blank=True,
null=True,
db_column="outro_playlist_id",
related_name="outro_playlist",
)
override_outro_playlist = models.BooleanField(db_column="override_outro_playlist")
hosts = models.ManyToManyField( # type: ignore[var-annotated] hosts = models.ManyToManyField( # type: ignore[var-annotated]
"core.User", "core.User",
through="ShowHost", through="ShowHost",

View File

@ -1,5 +1,5 @@
from .playlist import PlaylistContentSerializer, PlaylistSerializer from .playlist import PlaylistContentSerializer, PlaylistSerializer
from .schedule import ScheduleSerializer from .schedule import ReadScheduleSerializer, WriteScheduleSerializer
from .show import ( from .show import (
ShowDaysSerializer, ShowDaysSerializer,
ShowHostSerializer, ShowHostSerializer,

View File

@ -3,10 +3,17 @@ from rest_framework import serializers
from ..models import Schedule from ..models import Schedule
class ScheduleSerializer(serializers.ModelSerializer): class ReadScheduleSerializer(serializers.ModelSerializer):
cue_out = serializers.DurationField(source="get_cue_out", read_only=True) cue_out = serializers.DurationField(source="get_cue_out", read_only=True)
ends_at = serializers.DateTimeField(source="get_ends_at", read_only=True) ends_at = serializers.DateTimeField(source="get_ends_at", read_only=True)
class Meta: class Meta:
model = Schedule model = Schedule
fields = "__all__" fields = "__all__"
class WriteScheduleSerializer(serializers.ModelSerializer):
class Meta:
model = Schedule
fields = "__all__"

View File

@ -21,6 +21,10 @@ class ShowSerializer(serializers.ModelSerializer):
"auto_playlist", "auto_playlist",
"auto_playlist_enabled", "auto_playlist_enabled",
"auto_playlist_repeat", "auto_playlist_repeat",
"intro_playlist",
"override_intro_playlist",
"outro_playlist",
"override_outro_playlist",
] ]

View File

@ -2,8 +2,9 @@ from django.db import models
from django_filters import rest_framework as filters from django_filters import rest_framework as filters
from rest_framework import viewsets from rest_framework import viewsets
from ...mixins import ReadWriteSerializerMixin
from ..models import Schedule from ..models import Schedule
from ..serializers import ScheduleSerializer from ..serializers import ReadScheduleSerializer, WriteScheduleSerializer
class ScheduleFilter(filters.FilterSet): class ScheduleFilter(filters.FilterSet):
@ -26,8 +27,9 @@ class ScheduleFilter(filters.FilterSet):
fields = [] # type: ignore fields = [] # type: ignore
class ScheduleViewSet(viewsets.ModelViewSet): class ScheduleViewSet(ReadWriteSerializerMixin, viewsets.ModelViewSet):
queryset = Schedule.objects.all() queryset = Schedule.objects.all()
serializer_class = ScheduleSerializer read_serializer_class = ReadScheduleSerializer
write_serializer_class = WriteScheduleSerializer
filterset_class = ScheduleFilter filterset_class = ScheduleFilter
model_permission_name = "schedule" model_permission_name = "schedule"

View File

@ -1,5 +1,4 @@
from os import getenv from os import getenv
from warnings import warn
# pylint: disable=unused-import # pylint: disable=unused-import
from ._internal import ( from ._internal import (
@ -25,14 +24,6 @@ LIBRETIME_CONFIG_FILEPATH = getenv("LIBRETIME_CONFIG_FILEPATH")
CONFIG = Config(LIBRETIME_CONFIG_FILEPATH) # type: ignore[arg-type, misc] CONFIG = Config(LIBRETIME_CONFIG_FILEPATH) # type: ignore[arg-type, misc]
if CONFIG.general.secret_key is None:
warn(
"The [general.secret_key] configuration field is not set but will be required "
"in the next major release. Using [general.api_key] as fallback.",
FutureWarning,
)
SECRET_KEY = CONFIG.general.api_key
else:
SECRET_KEY = CONFIG.general.secret_key SECRET_KEY = CONFIG.general.secret_key
ALLOWED_HOSTS = ["*"] ALLOWED_HOSTS = ["*"]

View File

@ -1,35 +1,96 @@
import os
from unittest.mock import patch
from django.conf import settings from django.conf import settings
from model_bakery import baker from model_bakery import baker
from rest_framework.test import APITestCase from rest_framework.test import APITestCase
from ...._fixtures import AUDIO_FILENAME from ...._fixtures import AUDIO_FILENAME
from ...models import File
class TestFileViewSet(APITestCase): class TestFileViewSet(APITestCase):
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
cls.path = "/api/v2/files/{id}/download"
cls.token = settings.CONFIG.general.api_key cls.token = settings.CONFIG.general.api_key
def test_invalid(self): def test_download_invalid(self):
path = self.path.format(id="a")
self.client.credentials(HTTP_AUTHORIZATION=f"Api-Key {self.token}") self.client.credentials(HTTP_AUTHORIZATION=f"Api-Key {self.token}")
response = self.client.get(path) file_id = "1"
self.assertEqual(response.status_code, 400) response = self.client.get(f"/api/v2/files/{file_id}/download")
def test_does_not_exist(self):
path = self.path.format(id="1")
self.client.credentials(HTTP_AUTHORIZATION=f"Api-Key {self.token}")
response = self.client.get(path)
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
def test_exists(self): def test_download(self):
file = baker.make( self.client.credentials(HTTP_AUTHORIZATION=f"Api-Key {self.token}")
file: File = baker.make(
"storage.File", "storage.File",
mime="audio/mp3", mime="audio/mp3",
filepath=AUDIO_FILENAME, filepath=AUDIO_FILENAME,
) )
path = self.path.format(id=str(file.pk)) response = self.client.get(f"/api/v2/files/{file.id}/download")
self.client.credentials(HTTP_AUTHORIZATION=f"Api-Key {self.token}")
response = self.client.get(path)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
def test_destroy(self):
self.client.credentials(HTTP_AUTHORIZATION=f"Api-Key {self.token}")
file: File = baker.make(
"storage.File",
mime="audio/mp3",
filepath=AUDIO_FILENAME,
)
with patch("libretime_api.storage.views.file.remove") as remove_mock:
response = self.client.delete(f"/api/v2/files/{file.id}")
self.assertEqual(response.status_code, 204)
remove_mock.assert_called_with(
os.path.join(settings.CONFIG.storage.path, file.filepath)
)
def test_destroy_no_file(self):
self.client.credentials(HTTP_AUTHORIZATION=f"Api-Key {self.token}")
file = baker.make(
"storage.File",
mime="audio/mp3",
filepath="invalid.mp3",
)
response = self.client.delete(f"/api/v2/files/{file.id}")
self.assertEqual(response.status_code, 204)
def test_destroy_invalid(self):
self.client.credentials(HTTP_AUTHORIZATION=f"Api-Key {self.token}")
file_id = "1"
response = self.client.delete(f"/api/v2/files/{file_id}")
self.assertEqual(response.status_code, 404)
def test_filters(self):
file = baker.make(
"storage.File",
mime="audio/mp3",
filepath=AUDIO_FILENAME,
genre="Soul",
md5="5a11ffe0e6c6d70fcdbad1b734be6482",
)
baker.make(
"storage.File",
mime="audio/mp3",
filepath=AUDIO_FILENAME,
genre="R&B",
md5="5a11ffe0e6c6d70fcdbad1b734be6483",
)
self.client.credentials(HTTP_AUTHORIZATION=f"Api-Key {self.token}")
path = "/api/v2/files"
results = self.client.get(path).json()
self.assertEqual(len(results), 2)
path = f"/api/v2/files?md5={file.md5}"
results = self.client.get(path).json()
self.assertEqual(len(results), 1)
path = "/api/v2/files?genre=Soul"
results = self.client.get(path).json()
self.assertEqual(len(results), 1)
path = "/api/v2/files?genre=R%26B"
results = self.client.get(path).json()
self.assertEqual(len(results), 1)

View File

@ -1,25 +1,62 @@
import logging
import os import os
from os import remove
from django.conf import settings from django.conf import settings
from django.http import FileResponse from django.http import HttpResponse
from django.shortcuts import get_object_or_404 from django.utils.encoding import filepath_to_uri
from rest_framework import viewsets from django_filters import rest_framework as filters
from rest_framework import status, viewsets
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework.serializers import IntegerField from rest_framework.exceptions import APIException
from ...schedule.models import Schedule
from ..models import File from ..models import File
from ..serializers import FileSerializer from ..serializers import FileSerializer
logger = logging.getLogger(__name__)
class FileInUse(APIException):
status_code = status.HTTP_409_CONFLICT
default_detail = "The file is currently used"
default_code = "file_in_use"
class FileViewSet(viewsets.ModelViewSet): class FileViewSet(viewsets.ModelViewSet):
queryset = File.objects.all() queryset = File.objects.all()
serializer_class = FileSerializer serializer_class = FileSerializer
model_permission_name = "file" model_permission_name = "file"
filter_backends = (filters.DjangoFilterBackend,)
filterset_fields = ("md5", "genre")
# pylint: disable=invalid-name,unused-argument
@action(detail=True, methods=["GET"]) @action(detail=True, methods=["GET"])
def download(self, request, pk=None): # pylint: disable=invalid-name def download(self, request, pk=None):
pk = IntegerField().to_internal_value(data=pk) instance: File = self.get_object()
file = get_object_or_404(File, pk=pk) response = HttpResponse()
path = os.path.join(settings.CONFIG.storage.path, file.filepath) # HTTP headers must be USASCII encoded, or Nginx might not find the file and
return FileResponse(open(path, "rb"), content_type=file.mime) # will return a 404.
redirect_uri = filepath_to_uri(os.path.join("/api/_media", instance.filepath))
response["X-Accel-Redirect"] = redirect_uri
return response
def perform_destroy(self, instance: File):
if Schedule.is_file_scheduled_in_the_future(file_id=instance.id):
raise FileInUse("file is scheduled in the future")
try:
if instance.filepath is None:
logger.warning("file does not have a filepath: %d", instance.id)
return
path = os.path.join(settings.CONFIG.storage.path, instance.filepath)
if not os.path.isfile(path):
logger.warning("file does not exist in storage: %d", instance.id)
return
remove(path)
except OSError as exception:
raise APIException("could not delete file from storage") from exception

View File

@ -4,6 +4,7 @@ URL Configuration
For more information on this file, see For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/http/urls/ https://docs.djangoproject.com/en/3.2/topics/http/urls/
""" """
from django.urls import include, path from django.urls import include, path
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView

View File

@ -1,11 +1,11 @@
# Please do not edit this file, edit the setup.py file! # Please do not edit this file, edit the setup.py file!
# This file is auto-generated by tools/extract_requirements.py. # This file is auto-generated by tools/extract_requirements.py.
django-cors-headers>=3.14.0,<4.4 django-cors-headers>=3.14.0,<4.5
django-filter>=2.4.0,<23.6 django-filter>=2.4.0,<24.4
django>=4.2.0,<4.3 django>=4.2.0,<4.3
djangorestframework>=3.14.0,<3.15 djangorestframework>=3.14.0,<3.16
drf-spectacular>=0.22.1,<0.28 drf-spectacular>=0.22.1,<0.29
gunicorn>=20.1.0,<21.3 gunicorn>=22.0.0,<23.1
psycopg[c]>=3.1.8,<3.2 psycopg[c]>=3.1.8,<3.2
requests>=2.31.0,<2.32 requests>=2.32.2,<2.33
uvicorn[standard]>=0.17.6,<0.25.0 uvicorn[standard]>=0.17.6,<0.33.0

View File

@ -154,6 +154,15 @@ paths:
/api/v2/files: /api/v2/files:
get: get:
operationId: files_list operationId: files_list
parameters:
- in: query
name: genre
schema:
type: string
- in: query
name: md5
schema:
type: string
tags: tags:
- files - files
security: security:
@ -2552,6 +2561,12 @@ paths:
/api/v2/schedule: /api/v2/schedule:
get: get:
operationId: schedule_list operationId: schedule_list
description: |-
Overrides get_serializer_class to choose the read serializer
for GET requests and the write serializer for POST requests.
Set read_serializer_class and write_serializer_class attributes on a
viewset.
parameters: parameters:
- in: query - in: query
name: broadcasted name: broadcasted
@ -2597,23 +2612,29 @@ paths:
schema: schema:
type: array type: array
items: items:
$ref: "#/components/schemas/Schedule" $ref: "#/components/schemas/ReadSchedule"
description: "" description: ""
post: post:
operationId: schedule_create operationId: schedule_create
description: |-
Overrides get_serializer_class to choose the read serializer
for GET requests and the write serializer for POST requests.
Set read_serializer_class and write_serializer_class attributes on a
viewset.
tags: tags:
- schedule - schedule
requestBody: requestBody:
content: content:
application/json: application/json:
schema: schema:
$ref: "#/components/schemas/Schedule" $ref: "#/components/schemas/WriteSchedule"
application/x-www-form-urlencoded: application/x-www-form-urlencoded:
schema: schema:
$ref: "#/components/schemas/Schedule" $ref: "#/components/schemas/WriteSchedule"
multipart/form-data: multipart/form-data:
schema: schema:
$ref: "#/components/schemas/Schedule" $ref: "#/components/schemas/WriteSchedule"
required: true required: true
security: security:
- cookieAuth: [] - cookieAuth: []
@ -2623,11 +2644,17 @@ paths:
content: content:
application/json: application/json:
schema: schema:
$ref: "#/components/schemas/Schedule" $ref: "#/components/schemas/WriteSchedule"
description: "" description: ""
/api/v2/schedule/{id}: /api/v2/schedule/{id}:
get: get:
operationId: schedule_retrieve operationId: schedule_retrieve
description: |-
Overrides get_serializer_class to choose the read serializer
for GET requests and the write serializer for POST requests.
Set read_serializer_class and write_serializer_class attributes on a
viewset.
parameters: parameters:
- in: path - in: path
name: id name: id
@ -2645,10 +2672,16 @@ paths:
content: content:
application/json: application/json:
schema: schema:
$ref: "#/components/schemas/Schedule" $ref: "#/components/schemas/ReadSchedule"
description: "" description: ""
put: put:
operationId: schedule_update operationId: schedule_update
description: |-
Overrides get_serializer_class to choose the read serializer
for GET requests and the write serializer for POST requests.
Set read_serializer_class and write_serializer_class attributes on a
viewset.
parameters: parameters:
- in: path - in: path
name: id name: id
@ -2662,13 +2695,13 @@ paths:
content: content:
application/json: application/json:
schema: schema:
$ref: "#/components/schemas/Schedule" $ref: "#/components/schemas/ReadSchedule"
application/x-www-form-urlencoded: application/x-www-form-urlencoded:
schema: schema:
$ref: "#/components/schemas/Schedule" $ref: "#/components/schemas/ReadSchedule"
multipart/form-data: multipart/form-data:
schema: schema:
$ref: "#/components/schemas/Schedule" $ref: "#/components/schemas/ReadSchedule"
required: true required: true
security: security:
- cookieAuth: [] - cookieAuth: []
@ -2678,10 +2711,16 @@ paths:
content: content:
application/json: application/json:
schema: schema:
$ref: "#/components/schemas/Schedule" $ref: "#/components/schemas/ReadSchedule"
description: "" description: ""
patch: patch:
operationId: schedule_partial_update operationId: schedule_partial_update
description: |-
Overrides get_serializer_class to choose the read serializer
for GET requests and the write serializer for POST requests.
Set read_serializer_class and write_serializer_class attributes on a
viewset.
parameters: parameters:
- in: path - in: path
name: id name: id
@ -2695,13 +2734,13 @@ paths:
content: content:
application/json: application/json:
schema: schema:
$ref: "#/components/schemas/PatchedSchedule" $ref: "#/components/schemas/PatchedReadSchedule"
application/x-www-form-urlencoded: application/x-www-form-urlencoded:
schema: schema:
$ref: "#/components/schemas/PatchedSchedule" $ref: "#/components/schemas/PatchedReadSchedule"
multipart/form-data: multipart/form-data:
schema: schema:
$ref: "#/components/schemas/PatchedSchedule" $ref: "#/components/schemas/PatchedReadSchedule"
security: security:
- cookieAuth: [] - cookieAuth: []
- basicAuth: [] - basicAuth: []
@ -2710,10 +2749,16 @@ paths:
content: content:
application/json: application/json:
schema: schema:
$ref: "#/components/schemas/Schedule" $ref: "#/components/schemas/ReadSchedule"
description: "" description: ""
delete: delete:
operationId: schedule_destroy operationId: schedule_destroy
description: |-
Overrides get_serializer_class to choose the read serializer
for GET requests and the write serializer for POST requests.
Set read_serializer_class and write_serializer_class attributes on a
viewset.
parameters: parameters:
- in: path - in: path
name: id name: id
@ -6300,7 +6345,7 @@ components:
user: user:
type: integer type: integer
nullable: true nullable: true
PatchedSchedule: PatchedReadSchedule:
type: object type: object
properties: properties:
id: id:
@ -6409,6 +6454,16 @@ components:
type: boolean type: boolean
auto_playlist_repeat: auto_playlist_repeat:
type: boolean type: boolean
intro_playlist:
type: integer
nullable: true
override_intro_playlist:
type: boolean
outro_playlist:
type: integer
nullable: true
override_outro_playlist:
type: boolean
PatchedShowDays: PatchedShowDays:
type: object type: object
properties: properties:
@ -7086,41 +7141,7 @@ components:
- id - id
- key - key
- user - user
RecordEnabledEnum: ReadSchedule:
enum:
- 0
- 1
type: integer
description: |-
* `0` - No
* `1` - Yes
RepeatKindEnum:
enum:
- 0
- 1
- 4
- 5
- 2
type: integer
description: |-
* `0` - Every week
* `1` - Every 2 weeks
* `4` - Every 3 weeks
* `5` - Every 4 weeks
* `2` - Every month
RoleEnum:
enum:
- G
- H
- P
- A
type: string
description: |-
* `G` - Guest
* `H` - Host
* `P` - Manager
* `A` - Admin
Schedule:
type: object type: object
properties: properties:
id: id:
@ -7182,6 +7203,40 @@ components:
- instance - instance
- position - position
- starts_at - starts_at
RecordEnabledEnum:
enum:
- 0
- 1
type: integer
description: |-
* `0` - No
* `1` - Yes
RepeatKindEnum:
enum:
- 0
- 1
- 4
- 5
- 2
type: integer
description: |-
* `0` - Every week
* `1` - Every 2 weeks
* `4` - Every 3 weeks
* `5` - Every 4 weeks
* `2` - Every month
RoleEnum:
enum:
- G
- H
- P
- A
type: string
description: |-
* `G` - Guest
* `H` - Host
* `P` - Manager
* `A` - Admin
ServiceRegister: ServiceRegister:
type: object type: object
properties: properties:
@ -7241,6 +7296,16 @@ components:
type: boolean type: boolean
auto_playlist_repeat: auto_playlist_repeat:
type: boolean type: boolean
intro_playlist:
type: integer
nullable: true
override_intro_playlist:
type: boolean
outro_playlist:
type: integer
nullable: true
override_outro_playlist:
type: boolean
required: required:
- auto_playlist_enabled - auto_playlist_enabled
- auto_playlist_repeat - auto_playlist_repeat
@ -7249,6 +7314,8 @@ components:
- linked - linked
- live_enabled - live_enabled
- name - name
- override_intro_playlist
- override_outro_playlist
ShowDays: ShowDays:
type: object type: object
properties: properties:
@ -7535,10 +7602,19 @@ components:
message_offline: message_offline:
type: string type: string
readOnly: true readOnly: true
replay_gain_enabled:
type: boolean
readOnly: true
replay_gain_offset:
type: number
format: double
readOnly: true
required: required:
- input_fade_transition - input_fade_transition
- message_format - message_format
- message_offline - message_offline
- replay_gain_enabled
- replay_gain_offset
StreamState: StreamState:
type: object type: object
properties: properties:
@ -7764,6 +7840,66 @@ components:
* `4` - Friday * `4` - Friday
* `5` - Saturday * `5` - Saturday
* `6` - Sunday * `6` - Sunday
WriteSchedule:
type: object
properties:
id:
type: integer
readOnly: true
starts_at:
type: string
format: date-time
ends_at:
type: string
format: date-time
length:
type: string
nullable: true
fade_in:
type: string
format: time
nullable: true
fade_out:
type: string
format: time
nullable: true
cue_in:
type: string
cue_out:
type: string
position:
type: integer
maximum: 2147483647
minimum: -2147483648
position_status:
allOf:
- $ref: "#/components/schemas/PositionStatusEnum"
minimum: -32768
maximum: 32767
broadcasted:
type: integer
maximum: 32767
minimum: -32768
played:
type: boolean
nullable: true
instance:
type: integer
file:
type: integer
nullable: true
stream:
type: integer
nullable: true
required:
- broadcasted
- cue_in
- cue_out
- ends_at
- id
- instance
- position
- starts_at
securitySchemes: securitySchemes:
basicAuth: basicAuth:
type: http type: http

View File

@ -1,8 +1,10 @@
from setuptools import find_packages, setup from setuptools import find_packages, setup
version = "4.2.0" # x-release-please-version
setup( setup(
name="libretime-api", name="libretime-api",
version="3.2.0", version=version,
description="LibreTime API", description="LibreTime API",
author="LibreTime Contributors", author="LibreTime Contributors",
url="https://github.com/libretime/libretime", url="https://github.com/libretime/libretime",
@ -24,22 +26,22 @@ setup(
] ]
}, },
install_requires=[ install_requires=[
"django-cors-headers>=3.14.0,<4.4", "django-cors-headers>=3.14.0,<4.5",
"django-filter>=2.4.0,<23.6", "django-filter>=2.4.0,<24.4",
"django>=4.2.0,<4.3", "django>=4.2.0,<4.3",
"djangorestframework>=3.14.0,<3.15", "djangorestframework>=3.14.0,<3.16",
"drf-spectacular>=0.22.1,<0.28", "drf-spectacular>=0.22.1,<0.29",
"requests>=2.31.0,<2.32", "requests>=2.32.2,<2.33",
], ],
extras_require={ extras_require={
"prod": [ "prod": [
"gunicorn>=20.1.0,<21.3", "gunicorn>=22.0.0,<23.1",
"psycopg[c]>=3.1.8,<3.2", "psycopg[c]>=3.1.8,<3.2",
"uvicorn[standard]>=0.17.6,<0.25.0", "uvicorn[standard]>=0.17.6,<0.33.0",
], ],
"dev": [ "dev": [
"django-coverage-plugin>=3.0.0,<4", "django-coverage-plugin>=3.0.0,<4",
"django-stubs>=1.14.0,<5", "django-stubs>=5.1.0,<6",
"djangorestframework-stubs>=1.8.0,<4", "djangorestframework-stubs>=1.8.0,<4",
"model_bakery>=1.10.1,<2", "model_bakery>=1.10.1,<2",
"psycopg[binary]>=3.1.8,<4", "psycopg[binary]>=3.1.8,<4",

View File

@ -1,20 +1,10 @@
# Maintainer: Zachary Klosko (kloskoz@vcu.edu) #cloud-config
package_update: true
hostname: libretimeTest package_upgrade: true
timezone: America/New York # change as needed
ntp:
pools: ["north-america.pool.ntp.org"]
servers: ["0.north-america.pool.ntp.org", "0.pool.ntp.org"]
password: hackme
chpasswd: { expire: False }
packages: packages:
- git - git
apt_update: true
apt_upgrade: true
# Clone repo on init (Change repo url if needed)
# If you need to clone a branch, use git clone --branch branchname repourl
runcmd: runcmd:
- git clone https://github.com/libretime/libretime - git clone https://github.com/libretime/libretime /root/libretime
- cd /root/libretime
- HOME=/root bash install "http://$(ip route get 8.8.8.8 | awk '{print $7}'):8080"

View File

@ -2,8 +2,6 @@
# This file is used for development. It it not intended for production! # This file is used for development. It it not intended for production!
# See https://libretime.org/docs/developer-manual/development/environment/#docker-compose # See https://libretime.org/docs/developer-manual/development/environment/#docker-compose
# #
version: "3.9"
services: services:
postgres: postgres:
ports: ports:

View File

@ -1,5 +1,3 @@
version: "3.9"
services: services:
postgres: postgres:
image: postgres:15 image: postgres:15
@ -12,13 +10,13 @@ services:
test: pg_isready -U libretime test: pg_isready -U libretime
rabbitmq: rabbitmq:
image: rabbitmq:3.12-alpine image: rabbitmq:3.13-alpine
environment: environment:
RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_DEFAULT_VHOST:-/libretime} RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_DEFAULT_VHOST:-/libretime}
RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER:-libretime} RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER:-libretime}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS:-libretime} # Change me ! RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS:-libretime} # Change me !
healthcheck: healthcheck:
test: rabbitmq-diagnostics -q ping test: nc -z 127.0.0.1 5672
playout: playout:
image: ghcr.io/libretime/libretime-playout:${LIBRETIME_VERSION:-latest} image: ghcr.io/libretime/libretime-playout:${LIBRETIME_VERSION:-latest}
@ -31,7 +29,7 @@ services:
- ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
- libretime_playout:/app - libretime_playout:/app
environment: environment:
LIBRETIME_GENERAL_PUBLIC_URL: http://nginx LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080
liquidsoap: liquidsoap:
image: ghcr.io/libretime/libretime-playout:${LIBRETIME_VERSION:-latest} image: ghcr.io/libretime/libretime-playout:${LIBRETIME_VERSION:-latest}
@ -48,7 +46,7 @@ services:
- ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
- libretime_playout:/app - libretime_playout:/app
environment: environment:
LIBRETIME_GENERAL_PUBLIC_URL: http://nginx LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080
analyzer: analyzer:
image: ghcr.io/libretime/libretime-analyzer:${LIBRETIME_VERSION:-latest} image: ghcr.io/libretime/libretime-analyzer:${LIBRETIME_VERSION:-latest}
@ -61,7 +59,7 @@ services:
- ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
- libretime_storage:/srv/libretime - libretime_storage:/srv/libretime
environment: environment:
LIBRETIME_GENERAL_PUBLIC_URL: http://nginx LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080
worker: worker:
image: ghcr.io/libretime/libretime-worker:${LIBRETIME_VERSION:-latest} image: ghcr.io/libretime/libretime-worker:${LIBRETIME_VERSION:-latest}
@ -73,7 +71,7 @@ services:
volumes: volumes:
- ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro - ${LIBRETIME_CONFIG_FILEPATH:-./config.yml}:/etc/libretime/config.yml:ro
environment: environment:
LIBRETIME_GENERAL_PUBLIC_URL: http://nginx LIBRETIME_GENERAL_PUBLIC_URL: http://nginx:8080
api: api:
image: ghcr.io/libretime/libretime-api:${LIBRETIME_VERSION:-latest} image: ghcr.io/libretime/libretime-api:${LIBRETIME_VERSION:-latest}
@ -103,11 +101,12 @@ services:
nginx: nginx:
image: nginx image: nginx
ports: ports:
- 8080:80 - 8080:8080
depends_on: depends_on:
- legacy - legacy
volumes: volumes:
- libretime_assets:/var/www/html:ro - libretime_assets:/var/www/html:ro
- libretime_storage:/srv/libretime:ro
- ${NGINX_CONFIG_FILEPATH:-./nginx.conf}:/etc/nginx/conf.d/default.conf:ro - ${NGINX_CONFIG_FILEPATH:-./nginx.conf}:/etc/nginx/conf.d/default.conf:ro
icecast: icecast:

View File

@ -7,9 +7,8 @@ general:
# The internal API authentication key. # The internal API authentication key.
# > this field is REQUIRED # > this field is REQUIRED
api_key: api_key:
# The Django API secret key. If not defined, the value of [general.api_key] will be # The Django API secret key.
# used as fallback. # > this field is REQUIRED
# > this field will be REQUIRED starting with LibreTime 4.0.0
secret_key: secret_key:
# List of origins allowed to access resources on the server, the public url # List of origins allowed to access resources on the server, the public url
@ -32,7 +31,8 @@ general:
auth: local auth: local
storage: storage:
# Path of the storage directory. # Path of the storage directory. Make sure to update the Nginx configuration after
# updating the storage path.
# > default is /srv/libretime # > default is /srv/libretime
path: /srv/libretime path: /srv/libretime
@ -325,5 +325,9 @@ stream:
enabled: false enabled: false
# System output kind. # System output kind.
# > must be one of (alsa, ao, oss, portaudio, pulseaudio) # > must be one of (alsa, ao, oss, portaudio, pulseaudio)
# > default is alsa # > default is pulseaudio
kind: alsa kind: pulseaudio
# System output device.
# > only available for kind=(alsa, pulseaudio)
device:

View File

@ -7,9 +7,8 @@ general:
# The internal API authentication key. # The internal API authentication key.
# > this field is REQUIRED # > this field is REQUIRED
api_key: api_key:
# The Django API secret key. If not defined, the value of [general.api_key] will be # The Django API secret key.
# used as fallback. # > this field is REQUIRED
# > this field will be REQUIRED starting with LibreTime 4.0.0
secret_key: secret_key:
# List of origins allowed to access resources on the server, the public url # List of origins allowed to access resources on the server, the public url
@ -32,7 +31,8 @@ general:
auth: local auth: local
storage: storage:
# Path of the storage directory. # Path of the storage directory. Make sure to update the Nginx configuration after
# updating the storage path.
# > default is /srv/libretime # > default is /srv/libretime
path: /srv/libretime path: /srv/libretime
@ -325,5 +325,9 @@ stream:
enabled: false enabled: false
# System output kind. # System output kind.
# > must be one of (alsa, ao, oss, portaudio, pulseaudio) # > must be one of (alsa, ao, oss, portaudio, pulseaudio)
# > default is alsa # > default is pulseaudio
kind: alsa kind: pulseaudio
# System output device.
# > only available for kind=(alsa, pulseaudio)
device:

View File

@ -7,9 +7,8 @@ general:
# The internal API authentication key. # The internal API authentication key.
# > this field is REQUIRED # > this field is REQUIRED
api_key: some_secret_api_key api_key: some_secret_api_key
# The Django API secret key. If not defined, the value of [general.api_key] will be # The Django API secret key.
# used as fallback. # > this field is REQUIRED
# > this field will be REQUIRED starting with LibreTime 4.0.0
secret_key: secret_key:
# List of origins allowed to access resources on the server, the public url # List of origins allowed to access resources on the server, the public url
@ -32,7 +31,8 @@ general:
auth: local auth: local
storage: storage:
# Path of the storage directory. # Path of the storage directory. Make sure to update the Nginx configuration after
# updating the storage path.
# > default is /srv/libretime # > default is /srv/libretime
path: /srv/libretime path: /srv/libretime
@ -325,5 +325,9 @@ stream:
enabled: false enabled: false
# System output kind. # System output kind.
# > must be one of (alsa, ao, oss, portaudio, pulseaudio) # > must be one of (alsa, ao, oss, portaudio, pulseaudio)
# > default is alsa # > default is pulseaudio
kind: alsa kind: pulseaudio
# System output device.
# > only available for kind=(alsa, pulseaudio)
device:

View File

@ -1,6 +1,6 @@
server { server {
listen 80; listen 8080;
listen [::]:80; listen [::]:8080;
root /var/www/html/public; root /var/www/html/public;
@ -40,4 +40,11 @@ server {
proxy_redirect off; proxy_redirect off;
proxy_pass http://api:9001; proxy_pass http://api:9001;
} }
# Internal path for serving media files from the API.
location /api/_media {
internal;
# This alias path must match the 'storage.path' configuration field.
alias /srv/libretime;
}
} }

View File

@ -42,8 +42,8 @@ general:
# The internal API authentication key. # The internal API authentication key.
# > this field is REQUIRED # > this field is REQUIRED
api_key: "some_random_generated_secret!" api_key: "some_random_generated_secret!"
# The Django API secret key. If not defined, the value of [general.api_key] will be # The Django API secret key.
# used as fallback. # > this field is REQUIRED
secret_key: "some_random_generated_secret!" secret_key: "some_random_generated_secret!"
# List of origins allowed to access resources on the server, # List of origins allowed to access resources on the server,
@ -72,11 +72,32 @@ The `storage` section configure the project storage.
```yml ```yml
storage: storage:
# Path of the storage directory. # Path of the storage directory. Make sure to update the Nginx configuration after
# updating the storage path.
# > default is /srv/libretime # > default is /srv/libretime
path: "/srv/libretime" path: "/srv/libretime"
``` ```
:::caution
After editing the `storage.path` field, make sure to update the LibreTime Nginx configuration file with the new value.
In the example below, we are changing the path from `/srv/libretime` to `/mnt/data`:
```patch
...
# Internal path for serving media files from the API.
location /api/_media {
internal;
# This alias path must match the 'storage.path' configuration field.
- alias /srv/libretime;
+ alias /mnt/data;
}
```
:::
## Database ## Database
The `database` section configure the PostgreSQL connection. The `database` section configure the PostgreSQL connection.
@ -526,11 +547,15 @@ stream:
system: system:
- # Whether the output is enabled. - # Whether the output is enabled.
# > default is false # > default is false
enabled: false enabled: true
# System output kind. # System output kind.
# > must be one of (alsa, ao, oss, portaudio, pulseaudio) # > must be one of (alsa, ao, oss, portaudio, pulseaudio)
# > default is alsa # > default is pulseaudio
kind: "alsa" kind: "pulseaudio"
# System output device.
# > only available for kind=(alsa, pulseaudio)
device: "alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp__sink"
``` ```
## LDAP ## LDAP

View File

@ -50,7 +50,7 @@ check them against pam.
The above configuration expects a PAM configuration for the `http-libretime` service. The above configuration expects a PAM configuration for the `http-libretime` service.
To confiure this you need to create the file `/etc/pam.d/http-libretime` with the following contents. To configure this you need to create the file `/etc/pam.d/http-libretime` with the following contents.
``` ```
auth required pam_sss.so auth required pam_sss.so
@ -113,3 +113,68 @@ general:
``` ```
You should now be able to use your FreeIPA credentials to log in to LibreTime. You should now be able to use your FreeIPA credentials to log in to LibreTime.
## Setup Header Authentication
If you have an SSO system that supports trusted SSO header authentication such as [Authelia](https://www.authelia.com/),
you can configure LibreTime to login users based on those trusted headers.
This allows users to only need to log in once on the SSO system and not need to log in again. It also allows LibreTime
to indirectly support other authentication mechanisms such as OAuth2.
This ONLY affects Legacy/Legacy API auth and does NOT affect API V2 auth.
### Configure Headers
LibreTime needs to know what headers are sent, and what information is available to it. You can also
setup a predefined group mapping so users are automatically granted the desired permissions.
This configuration is in `/etc/libretime/config.yml`. The following is an example configuration for an SSO service
that does the following:
- Sends the username in the `Remote-User` HTTP header.
- Sends the email in the `Remote-Email` HTTP header.
- Sends the name in the `Remote-Name` HTTP header. Example `John Doe`
- Sends the comma delimited groups in the `Remote-Groups` HTTP header. Example `group 1,lt-admin,group2`
- Has an IP of `10.0.0.34` (not required). When not provided it is not checked.
- Users with the `lt-host` group should get host privileges.
- Users with the `lt-admin` group should get admin privileges.
- Users with the `lt-pm` group should get program manager privileges.
- Users with the `lt-superadmin` group should get super admin privileges.
- All other users should get guest privileges.
```yml
header_auth:
user_header: Remote-User # This is the default and could be omitted
groups_header: Remote-Groups # This is the default and could be omitted
email_header: Remote-Email # This is the default and could be omitted
name_header: Remote-Name # This is the default and could be omitted
proxy_ip: 10.0.0.34
group_map:
host: lt-host
program_manager: lt-pm
admin: lt-admin
superadmin: lt-superadmin
```
If the `user_header` is not found in the request, users will be kicked to the login page
with a message that their username/password is invalid and will not be able to log in. When `proxy_ip` is provided
it will check that the request is coming from the correct proxy before doing the login. This prevents users who have
internal network access from being able to login as whoever they want in LibreTime.
::: warning
If `proxy_ip` is not provided any user on the internal network can log in as any user in LibreTime.
:::
### Enable Header authentication
After everything is set up properly you can enable header auth in `config.yml`:
```yml
general:
auth: LibreTime_Auth_Adaptor_Header
```
You should now be automatically logged into LibreTime when you click the `Login` button.

View File

@ -22,7 +22,7 @@ First, set the version you want to install:
echo LIBRETIME_VERSION="{vars.version}" > .env echo LIBRETIME_VERSION="{vars.version}" > .env
</CodeBlock> </CodeBlock>
Download the docker-compose files from the repository: Download the docker compose files from the repository:
```bash ```bash
# Load LIBRETIME_VERSION variable # Load LIBRETIME_VERSION variable
@ -106,16 +106,16 @@ You can find more details in the `docker-compose.yml` file or on the external se
Next, run the following commands to setup the database: Next, run the following commands to setup the database:
```bash ```bash
docker-compose run --rm api libretime-api migrate docker compose run --rm api libretime-api migrate
``` ```
Finally, start the services, and check that they're running using the following commands: Finally, start the services, and check that they're running using the following commands:
```bash ```bash
docker-compose up -d docker compose up -d
docker-compose ps docker compose ps
docker-compose logs -f docker compose logs -f
``` ```
## Securing LibreTime ## Securing LibreTime

View File

@ -117,12 +117,12 @@ git checkout {vars.version}
## Run the installer ## Run the installer
By default the installer will configure LibreTime to listen at the port `80`, but this isn't the recommended way to install LibreTime. Instead you should configure a [reverse proxy in front of LibreTime](./reverse-proxy.md) to secure the connection using HTTPS, and route the traffic to the LibreTime server. By default the installer will configure LibreTime to listen at the port `8080`. We recommend that you configure a [reverse proxy in front of LibreTime](./reverse-proxy.md) to secure the connection using HTTPS, and route the traffic from the ports `80`/`443` to the LibreTime server.
Install LibreTime with the following command, be sure to replace `https://libretime.example.org` with the public url of your installation: Install LibreTime with the following command, be sure to replace `https://libretime.example.org` with the public url of your installation:
```bash ```bash
sudo ./install --listen-port 8080 https://libretime.example.org sudo ./install https://libretime.example.org
``` ```
:::caution :::caution
@ -131,23 +131,17 @@ When upgrading be sure to run the installer using the same arguments you used du
::: :::
:::warning
To update the LibreTime nginx configuration file, for example to change the `--listen-port`, make sure to add the `--update-nginx` flag to allow overwriting the existing configuration file.
:::
If you need to change some configuration, the install script can be configured using flags or environment variables. Changing the listening port of LibreTime or whether you want to install some dependency by yourself, you could run the following: If you need to change some configuration, the install script can be configured using flags or environment variables. Changing the listening port of LibreTime or whether you want to install some dependency by yourself, you could run the following:
```bash ```bash
# Install LibreTime on your system with the following tweaks: # Install LibreTime on your system with the following tweaks:
# - don't install the liquidsoap package (remember to install liquidsoap yourself) # - don't install the liquidsoap package (remember to install liquidsoap yourself)
# - set the listen port to 8080 # - set the listen port to 8081
# - don't run the PostgreSQL setup (remember to setup PostgreSQL yourself) # - don't run the PostgreSQL setup (remember to setup PostgreSQL yourself)
sudo \ sudo \
LIBRETIME_PACKAGES_EXCLUDES='liquidsoap' \ LIBRETIME_PACKAGES_EXCLUDES='liquidsoap' \
./install \ ./install \
--listen-port 8080 \ --listen-port 8081 \
--no-setup-postgresql \ --no-setup-postgresql \
https://libretime.example.org https://libretime.example.org
``` ```
@ -156,7 +150,7 @@ You can persist the install configuration in a `.env` file next to the install s
``` ```
LIBRETIME_PACKAGES_EXCLUDES='liquidsoap' LIBRETIME_PACKAGES_EXCLUDES='liquidsoap'
LIBRETIME_LISTEN_PORT='8080' LIBRETIME_LISTEN_PORT='8081'
LIBRETIME_SETUP_POSTGRESQL=false LIBRETIME_SETUP_POSTGRESQL=false
LIBRETIME_PUBLIC_URL='https://libretime.example.org' LIBRETIME_PUBLIC_URL='https://libretime.example.org'
``` ```
@ -236,6 +230,9 @@ server {
server_name libretime.example.org; server_name libretime.example.org;
client_max_body_size 512M;
client_body_timeout 300s;
location / { location / {
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;

View File

@ -36,12 +36,6 @@ flowchart LR
:::warning :::warning
By default, the installer configures nginx to listen on port 80, so you need to run the installer with the `--listen-port 8080` option to set the desired port.
:::
:::warning
The current input and output streams are Icecast based protocols and doesn't support being behind a reverse proxy. **Don't attempt** to [reverse proxy Icecast](#icecast) or the Liquidsoap harbor inputs. The current input and output streams are Icecast based protocols and doesn't support being behind a reverse proxy. **Don't attempt** to [reverse proxy Icecast](#icecast) or the Liquidsoap harbor inputs.
You can [secure the Icecast output streams](#securing-the-icecast-output-streams) by adding an additional Icecast socket and reusing the TLS certificates used to secure LibreTime. You can [secure the Icecast output streams](#securing-the-icecast-output-streams) by adding an additional Icecast socket and reusing the TLS certificates used to secure LibreTime.
@ -58,8 +52,6 @@ In this documentation, we will use `libretime.example.org` as domain name pointi
::: :::
If LibreTime is running on the same host as the reverse proxy, you need to change the LibreTime web server default listening port because the reverse proxy needs to listen on the `80`and `443` ports.
Be sure that your firewall and network allows communications from the reverse proxy to the services. You can use `ping`, `telnet` and `curl` to check that communication is working. Be sure that your firewall and network allows communications from the reverse proxy to the services. You can use `ping`, `telnet` and `curl` to check that communication is working.
## Install a reverse proxy ## Install a reverse proxy
@ -84,6 +76,9 @@ server {
listen 80; listen 80;
server_name libretime.example.org; server_name libretime.example.org;
client_max_body_size 512M;
client_body_timeout 300s;
location / { location / {
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
@ -132,6 +127,9 @@ server {
listen 80; listen 80;
server_name libretime.example.org; server_name libretime.example.org;
client_max_body_size 512M;
client_body_timeout 300s;
if ($host = libretime.example.org) { if ($host = libretime.example.org) {
return 301 https://$host$request_uri; return 301 https://$host$request_uri;
} # managed by Certbot } # managed by Certbot
@ -143,6 +141,9 @@ server {
listen 443 ssl; # managed by Certbot listen 443 ssl; # managed by Certbot
server_name libretime.example.org; server_name libretime.example.org;
client_max_body_size 512M;
client_body_timeout 300s;
ssl_certificate /etc/letsencrypt/live/libretime.example.org/fullchain.pem; # managed by Certbot ssl_certificate /etc/letsencrypt/live/libretime.example.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/libretime.example.org/privkey.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/libretime.example.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

View File

@ -17,6 +17,12 @@ Setting a higher bitrate for your output stream will only benefit your listeners
::: :::
:::caution
The liquidsoap playout handler version 1.4.3 shipped in Debian Bullseye and 1.4.1 shipped in Ubuntu Focal doesn't support AAC streaming output. If you want to stream AAC, you will need to replace the liquidsoap package with a version that supports AAC. See this [tutorial](./tutorials/setup-liquidsoap-aac-streaming.md) for more information.
:::
## Icecast ## Icecast
### UTF-8 metadata in Icecast MP3 streams ### UTF-8 metadata in Icecast MP3 streams

View File

@ -0,0 +1,63 @@
---
title: How to update liquidsoap to support AAC streaming
---
This tutorials walks you though the steps required to replace the liquidsoap package with a version that supports AAC streaming.
:::warning
Replacing the liquidsoap package has security implications, since this will remove the package from the system's package manager. This means that the package manager will not be able to update the liquidsoap package in the future. This includes backports of security fixes.
Libretime is NOT compatible with Liquidsoap 2.x at the time of this writing. Future versions of Libretime will support Liquidsoap 2.x which will render these instructions obsolete.
:::
:::info
Lets assume you already [installed LibreTime using the native OS installer](../install/install-using-the-installer.md). Execute the following commands as the libretime user.
:::
## 1. Obtain liquidsoap with AAC support
For Ubuntu 20.04 LTS ('focal'), use the following file:
```bash
wget https://github.com/savonet/liquidsoap/releases/download/v1.4.4/liquidsoap-v1.4.4_1.4.4-ubuntu-focal-amd64-1_amd64.deb
```
For Debian 11 ('Bullseye'), first enable non-free package source for libfdk-aac support:
```bash
sudo apt install software-properties-common
sudo apt-add-repository -c non-free
```
Then use the following file:
```bash
wget https://github.com/savonet/liquidsoap/releases/download/v1.4.4/liquidsoap-v1.4.4_1.4.4-debian-testing-amd64-1_amd64.deb
```
## 2. Install and replace the liquidsoap package
Install the package using `apt`, then remove the old liquidsoap dependencies:
```bash
sudo apt -y install ./liquidsoap-v1.4.4_1.4.4-*-amd64-1_amd64.deb
sudo apt -y autoremove
```
## 3. Configure LibreTime to use the new liquidsoap package
Nothing to do, this is a drop-in replacement. Just restart the libretime target once and then check the status page in the LibreTime web interface to see if the liquidsoap service is running.
```bash
sudo systemctl restart libretime.target
```
:::warning
If you want to update LibreTime in the future, you'll need to re-run the installer schript. This will replace the liquidsoap package with the version that doesn't support AAC streaming. Add `--packages-excludes liquidsoap` to the installer command to prevent this from happening.
:::

View File

@ -54,7 +54,7 @@ liable to legal action.
If you want to go down the commercial music route, check out the If you want to go down the commercial music route, check out the
https://www.prsformusic.com and https://www.ppluk.com websites for UK licence https://www.prsformusic.com and https://www.ppluk.com websites for UK licence
details. In the USA, the https://www.soundexchange.com website currently quotes details. In the USA, the https://www.soundexchange.com website currently quotes
a 500 dollar minimum annual fee for non-commercial webcasters, plus a usage fee a 1000 (per Jan. 2024) dollar minimum annual fee for non-commercial webcasters, plus a usage fee
above a certain number of listener hours, for the right to stream music above a certain number of listener hours, for the right to stream music
recordings to listeners. See the websites of [ASCAP](https://www.ascap.com), recordings to listeners. See the websites of [ASCAP](https://www.ascap.com),
[BMI](https://www.bmi.com) and [SESAC](https://www.sesac.com) for details of music [BMI](https://www.bmi.com) and [SESAC](https://www.sesac.com) for details of music

View File

@ -13,8 +13,8 @@ LibreTime development workflows follow the standardized [C4 development process]
- [2.4. Development Process](https://rfc.zeromq.org/spec/42/#24-development-process) - [2.4. Development Process](https://rfc.zeromq.org/spec/42/#24-development-process)
- `16.` Maintainers MAY NOT merge incorrect patches. - `16.` Maintainers MAY NOT merge incorrect patches.
- [2.5. Branches and Releases](https://rfc.zeromq.org/spec/42/#25-branches-and-releases) - [2.5. Branches and Releases](https://rfc.zeromq.org/spec/42/#25-branches-and-releases)
- `1.` The project SHALL have a development branch (`main`) that always holds the latest in-progress version and SHOULD always build. The project MAY have a bug fixes only branch (`stable`) that always holds the current stable version and SHOULD always build. - `1.` The project SHALL have a development branch (`main`) that always holds the latest in-progress version and SHOULD always build. The project MAY have a bug fixes only branch (`stable-*`) that always holds the current stable version and SHOULD always build.
- `3.` To make a stable release a Maintainer shall tag the repository. Stable releases SHALL always be released from the repository `main` or `stable` branches. - `3.` To make a stable release a Maintainer shall tag the repository. Stable releases SHALL always be released from the repository `main` or `stable-*` branches.
## Contribute financially ## Contribute financially

View File

@ -14,16 +14,16 @@ To setup a docker-compose development environment, run the following commands:
# Clean and build # Clean and build
make clean make clean
cp .env.dev .env cp .env.dev .env
DOCKER_BUILDKIT=1 docker-compose build DOCKER_BUILDKIT=1 docker compose build
# Setup # Setup
make dev-certs make dev-certs
docker-compose run --rm legacy make build docker compose run --rm legacy make build
docker-compose run --rm api libretime-api migrate docker compose run --rm api libretime-api migrate
# Run # Run
docker-compose up -d docker compose up -d
docker-compose logs -f docker compose logs -f
``` ```
:::info :::info
@ -33,7 +33,7 @@ You may also use the following `make clean dev` shortcut:
```bash ```bash
make clean dev make clean dev
docker-compose logs -f docker compose logs -f
``` ```
::: :::

View File

@ -7,7 +7,7 @@ title: Development workflows
LibreTime uses [Github pull requests to manage changes](https://docs.github.com/en/get-started/quickstart/contributing-to-projects). The workflow looks like this: LibreTime uses [Github pull requests to manage changes](https://docs.github.com/en/get-started/quickstart/contributing-to-projects). The workflow looks like this:
- [Create a fork of the project](https://docs.github.com/en/get-started/quickstart/fork-a-repo). - [Create a fork of the project](https://docs.github.com/en/get-started/quickstart/fork-a-repo).
- Check out the `main` branch. If you're making a minor or small documentation change you can check out the `stable` branch. - Check out the `main` branch.
- Create a new branch based on the checked out branch. - Create a new branch based on the checked out branch.
- Work on your changes locally. Try to keep each commit small to make reviews easier. - Work on your changes locally. Try to keep each commit small to make reviews easier.
- Lint and test the codebase, for example using the `make lint` or `make test` commands inside the app folder you want to check. - Lint and test the codebase, for example using the `make lint` or `make test` commands inside the app folder you want to check.

View File

@ -6,47 +6,17 @@ title: Releases
This guide walks you through the steps required to release a new version of LibreTime. This guide walks you through the steps required to release a new version of LibreTime.
:::caution ### 1. Inspect the release pull request
This guide is still a work in progress, and doesn't cover every use cases. Depending on A release pull request is maintained by [`release-please`](https://github.com/googleapis/release-please). `release-please` guesses the next version to release based on the commit history, and will generate a changelog for that release.
the version bump, some steps might be wrong. For example, in case of a patch release,
the documentation requires different changes.
::: Once a release is desired, checkout the release branch:
Before releasing a new version, make sure linter don't fail and tests are passing.
Start by cleaning the repository and make sure you don't have uncommitted changes:
```
git checkout main
make clean
git status
```
Choose the next version based the our [versioning schema](#versioning-schema):
```bash ```bash
export VERSION=3.0.0-beta.0 # For a release on the main branch
``` git checkout release-please--branches--main--components--libretime
# For a release on the stable-4.x branch
Create a new `release-$VERSION` branch and release commit to prepare a release pull request: git checkout release-please--branches--stable-4.x--components--libretime
```bash
git checkout -b "release-$VERSION"
export COMMIT_MESSAGE="chore: release $VERSION"
git commit --allow-empty --message="$COMMIT_MESSAGE"
```
### 1. Version bump
Write the new `$VERSION` to the VERSION file, and bump the python packages version:
```bash
bash tools/bump-python-version.sh "$VERSION"
git add .
git commit --fixup ":/$COMMIT_MESSAGE"
``` ```
### 2. Release note ### 2. Release note
@ -72,48 +42,16 @@ Reset and clean the `docs/releases/unreleased.md` file for a future version.
Commit the release note changes: Commit the release note changes:
```bash ```bash
git add . git add docs/releases
git commit --fixup ":/$COMMIT_MESSAGE" git commit -m "docs: add release note"
``` ```
### 3. Create a new pull request ### 4. Merge the release pull request
Squash the changes and open a pull request for others to review: Push any changes that we previously made to the release branch:
```bash ```bash
git rebase --autosquash --interactive main git push
``` ```
Merge the pull request when it's reviewed and ready. Once the pull request CI succeeded and everything is ready, merge the release pull request. `release-please` will create a tag and a release, which will trigger the final release pipeline that will upload the tarball as release assets.
### 4. Create and push a tag
Pull the merged release commit:
```bash
git checkout main
git pull upstream main
```
Make sure `HEAD` is the previously merged release commit and tag it with the new version:
```bash
git show --quiet
git tag -a -m "$VERSION" "$VERSION"
```
Generate the changelog for the newly tagged version:
```bash
make changelog
git add .
git commit -m "chore: generate changelog for $VERSION"
```
Push the tag upstream to finalize the release process:
```bash
git push upstream main --follow-tags
```

View File

@ -1,5 +1,5 @@
--- ---
title: Unreleased title: LibreTime 3.2.0
--- ---
import ReleaseHead from './\_release-head.md'; import ReleaseHead from './\_release-head.md';

65
docs/releases/4.0.0.md Normal file
View File

@ -0,0 +1,65 @@
---
title: LibreTime 4.0.0
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date='2024-01-07' version='4.0.0'/>
## :sparkling_heart: Contributors
The LibreTime project wants to thank the following contributors for authoring PRs to this release:
- @jooola
- @maxtimbo
- @mp3butcher
## :rocket: Features
- default system output is now `pulseaudio` ([#2842](https://github.com/libretime/libretime/issues/2842)) ([083ee3f](https://github.com/libretime/libretime/commit/083ee3f1dd74441e288b4d63178ae9cea12ba286)), closes [#2542](https://github.com/libretime/libretime/issues/2542)
- disable uvicorn worker lifespan ([#2845](https://github.com/libretime/libretime/issues/2845)) ([8743c84](https://github.com/libretime/libretime/commit/8743c84d0f007a5430e9059c197a261e613cc642))
- **installer:** add the `--storage-path` flag ([#2865](https://github.com/libretime/libretime/issues/2865)) ([5b23852](https://github.com/libretime/libretime/commit/5b23852f8d144f0c7cdeb62831f7b1a27872b40e))
- **installer:** change default listen port to 8080 ([#2852](https://github.com/libretime/libretime/issues/2852)) ([f72b7f9](https://github.com/libretime/libretime/commit/f72b7f9c9727800a9d77d64c540c12f272bb0ae3))
- **installer:** remove the `--update-nginx` flag ([#2851](https://github.com/libretime/libretime/issues/2851)) ([35d7eac](https://github.com/libretime/libretime/commit/35d7eace13c2b9667fdb41fec0788118e0c5e63f))
- **playout:** configure device for alsa and pulseaudio system outputs ([#2654](https://github.com/libretime/libretime/issues/2654)) ([06af18b](https://github.com/libretime/libretime/commit/06af18b84e7dfaad95e3b55dda22ec1ddad27050))
- rewrite cloud-init config ([#2853](https://github.com/libretime/libretime/issues/2853)) ([8406d52](https://github.com/libretime/libretime/commit/8406d520d7a7bea4060be8a00e360bcf413cb2d5))
- run python in optimized mode ([#2874](https://github.com/libretime/libretime/issues/2874)) ([3f7fc99](https://github.com/libretime/libretime/commit/3f7fc99b6b343fbc8df319d8130ba8247aea96d8))
- the `general.secret_key` configuration field is now required ([#2841](https://github.com/libretime/libretime/issues/2841)) ([0d2d1a2](https://github.com/libretime/libretime/commit/0d2d1a26731a2b41ce5e574ed6de9950eaae4153)), closes [#2426](https://github.com/libretime/libretime/issues/2426)
- use nginx to serve media files ([#2860](https://github.com/libretime/libretime/issues/2860)) ([4603c17](https://github.com/libretime/libretime/commit/4603c1759f29b8a1adb3e83d610ca00e778d76bd))
## :bug: Bug fixes
- add parent function name in setValue exception ([#2777](https://github.com/libretime/libretime/issues/2777)) ([c764a5a](https://github.com/libretime/libretime/commit/c764a5a648ac6cf6c1f63cd9be6de9fe07c40988))
- **api:** ensure non ascii paths are handled by X-Accel-Redirect ([#2861](https://github.com/libretime/libretime/issues/2861)) ([0ce63f3](https://github.com/libretime/libretime/commit/0ce63f3bf0448580170024cdde96ee351ee5c358))
- **api:** enum schema description ([#2803](https://github.com/libretime/libretime/issues/2803)) ([976b70e](https://github.com/libretime/libretime/commit/976b70ed32a0e774cc0b72b8332372be32799ed1))
- **api:** let nginx handle the media file content type ([#2862](https://github.com/libretime/libretime/issues/2862)) ([72268ad](https://github.com/libretime/libretime/commit/72268ad9bb1a96b24efda7143b9371d6fd98ca03))
- **api:** move gunicorn worker config to python file ([#2854](https://github.com/libretime/libretime/issues/2854)) ([43221d9](https://github.com/libretime/libretime/commit/43221d9d7f34ba98a14db9906e350cb494a86b25))
- **api:** paths with question marks chars are handled by X-Accel-Redirect ([#2875](https://github.com/libretime/libretime/issues/2875)) ([b2c1ceb](https://github.com/libretime/libretime/commit/b2c1ceb89fafc76f18ec650d19ec0ff03e4a20b0))
- **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.42.1 (main) ([#2765](https://github.com/libretime/libretime/issues/2765)) ([8ae4dce](https://github.com/libretime/libretime/commit/8ae4dce9e7c013c1f66f1b4d5da4a8c91d3419b7))
- **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.43.2 (main) ([#2848](https://github.com/libretime/libretime/issues/2848)) ([62e5f4d](https://github.com/libretime/libretime/commit/62e5f4dfbb76ab1919c4905570cc34274c685cef))
- **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.45.1 (main) ([#2855](https://github.com/libretime/libretime/issues/2855)) ([6f84328](https://github.com/libretime/libretime/commit/6f8432838058be6ef1cfa7858f17b8272929896e))
- **deps:** update dependency friendsofphp/php-cs-fixer to &lt;3.46.1 (main) ([#2868](https://github.com/libretime/libretime/issues/2868)) ([4827dbc](https://github.com/libretime/libretime/commit/4827dbce711262e90238bb3b6c0a35b1ce3d6877))
- **legacy:** allow uploading opus files ([#2804](https://github.com/libretime/libretime/issues/2804)) ([f252a16](https://github.com/libretime/libretime/commit/f252a16637e113ceb1dd340fb7aad31af9c23ff0))
- **legacy:** declare previously undeclared variable ([#2793](https://github.com/libretime/libretime/issues/2793)) ([e2cfbf4](https://github.com/libretime/libretime/commit/e2cfbf4c038f28874a206df5805f04f69a40647b))
- **legacy:** ensure last played criteria works with never played files ([#2840](https://github.com/libretime/libretime/issues/2840)) ([24ee383](https://github.com/libretime/libretime/commit/24ee3830c23f7147f82febe3d3c6743d5ae8d4e6))
- **playout:** increase file download chunk size to 8192 bytes ([#2863](https://github.com/libretime/libretime/issues/2863)) ([7ed1be1](https://github.com/libretime/libretime/commit/7ed1be1816abef20b9ae59a8c66a9e48a34f37c5))
- **playout:** remove empty file when the download request failed ([#2864](https://github.com/libretime/libretime/issues/2864)) ([2facbfa](https://github.com/libretime/libretime/commit/2facbfaff23d4df0e7531b82f04f932bb2c4c9a4))
- **worker:** unbound variable when episode url returns HTTP 404 ([#2844](https://github.com/libretime/libretime/issues/2844)) ([3f39689](https://github.com/libretime/libretime/commit/3f396895e588e62183e01d17927d9bdbea512ee0))
## :arrow_up: Upgrading
### Installer changes
The installer received a few breaking changes:
- The default listen port for the installer is now `8080`. We recommend that you put a reverse proxy in front of LibreTime with your customizations.
- The `--update-nginx` flag was removed from the installer. The nginx configuration deployed by the installer will now always be overwritten. Again, we recommend that you put a reverse proxy in front of LibreTime with your customizations.
- The media file serving is now handled by Nginx instead of the API service. The configuration `storage.path` field is now used in the Nginx configuration, so make sure that the Nginx configuration file has the right storage path. To update the Nginx configuration file with the installer, you can use the `--storage-path` option to specify your custom storage path.
### The `general.secret_key` configuration field is required
The `general.secret_key` field in the [configuration file](../admin-manual/configuration.md#general) is now **required**, to prevent reusing the `general.api_key` for cryptographic usage.
### The `stream.outputs.system[].kind` configuration field now defaults to `pulseaudio`
The `stream.outputs.system[].kind` field in the [configuration file](../admin-manual/configuration.md#general) default value changed from `alsa` to `pulseaudio`. Make sure to update your configuration file if you rely on the default system output.

31
docs/releases/4.1.0.md Normal file
View File

@ -0,0 +1,31 @@
---
title: LibreTime 4.1.0
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date='2024-05-05' version='4.1.0'/>
## :sparkling_heart: Contributors
The LibreTime project wants to thank the following contributors for authoring PRs to this release:
- @caveman99
- @jooola
- @kmahelona
- @mp3butcher
- @paddatrapper
## :rocket: Features
Please see the [changelog](https://github.com/libretime/libretime/blob/main/CHANGELOG.md#410-2024-05-05).
## :bug: Bug fixes
Please see the [changelog](https://github.com/libretime/libretime/blob/main/CHANGELOG.md#410-2024-05-05).
## :arrow_up: Upgrading
### Replay gain modifier preference
The `replay_gain_modifier` preference is now stored as system preference. Please check and save the replay gain modifier preference manually to make sure the preference is up to date and usable.

25
docs/releases/4.2.0.md Normal file
View File

@ -0,0 +1,25 @@
---
title: LibreTime 4.2.0
---
import ReleaseHead from './\_release-head.md';
<ReleaseHead date='2024-06-22' version='4.2.0'/>
## :sparkling_heart: Contributors
The LibreTime project wants to thank the following contributors for authoring PRs to this release:
- @conet
- @dakriy
- @jooola
- @paddatrapper
- @rjhelms
## :rocket: Features
Please see the [changelog](https://github.com/libretime/libretime/blob/main/CHANGELOG.md#420-2024-06-22).
## :bug: Bug fixes
Please see the [changelog](https://github.com/libretime/libretime/blob/main/CHANGELOG.md#420-2024-06-22).

View File

@ -30,3 +30,4 @@ New releases target the current stable distributions release, and development sh
| Versions | | | | | | Versions | | | | |
| 3.0.x | deprecated | deprecated | recommended | recommended | | 3.0.x | deprecated | deprecated | recommended | recommended |
| 3.1.x | | | recommended | recommended | | 3.1.x | | | recommended | recommended |
| 4.0.x | | | recommended | recommended |

View File

@ -12,8 +12,12 @@ The LibreTime project wants to thank the following contributors for authoring PR
## :rocket: Features ## :rocket: Features
Please see the [changelog](https://github.com/libretime/libretime/blob/main/CHANGELOG.md).
## :bug: Bug fixes ## :bug: Bug fixes
Please see the [changelog](https://github.com/libretime/libretime/blob/main/CHANGELOG.md).
## :fire: Deprecation and removal ## :fire: Deprecation and removal
## :arrow_up: Before upgrading ## :arrow_up: Before upgrading

View File

@ -37,6 +37,7 @@ Smart blocks are automatically filled with media files from the LibreTime librar
To create a smart block, click the **Smartblocks** button on the left sidebar, and select **New** from the toolbar. Like a playlist, smart blocks can have a title and description, which you can edit. This helps you find relevant smart blocks in searches. To create a smart block, click the **Smartblocks** button on the left sidebar, and select **New** from the toolbar. Like a playlist, smart blocks can have a title and description, which you can edit. This helps you find relevant smart blocks in searches.
Fill out the smart block's **Name**, **Search Criteria**, and **Limit to** sections. The search criteria can be any one of LibreTime's metadata categories, such as **Title**, **Creator** or **Genre**. The modifier depends on whether the metadata in question contains letters or numbers. For example, **Title** has modifiers including _contains_ and _starts with_, whereas the modifiers for **BPM** include _is greater than_ and _is in the range_. Fill out the smart block's **Name**, **Search Criteria**, and **Limit to** sections. The search criteria can be any one of LibreTime's metadata categories, such as **Title**, **Creator** or **Genre**. The modifier depends on whether the metadata in question contains letters or numbers. For example, **Title** has modifiers including _contains_ and _starts with_, whereas the modifiers for **BPM** include _is greater than_ and _is in the range_.
To filter tracks using today's date information, use the `now{}` macro. Format characters are listed in the [php documentation](https://www.php.net/manual/en/datetime.format.php). For example, to filter to tracks with a **Title** that ends in `Instrumental Jan 2024` where `Jan 2024` is the current month and year, add a criteria for **Title** with a modifier of **ends with** and a value of `Instrumental now{M Y}`.
If you have a large number of files which meet the criteria that you specify, you may wish to limit the duration of the smart block using the **Limit to** field, so that it fits within the show you have in mind. Select **hours**, **minutes** or **items** from the drop-down menu, and click the **Generate** button again, if it's a static smart block. Then click the **Save** button. If you have a large number of files which meet the criteria that you specify, you may wish to limit the duration of the smart block using the **Limit to** field, so that it fits within the show you have in mind. Select **hours**, **minutes** or **items** from the drop-down menu, and click the **Generate** button again, if it's a static smart block. Then click the **Save** button.

View File

@ -79,6 +79,8 @@ indicator.
| Add Autoloading Playlist? | If checked, allows for the following options | | Add Autoloading Playlist? | If checked, allows for the following options |
| Select Playlist | Select the playlist the show will autofill from (shows autofill exactly one hour before air). If you wish to use a smartblock you must add it to a playlist and then select that playlist. This can be used to auto schedule new podcast episodes to air. | | Select Playlist | Select the playlist the show will autofill from (shows autofill exactly one hour before air). If you wish to use a smartblock you must add it to a playlist and then select that playlist. This can be used to auto schedule new podcast episodes to air. |
| Repeat Playlist Until Show Is Full | If checked, the playlist will be added to the show multiple times until the slot is full. Useful for applying a one-hour music playlist made up of smartblocks to a two-hour show. | | Repeat Playlist Until Show Is Full | If checked, the playlist will be added to the show multiple times until the slot is full. Useful for applying a one-hour music playlist made up of smartblocks to a two-hour show. |
| Select Intro Playlist | Select the playlist to replace the global intro playlist from settings. If you wish to use a smartblock you must add it to a playlist and then select that playlist. |
| Select Outro Playlist | Select the playlist to replace the global outro playlist from settings. If you wish to use a smartblock you must add it to a playlist and then select that playlist. |
| _Live Stream Input_ | | | _Live Stream Input_ | |
| Use LibreTime/Custom Authentication | | | Use LibreTime/Custom Authentication | |
| Show Source | | | Show Source | |

View File

@ -21,6 +21,12 @@ time for the convenience of your station staff. You can also set the day of the
week that you wish to start your station's weekly schedule on, which defaults week that you wish to start your station's weekly schedule on, which defaults
to Sunday. to Sunday.
:::note
The **Station Timezone** setting can not be modified on this page. It is set in the [configuration file](../admin-manual/configuration.md#general).
:::
The **Track Type Default** enables you to select a track type default for uploads. The **Track Type Default** enables you to select a track type default for uploads.
Initially, the **Default Fade In** and **Default Fade Out** times for automated Initially, the **Default Fade In** and **Default Fade Out** times for automated
@ -60,15 +66,20 @@ wish. (There is more about this feature in the
[_Exporting the schedule_](./playout-history.md) chapter, in the [_Exporting the schedule_](./playout-history.md) chapter, in the
_Advanced Configuration_ section of this book). _Advanced Configuration_ section of this book).
The **Allowed CORS URLs** is intended to deal with situations where you want a :::note
remote site with a different domain to access the API. This is relevant when
there is a reverse proxy server in front of LibreTime. If you are using a The **Allowed CORS URLs** you can still see in this screenshot was moved to the [configuration file](../admin-manual/configuration.md#general).
reverse proxy, the URLs that will be used to access it should be added here.
:::
The **Display login button on your Radio Page?** will determine whether visitors The **Display login button on your Radio Page?** will determine whether visitors
to your site see a link to login. If this is disabled, DJs and admins will need to your site see a link to login. If this is disabled, DJs and admins will need
to goto http://example.org/login to be able to login. to goto http://example.org/login to be able to login.
The **Disable the public radio page and redirect to the login page?** will
switch off the public radio page and redirect all visitors to the login page.
This is useful if you want to use LibreTime as a backend for a custom website.
The **Tune-In Settings** section is intended for stations that have partnered The **Tune-In Settings** section is intended for stations that have partnered
with TuneIn to automatically push their now playing metadata to TuneIn. This with TuneIn to automatically push their now playing metadata to TuneIn. This
hasn't been tested and also requires special credentials from TuneIn. hasn't been tested and also requires special credentials from TuneIn.

75
install
View File

@ -66,6 +66,7 @@ Options:
--user USER, -u USER User used to run LibreTime. --user USER, -u USER User used to run LibreTime.
--listen-port PORT, -p PORT Listen port for LibreTime. --listen-port PORT, -p PORT Listen port for LibreTime.
--storage-path PATH, -s PATH Storage path for LibreTime.
--in-place, -i Install LibreTime in place. --in-place, -i Install LibreTime in place.
@ -73,8 +74,6 @@ Options:
--no-setup-postgresql Do not setup Postgresql. --no-setup-postgresql Do not setup Postgresql.
--no-setup-rabbitmq Do not setup RabbitMQ. --no-setup-rabbitmq Do not setup RabbitMQ.
--update-nginx Update nginx files during upgrades.
Environment variables: Environment variables:
Advanced options can be changed using environment variables (flags will take Advanced options can be changed using environment variables (flags will take
@ -101,11 +100,13 @@ EOF
# > User used to run LibreTime. # > User used to run LibreTime.
LIBRETIME_USER=${LIBRETIME_USER:-"libretime"} LIBRETIME_USER=${LIBRETIME_USER:-"libretime"}
# > Listen port for LibreTime. # > Listen port for LibreTime.
LIBRETIME_LISTEN_PORT=${LIBRETIME_LISTEN_PORT:-"80"} LIBRETIME_LISTEN_PORT=${LIBRETIME_LISTEN_PORT:-"8080"}
# > Public URL for LibreTime. # > Public URL for LibreTime.
LIBRETIME_PUBLIC_URL=${LIBRETIME_PUBLIC_URL:-} LIBRETIME_PUBLIC_URL=${LIBRETIME_PUBLIC_URL:-}
# > Timezone for LibreTime. # > Timezone for LibreTime.
LIBRETIME_TIMEZONE=${LIBRETIME_TIMEZONE:-} LIBRETIME_TIMEZONE=${LIBRETIME_TIMEZONE:-}
# > Storage path for LibreTime.
LIBRETIME_STORAGE_PATH=${LIBRETIME_STORAGE_PATH:-"/srv/libretime"}
# > Install LibreTime in editable mode. # > Install LibreTime in editable mode.
# > Will keep working files in the project directory. # > Will keep working files in the project directory.
@ -117,9 +118,6 @@ LIBRETIME_SETUP_POSTGRESQL=${LIBRETIME_SETUP_POSTGRESQL:-true}
# > Create a default rabbitmq user with a random password. # > Create a default rabbitmq user with a random password.
LIBRETIME_SETUP_RABBITMQ=${LIBRETIME_SETUP_RABBITMQ:-true} LIBRETIME_SETUP_RABBITMQ=${LIBRETIME_SETUP_RABBITMQ:-true}
# > Update nginx files during upgrades.
LIBRETIME_UPDATE_NGINX=${LIBRETIME_UPDATE_NGINX:-false}
# > Comma separated list of sections to exclude from packages list. # > Comma separated list of sections to exclude from packages list.
LIBRETIME_PACKAGES_EXCLUDES=${LIBRETIME_PACKAGES_EXCLUDES:-} LIBRETIME_PACKAGES_EXCLUDES=${LIBRETIME_PACKAGES_EXCLUDES:-}
@ -133,13 +131,16 @@ while [[ $# -gt 0 ]]; do
LIBRETIME_LISTEN_PORT=$2 LIBRETIME_LISTEN_PORT=$2
shift 2 shift 2
;; ;;
--storage-path | -s)
LIBRETIME_STORAGE_PATH=$2
shift 2
;;
--in-place | -i) --in-place | -i)
LIBRETIME_INSTALL_IN_PLACE=true LIBRETIME_INSTALL_IN_PLACE=true
shift 1 shift 1
;; ;;
--update-nginx) --update-nginx)
LIBRETIME_UPDATE_NGINX=true error "the '--update-nginx' option was removed in 4.0.0"
shift 1
;; ;;
--no-setup-icecast) --no-setup-icecast)
LIBRETIME_SETUP_ICECAST=false LIBRETIME_SETUP_ICECAST=false
@ -187,7 +188,6 @@ CONFIG_TMP_FILEPATH="$CONFIG_DIR/config.yml.tmp"
CONFIG_EXAMPLE_FILEPATH="$SCRIPT_DIR/installer/config.yml" CONFIG_EXAMPLE_FILEPATH="$SCRIPT_DIR/installer/config.yml"
WORKING_DIR="/var/lib/libretime" WORKING_DIR="/var/lib/libretime"
LOG_DIR="/var/log/libretime" LOG_DIR="/var/log/libretime"
STORAGE_DIR="/srv/libretime"
LEGACY_WEB_ROOT="/usr/share/libretime/legacy" LEGACY_WEB_ROOT="/usr/share/libretime/legacy"
SERVICE_DIR="/usr/lib/systemd/system" SERVICE_DIR="/usr/lib/systemd/system"
@ -255,15 +255,29 @@ template_file() {
rm "$tmp_file" rm "$tmp_file"
} }
# get_config <key...>
get_config() {
query="/^${1}:/\n"
while [[ $# -gt 1 ]]; do
shift
query+="/ \+${1}:/\n"
done
query+="q"
echo -e "$query" | ed --quiet "$CONFIG_FILEPATH" |
tail -n 2 |
grep "$1" |
awk -F ': ' '{ print $2 }'
}
# set_config <value> <key...> # set_config <value> <key...>
set_config() { set_config() {
value="${1}" && shift value="${1}" && shift
# Build sed query
query="/^${1}:/\n" query="/^${1}:/\n"
while [[ $# -gt 1 ]]; do while [[ $# -gt 1 ]]; do
shift shift
query+="/${1}:/\n" query+="/ \+${1}:/\n"
done done
query+="s|\(${1}:\).*|\1 ${value}|\n" query+="s|\(${1}:\).*|\1 ${value}|\n"
query+="wq" query+="wq"
@ -459,8 +473,15 @@ if $is_first_install; then
set_config "$LIBRETIME_TIMEZONE" general timezone set_config "$LIBRETIME_TIMEZONE" general timezone
fi fi
mkdir_and_chown "$LIBRETIME_USER" "$STORAGE_DIR" mkdir_and_chown "$LIBRETIME_USER" "$LIBRETIME_STORAGE_PATH"
set_config "$STORAGE_DIR" storage path set_config "$LIBRETIME_STORAGE_PATH" storage path
else
if [[ "$LIBRETIME_STORAGE_PATH" != "$(get_config storage path)" ]]; then
error \
"configuration mismatch between" \
"the installer storage path option ('$LIBRETIME_STORAGE_PATH') and" \
"the configuration file 'storage.path' field ('$(get_config storage path)')"
fi
fi fi
# PostgreSQL # PostgreSQL
@ -584,7 +605,7 @@ info "creating python3 venv"
python3 -m venv "$VENV_DIR" python3 -m venv "$VENV_DIR"
info "upgrading python3 tools" info "upgrading python3 tools"
$VENV_DIR/bin/pip install --upgrade pip setuptools wheel $VENV_DIR/bin/pip install --upgrade "pip<24.1" setuptools wheel
# Install Shared and API client # Install Shared and API client
######################################################################################## ########################################################################################
@ -662,6 +683,7 @@ install_service "libretime-analyzer.service" "$SCRIPT_DIR/analyzer/install/syste
section "Worker" section "Worker"
install_python_app "$SCRIPT_DIR/worker" install_python_app "$SCRIPT_DIR/worker"
link_python_app libretime-worker
info "creating libretime-worker working directory" info "creating libretime-worker working directory"
mkdir_and_chown "$LIBRETIME_USER" "$WORKING_DIR/worker" mkdir_and_chown "$LIBRETIME_USER" "$WORKING_DIR/worker"
@ -743,35 +765,26 @@ template_file cp_if_different \
section "Nginx" section "Nginx"
if $is_first_install || $LIBRETIME_UPDATE_NGINX; then if $is_first_install; then
install_packages nginx install_packages nginx
info "disabling nginx default site" info "disabling nginx default site"
rm -f "/etc/nginx/sites-enabled/default" rm -f "/etc/nginx/sites-enabled/default"
fi fi
nginx_config_template_args=(
"${SCRIPT_DIR}/installer/nginx/libretime.conf"
"/etc/nginx/sites-available/libretime.conf"
sed
-e "s|@@LISTEN_PORT@@|${LIBRETIME_LISTEN_PORT}|g"
-e "s|@@LEGACY_WEB_ROOT@@|${LEGACY_WEB_ROOT}|g"
)
if $is_first_install || $LIBRETIME_UPDATE_NGINX; then
info "deploying libretime nginx config" info "deploying libretime nginx config"
template_file cp_if_different "${nginx_config_template_args[@]}" template_file cp_if_different \
else "${SCRIPT_DIR}/installer/nginx/libretime.conf" \
info "printing libretime nginx config differences" "/etc/nginx/sites-available/libretime.conf" \
template_file diff_if_exists "${nginx_config_template_args[@]}" sed \
fi -e "s|@@LISTEN_PORT@@|${LIBRETIME_LISTEN_PORT}|g" \
-e "s|@@LEGACY_WEB_ROOT@@|${LEGACY_WEB_ROOT}|g" \
-e "s|@@STORAGE_PATH@@|${LIBRETIME_STORAGE_PATH}|g"
if $is_first_install || $LIBRETIME_UPDATE_NGINX; then
info "enabling libretime nginx config" info "enabling libretime nginx config"
ln -s --force \ ln -s --force \
"/etc/nginx/sites-available/libretime.conf" \ "/etc/nginx/sites-available/libretime.conf" \
"/etc/nginx/sites-enabled/libretime.conf" "/etc/nginx/sites-enabled/libretime.conf"
fi
# Finalize # Finalize
######################################################################################## ########################################################################################

Some files were not shown because too many files have changed in this diff Show More