Compare commits

..

874 Commits

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
Jonas L 976b70ed32
fix(api): enum schema description (#2803) 2023-12-18 19:32:48 +01:00
jo d2fc47941c
Merge branch 'stable' 2023-12-18 19:22:54 +01:00
Jonas L c0465f85f4
chore: remove pylint install workaround (#2802) 2023-12-18 19:21:57 +01:00
renovate[bot] 0f49a11713
chore(deps): update dependency drf-spectacular to >=0.22.1,<0.28 (#2801)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-18 19:12:09 +01:00
renovate[bot] d192b6defc
chore(deps): update dependency django-filter to >=2.4.0,<23.6 (#2783)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-18 19:02:31 +01:00
renovate[bot] 4715ccf083
chore(deps): update dependency uvicorn to >=0.17.6,<0.25.0 (#2774)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-18 19:02:17 +01:00
renovate[bot] 1820970ce3
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.41.2 (stable) (#2766)
* fix(deps): update dependency friendsofphp/php-cs-fixer to <3.41.2

* style: format files using php-cs-fixer

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-12-18 19:02:03 +01:00
Jonas L 651bb9261c
chore(api): disable duplicate-code check (#2799)
* chore(api): disable duplicate-code check

* refactor: fix linting errors
2023-12-18 18:54:07 +01:00
Julien Valentin e2cfbf4c03
fix(legacy): declare previously undeclared variable (#2793) 2023-11-30 17:11:14 +00:00
renovate[bot] 59f7bbdcc3 chore(deps): lock file maintenance (legacy/composer.json) 2023-11-21 10:33:41 +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] ce915671db chore(deps): lock file maintenance (legacy/composer.json) 2023-11-15 01:31:58 +00:00
renovate[bot] 229d99f7f1 chore(deps): update pre-commit hook pre-commit/mirrors-prettier to v3.1.0 2023-11-14 22:18:34 +00:00
renovate[bot] ed0dbffb22 chore(deps): lock file maintenance (legacy/composer.json) 2023-11-14 10:06:19 +00:00
Jonas L c764a5a648
fix: add parent function name in setValue exception (#2777)
* fix: add parent function name in setValue exception

* style: fmt
2023-11-13 18:46:47 +00:00
renovate[bot] 23e4973183 chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v23.11.0 2023-11-09 13:43:42 +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] 274baf60a7 chore(deps): update amannn/action-semantic-pull-request action to v5.4.0 2023-11-04 16:09:15 +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] 87fbb7ea8f chore(deps): lock file maintenance (legacy/composer.json) 2023-10-31 10:57:25 +00:00
renovate[bot] 5e00d7c603 chore(deps): lock file maintenance (legacy/composer.json) 2023-10-31 10:56:59 +00:00
renovate[bot] 39026d59a5 chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v23.10.1 2023-10-25 06:33:48 +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] d8a510156c chore(deps): update actions/setup-node action to v4 2023-10-25 01:32:57 +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] 08380212a2
chore(deps): unpin actions/checkout version (#2759)
* chore(deps): update actions/checkout digest to b4ffde6

* chore: unpin actions/checkout version

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-10-21 21:30:18 +02:00
renovate[bot] 7e65546975 chore(deps): update pre-commit hook psf/black-pre-commit-mirror to v23.10.0 2023-10-19 00:09:54 +00: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
jo aa74fc6d1a
chore: generate changelog for 3.2.0 2023-10-16 21:29:35 +02:00
Jonas L 26737abad2
chore: release 3.2.0 (#2754) 2023-10-16 21:26:59 +02:00
Jonas L d071a53fdf
chore: widen dev deps version range (#2755) 2023-10-16 09:40:46 +01:00
jo d8e722b31d
Merge branch 'stable' 2023-10-14 17:23:40 +02:00
renovate[bot] 655481902c
chore(deps): update dependency pylint to v3 (main) (#2731)
* chore(deps): update dependency pylint to v3

* chore: disable duplicate-code lint error

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-10-14 17:22:08 +02:00
renovate[bot] 820bb1c7e1
chore(deps): update dependency pylint to v3 (stable) (#2737)
* chore(deps): update dependency pylint to v3

* chore: disable duplicate-code lint error

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-10-14 17:21:58 +02:00
renovate[bot] f2fc9c138b
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.33 (#2748)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-14 17:02:54 +02:00
renovate[bot] 5f7836f155
chore(deps): update dependency django-cors-headers to >=3.14.0,<4.4 (#2749)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-14 17:02:37 +02:00
renovate[bot] 537a4ff671
chore(deps): update dependency mypy to v1.6.0 (#2750)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-14 17:02:28 +02:00
renovate[bot] 6c350dafd3
chore(deps): update dependency model_bakery to >=1.10.1,<1.17 (#2752)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-14 17:02:17 +02:00
renovate[bot] 1107def0e4
chore(deps): update dependency model_bakery to >=1.10.1,<1.17 (#2753)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-14 17:02:09 +02:00
renovate[bot] 55cf6ff227
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.33 (#2751)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-14 17:01:59 +02:00
Jonas L b2e512cbcd
feat: add mobile devices stream config field (#2744) 2023-10-14 08:13:04 +01:00
renovate[bot] 8fb2a5d4e3
chore(deps): update dependency django-cors-headers to >=3.14.0,<4.4 (#2746)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-14 00:06:00 +02:00
renovate[bot] 4bc0aa0525
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.35.2 (#2722)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-14 00:05:30 +02:00
renovate[bot] c896f0d103
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.35.2 (#2738)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-14 00:05:18 +02:00
renovate[bot] 8096b15193
chore(deps): update pre-commit hook pre-commit/pre-commit-hooks to v4.5.0 (#2740)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-14 00:04:59 +02:00
renovate[bot] 58be181023
chore(deps): update dependency mypy to v1.6.0 (#2747)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-14 00:04:41 +02:00
renovate[bot] 4f44dcb33a chore(deps): update pre-commit hook pre-commit/pre-commit-hooks to v4.5.0 2023-10-13 21:18:07 +00:00
renovate[bot] 424c237d71 chore(deps): update pre-commit hook asottile/pyupgrade to v3.15.0 2023-10-13 21:17:28 +00:00
renovate[bot] 48da92e88b chore(deps): update pre-commit hook asottile/pyupgrade to v3.15.0 2023-10-13 20:57:02 +00:00
Jonas L d7b2af2e3d
chore: improve renovate auto merge (#2745)
- Make it more silent
- Auto merge any Github Action or Pre-commit version change.
2023-10-13 22:56:20 +02:00
Weblate (bot) 26edb20390
chore(legacy): translated using weblate (Polish) (#2743)
Currently translated at 53.1% (499 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/pl/

Co-authored-by: Piotr Strebski <strebski@gmail.com>
2023-10-12 16:40:32 +01:00
renovate[bot] 5a7e4db23e
chore(deps): update pre-commit hook asottile/pyupgrade to v3.14.0 (#2733)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-03 22:34:26 +02:00
renovate[bot] 60a9265efc
chore(deps): update pre-commit hook asottile/pyupgrade to v3.14.0 (#2735)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-03 22:34:10 +02:00
jo 363f499882
Merge branch 'stable' 2023-10-03 22:24:35 +02:00
renovate[bot] 2263c1f860
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.34.1 (#2723)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-03 22:21:28 +02:00
renovate[bot] 1618d72469
chore(deps): update pre-commit hook codespell-project/codespell to v2.2.6 (stable) (#2732)
* chore(deps): update pre-commit hook codespell-project/codespell to v2.2.6

* fix spell checks

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-10-03 22:19:56 +02:00
renovate[bot] d6eade0b08
chore(deps): lock file maintenance (legacy/composer.json) (#2729)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-03 22:15:18 +02:00
renovate[bot] 18b0001df3
chore(deps): lock file maintenance (legacy/composer.json) (#2728)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-03 22:15:11 +02:00
renovate[bot] 2480708417
chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.15.0 (#2724)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-26 17:01:39 +01:00
renovate[bot] ac394228e8
chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.15.0 (#2725)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-26 17:00:20 +01:00
renovate[bot] ccd5478ffb
chore(deps): update amannn/action-semantic-pull-request action to v5.3.0 (#2726)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-25 21:00:48 +01:00
renovate[bot] c4fe8539eb
chore(deps): update amannn/action-semantic-pull-request action to v5.3.0 (#2727)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-25 21:00:38 +01:00
renovate[bot] 097354d94b
chore(deps): update pre-commit hook asottile/pyupgrade to v3.13.0 (#2719)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-24 21:17:14 +01:00
renovate[bot] 721805bf76
chore(deps): update pre-commit hook asottile/pyupgrade to v3.13.0 (#2718)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-24 21:17:03 +01:00
renovate[bot] 8a13912e1e
chore(deps): update actions/checkout digest to 8ade135 (#2721)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-24 21:16:11 +01:00
renovate[bot] 821a7390cf
chore(deps): update actions/checkout digest to 8ade135 (#2720)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-24 21:14:44 +01:00
renovate[bot] 1235b3f563 chore(deps): update pre-commit hook asottile/pyupgrade to v3.11.1 2023-09-19 22:29:06 +00:00
renovate[bot] 867387c5fb chore(deps): update pre-commit hook asottile/pyupgrade to v3.11.1 2023-09-19 22:28:43 +00:00
renovate[bot] bfdb40dd7f
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.27.1 (stable) (#2715)
* fix(deps): update dependency friendsofphp/php-cs-fixer to <3.27.1

* style: format legacy files

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-09-17 17:18:07 +02:00
renovate[bot] 2f1a0a8efa
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.27.1 (main) (#2714)
* fix(deps): update dependency friendsofphp/php-cs-fixer to <3.27.1

* style: format legacy files

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-09-17 17:14:59 +02:00
renovate[bot] 9067299df3
chore(deps): update dependency django-filter to >=2.4.0,<23.4 (#2713)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-17 12:35:13 +02:00
renovate[bot] 4caf0b0ef2
chore(deps): update dependency django-filter to >=2.4.0,<23.4 (#2712)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-17 12:35:06 +02:00
renovate[bot] bd5c9d28cb
chore(deps): update pre-commit hook asottile/pyupgrade to v3.11.0 (#2710)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-16 13:55:05 +01:00
renovate[bot] 2250f30152
chore(deps): update pre-commit hook asottile/pyupgrade to v3.11.0 (#2708)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-16 13:54:52 +01:00
renovate[bot] 34665ef4db
chore(deps): update pre-commit hook psf/black to v23.9.1 (main) (#2688)
* chore(deps): update pre-commit hook psf/black to v23.9.1

* chore(deps): use new black mirror

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Kyle Robbertze <kyle@paddatrapper.com>
2023-09-15 15:58:11 +01:00
renovate[bot] 020e9759f8
chore(deps): update pre-commit hook psf/black to v23.9.1 (stable) (#2689)
* chore(deps): update pre-commit hook psf/black to v23.9.1

* chore(deps): use new black mirror

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Kyle Robbertze <kyle@paddatrapper.com>
2023-09-15 15:58:06 +01:00
renovate[bot] 2caa447f7b
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.32 (#2704)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-15 15:47:24 +01:00
renovate[bot] 201a74d0d1
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.32 (#2703)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-15 15:47:06 +01:00
renovate[bot] f5da951702
chore(deps): update docker/setup-buildx-action action to v3 (#2705)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-14 07:12:08 +01:00
renovate[bot] b2c64c98a8
chore(deps): update docker/metadata-action action to v5 (#2702)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 11:21:22 +01:00
renovate[bot] 96b5d70395
chore(deps): update docker/login-action action to v3 (#2701)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 11:21:12 +01:00
renovate[bot] 6c606f4ae8
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.26.2 (#2687)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 11:14:16 +01:00
renovate[bot] f0330d3f31
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.26.2 (#2686)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 11:14:01 +01:00
renovate[bot] f4260b0de2
chore(deps): update docker/build-push-action action to v5 (#2700)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 11:13:01 +01:00
renovate[bot] be17ea3ad3
chore(deps): update docker/bake-action action to v4 (#2699)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 11:12:39 +01:00
renovate[bot] 12b01d490f
chore(deps): update docker/metadata-action action to v5 (#2697)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 11:12:14 +01:00
renovate[bot] 79d67c1fef
chore(deps): update docker/login-action action to v3 (#2696)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 11:12:00 +01:00
renovate[bot] 5dc43de036
chore(deps): update docker/bake-action action to v4 (#2694)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 11:11:45 +01:00
renovate[bot] bdbcf5073e
chore(deps): update docker/build-push-action action to v5 (#2695)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-12 18:59:49 +01:00
renovate[bot] f8723853b1
chore(deps): update docker/setup-buildx-action action to v3 (#2698)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-12 18:59:14 +01:00
renovate[bot] 09c5f1c834
chore(deps): lock file maintenance (legacy/composer.json) (#2691)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-11 19:20:36 +01:00
renovate[bot] d21eaf2f64
chore(deps): lock file maintenance (legacy/composer.json) (#2690)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-11 19:20:19 +01:00
libretime-bot 0a1dbd1cde chore(legacy): update locales 2023-09-11 01:51:02 +00:00
renovate[bot] 9af3050432
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.26.1 (main) (#2677)
* fix(deps): update dependency friendsofphp/php-cs-fixer to <3.26.1

* style: format code

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-09-08 15:45:24 +02:00
renovate[bot] 3547d745f9
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.26.1 (stable) (#2678)
* fix(deps): update dependency friendsofphp/php-cs-fixer to <3.26.1

* style: format legacy files

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-09-08 15:28:29 +02:00
renovate[bot] de74e9f2dd
chore(deps): update dependency syrupy to >=4.0.0,<4.6 (#2673)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-08 15:19:17 +02:00
renovate[bot] bffbf5eae5
chore(deps): update dependency syrupy to >=4.0.0,<4.6 (#2674)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-08 15:19:06 +02:00
renovate[bot] c51a3c3d17
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.31 (#2675)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-08 15:18:57 +02:00
renovate[bot] f3ee5309b5
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.31 (#2676)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-08 15:18:47 +02:00
renovate[bot] 6748a8175f
chore(deps): update dependency mutagen to >=1.45.1,<1.48 (#2682)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-08 15:18:33 +02:00
renovate[bot] af555da30c
chore(deps): update dependency mutagen to >=1.45.1,<1.48 (#2683)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-08 15:18:26 +02:00
renovate[bot] 8ce947e462
chore(deps): update actions/checkout action to v4 (#2685)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-04 15:47:46 +01:00
renovate[bot] 47a8d8e752
chore(deps): update actions/checkout action to v4 (#2684)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-04 13:45:40 +01:00
Weblate (bot) 0ef53b8263
chore(legacy): translated using weblate (Polish) (#2681)
Currently translated at 53.0% (498 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/pl/

Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
2023-08-31 17:22:59 +01:00
renovate[bot] 151ed33ea1 chore(deps): update pre-commit hook pre-commit/mirrors-prettier to v3.0.3 2023-08-30 12:43:20 +00:00
renovate[bot] fc3a5d2920 chore(deps): update pre-commit hook pre-commit/mirrors-prettier to v3.0.3 2023-08-30 12:42:55 +00:00
renovate[bot] 8bc036bb52
chore(deps): update dependency model_bakery to >=1.10.1,<1.16 (#2672)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-25 12:58:01 +01:00
renovate[bot] aeca3fe643
chore(deps): update dependency model_bakery to >=1.10.1,<1.16 (#2671)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-25 12:57:52 +01:00
renovate[bot] 8e8d3fea7d
chore(deps): update dependency syrupy to >=4.0.0,<4.3 (#2668)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 16:04:24 +01:00
renovate[bot] d74af79bbe
chore(deps): update dependency syrupy to >=4.0.0,<4.3 (#2669)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 16:04:12 +01:00
renovate[bot] a69da17b7d
chore(deps): update dependency model_bakery to >=1.10.1,<1.15 (#2665)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 16:03:47 +01:00
renovate[bot] c99e624ec4
chore(deps): update dependency model_bakery to >=1.10.1,<1.15 (#2664)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 16:03:32 +01:00
renovate[bot] 2953369c3b
chore(deps): lock file maintenance (legacy/composer.json) (#2667)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-21 10:16:46 +01:00
renovate[bot] f621c8371d
chore(deps): lock file maintenance (legacy/composer.json) (#2666)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-21 10:16:34 +01:00
libretime-bot a96a8819a4 chore(legacy): update locales 2023-08-21 01:45:19 +00:00
renovate[bot] c0c2ef7256
chore(deps): update dependency mypy to v1.5.1 (#2662)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-16 23:26:02 +01:00
renovate[bot] 9d6e8d962c
chore(deps): update dependency mypy to v1.5.1 (#2650)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-16 23:25:43 +01:00
renovate[bot] cb5d353a6e
chore(deps): update dependency syrupy to >=4.0.0,<4.2 (#2661)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-16 23:25:22 +01:00
renovate[bot] a330e06249
chore(deps): update dependency syrupy to >=4.0.0,<4.2 (#2663)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-16 23:25:13 +01:00
renovate[bot] 35621e9c2b chore(deps): update pre-commit hook pre-commit/mirrors-prettier to v3.0.2 2023-08-16 21:54:33 +00:00
renovate[bot] 1e04f2dd9d chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.14.1 2023-08-16 15:33:40 +00:00
renovate[bot] 9bb9b64c60 chore(deps): update pre-commit hook pre-commit/mirrors-prettier to v3.0.2 2023-08-16 15:33:01 +00:00
renovate[bot] 08a242eb27 chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.14.1 2023-08-16 13:00:29 +00:00
jo 391895fbeb
Merge branch 'stable' 2023-08-15 18:29:09 +02:00
renovate[bot] ab16cb47c5
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.23.1 (stable) (#2656)
* fix(deps): update dependency friendsofphp/php-cs-fixer to <3.23.1

* style: format files using php-cs-fixer

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-08-15 18:28:18 +02:00
renovate[bot] a3fb502d5d
chore(deps): lock file maintenance (legacy/composer.json) (#2648)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-15 18:05:36 +02:00
renovate[bot] a5cc52e9a9
chore(deps): update dependency mypy to v1.5.0 (#2651)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-15 18:04:23 +02:00
renovate[bot] 5bac175bf0
chore(deps): lock file maintenance (legacy/composer.json) (#2649)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-15 18:04:08 +02:00
Weblate (bot) 1566a6ca45
chore(legacy): translated using weblate (Italian) (#2647)
Currently translated at 46.0% (432 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/it/

Co-authored-by: Maurizio Castelvetro <castelvetro@gmail.com>
2023-08-06 13:06:42 +01:00
renovate[bot] 372fb9e76c
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.30 (#2642)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-05 09:29:41 +02:00
renovate[bot] 5f8639ce61
chore(deps): update dependency model_bakery to >=1.10.1,<1.14 (#2646)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-05 09:29:33 +02:00
renovate[bot] 9d80d894f4 chore(deps): update pre-commit hook pre-commit/mirrors-prettier to v3.0.1 2023-08-03 11:07:00 +00:00
renovate[bot] 9e423d807e chore(deps): update pre-commit hook pre-commit/mirrors-prettier to v3.0.1 2023-08-03 11:06:32 +00:00
renovate[bot] 4d4df95852 chore(deps): update dependency flake8 to >=6.0.0,<6.2 2023-07-31 09:43:37 +02:00
renovate[bot] 55a1684d81 chore(deps): update pre-commit hook asottile/pyupgrade to v3.10.1 2023-07-31 09:43:29 +02:00
Cristian Oneț 0070ee1d24 fix: libretime process leaks and lsof high cpu usage (#2615) 2023-07-29 11:23:31 +02:00
jo dbac572d89
Merge branch 'stable' 2023-07-29 11:15:11 +02:00
renovate[bot] 6619bc68ea
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.22.1 (#2633)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-20 22:40:05 +02:00
renovate[bot] 72a8b03765
chore(deps): update dependency gunicorn to v21 (#2635)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-20 22:39:54 +02:00
renovate[bot] 46cf73e95a
chore(deps): update dependency uvicorn to >=0.17.6,<0.24.0 (#2631)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-15 16:11:25 +02:00
Cristian Oneț bd6822fec6
fix: libretime process leaks and lsof high cpu usage (#2615) 2023-07-12 13:01:21 +01:00
jo 1a6f089329
Merge branch 'stable' 2023-07-12 08:54:42 +02:00
renovate[bot] 319fc9aea7
chore(deps): update dependency django-cors-headers to >=3.14.0,<4.3 (#2623)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-12 08:54:05 +02:00
renovate[bot] 508de773ab
chore(deps): update dependency django-coverage-plugin to >=3.0.0,<3.2 (#2624)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-12 08:53:52 +02:00
renovate[bot] 2d413013a6
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.29 (#2625)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-12 08:53:29 +02:00
Weblate (bot) e1d7248e00
chore(legacy): translated using weblate (Ukrainian) (#2628)
Currently translated at 100.0% (939 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/uk/

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2023-07-12 07:14:52 +01:00
renovate[bot] 8c0b529909
chore(deps): update pre-commit hook psf/black to v23.7.0 (#2627)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-11 10:39:14 +01:00
renovate[bot] 094084391a
chore(deps): update pre-commit hook psf/black to v23.7.0 (#2626)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-11 10:38:59 +01:00
renovate[bot] fdaf341747
chore(deps): lock file maintenance (legacy/composer.json) (#2620)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-10 17:39:58 +01:00
renovate[bot] eb8d676ec0
chore(deps): lock file maintenance (legacy/composer.json) (#2619)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-10 17:39:45 +01:00
renovate[bot] 7b649e92cb
chore(deps): update pre-commit hook asottile/pyupgrade to v3.9.0 (#2618)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-09 10:14:02 +02:00
Jonas L 132d64197e
docs: fix broken link (#2616) 2023-07-07 08:30:21 +01:00
jo 6b9f3b14fe
Merge branch 'stable' 2023-07-06 21:39:33 +02:00
renovate[bot] 8c5512cd73
chore(deps): update pre-commit hook pre-commit/mirrors-prettier to v3 (stable) (#2614)
* chore(deps): update pre-commit hook pre-commit/mirrors-prettier to v3

* style: format code using prettier v3.0.0

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-07-06 21:39:05 +02:00
renovate[bot] 74737cf3c4
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.21.2 (#2612)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-06 21:32:13 +02:00
renovate[bot] 02cd0fdfca
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.28 (#2611)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-06 21:32:03 +02:00
renovate[bot] 36501b71aa
chore(deps): lock file maintenance (legacy/composer.json) (#2610)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-03 08:22:57 +01:00
renovate[bot] 5b378887eb
chore(deps): lock file maintenance (legacy/composer.json) (#2609)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-03 08:22:48 +01:00
jo b2ca2a27ce
Merge branch 'stable' 2023-07-02 09:17:34 +02:00
renovate[bot] 3b9d49946f
chore(deps): update pre-commit hook asottile/pyupgrade to v3.8.0 (#2608)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-02 09:16:55 +02:00
jo c911dbded6
Merge branch 'stable' 2023-07-01 16:56:49 +02:00
renovate[bot] 3fe1df1c6d
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.20.1 (stable) (#2602)
* fix(deps): update dependency friendsofphp/php-cs-fixer to <3.20.1

* style: format legay files

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-07-01 16:55:43 +02:00
jo d3296ac624
Merge branch 'stable' 2023-07-01 12:41:14 +02:00
renovate[bot] 89590fd002
chore(deps): update dependency mypy to v1.4.1 (#2603)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-01 12:12:26 +02:00
renovate[bot] 4d60192c2c
chore(deps): update pre-commit hook asottile/pyupgrade to v3.7.0 (#2593)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-24 09:08:06 +02:00
renovate[bot] 2c78bbcaee
chore(deps): update dependency mypy to v1.4.0 (#2597)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-24 09:06:45 +02:00
renovate[bot] 66a9e1fb7f
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.27 (#2599)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-24 09:06:20 +02:00
renovate[bot] 7742a7f6b0
chore(deps): update dependency pytest to >=7.2.1,<7.5 (#2601)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-24 09:05:56 +02:00
renovate[bot] edcaa324b8
chore(deps): update pre-commit hook asottile/pyupgrade to v3.7.0 (#2592)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-19 08:31:40 +01:00
renovate[bot] 0fee24db20
chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.14.0 (#2591)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-17 09:10:42 +02:00
renovate[bot] a7c4dfd9e7
chore(deps): update dependency django-cors-headers to >=3.14.0,<4.2 (#2587)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-17 09:10:29 +02:00
renovate[bot] bc4e785c99 chore(deps): update pre-commit hook codespell-project/codespell to v2.2.5 2023-06-15 02:32:56 +00:00
renovate[bot] e8a1567e31 chore(deps): update pre-commit hook codespell-project/codespell to v2.2.5 2023-06-14 22:59:28 +00:00
jo 08a503b08e
Merge branch 'stable' 2023-06-12 09:44:19 +02:00
renovate[bot] 1f3f7073f4
chore(deps): update pre-commit hook asottile/pyupgrade to v3.6.0 (#2585)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-12 09:43:37 +02:00
renovate[bot] c4bf174ff5
chore(deps): update dependency requests-mock to >=1.10.0,<1.12 (#2583)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-12 09:38:04 +02:00
renovate[bot] e32a5abb9f
chore(deps): update dependency model_bakery to >=1.10.1,<1.13 (#2581)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-07 22:53:27 +02:00
renovate[bot] cc9a1daa7e
chore(deps): update rabbitmq docker tag to v3.12 (#2579)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-03 09:01:55 +02:00
renovate[bot] 30ac8dd6e5
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.26 (#2577)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-03 08:35:46 +02:00
jo dea4a28b8f chore: add mailpit to dev setup 2023-06-02 07:44:34 +01:00
jo c2c0be1fbc feat(api): add email configuration 2023-06-02 07:44:34 +01:00
Jonas L 001466f8fd
feat(legacy): move session store to database (#2523) 2023-05-30 22:25:50 +02:00
jo be282fac80
Merge branch 'stable' 2023-05-30 12:09:45 +02:00
Kyle Robbertze 2f32241351
docs: update chat links to point to matrix (#2571) 2023-05-30 11:49:37 +02:00
jo 285bb11da0 test(playout): check unsupported liquidsoap aac output 2023-05-29 12:14:08 +01:00
jo 67af6cfa53 fix(playout): liquidsoap aac output syntax errors 2023-05-29 12:14:08 +01:00
libretime-bot 497375ce25 chore(legacy): update locales 2023-05-29 02:11:30 +00:00
jo cd240beef5
chore: generate changelog for 3.1.0 2023-05-26 15:36:25 +02:00
jo 08e2eec0a3 chore: release 3.1.0 2023-05-26 15:34:43 +02:00
jo a7ed0697a1 docs: add 3.1.x distribution releases support 2023-05-26 15:34:43 +02:00
Jonas L e207b6e388
docs: be consistent with example domain (#2568) 2023-05-26 14:00:34 +01:00
jo 17fb1c45df docs: install using a reverse proxy by default 2023-05-26 13:46:46 +01:00
jo f74062a622 docs: fix icecast certificates bundle command 2023-05-26 13:46:46 +01:00
jo d25e0dd171 docs: remove setup without reverse proxy 2023-05-26 13:46:46 +01:00
jo 2d8936750d chore(deps): bump djangorestframework to >=3.14.0,<3.15 2023-05-26 11:07:13 +01:00
jo a587f179f8 Revert "chore(api): install django-rest-framework from git (#2518)"
This reverts commit df7848c4bd.
2023-05-26 11:07:13 +01:00
Jonas L d9663c0a4e
docs: split airtime migration into more steps (#2565) 2023-05-25 14:59:08 +01:00
Jonas L a67a8a880c
docs: improve airtime migration guide (#2564) 2023-05-25 14:46:20 +01:00
renovate[bot] 52361c1b9b
chore(deps): update dependency types-requests to >=2.31.0,<2.32 (main) (#2561)
* chore(deps): update dependency types-requests to >=2.31.0,<2.32

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-05-25 15:12:42 +02:00
renovate[bot] 8b41302ddd
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.17.1 (main) (#2556)
* fix(deps): update dependency friendsofphp/php-cs-fixer to <3.17.1

* style(legacy): format using php-cs-fixer

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-05-25 15:06:18 +02:00
renovate[bot] 734f8baeb4
chore(deps): update dependency pytest-cov to >=4.0.0,<4.2 (#2562)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-25 14:57:36 +02:00
renovate[bot] 8ad00a5e5e
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.25 (#2559)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-24 18:50:16 +02:00
renovate[bot] 51a3add302
chore(deps): update dependency requests to >=2.31.0,<2.32 [security] (#2558)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-24 18:23:55 +02:00
Weblate (bot) cd5ec1e841
chore(legacy): translated using weblate (English (United States)) (#2553)
Currently translated at 62.7% (589 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/en_US/

Co-authored-by: Zachary Klosko <zackaklosko@gmail.com>
2023-05-23 08:11:42 +02:00
Weblate (bot) c4eb95cae2
chore(legacy): translated using weblate (German) (#2552)
Currently translated at 75.0% (705 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/de/

Co-authored-by: Dave Berg <dberg316@gmail.com>
2023-05-19 18:00:59 +01:00
Weblate (bot) 57cb55dbc1
chore(legacy): translated using weblate (Dutch) (#2551)
Currently translated at 100.0% (939 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/nl/

Co-authored-by: Dave Berg <dberg316@gmail.com>
2023-05-19 07:47:41 +01:00
renovate[bot] 2581b68e38
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.24 (#2550)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-15 18:06:43 +02:00
renovate[bot] a991ab9776
chore(deps): update dependency pytest-xdist to >=3.1.0,<3.4 (#2547)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-15 09:59:11 +02:00
renovate[bot] b95479ae7e
chore(deps): update lycheeverse/lychee-action action to v1.8.0 (#2548)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-15 09:58:52 +02:00
renovate[bot] 668f7d6594
chore(deps): update dependency django-cors-headers to v4 (#2545)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-12 15:52:57 +02:00
jo 9edfd710e6 docs: add note about unused packages 2023-05-12 13:44:31 +01:00
jo 7b2939a7a6 chore: force docs sync 2023-05-12 13:44:31 +01:00
jo a363b3adfb feat: install inside a python3 venv 2023-05-11 09:52:58 +01:00
jo 3b4f9ef477 feat(api): install gunicorn/uvicorn from pip 2023-05-11 09:52:58 +01:00
jo 92b2a0d1e0 fix(analyzer): remove unused python3 package 2023-05-11 09:52:58 +01:00
renovate[bot] b4b3d6d6c1
chore(deps): update dependency mypy to v1.3.0 (#2541)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-10 20:58:28 +02:00
renovate[bot] 1c3102603a
chore(deps): update pre-commit hook asottile/pyupgrade to v3.4.0 (#2539)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-07 10:18:35 +02:00
renovate[bot] f11d493968
chore(deps): update dependency types-requests to >=2.25.1,<2.31 (#2538)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-05 17:31:17 +02:00
renovate[bot] 935a993f6f
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.23 (#2537)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-05 17:31:04 +02:00
renovate[bot] 4b12c5a5f1
chore(deps): update dependency requests to >=2.25.1,<2.31 (#2535)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-03 21:30:39 +02:00
jo d01edc4dce
Merge branch 'stable' 2023-05-01 10:16:56 +02:00
renovate[bot] 8befb28e34
chore(deps): update dependency django-filter to >=2.4.0,<23.3 (#2534)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-30 14:53:34 +02:00
renovate[bot] aa304cc77a
chore(deps): update dependency types-requests to >=2.25.1,<2.30 (#2533)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-29 13:38:16 +02:00
Jonas L 7f1492aac0
docs: fix broken link (#2532) 2023-04-28 12:07:45 +01:00
renovate[bot] bdd24ae950
chore(deps): update dependency djangorestframework-stubs to v3 (#2531)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-28 12:47:06 +02:00
renovate[bot] 3b8e3a2ad9
chore(deps): update dependency django-stubs to v4 (#2530)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-28 12:29:22 +02:00
renovate[bot] c2c58cf250
chore(deps): update dependency requests to >=2.25.1,<2.30 (#2528)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-26 19:09:59 +02:00
renovate[bot] 3a387ad9de
chore(deps): update dependency requests to >=2.25.1,<2.30 (#2529)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-26 19:06:30 +02:00
Jonas L f2a3998cc8
ci: don't run stale bot on feature requests (#2527) 2023-04-26 12:33:51 +01:00
renovate[bot] bcddc90fe8
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.22 (#2526)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-26 12:38:23 +02:00
renovate[bot] f0316eccef
chore(deps): update pre-commit hook asottile/pyupgrade to v3.3.2 (#2524)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-25 08:38:50 +01:00
renovate[bot] 710c072b21
chore(deps): update pre-commit hook asottile/pyupgrade to v3.3.2 (#2525)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-25 08:38:30 +01:00
jo a8e2ce7732 fix(api): upgrade django code (pre-commit) 2023-04-24 20:46:48 +01:00
jo 14357102e5 test(api): add django-upgrade pre-commit hook 2023-04-24 20:46:48 +01:00
jo f357fb64b7
Merge branch 'stable' 2023-04-24 16:03:18 +02:00
jo b2fc3a5ecf feat(playout): allow harbor ssl configuration 2023-04-24 14:58:34 +01:00
jo 8764feded9 docs: ensure example values are replaced 2023-04-24 14:58:34 +01:00
Jonas L df7848c4bd
chore(api): install django-rest-framework from git (#2518) 2023-04-24 14:58:07 +01:00
Jonas L aa98309634
fix(legacy): keep datatable settings between views (#2519)
Use a different storage key for datatable settings for the dashboard and
builder views. The settings were overwritten when the other view was
loaded.
2023-04-24 14:52:52 +01:00
jo 2fd5b50229 docs: add certbot setup guide 2023-04-21 20:47:43 +01:00
jo a375e5b917 docs: improve install guides 2023-04-21 20:47:43 +01:00
jo ca449c1a3b docs: improve reverse proxy docs 2023-04-21 20:47:43 +01:00
Jonas L 5a8e8d298d
docs: docker config template install with envsubst (#2517) 2023-04-21 17:35:01 +01:00
jo 19bcc251e2 docs: split install guide per install method 2023-04-21 16:59:23 +01:00
jo ff03dad9a8 docs: rename setup to install 2023-04-21 16:59:23 +01:00
jo 8052622e69 docs: move configuration documentation 2023-04-21 16:59:23 +01:00
Jonas L d9fbb231b6
fix(legacy): remove composer superuser warning (#2515)
- Disable plugins or script when running composer
- Export COMPOSER_ALLOW_SUPERUSER=true to suppress the warning
- Simplify makefile to build legacy files
2023-04-19 16:15:15 +01:00
renovate[bot] 5a083886c5
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.21 (#2514)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-19 17:13:47 +02:00
renovate[bot] 0f60ec8c96
chore(deps): update lycheeverse/lychee-action action to v1.7.0 (#2511)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-18 09:40:31 +02:00
renovate[bot] 4071b8f3da
chore(deps): update docker/bake-action action to v3 (#2513)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-18 09:40:18 +02:00
Jonas L 4bf729679e
fix(legacy): don't print track_type id in show builder table (#2510) 2023-04-18 08:22:48 +01:00
jo d2709dc6d3 docs: only use microsoft styling guide 2023-04-12 16:50:04 +01:00
jo 8ba62079f5 docs: ignore range format during docs linting 2023-04-12 16:50:04 +01:00
jo fed81f7272 docs: fix broken links 2023-04-12 16:50:04 +01:00
jo 5ca0788388 docs: move release docs in the release section 2023-04-12 16:50:04 +01:00
jo 755848482d feat: set icecast mount default charset to UTF-8
On first install, configure icecast to use utf-8 as default charset for it's mounts.

Fixes #2501
2023-04-12 11:42:51 +01:00
jo 31e69a60f7 chore: import icecast config from debian package 2023-04-12 11:42:51 +01:00
jo 4c4821a877 fix(installer): ignore whitespace during diff 2023-04-12 11:42:51 +01:00
jo d4c272db49 chore: use a secure dev environment 2023-04-12 08:11:21 +01:00
jo edf96ac5fc chore: move dev env files to dev subfolder 2023-04-12 08:11:21 +01:00
renovate[bot] f7792d2e57
chore(deps): update dependency pytest to >=7.2.1,<7.4 (#2505)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-09 13:44:52 +02:00
jo 1cc9bc9bf6 feat: include tarball checksums in releases 2023-04-08 18:01:31 +01:00
jo ec5bad3c26 feat: remove dev files from tarball 2023-04-08 18:01:31 +01:00
renovate[bot] 5e5ec77bfb
chore(deps): update dependency mypy to v1.2.0 (#2502)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-06 22:38:06 +02:00
renovate[bot] 6be3c84d86
chore(deps): update dependency model_bakery to >=1.10.1,<1.12 (#2500)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-06 13:31:26 +02:00
renovate[bot] 76343117f5
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.20 (#2499)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-04 14:16:06 +02:00
jo 43cc2bc4f0 chore: fix comment wording 2023-04-03 15:29:36 +01:00
jo ce27615a24 refactor(playout): rename PypoLiquidsoap to Liquidsoap 2023-04-03 15:29:36 +01:00
jo f68bc2da88 refactor(playout): remove irrelevant try/except 2023-04-03 15:29:36 +01:00
jo 964ee7e07c refactor(playout): add ended check to event class 2023-04-03 15:29:36 +01:00
jo 161f2ccdcb refactor(playout): merge liquidsoap modules 2023-04-03 15:29:36 +01:00
jo 4c63ef71fc feat(playout): replace thread timeout with socket timeout
Prefer the lower level socket timeout feature, to the hand made threaded
timeout. The thread timeout does not raise or log the errors that may occur
during the communication with liquidsoap, and we should handle them
instead.
2023-04-03 15:29:36 +01:00
Jonas L 6b6e8951d1
fix(playout): remove unused ecasound package (#2496)
The recorder has been removed, so the ecasound package isn't used anymore.
2023-04-03 14:48:08 +01:00
jo bfacda11df fix(api): upgrade psycopg to v3.1 2023-04-03 13:28:16 +01:00
jo b474eb3f64 fix(api): require django >=4.2.0,<4.3 2023-04-03 13:28:16 +01:00
jo 22b2d33c4d chore: adapt c4 to match our branches and releases requirements 2023-04-03 11:54:23 +01:00
jo 1d48e47721 chore: fix dot list numbers 2023-04-03 11:54:23 +01:00
jo ada92c8259
chore: fix CONTRIBUTING symlink again 2023-04-03 12:39:24 +02:00
jo 747f33c20c
chore: fix CONTRIBUTING symlink 2023-04-03 12:35:47 +02:00
jo 49d4fafa0c
Merge branch 'stable' 2023-04-03 12:31:50 +02:00
renovate[bot] d0be84bff7
chore(deps): update dependency django to >=4.1.4,<4.3 (#2492)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-03 12:11:18 +02:00
jo ade4d2736f docs: add some history notes 2023-04-03 11:10:01 +01:00
jo 5065415ff7 docs: extract dev workflows from contributing docs 2023-04-03 11:10:01 +01:00
jo a9b7513bc0 docs: split developer and contributor manual 2023-04-03 11:10:01 +01:00
jo bb755f7a62 chore: create symlink to the contributing docs 2023-04-03 11:10:01 +01:00
jo 2c35544c08 docs: move contributing to docs/contribute 2023-04-03 11:10:01 +01:00
renovate[bot] 20bb031db0
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.16.1 (main) (#2490)
* fix(deps): update dependency friendsofphp/php-cs-fixer to <3.16.1

* style: format code using php-cs-fixer

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2023-04-03 11:58:36 +02:00
jo 028eafb1b6 test(playout): liquidsoap wait for version 2023-03-30 20:49:07 +01:00
jo 6acce9b87d test(playout): move liq_conn fixture to conftest 2023-03-30 20:49:07 +01:00
jo 6412b17996 fix(playout): catch oserror in liquidsoap client
Prevent playout crash when liquidsoap is not yet reachable.
2023-03-30 20:49:07 +01:00
renovate[bot] 64746ad2f4
chore(deps): update pre-commit hook psf/black to v23.3.0 (#2487)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-29 06:58:38 +01:00
renovate[bot] f902537056
chore(deps): update pre-commit hook psf/black to v23.3.0 (#2486)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-29 06:58:23 +01:00
renovate[bot] 6b502fd113 chore(deps): update dependency sentry-sdk to >=1.15.0,<1.19 2023-03-28 19:57:03 +02:00
Weblate (bot) 2006b44d97
chore(legacy): translated using weblate (Portuguese (Brazil)) (#2484)
Currently translated at 54.8% (515 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/pt_BR/

Co-authored-by: Felipe Nogueira <contato.fnog@gmail.com>
2023-03-26 20:06:12 +01:00
renovate[bot] 7621563ee5
chore(deps): update dependency django-filter to v23 (#2482)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-26 16:00:27 +02:00
Jonas L ba2a1220a0
chore: backport #2461 (#2480)
fix(api): cast string value to int enum (#2461)

c7381a4f80
2023-03-23 17:42:54 +01:00
Jonas L 7962c0adf6
feat(api): add cors headers middleware (#2479) 2023-03-23 14:40:30 +00:00
renovate[bot] 1bf46b2de4 chore(deps): update actions/stale action to v8 2023-03-23 12:17:25 +01:00
jo a1db2a157a feat(playout): replace schedule event dicts with objects 2023-03-22 13:05:57 +00:00
jo 684e7a6f24 chore: move mime type utils 2023-03-22 13:05:57 +00:00
jo 3f4ebab788 feat(playout): move liquidsoap auth to notify cli 2023-03-22 12:13:59 +00:00
jo 114a599993 fix(playout): use new api-client v1 2023-03-22 12:13:59 +00:00
jo 0ec2c7fd54 test(api-client): allow linters failure 2023-03-22 12:13:59 +00:00
jo 6ab407a23a feat(api-client): rewrite api-client v1 using abstract client 2023-03-22 12:13:59 +00:00
jo 98aaa4214a feat(api-client): remove unused api v1 calls 2023-03-22 12:13:59 +00:00
jo ad00272168 refactor(api-client): allow custom retry strategy 2023-03-22 12:13:59 +00:00
Jonas L e992d7147e
fix(installer): bump setuptools to ~=67.3 (#2387) 2023-03-22 09:15:57 +00:00
jo bc745617fb docs: fix database backup and restore commands
The commands should now work out of the box when copy pasted on most systems. The previous one required the users to read the docs and the man pages.
2023-03-22 09:14:56 +00:00
jo f722cec2eb docs: upgrade by migrating to a new server 2023-03-22 09:14:56 +00:00
Jonas L d800c5e280
feat: use secret_key config field instead of api_key (#2444)
Fixes #2426
2023-03-22 09:14:11 +00:00
jo 74af2112a6 fix(playout): quote incompatible <py3.9 type hints 2023-03-22 09:11:56 +00:00
jo dde1af70b2 test(playout): class creation 2023-03-22 09:11:56 +00:00
Weblate (bot) ce89678292
chore(legacy): translated using weblate (Spanish) (#2472)
Currently translated at 100.0% (939 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/es/

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2023-03-21 11:53:10 +00:00
Weblate (bot) 03b0465131
chore(legacy): translated using weblate (Spanish) (#2468)
Currently translated at 94.8% (891 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/es/

Co-authored-by: gallegonovato <fran-carro@hotmail.es>
2023-03-20 06:35:29 +00:00
renovate[bot] 3e5a7e4c08 chore(deps): update dependency djangorestframework-stubs to >=1.8.0,<1.11 2023-03-16 21:09:58 +01:00
renovate[bot] 4ae3447993 chore(deps): update amannn/action-semantic-pull-request action to v5.2.0 2023-03-16 21:09:43 +01:00
renovate[bot] 6a7d72cdf9
chore(deps): update dependency sentry-sdk to >=1.15.0,<1.18 (#2466)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-16 16:45:45 +00:00
renovate[bot] 6575921375 chore(deps): update dependency django-stubs to >=1.14.0,<1.17 2023-03-16 15:56:18 +01:00
renovate[bot] cdf5c76dc2
chore(deps): update amannn/action-semantic-pull-request action to v5.2.0 (#2462)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-16 13:14:06 +00:00
Jonas L c7381a4f80
fix(api): cast string value to int enum (#2461) 2023-03-15 21:19:04 +00:00
jo 0d3a56aaae
Merge branch 'stable' 2023-03-15 18:06:01 +01:00
jo deec2a1726 test(shared): fix linting errors 2023-03-15 16:55:29 +00:00
jo 1f48e38411 test(api): fix linting errors 2023-03-15 16:55:29 +00:00
jo af4f8fe02d chore: rename branch 3.0.x to stable 2023-03-15 16:55:29 +00:00
Jonas L f318ab8a2b
docs: add instructions for the sentry setup (#2441) 2023-03-15 13:13:37 +00:00
jo c290aece92 docs: docker-compose env variables setup 2023-03-15 11:52:00 +00:00
jo 00ceb9bd46 fix: move docker specific setup to dockerfile 2023-03-15 11:52:00 +00:00
jo b675e04df2 fix: allow overriding docker-compose predefined environment 2023-03-15 11:52:00 +00:00
jo b87b8e5076 fix: pin rabbitmq version in docker-compose 2023-03-15 11:52:00 +00:00
jo 0bdbc0425f fix: pin postgresql version in docker-compose 2023-03-15 11:52:00 +00:00
renovate[bot] 903a643c01 chore(deps): update dependency sentry-sdk to >=1.15.0,<1.17 2023-03-15 11:16:08 +01:00
jo b7214b5d46 feat: add sentry sdk 2023-03-14 14:59:45 +00:00
jo a60d83311b feat: add python packages version 2023-03-14 14:59:45 +00:00
jo 72aa1c1dae fix(api): explicit FileImportStatusEnum in schema 2023-03-14 13:29:55 +01:00
renovate[bot] 81db2a55c5 chore(deps): update dependency drf-spectacular to >=0.22.1,<0.27 2023-03-14 13:29:55 +01:00
jo c7c8207df3 test(shared): fix linting errors 2023-03-14 11:23:14 +00:00
jo 38bff1d4df test(api): fix linting errors 2023-03-14 11:23:14 +00:00
jo b4827112a2 ci: run all tests on python tools changes 2023-03-14 11:23:14 +00:00
renovate[bot] 89372aee82 fix(deps): update dependency friendsofphp/php-cs-fixer to <3.15.2 2023-03-14 10:51:19 +01:00
Kyle Robbertze 5aac4eb3a9 ci: allow Falso as a word in codespell 2023-03-14 08:51:52 +00:00
renovate[bot] b367c1f7ee chore(deps): update pre-commit hook codespell-project/codespell to v2.2.4 2023-03-14 08:51:52 +00:00
Kyle Robbertze 3a8b58115d ci: allow Falso as a word in codespell 2023-03-14 08:45:26 +00:00
renovate[bot] aec97b4125 chore(deps): update pre-commit hook codespell-project/codespell to v2.2.4 2023-03-14 08:45:26 +00:00
Weblate (bot) 803f950c69
chore(legacy): translated using weblate (Portuguese (Brazil)) (#2434)
Currently translated at 54.2% (509 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/pt_BR/

Co-authored-by: Felipe Nogueira <contato.fnog@gmail.com>
2023-03-10 11:24:59 +00:00
renovate[bot] 0e9df2535f
chore(deps): update dependency mypy to v1.1.1 (#2430)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-08 16:31:56 +00:00
renovate[bot] 66c9e305a1
chore(deps): update dependency pylint to >=2.16.1,<2.18 (#2431)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-08 16:24:41 +00:00
Weblate (bot) b02c1d038c
chore(legacy): translated using weblate (French) (#2429)
Currently translated at 100.0% (939 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/fr/

Co-authored-by: Jonas L <ljonas@riseup.net>
2023-03-07 10:34:54 +00:00
renovate[bot] 868faf928c
chore(deps): lock file maintenance (legacy/composer.json) (#2427)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-06 08:58:21 +02:00
jo 719464a272 refactor(playout): add more typings 2023-03-04 17:06:16 +02:00
jo a32d9d25f1 fix(shared): return type confusion 2023-03-04 17:06:16 +02:00
jo 548d1befc8 test(playout): check untyped defs with mypy 2023-03-04 17:06:16 +02:00
jo 1bdfeb570d fix(playout): use int for liquidsoap queues map 2023-03-04 17:06:16 +02:00
jo 9f92ed95b4 test(playout): allow pylint failure 2023-03-04 17:06:16 +02:00
jo b17ff4afad test(playout): silence existing broad-exception-caught errors 2023-03-04 17:06:16 +02:00
jo a77321190f refactor(playout): fix linting errors 2023-03-04 17:06:16 +02:00
jo c6c5b1125f refactor(playout): generate entrypoint to string 2023-03-04 17:06:16 +02:00
jo f09d0ec3c6 refactor(playout): remove unused recorder 2023-03-04 17:06:16 +02:00
jo 0a9848efdd refactor(playout): init mimetypes only once 2023-03-04 17:06:16 +02:00
jo c7c3dba712 fix(playout): prevent unbound variables 2023-03-04 17:06:16 +02:00
jo 4a14b6b01f refactor(playout): update liquidsoap input auth handler 2023-03-04 17:06:16 +02:00
jo ac8917e3fc fix(playout): explicit ogg vorbis icecast encoder 2023-03-04 17:06:16 +02:00
jo 7f81915eb4 fix(playout): legacy pushes non validated data
When querying the API we serialize the message format into a dict, but legacy pushes the data and we don't yet serialize that data.
2023-03-04 17:06:16 +02:00
jo 0b3dbe8505 chore(playout): disable amqp debug logs 2023-03-04 17:06:16 +02:00
jo 5042704d42 feat(playout): don't serialize message twice 2023-03-04 17:06:16 +02:00
Jonas L 5983b2e9de
ci: replace stale bot with stale action (#2421)
Fixes #2420
2023-03-04 15:00:30 +00:00
Jonas L 2facdc61ed
feat(installer): configure timezone using timedatectl (#2418) 2023-03-03 17:53:56 +02:00
Jonas L 11e8cac471
chore: add contributors listing tool (#2417)
Yet another contributors listing script, sorry...
2023-03-02 22:09:32 +02:00
Marvin d2f93f7c8a
fix(playout): when shows ends, next shows starts without fade-in/fade-out (#2412)
Tracks are not fading with the crossfade function which leads to hard cuts at the end of tracks and shows. Therefore the explicit fade functions are used.

In Liquidsoap version 1.4.3. crossfade is implemented as a cross with a custom transition (fade_in and fade_out).
9f730f2c5f/src/libs/fades.liq (L433-L436)

The "duration" argument is passed through to the cross function.
In the implementation of the cross operator the value duration is used to determine how log the crossfade should take.

It is set to the cross_lenght parameter

f075905715/src/operators/cross.ml (L30-L34)

This can be overwritten with metadata, but the current annotation does not include a "override_duration" field so in our case it is always 0.
f075905715/src/operators/cross.ml (L186-L198)

So I assume the crossfade is starting to fade.out the track but because the duration is set to 0. the "cross" is completed immediately and the next source of the queue is started. Our queues do only ever contain one track at a time so there is no next source to play.
The next queue is activated and the same happens for the fade.in.

Replacing the crossfade with a fade.in/out removes this time boundary as there is no longer a "cross" function involved.

Until the tag 3.0.0-alpha.8 there was a custom crossfade_airtime function.
In tag 3.0.0-alpha.9 it was replaced with the crossfade function but was unable to find why.
ecd302068c/python_apps/pypo/liquidsoap/1.4/ls_script.liq (LL76C9-L76C18)

Co-authored-by: Marvin <Marvin>
2023-03-02 20:20:09 +01:00
jo 59f0ed3335 chore: use title for image alternative 2023-03-02 16:10:08 +01:00
jo ec83cf6409 chore: don't check youtube nocookie links 2023-03-02 16:29:12 +02:00
jo 632aec2eed chore: update docs link 2023-03-02 16:29:12 +02:00
jo a2247d90f5 chore: bump copyright year 2023-03-02 16:29:12 +02:00
jo 6e6c7095f4 chore: development process is in contributing 2023-03-02 16:29:12 +02:00
jo 90d682a799 ci: update docker hub containers description 2023-03-02 16:29:12 +02:00
Jonas L 32e0c2a15e
docs: remove warning about docker install (#2411) 2023-02-28 09:07:00 +02:00
renovate[bot] fca715e98b chore(deps): update dependency djangorestframework-stubs to >=1.8.0,<1.10 2023-02-27 14:38:08 +01:00
Jonas L 03e17001d8
ci: replace deprecated set-output (#2408) 2023-02-27 14:54:14 +02:00
libretime-bot fb3fc74705 chore(legacy): update locales 2023-02-27 12:16:32 +00:00
jo be3964c108 ci: use bot to update locales 2023-02-27 14:10:56 +02:00
jo d4a4c34c4d ci: allow manual ci trigger 2023-02-27 14:10:56 +02:00
jo 7d1f9252b2 chore(playout): remove banner in logs 2023-02-27 06:42:33 +02:00
jo 331b203ef8 chore(playout): remove unused imports 2023-02-27 06:42:33 +02:00
jo 0c2b2c6b63 test(playout): generated liquidsoap script syntax 2023-02-27 06:42:33 +02:00
jo 654105e865 fix(playout): %else is not defined 2023-02-27 06:42:33 +02:00
jo 9384df7be2
Merge branch '3.0.x' into main 2023-02-26 20:16:38 +01:00
jo e88e843b65 refactor(playout): add typings and fix linting errors
move EVENT_KEY_FORMAT to events module
properly type fetch queue
event start/end can be str or datetime
2023-02-26 20:05:12 +01:00
jo 3fba7c73d3 refactor(playout): remove unecesary cache dir creation 2023-02-26 20:05:12 +01:00
jo 00648b8f94 refactor(playout): unwrap schedule.media dict 2023-02-26 20:05:12 +01:00
jo 0d4e2823e2 refactor(playout): add event dict typings 2023-02-26 20:05:12 +01:00
jo cd0d9b6f4a refactor(playout): rename event kinds enums 2023-02-26 20:05:12 +01:00
jo 78c74f47ca feat(playout): use shared app for cli commands 2023-02-26 20:41:38 +02:00
jo a71606d39c feat(playout): enable vorbis metadata per icecast output
Use new jinja template system to tweak the streams per output.
2023-02-26 20:41:38 +02:00
jo 00b5c08647 feat(playout): use jinja to configure liquidsoap outputs 2023-02-26 20:41:38 +02:00
jo 85aa0174c3 test(playout): more entrypoint config test cases 2023-02-26 20:41:38 +02:00
jo a397ad3e32 fix(playout): use package loader for liquidsoap templates 2023-02-26 20:41:38 +02:00
jo 843ce32579 fix(playout): flush liquidsoap response before sending new 2023-02-26 20:41:38 +02:00
jo eca320da5a chore: configure more outputs for dev setup 2023-02-26 20:41:38 +02:00
Jonas L 0aa2a92d3f
docs: add pulseaudio output in containers tutorial (#2166) 2023-02-26 20:39:10 +02:00
jo fdd77ba8de chore: push containers to docker.io
We should now mirror gcr.io with docker.io
2023-02-26 20:37:27 +02:00
jo 0dd034b7b6 ci: use bake file for container build 2023-02-26 20:37:27 +02:00
Jonas L d6d1b83513
chore: add security policy (#2378) 2023-02-26 20:35:03 +02:00
jo 9814958065 docs: stop providing maintenance releases for old distributions 2023-02-26 20:34:30 +02:00
jo 0583fe54fa docs: adapt c4 to our workflows 2023-02-26 20:34:30 +02:00
jo 5fbd4f54a2 fix(legacy): on air light fails when no shows are scheduled 2023-02-26 18:13:00 +01:00
jo 861698987c refactor: don't use f-string on logging statements
The strings are now be formatted if the logging level is enabled.
2023-02-26 19:09:51 +02:00
jo c414068c16 test: re-enable pylint logging-fstring-interpolation 2023-02-26 19:09:51 +02:00
jo c6940db289 feat: replace loguru with logging 2023-02-26 19:09:51 +02:00
Jonas L cced09f1ac
ci: update locales weekly, not for every commit (#2403) 2023-02-26 19:07:04 +02:00
jo 719d7cff36 fix(playout): use the same number of schedule queues 2023-02-25 21:43:37 +02:00
jo a59599971b fix(playout): skip the identified queue instead of the current
Calling queues.s0_skip, liquidsoap was actually calling queues.s8_skip, because the current queue was 8
2023-02-25 21:43:37 +02:00
jo d497c665cc refactor(playout): rename web_stream functions 2023-02-25 21:43:37 +02:00
jo 196fc1ddf8 fix(playout): use explicit ids for liquidsoap components 2023-02-25 21:43:37 +02:00
jo 8155eb1a22 chore(playout): change quotes 2023-02-25 21:43:37 +02:00
jo cd2cd66bdf refactor(playout): rename input_check_auth handlers 2023-02-25 21:43:37 +02:00
jo 2f9f60e639 refactor(playout): rename inputs sources variables 2023-02-25 21:43:37 +02:00
jo 8ed23c9e98 refactor(playout): rename inputs on_* handlers 2023-02-25 21:43:37 +02:00
jo 9a815d68ff refactor(playout): rename liquidsoap switch functions 2023-02-25 21:43:37 +02:00
jo d36fc56f51 refactor(playout): boot_timestamp can be static
The previous use of interactive was used to hack the boot_timestamp after a settings change/liquidsoap restart.
2023-02-25 21:43:37 +02:00
jo 14cfc4ea97 refactor(playout): rename dynamic_source to web_stream 2023-02-25 21:43:37 +02:00
jo 9b9defe935 refactor(playout): rename inputs config variables 2023-02-25 21:43:37 +02:00
jo 9518db6c75 refactor(playout): rename stream control variables 2023-02-25 21:43:37 +02:00
jo c610ea1885 feat(playout): remove unused liquidsoap output namespace 2023-02-25 21:43:37 +02:00
jo 0694c34ec0 feat(playout): remove unused liquidsoap restart function 2023-02-25 21:43:37 +02:00
jo a0f232ba66 feat(playout): remove unused liquidsoap outputs connection status 2023-02-25 21:43:37 +02:00
jo aed90d835f chore(playout): clean comments 2023-02-25 21:43:37 +02:00
jo 0eced23e4e refactor(playout): remove unused check_version 2023-02-25 21:43:37 +02:00
jo c95733191a refactor(playout): rename web_stream variables 2023-02-25 21:43:37 +02:00
jo 676aabe046 chore: mount local data dir for development 2023-02-25 21:43:37 +02:00
Ihor Hordiichuk 7955316f71 chore(legacy): translated using weblate (Ukrainian)
Currently translated at 100.0% (939 of 939 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/uk/
2023-02-25 20:13:05 +01:00
jo 53673632df ci: check if locale are up to date 2023-02-24 15:37:29 +02:00
jo dea3d1a297 chore(legacy): update locale 2023-02-24 15:37:29 +02:00
togir a2aca7ddb4
fix(legacy): do not delete audio file when removing artwork (#2395)
* fix: do not delete audio file when removing artwork

* replace glob with explicit filenames

---------

Co-authored-by: jo <ljonas@riseup.net>
2023-02-24 12:04:11 +01:00
renovate[bot] b0721edde5
chore(deps): update lycheeverse/lychee-action action to v1.6.1 (#2393)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-23 16:38:11 +02:00
renovate[bot] aca205dd4c
chore(deps): update lycheeverse/lychee-action action to v1.6.1 (#2394)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-23 16:38:02 +02:00
renovate[bot] ebcffb0778
chore(deps): update lycheeverse/lychee-action action to v1.6.0 (#2391)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-23 07:33:13 +02:00
renovate[bot] e5a07b635a
chore(deps): update lycheeverse/lychee-action action to v1.6.0 (#2392)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-23 07:33:00 +02:00
jo 654259824c feat(playout): use liquidsoap interactive variables 2023-02-22 15:05:40 +01:00
jo 394cf68b61 fix(playout): quote escape strings in liquidsoap entrypoint 2023-02-22 15:05:40 +01:00
jo 3c8bf6c9eb feat(playout): add jinja2 quote filter for liquidsoap 2023-02-22 15:05:40 +01:00
jo 1b027262ee feat(playout): use jinja2 env for template loading 2023-02-22 15:05:40 +01:00
jo ca45feeb6e chore: add extra mp3 icecast output for dev 2023-02-22 15:05:40 +01:00
renovate[bot] be0fbc0fde chore(deps): update dependency django-stubs to >=1.14.0,<1.16 2023-02-22 13:03:17 +01:00
jo eba6296ec2
chore: generate changelog for 3.0.2 2023-02-21 13:38:53 +01:00
jo d35ee41bb9 chore: release 3.0.2 2023-02-21 13:37:04 +01:00
jo 75bc72be6d chore: raise from specific exceptions 2023-02-21 13:25:35 +01:00
Jonas L 7c873edc19
test(playout): refresh snapshots after major upgrade (#2381) 2023-02-21 09:06:52 +02:00
Jonas L 63c4233833
fix(legacy): don't use dict assignment on object (#2384) 2023-02-21 08:56:14 +02:00
Jonas L ce36197ef7
fix(installer): create systemd dirs if missing (#2379) 2023-02-20 20:17:13 +02:00
jo 440ad29015 fix(legacy): ensure options is a dict during json encoding 2023-02-20 16:14:54 +01:00
renovate[bot] 6a626a61fc
chore(deps): update dependency mypy to v1.0.1 (#2374)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-17 21:24:12 +02:00
jo 87de25052a cuepoints analyzer disabled by default 2023-02-15 10:13:32 +02:00
jo f5e46c6f3d feat: configure cue points analysis per track type 2023-02-15 10:13:32 +02:00
jo 3a9ca109c3 refactor(analyzer): split analyze_cuepoint steps 2023-02-15 10:13:32 +02:00
jo 45b5c5caf1 chore: add legacy-migrations-version pre-commit hook 2023-02-15 10:13:32 +02:00
jo d68ae58854 ci: always print diff when schema changes 2023-02-15 10:13:32 +02:00
jo dabee61d9c chore: add dev target for quick setup 2023-02-11 00:31:37 +01:00
renovate[bot] b79434abf3 chore(deps): update amannn/action-semantic-pull-request action to v5.1.0 2023-02-10 22:02:48 +01:00
renovate[bot] 7cc3f59f40 chore(deps): update amannn/action-semantic-pull-request action to v5.1.0 2023-02-10 22:02:23 +01:00
renovate[bot] eb55859bea fix(deps): update dependency friendsofphp/php-cs-fixer to <3.14.5 2023-02-10 21:57:40 +01:00
Jonas L 1c768b9251
fix(installer): print unsupported distribution error (#2368) 2023-02-09 19:38:24 +02:00
renovate[bot] 6f42a469d0 chore(deps): update dependency pytest-xdist to >=3.1.0,<3.3 2023-02-08 12:10:18 +01:00
renovate[bot] 1a6d2cc371 chore(deps): update dependency mypy to v1 2023-02-06 23:40:56 +01:00
renovate[bot] 72fde5efee chore(deps): lock file maintenance (legacy/composer.json) 2023-02-06 15:09:11 +01:00
jo e92be34e2a fix(installer): only setup nginx on first install
Users usually want to setup a ssl certificate for LibreTime. Disabling any nginx config change unless it is the first install should prevent breaking a possible certbot setup.
2023-02-03 14:59:58 +01:00
jo 9a65e08890 fix(installer): print diff on file deployment 2023-02-03 14:59:58 +01:00
jo a5e4d17e20 fix(installer): allow different actions on template_file 2023-02-03 14:59:58 +01:00
jo 4b1a9e6604 test(playout): refresh snapshots after major upgrade 2023-02-03 12:40:30 +01:00
jo 35ba139c08 chore: remove venv activation 2023-02-03 12:40:30 +01:00
renovate[bot] c8957e3e1b chore(deps): update dependency syrupy to v4 2023-02-03 12:40:30 +01:00
jo 3606bd2b2b chore: add isort pre-commit hook 2023-02-03 12:38:58 +01:00
jo f8f6fda794 chore: raise from specific exceptions 2023-02-03 07:36:58 +02:00
jo 284fd5c688 chore: set dev dependencies version ranges 2023-02-03 07:36:58 +02:00
jo ea8306dd8f chore: fix pylint error 2023-02-02 08:23:03 +02:00
jo 79febaddf8 docs: add small faq for troubleshooting 2023-02-02 08:23:03 +02:00
jo 8431888b9c docs: check logs before checking services status 2023-02-02 08:23:03 +02:00
jo c34f02d916 fix(legacy): improve error messages and logs 2023-02-02 08:23:03 +02:00
jo 1e6c5a84d3 style: format code using black 2023-02-01 11:20:32 +01:00
renovate[bot] c3e60f7cd4 chore(deps): update pre-commit hook psf/black to v23 2023-02-01 11:20:32 +01:00
jo bd76971312 style: format code using black 2023-02-01 11:17:49 +01:00
renovate[bot] 9c9b06e13e chore(deps): update pre-commit hook psf/black to v23 2023-02-01 11:17:49 +01:00
renovate[bot] be98db2c0c
chore(deps): update docker/build-push-action action to v4 (#2352)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-31 09:26:09 +02:00
renovate[bot] 2c66ada854
chore(deps): update docker/build-push-action action to v4 (#2353)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-31 09:25:59 +02:00
renovate[bot] 6030ee2fb0 fix(deps): update dependency friendsofphp/php-cs-fixer to <3.14.4 2023-01-30 10:10:17 +01:00
jo 69120cad73 fix(legacy): move forked deps to the libretime namespace 2023-01-16 08:42:23 +02:00
jo 9807d1284f fix(legacy): refresh lock files 2023-01-16 08:42:23 +02:00
jo 2fc9e335a2 refactor(legacy): remove unused variable 2023-01-16 08:42:23 +02:00
jo 0db72614eb fix(legacy): advanced search by track type id
Advanced where clause didn't support matching primary keys.

Fixes #2344
2023-01-16 08:42:23 +02:00
Jonas L a0dfcab49f chore: add docs dev setup with the website (#2340)
This will clone the website repo, install the website dependencies and override the docs path to the current main repository docs path.
2023-01-16 08:42:23 +02:00
jo cfa90c89d1 refactor: improve backports imports 2023-01-16 08:42:23 +02:00
jo 6e27003409 ci: test project weekly 2023-01-16 08:42:23 +02:00
jo 715144a92d chore: move isort config to pyproject.toml 2023-01-16 08:42:23 +02:00
jo 14beb885a3 chore: split test and coverage tasks 2023-01-16 08:42:23 +02:00
jo 2ccd93299a chore: don't use venv activation in makefile 2023-01-16 08:42:23 +02:00
jo beff69ca5b chore: update cpu count lookup 2023-01-16 08:42:23 +02:00
Jonas L 0817dfde04 chore: improve dockerfile run calls (#2273) 2023-01-16 08:42:23 +02:00
Kyle Robbertze 111fdadaaa docs: add DOCKER_BUILDKIT env variable for docker-compose v1 (#2270)
This is required for the --mount cache used to cache pip packages
2023-01-16 08:42:23 +02:00
jo 494157750c fix(legacy): move forked deps to the libretime namespace 2023-01-12 23:15:12 +02:00
jo 284165976a chore(legacy): refresh lock file 2023-01-12 23:15:12 +02:00
jo ec2c560831 refactor(legacy): remove unused variable 2023-01-08 22:40:48 +02:00
jo fcfe52ec9d fix(legacy): advanced search by track type id
Advanced where clause didn't support matching primary keys.

Fixes #2344
2023-01-08 22:40:48 +02:00
Jonas L 87bc388c3e
chore: add docs dev setup with the website (#2340)
This will clone the website repo, install the website dependencies and override the docs path to the current main repository docs path.
2023-01-04 09:00:27 +02:00
renovate[bot] 29a21c24a2 fix(deps): update dependency friendsofphp/php-cs-fixer to <3.13.3 2023-01-03 04:38:45 +01:00
renovate[bot] 9d2de9f83e chore(deps): lock file maintenance (legacy/composer.json) 2022-12-26 15:59:15 +01:00
jo da07a48244 ci: don't squash commits during docs sync 2022-12-20 17:05:32 +01:00
jo 6a15dd0091 ci: don't squash commits during docs sync 2022-12-20 17:03:06 +01:00
jo 6826443c2b
chore: generate changelog for 3.0.1 2022-12-20 16:41:02 +01:00
jo aaa442e7e9
chore: generate changelog for 3.0.1 2022-12-20 16:29:19 +01:00
jo 37ba9d0986 chore: release 3.0.1 2022-12-20 16:27:29 +01:00
jo 20b18d976e ci: pin vale version to v2.21.3 2022-12-20 16:27:29 +01:00
jo 8e1658c2e9 docs: no need to update release note path 2022-12-20 16:27:29 +01:00
jo 86ceac76d8 chore: release 3.0.1 2022-12-20 16:16:30 +01:00
jo b0cdd8ff06 ci: pin vale version to v2.21.3 2022-12-20 16:16:30 +01:00
jo e258bd2143 docs: no need to update release note path 2022-12-20 16:16:30 +01:00
jo f56e7ea8fd fix(worker): replace deprecated cgi.parse_header 2022-12-20 15:54:44 +01:00
jo fa5bd5ed11 ci: sync docs with libretime/website repository 2022-12-20 15:31:19 +01:00
jo dc0353c1d3 chore: remove website setup 2022-12-20 15:31:19 +01:00
jo 16096b6b83 chore: remove website dir
The website has moved to https://github.com/libretime/website
2022-12-20 15:31:19 +01:00
jo b461394801 ci: sync docs with libretime/website repository 2022-12-20 16:09:28 +02:00
jo 583169e079 chore: remove website setup 2022-12-20 16:09:28 +02:00
jo 169b7aff90 chore: remove website dir
The website has moved to https://github.com/libretime/website
2022-12-20 16:09:28 +02:00
renovate[bot] b4fc7b6f4b fix(deps): update dependency friendsofphp/php-cs-fixer to <3.13.2 2022-12-19 14:23:08 +01:00
Jonas L d9fe7d8712 fix(legacy): log errors on connect check failure (#2317) 2022-12-16 19:38:33 +01:00
Jonas L 5bdb2628b1 fix(legacy): add log entry on task run (#2316) 2022-12-16 19:38:17 +01:00
Jonas L 58dd5bf903
fix(legacy): log errors on connect check failure (#2317) 2022-12-16 20:07:38 +02:00
Jonas L 13852ad7a7
fix(legacy): add log entry on task run (#2316) 2022-12-16 20:06:56 +02:00
renovate[bot] f8630e7a24 chore(deps): update dependency drf-spectacular to >=0.22.1,<0.26 2022-12-13 18:59:21 +01:00
renovate[bot] 5a8c357817
chore(deps): lock file maintenance (website/package.json) (#2313)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-12 08:10:20 +02:00
renovate[bot] 103c777aba
chore(deps): lock file maintenance (website/package.json) (#2312)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-12 08:10:09 +02:00
renovate[bot] 1069d54c64 chore(deps): update pre-commit hook psf/black to v22.12.0 2022-12-09 19:09:37 +01:00
renovate[bot] e7dc91540a chore(deps): update pre-commit hook psf/black to v22.12.0 2022-12-09 19:09:30 +01:00
renovate[bot] 9ee1f39617 chore(deps): update pre-commit hook asottile/pyupgrade to v3.3.1 2022-12-09 15:46:59 +01:00
renovate[bot] ea24892cb1 chore(deps): update pre-commit hook codespell-project/codespell to v2.2.2 2022-12-09 15:46:06 +01:00
renovate[bot] 05e46d7aa2 chore(deps): update pre-commit hook pre-commit/pre-commit-hooks to v4.4.0 2022-12-09 15:45:55 +01:00
renovate[bot] 2c5b965376
chore(deps): update amannn/action-semantic-pull-request action to v5 (#2297)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-09 15:44:55 +01:00
renovate[bot] ff364bb406 chore(deps): update lycheeverse/lychee-action action to v1.5.4 2022-12-09 14:44:20 +00:00
renovate[bot] b36e184e97
chore(deps): lock file maintenance (website/package.json) (#2288)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-09 15:41:01 +01:00
Jonas L c09ff597d7
ci: enable renovate for 3.0.x (#2277) 2022-12-09 16:19:39 +02:00
jo 3b8638cd15 fix(installer): set home and login when running as postgres
Remove warnings if the current dir is not writable by postgres
2022-12-09 07:33:46 +02:00
jo 1f7852d13b fix(installer): install missing sudo 2022-12-09 07:33:46 +02:00
jo f231364915 fix(installer): set home and login when running as postgres
Remove warnings if the current dir is not writable by postgres
2022-12-09 07:33:19 +02:00
jo bea28f4b57 fix(installer): install missing sudo 2022-12-09 07:33:19 +02:00
jo 29a02e6797 refactor: improve backports imports 2022-12-07 15:59:52 +02:00
jo dbf4667bd8 fix(worker): replace deprecated cgi.parse_header 2022-12-07 15:59:52 +02:00
jo 1f4d42fee5 ci: test project weekly 2022-12-07 15:59:52 +02:00
jo f394336efc chore: move isort config to pyproject.toml 2022-12-07 15:59:52 +02:00
jo 5738edb49c chore: split test and coverage tasks 2022-12-07 15:59:52 +02:00
jo 33e13e877e chore: don't use venv activation in makefile 2022-12-07 15:59:52 +02:00
jo 1647c2e4e8 chore: update cpu count lookup 2022-12-07 15:59:52 +02:00
Jonas L f9fc920d1f
chore: improve dockerfile run calls (#2273) 2022-12-07 15:29:30 +02:00
Kyle Robbertze 237a99bb57
docs: add DOCKER_BUILDKIT env variable for docker-compose v1 (#2270)
This is required for the --mount cache used to cache pip packages
2022-12-07 13:03:49 +01:00
Jonas L 8a516c14c5
chore(deps): revert update python docker tag to v3.11 (#2245) (#2269)
This reverts commit d2d4ebdf82.
2022-12-07 10:39:18 +01:00
renovate[bot] f585172850
chore(deps): update dependency django to v4 (#2268)
* chore(deps): update dependency django to v4

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jo <ljonas@riseup.net>
2022-12-07 10:20:36 +01:00
renovate[bot] 0900b11ef1 chore(deps): update pre-commit hook asottile/pyupgrade to v3.3.1 2022-12-07 03:05:00 +01:00
renovate[bot] d2d4ebdf82
chore(deps): update python docker tag to v3.11 (#2245)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-06 09:58:52 +02:00
renovate[bot] a8d4352a0e
chore(deps): update pre-commit hook asottile/pyupgrade to v3.3.0 (#2266)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-03 13:21:34 +02:00
renovate[bot] 79a5ae1d7a chore(deps): update pre-commit hook asottile/pyupgrade to v3.2.3 2022-11-29 20:41:14 +00:00
renovate[bot] 3e2a6a55e7
chore(deps): lock file maintenance (website/package.json) (#2264)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-28 07:39:29 +02:00
renovate[bot] 9b295330e2 chore(deps): update pre-commit hook pre-commit/pre-commit-hooks to v4.4.0 2022-11-24 03:13:55 +01:00
renovate[bot] 0bdd41b7b7
chore(deps): lock file maintenance (website/package.json) (#2261)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-21 07:38:26 +02:00
renovate[bot] 556355761f
chore(deps): lock file maintenance (website/package.json) (#2259)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-14 07:53:56 +02:00
renovate[bot] 54641d455e
chore(deps): lock file maintenance (legacy/composer.json) (#2258)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-14 07:53:44 +02:00
renovate[bot] 7049e88058 chore(deps): update pre-commit hook asottile/pyupgrade to v3.2.2 2022-11-10 19:41:57 +00:00
renovate[bot] bc8fe72df4
chore(deps): update pre-commit hook asottile/pyupgrade to v3.2.1 (#2256)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-10 07:24:58 +02:00
renovate[bot] de5176dd49
chore(deps): update lycheeverse/lychee-action action to v1.5.4 (#2255)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-09 14:25:09 +02:00
renovate[bot] f8a75e6f87
chore(deps): update lycheeverse/lychee-action action to v1.5.3 (#2254)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-09 06:16:23 +02:00
renovate[bot] 3db624c51a
chore(deps): lock file maintenance (website/package.json) (#2253)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-07 08:09:52 +02:00
Weblate (bot) 67fc287d98
chore(legacy): translated using weblate (Ukrainian) (#2252)
Currently translated at 100.0% (940 of 940 strings)

Translation: LibreTime/Legacy
Translate-URL: https://hosted.weblate.org/projects/libretime/legacy/uk/

Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
2022-11-07 08:09:17 +02:00
renovate[bot] 3fed60e78d chore(deps): update lycheeverse/lychee-action action to v1.5.2 2022-11-03 15:16:25 +01:00
renovate[bot] 6564d18442
fix(deps): update dependency friendsofphp/php-cs-fixer to <3.13.1 (#2249)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-01 08:27:47 +02:00
renovate[bot] b088551eb6
chore(deps): lock file maintenance (website/package.json) (#2248)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-31 08:22:49 +02:00
renovate[bot] 2d321db965
chore(deps): lock file maintenance (legacy/composer.json) (#2247)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-31 08:22:37 +02:00
renovate[bot] d5658b83bf
chore(deps): update pre-commit hook asottile/pyupgrade to v3.2.0 (#2246)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-30 11:03:35 +02:00
Jonas L 696666475c
fix: remove systemd ProtectHome feature (#2244)
Fix #2242
2022-10-19 12:37:39 +02:00
Jonas L 959c0378d6
fix: remove systemd ProtectHome feature (#2243)
Fix #2242
2022-10-19 12:27:02 +02:00
renovate[bot] d1d69efeb4
chore(deps): update amannn/action-semantic-pull-request action to v5.0.2 (#2241)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-17 12:52:50 +02:00
Jonas L 7f4ce865d4
docs(playout): add simple inputs pipeline schema (#2240) 2022-10-17 11:57:08 +02:00
renovate[bot] 71b4bc7cc4
chore(deps): lock file maintenance (website/package.json) (#2239)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-17 07:02:10 +02:00
renovate[bot] 13756dd92c
chore(deps): lock file maintenance (legacy/composer.json) (#2238)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-17 07:01:27 +02:00
renovate[bot] dc56f7ee6c chore(deps): update pre-commit hook codespell-project/codespell to v2.2.2 2022-10-15 01:44:30 +00:00
renovate[bot] 6124997e9d
chore(deps): update amannn/action-semantic-pull-request action to v5.0.1 (#2236)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-14 15:29:21 +02:00
jo d73555fa65 style(legacy): format using php-cs-fixer 2022-10-12 17:29:28 +02:00
renovate[bot] ca535d1a10 fix(deps): update dependency friendsofphp/php-cs-fixer to <3.12.1 2022-10-12 17:29:28 +02:00
jo 3694b31610 ci: enable renovate bot on 3.0.x 2022-10-12 16:52:27 +02:00
jo 56beddbee5 ci: run tests on 3.0.x 2022-10-12 16:52:27 +02:00
Jonas L 730548b891
test: liquidsoap package from ppa is version 1.4.2 (#2233)
The PPA was previously not properly installed in the dev container.

Partial cherry-pick from 499f4d37ed
2022-10-12 16:16:47 +02:00
renovate[bot] 2bcf00f559 chore(deps): update amannn/action-semantic-pull-request action to v5 2022-10-11 20:42:22 +02:00
Jonas L cff98f2d23
feat(legacy): remove db allowed_cors_origins preference (#2095)
- Remove after deprecation in eb8e7b3415
2022-10-11 13:38:31 +02:00
jo e54c8d22e1 feat: delete cc_pref stream preferences rows
- Delete the previously deprecated cc_pref stream preferences rows.
2022-10-11 11:32:51 +02:00
jo 8a6b5907be feat: drop cc_stream_setting table
- Remove the previously deprecated cc_stream_setting table.
2022-10-11 11:32:51 +02:00
jo 3d124eba7e fix(api): allow single digit version for legacy schema 2022-10-11 11:32:51 +02:00
jo 4ada25a3ff fix(playout): add types
This reverts commit d6348d5575.
2022-10-11 09:28:52 +02:00
jo 0e1dfaa9ff refactor: upgrade code to Python 3.8 2022-10-11 09:28:52 +02:00
renovate[bot] 92ac838383
chore(deps): update pre-commit hook asottile/pyupgrade to v3.1.0 (#2230)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-11 09:28:11 +02:00
jo ea8131ec43 feat: drop Python 3.7 support 2022-10-10 23:49:10 +02:00
jo 182d1616af chore: add snapshot target 2022-10-10 23:29:21 +02:00
jo 1742890370 fix(playout): remove outdated liquidsoap code
Fixes #1482
2022-10-10 23:29:21 +02:00
jo dbfb22646a fix(legacy): set platform requirements to php ^7.4 2022-10-10 23:27:55 +02:00
jo f4b4a7fadd fix(deps): update dependency league/uri to v6.7.2 2022-10-10 22:04:48 +02:00
renovate[bot] b585111938
chore(deps): update dependency django-filter to v22 (#2225)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-10 21:44:29 +02:00
renovate[bot] dd84c3b4a5
fix(deps): update dependency adbario/php-dot-notation to v3 (#2226)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-10 21:43:58 +02:00
renovate[bot] 78b43d92bf
chore(deps): update dependency click to >=8.0.4,<8.2 (#2224)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-10 21:43:02 +02:00
Jonas L 499f4d37ed
test: liquidsoap package from ppa is version 1.4.2 (#2223)
The PPA was previously not properly installed in the dev container.
2022-10-10 21:14:41 +02:00
jo 5817750b62 feat: drop Liquidsoap 1.3 support 2022-10-10 20:11:33 +02:00
jo ace9365e92 feat: drop Liquidsoap 1.1 support 2022-10-10 20:11:33 +02:00
jo 7d514a9306 chore: list distribution releases by release date
Old releases should be popped from the left/top and new releases should be added to the right/bottom of any distro release list.
2022-10-10 20:11:33 +02:00
jo 5eda6093f4 feat: drop Debian Buster support
Fixes #2036
2022-10-10 20:11:33 +02:00
jo d29d837d01 feat: drop Python 3.6 support 2022-10-10 20:11:33 +02:00
jo 448cff7600 feat: drop Ubuntu Bionic support
Fixes #2035
2022-10-10 20:11:33 +02:00
jo 26bcb6a90d chore: generate changelog for 3.0.0 2022-10-10 17:54:34 +02:00
Jonas L 96ded62c32
chore: release 3.0.0 (#2216) 2022-10-10 17:51:15 +02:00
Jonas L d03fe5bf7d
fix: disable some systemd security features on bionic (#2219)
Fixes #2217
2022-10-10 16:57:56 +02:00
jo d726a097b0 test(analyzer): fix wrong bit_rate values
Mutagen >=1.46 properly compute the bit_rate for wav files.
2022-10-10 12:21:55 +02:00
renovate[bot] 019b4686ae chore(deps): update dependency mutagen to >=1.45.1,<1.47 2022-10-10 12:21:55 +02:00
renovate[bot] 8a225167d4
chore(deps): lock file maintenance (legacy/composer.json) (#2214)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-10 11:57:56 +02:00
renovate[bot] b45a992173
chore(deps): lock file maintenance (website/package.json) (#2215)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-10 11:53:27 +02:00
Jonas L e991870e2d
chore: clean unmaintained centos files (#2212)
Fix #1475
2022-10-08 08:07:53 +02:00
Jonas L de7f87a092
chore: clean pre-commit config (#2211) 2022-10-08 08:01:10 +02:00
jo 888cdcb30a chore(legacy): update locale files 2022-10-07 16:33:21 +02:00
jo 181f770dbb fix(legacy): gracefully handle missing asset checksum 2022-10-07 16:33:21 +02:00
jo 966ccfa29a docs(legacy): how to add a new language 2022-10-07 16:33:21 +02:00
jo 5ed0bf67cb fix(legacy): jquery i18n translations for plupload 2022-10-07 16:33:21 +02:00
jo 9a005138a7 fix(legacy): missing plupload uk_UA translation 2022-10-07 16:33:21 +02:00
renovate[bot] 55b95f3c31
chore(deps): update pre-commit hook psf/black to v22.10.0 (#2209)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-07 06:55:06 +02:00
Jonas L e04ab7679a
chore: move shell tools to pre-commit (via docker) (#2207) 2022-10-05 08:27:15 +02:00
Jonas L 4a671a1b3b
fix: clean exit by catching keyboard interrupt (#2206) 2022-10-04 14:18:26 +02:00
renovate[bot] 119d06fb7c
chore(deps): update pre-commit hook asottile/pyupgrade to v3 (#2205)
* chore(deps): update pre-commit hook asottile/pyupgrade to v3

* Remove unecessary --py3-plus flag

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jonas L <jooola@users.noreply.github.com>
2022-10-04 12:43:55 +02:00
renovate[bot] 845d8061f6
chore(deps): update pre-commit hook asottile/pyupgrade to v2.38.4 (#2204)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-04 07:32:02 +02:00
Jonas L 2f78318abb
chore: add test-stream-input tool (#2202) 2022-10-03 17:53:58 +02:00
jo 39413a6bda chore: generate changelog for 3.0.0-beta.2 2022-10-03 13:00:36 +02:00
796 changed files with 41175 additions and 38419 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

View File

@ -4,6 +4,8 @@ HDA
ro
# Names
conet
falso
flor
# TODO: See https://github.com/savonet/liquidsoap/issues/1654

View File

@ -1,3 +1,3 @@
LIBRETIME_VERSION=main
LIBRETIME_CONFIG_FILEPATH=./docker/config.dev.yml
LIBRETIME_CONFIG_FILEPATH=./dev/config.yml
NGINX_CONFIG_FILEPATH=./docker/nginx.conf

View File

@ -5,6 +5,6 @@ contact_links:
url: https://discourse.libretime.org/
about: Please find existing questions and discussions here.
- name: LibreTime Chat
url: https://chat.libretime.org/
- name: LibreTime Chat (#libretime:matrix.org)
url: https://matrix.to/#/#libretime:matrix.org
about: Discuss with the LibreTime community.

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"}

19
.github/renovate.json vendored
View File

@ -6,8 +6,11 @@
"commitMessageAction": "lock file maintenance",
"commitMessageExtra": "({{packageFile}})",
"branchTopic": "lock-file-maintenance-{{packageFile}}",
"schedule": ["after 4am and before 5am on monday"]
"schedule": ["after 4am and before 5am on monday"],
"automerge": true,
"automergeType": "branch"
},
"baseBranches": ["main"],
"labels": ["dependencies"],
"packageRules": [
{
@ -24,17 +27,9 @@
"rangeStrategy": "widen"
},
{
"matchPaths": ["website/**"],
"addLabels": ["javascript"]
},
{
"matchUpdateTypes": ["patch"],
"matchPaths": [
".github/workflows/*",
".pre-commit-config.yaml",
"website/**"
],
"automerge": true
"matchManagers": ["github-actions", "pre-commit"],
"automerge": true,
"automergeType": "branch"
}
]
}

57
.github/stale.yml vendored
View File

@ -1,57 +0,0 @@
# Configuration for probot-stale - https://github.com/probot/stale
# Number of days of inactivity before an Issue or Pull Request becomes stale (5 months)
daysUntilStale: 150
# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. (1 month)
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
daysUntilClose: 30
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
exemptLabels:
- "status: pinned"
- "status: maybe later"
- "security"
# Set to true to ignore issues in a project (defaults to false)
exemptProjects: false
# Set to true to ignore issues in a milestone (defaults to false)
exemptMilestones: true
# Set to true to ignore issues with an assignee (defaults to false)
exemptAssignees: true
# Label to use when marking as stale
staleLabel: "status: stalled"
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
activity in the last 5 months. It will be closed if no activity occurs in
the next month.
Please chat to us on [discourse](https://discourse.libretime.org/) or
ask for help on our [chat](https://chat.libretime.org/) if you have any
questions or need further support with getting this issue resolved.
You may also label an issue as *pinned* if you would like to make sure
that it does not get closed by this bot.
# Comment to post when removing the stale label.
# unmarkComment: >
# Your comment here.
# Comment to post when closing a stale Issue or Pull Request.
closeComment: >
This issue has been automatically closed after is was marked as stale and
did not receive any further inputs.
Feel free to let us know on [discourse](https://discourse.libretime.org/) or
ask for help on our [chat](https://chat.libretime.org/) if you feel this
issue should not have been closed.
Thank you for your contributions.
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30

View File

@ -25,11 +25,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- uses: actions/cache@v3
- uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ inputs.context }}-${{ hashFiles(format('{0}/{1}', inputs.context, '**/setup.py')) }}
@ -51,10 +51,8 @@ jobs:
fail-fast: false
matrix:
release:
- buster
- bullseye
- bionic
- focal
- bullseye
- jammy
container:
@ -65,9 +63,9 @@ jobs:
shell: bash
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/cache@v3
- uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ matrix.release }}-pip-${{ inputs.context }}-${{ hashFiles(format('{0}/{1}', inputs.context, '**/setup.py')) }}
@ -75,11 +73,11 @@ jobs:
${{ matrix.release }}-pip-${{ inputs.context }}
- name: Test
run: make test
run: make test-coverage
working-directory: ${{ inputs.context }}
- name: Report coverage
uses: codecov/codecov-action@v3
uses: codecov/codecov-action@v5
with:
files: ${{ inputs.context }}/coverage.xml
flags: ${{ inputs.context }}

View File

@ -1,31 +0,0 @@
name: Build container
description: Build and push a container
inputs:
target:
required: true
runs:
using: composite
steps:
- uses: docker/metadata-action@v4
id: meta
with:
images: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ inputs.target }}
tags: |
type=ref,event=branch
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- uses: docker/build-push-action@v3
with:
context: .
pull: true
push: ${{ github.event_name == 'push' }}
build-args: |
LIBRETIME_VERSION=${{ env.LIBRETIME_VERSION }}
target: ${{ inputs.target }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha,scope=${{ inputs.target }}
cache-to: type=gha,scope=${{ inputs.target }},mode=max

View File

@ -1,21 +1,27 @@
name: Analyzer
on:
workflow_dispatch:
push:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/analyzer.yml
- analyzer/**
- shared/**
- tools/python*
pull_request:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/analyzer.yml
- analyzer/**
- shared/**
- tools/python*
schedule:
- cron: 0 1 * * 1
jobs:
python:

View File

@ -1,21 +1,27 @@
name: API Client
on:
workflow_dispatch:
push:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/api-client.yml
- api-client/**
- shared/**
- tools/python*
pull_request:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/api-client.yml
- api-client/**
- shared/**
- tools/python*
schedule:
- cron: 0 1 * * 1
jobs:
python:

View File

@ -1,6 +1,7 @@
name: API schema
on:
workflow_dispatch:
push:
branches: [main]
paths:
@ -20,15 +21,15 @@ jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v4
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- uses: actions/cache@v3
- uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-api-${{ hashFiles('api/**/setup.py') }}
@ -41,7 +42,7 @@ jobs:
- name: Get pull request commit range
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
if: github.event_name == 'push'
@ -53,11 +54,11 @@ jobs:
git checkout $commit
make --quiet schema
git diff -- schema.yml
git add schema.yml
git diff-index --quiet HEAD -- || {
echo "ERROR: Schema is outdated for commit $commit"
git show --quiet
git diff -- schema.yml
exit 1
}
done
@ -70,11 +71,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
repository: libretime/client
path: client

View File

@ -1,21 +1,27 @@
name: API
on:
workflow_dispatch:
push:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/api.yml
- api/**
- shared/**
- tools/python*
pull_request:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/api.yml
- api/**
- shared/**
- tools/python*
schedule:
- cron: 0 1 * * 1
jobs:
python:
@ -30,10 +36,8 @@ jobs:
fail-fast: false
matrix:
release:
- buster
- bullseye
- bionic
- focal
- bullseye
- jammy
services:
@ -58,9 +62,9 @@ jobs:
LIBRETIME_DATABASE_HOST: postgres
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/cache@v3
- uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ matrix.release }}-pip-api-${{ hashFiles('api/**/setup.py') }}
@ -68,11 +72,11 @@ jobs:
${{ matrix.release }}-pip-api
- name: Test
run: make test
run: make test-coverage
working-directory: api
- name: Report coverage
uses: codecov/codecov-action@v3
uses: codecov/codecov-action@v5
with:
files: api/coverage.xml
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

@ -1,21 +0,0 @@
name: Command
on:
issue_comment:
types: [created]
jobs:
dispatch:
name: Dispatch
runs-on: ubuntu-latest
steps:
- name: Dispatch website preview
uses: peter-evans/slash-command-dispatch@v3
with:
token: ${{ secrets.COMMAND_DISPATCH_TOKEN }}
issue-type: pull-request
dispatch-type: workflow
commands: website-preview
static-args: |
pull-request-number=${{ github.event.issue.number }}

View File

@ -3,86 +3,101 @@ name: Container
on:
push:
tags: ["[0-9]+.[0-9]+.[0-9]+*"]
branches: [main]
branches: [main, stable-*]
pull_request:
branches: [main]
branches: [main, stable-*]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
jobs:
build:
meta:
runs-on: ubuntu-latest
env:
REGISTRY: ghcr.io
NAMESPACE: ${{ github.repository_owner }}
strategy:
matrix:
target: [analyzer, api, legacy, playout, worker]
if: ${{ github.repository_owner == 'libretime' }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v2
- uses: docker/login-action@v2
- name: Update Docker Hub description
if: github.event_name == 'push'
uses: peter-evans/dockerhub-description@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
repository: libretime/libretime-${{ matrix.target }}
readme-filepath: ./README.md
- uses: docker/metadata-action@v5
id: meta
with:
bake-target: ${{ matrix.target }}
images: |
ghcr.io/libretime/libretime-${{ matrix.target }}
docker.io/libretime/libretime-${{ matrix.target }}
tags: |
type=ref,event=branch
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- name: Upload metadata bake file
uses: actions/upload-artifact@v4
with:
name: meta-${{ matrix.target }}
path: ${{ steps.meta.outputs.bake-file }}
build:
needs: [meta]
runs-on: ubuntu-latest
if: ${{ github.repository_owner == 'libretime' }}
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- name: Login ghcr.io
if: github.event_name == 'push'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login docker.io
if: github.event_name == 'push'
uses: docker/login-action@v3
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Download all metadata bake files
uses: actions/download-artifact@v4
with:
pattern: meta-*
- name: Guess LIBRETIME_VERSION
run: |
make VERSION
echo "LIBRETIME_VERSION=$(cat VERSION | tr -d [:blank:])" >> $GITHUB_ENV
- name: Build python-builder
uses: docker/build-push-action@v3
- name: Build
uses: docker/bake-action@v5
with:
context: .
pull: true
target: python-builder
cache-from: type=gha,scope=python-builder
cache-to: type=gha,scope=python-builder,mode=max
- name: Build python-base
uses: docker/build-push-action@v3
with:
context: .
pull: true
target: python-base
cache-from: type=gha,scope=python-base
cache-to: type=gha,scope=python-base,mode=max
- name: Build python-base-ffmpeg
uses: docker/build-push-action@v3
with:
context: .
pull: true
target: python-base-ffmpeg
cache-from: type=gha,scope=python-base-ffmpeg
cache-to: type=gha,scope=python-base-ffmpeg,mode=max
- name: Build analyzer
uses: ./.github/workflows/actions/build-container
with:
target: libretime-analyzer
- name: Build api
uses: ./.github/workflows/actions/build-container
with:
target: libretime-api
- name: Build playout
uses: ./.github/workflows/actions/build-container
with:
target: libretime-playout
- name: Build worker
uses: ./.github/workflows/actions/build-container
with:
target: libretime-worker
- name: Build legacy
uses: ./.github/workflows/actions/build-container
with:
target: libretime-legacy
push: ${{ github.event_name == 'push' }}
files: |
docker-bake.json
meta-analyzer/docker-metadata-action-bake.json
meta-api/docker-metadata-action-bake.json
meta-legacy/docker-metadata-action-bake.json
meta-playout/docker-metadata-action-bake.json
meta-worker/docker-metadata-action-bake.json
set: |
*.cache-from=type=gha,scope=container
*.cache-to=type=gha,scope=container,mode=max
*.args.LIBRETIME_VERSION=${{ env.LIBRETIME_VERSION }}

View File

@ -15,16 +15,12 @@ jobs:
strategy:
matrix:
include:
- distribution: ubuntu
release: bionic
- distribution: ubuntu
release: focal
- distribution: ubuntu
release: jammy
- distribution: debian
release: buster
- distribution: debian
release: bullseye
- distribution: ubuntu
release: jammy
- distribution: debian
release: bookworm
@ -34,10 +30,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Login to the Container registry
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
@ -59,7 +55,7 @@ jobs:
COPY packages.list packages.list
EOF
[[ "${{ matrix.release }}" =~ "bionic|focal" ]] && \
[[ "${{ matrix.release }}" == "focal" ]] && \
cat <<EOF >> Dockerfile
RUN DEBIAN_FRONTEND=noninteractive apt-get --quiet update && \
DEBIAN_FRONTEND=noninteractive apt-get --quiet install -y software-properties-common && \
@ -82,7 +78,7 @@ jobs:
EOF
- name: Build and push
uses: docker/build-push-action@v3
uses: docker/build-push-action@v6
with:
context: .
push: ${{ github.repository_owner == 'libretime' }}

View File

@ -2,20 +2,21 @@ name: Docs
on:
push:
branches: [main]
branches: [main, stable-*]
paths:
- .github/vale/**
- .github/workflows/docs.yml
- docs/**
- website/**
pull_request:
branches: [main]
branches: [main, stable-*]
paths:
- .github/vale/**
- .github/workflows/docs.yml
- docs/**
- website/**
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
jobs:
lint:
@ -23,9 +24,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/cache@v3
- uses: actions/cache@v4
with:
path: |
/usr/local/bin/vale*
@ -42,6 +43,7 @@ jobs:
errata-ai/vale \
vale_{version}_Linux_64-bit.tar.gz --extract vale \
/usr/local/bin/vale \
--version v2.21.3 \
--version-file '{destination}.version'
- name: Add annotations matchers
@ -51,5 +53,26 @@ jobs:
- name: Run Vale
run: |
vale sync
vale --output line docs website/src/pages || true
vale --output line docs || true
vale --output line --minAlertLevel=error docs/releases
sync:
name: Sync
if: >
github.repository_owner == 'libretime' &&
github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/checkout@v4
with:
repository: libretime/website
path: website
ssh-key: "${{ secrets.WEBSITE_DEPLOY_KEY }}"
- name: Sync docs changes
run: tools/ci-sync-docs.sh ${{ github.event.before }}..${{ github.sha }}

View File

@ -10,6 +10,9 @@ on:
required: true
default: "5"
permissions:
issues: write
jobs:
find_closed_references:
if: github.repository_owner == 'libretime'
@ -17,9 +20,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version: "16"
@ -27,7 +30,7 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
issueLimit: ${{ github.event.inputs.issueLimit || '5' }}
ignore: .git,/docs/releases/*,/website/versioned*,CHANGELOG.md
ignore: .git,/docs/releases/*,CHANGELOG.md
find_broken_links:
if: github.repository_owner == 'libretime'
@ -35,9 +38,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/cache@v3
- uses: actions/cache@v4
with:
path: .lycheecache
key: housekeeping-find-broken-links-${{ github.sha }}
@ -45,23 +48,59 @@ jobs:
- name: Check Links
id: lychee
uses: lycheeverse/lychee-action@v1.5.1
uses: lycheeverse/lychee-action@v2.1.0
with:
args: >-
'**/*.md'
--exclude-path 'website/versioned_docs'
--require-https
--exclude-all-private
--exclude-mail
--exclude 'example\.(com|org)'
--exclude '\$server_name\$request_uri'
--exclude '%7Bvars.version%7D'
--exclude 'https://dir.xiph.org/cgi-bin/yp-cgi'
--exclude 'https://radio.indymedia.org/cgi-bin/yp-cgi'
--exclude 'https://www.ascap.com'
--exclude 'https://www.youtube-nocookie.com'
--exclude 'github\.com/libretime/libretime/(issues|pulls)'
--exclude 'https://packages.ubuntu.com/bionic/php7.2'
--exclude 'https://packages.ubuntu.com/bionic/python3'
--cache
--max-cache-age 2d
fail: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
find_stale_issues:
if: github.repository_owner == 'libretime'
name: Find stale issues
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-issue-message: >
This issue has been automatically marked as stale because it has not had
activity in the last 5 months. It will be closed if no activity occurs in
the next month.
Please chat to us on the [forum](https://discourse.libretime.org/) or
ask for help on [#libretime:matrix.org](https://matrix.to/#/#libretime:matrix.org)
if you have any questions or need further support with getting this issue resolved.
You may also label an issue as *pinned* if you would like to make sure
that it does not get closed by this bot.
close-issue-message: >
This issue has been automatically closed after is was marked as stale and
did not receive any further inputs.
Feel free to let us know on the [forum](https://discourse.libretime.org/) or
ask for help on [#libretime:matrix.org](https://matrix.to/#/#libretime:matrix.org)
if you feel this issue should not have been closed.
Thank you for your contributions.
days-before-issue-stale: 150
days-before-issue-close: 30
stale-issue-label: "status: stalled"
exempt-issue-labels: "status: pinned,status: maybe later,security,is: feature-request"
exempt-issue-assignees: true
exempt-issue-milestones: true

View File

@ -1,20 +1,24 @@
name: Legacy
on:
workflow_dispatch:
push:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/legacy.yml
- api/**
- legacy/**
pull_request:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/legacy.yml
- api/**
- legacy/**
schedule:
- cron: 0 1 * * 1
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
@ -26,12 +30,10 @@ jobs:
fail-fast: false
matrix:
include:
- php-version: "7.2" # Bionic
- php-version: "7.3" # Buster
- php-version: "7.4" # Bullseye, Focal
- php-version: "7.4" # Focal, Bullseye
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
@ -46,14 +48,12 @@ jobs:
fail-fast: false
matrix:
include:
- php-version: "7.2" # Bionic
- php-version: "7.3" # Buster
- php-version: "7.4" # Bullseye, Focal
- php-version: "7.4" # Focal, Bullseye
env:
ENVIRONMENT: testing
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup PostgreSQL
run: |
@ -62,6 +62,7 @@ jobs:
sudo -u postgres psql -c 'CREATE DATABASE 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 'ALTER DATABASE libretime OWNER TO libretime;'
sudo -u postgres psql -c 'ALTER USER libretime CREATEDB;'
- name: Setup PHP
@ -72,9 +73,9 @@ jobs:
- name: Get Composer Cache Directory
id: composer-cache
run: |
echo "::set-output name=dir::$(composer config cache-files-dir)"
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
- uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
@ -84,3 +85,36 @@ jobs:
- name: Run tests
run: make test
working-directory: legacy
locale:
runs-on: ubuntu-latest
if: >
github.repository_owner == 'libretime' && (
github.event_name == 'schedule' ||
github.event_name == 'workflow_dispatch'
)
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.LIBRETIME_BOT_TOKEN }}
- name: Install dependencies
run: |
DEBIAN_FRONTEND=noninteractive sudo apt-get update
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y gettext
- name: Update locales
run: |
git config --global user.name "libretime-bot"
git config --global user.email "libretime-bot@users.noreply.github.com"
git pull
make -C legacy/locale update
git add legacy/locale
git diff-index --quiet HEAD -- legacy/locale || {
git commit --message "chore(legacy): update locales"
git push
}

View File

@ -1,23 +1,29 @@
name: Playout
on:
workflow_dispatch:
push:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/playout.yml
- playout/**
- api-client/**
- shared/**
- tools/python*
pull_request:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/playout.yml
- playout/**
- api-client/**
- shared/**
- tools/python*
schedule:
- cron: 0 1 * * 1
jobs:
python:

View File

@ -12,7 +12,7 @@ jobs:
name: Validate PR title
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@v4.6.0
- uses: amannn/action-semantic-pull-request@v5.5.3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
@ -27,6 +27,8 @@ jobs:
ui
worker
deps
main
stable
subjectPattern: ^(?![A-Z]).+$
subjectPatternError: |
The subject "{subject}" found in the pull request title "{title}"

View File

@ -1,11 +1,12 @@
name: Project
on:
workflow_dispatch:
push:
branches: [main]
branches: [main, stable-*]
pull_request:
types: [opened, reopened, synchronize, edited]
branches: [main]
branches: [main, stable-*]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@ -14,67 +15,26 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- uses: actions/cache@v3
- uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-project-pre-commit-pip-${{ hashFiles('.pre-commit-config.yaml') }}
restore-keys: |
${{ runner.os }}-project-pre-commit-pip
- uses: pre-commit/action@v3.0.0
check-shell:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: "3.x"
- uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-project-check-shell-pip
restore-keys: |
${{ runner.os }}-project-check-shell-pip
- uses: actions/cache@v3
with:
path: |
/usr/local/bin/shellcheck*
/usr/local/bin/shfmt*
key: ${{ runner.os }}-project-check-shell-tools
restore-keys: |
${{ runner.os }}-project-check-shell-tools
- run: |
python -m venv venv && source venv/bin/activate
pip install gh-release-install
sudo venv/bin/gh-release-install \
koalaman/shellcheck \
shellcheck-{tag}.linux.x86_64.tar.xz --extract shellcheck-{tag}/shellcheck \
/usr/local/bin/shellcheck \
--version-file '{destination}.version'
sudo venv/bin/gh-release-install \
mvdan/sh \
shfmt_{tag}_linux_amd64 \
/usr/local/bin/shfmt \
--version-file '{destination}.version'
- run: SEVERITY=warning make shell-check
- uses: pre-commit/action@v3.0.1
test-tools:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- 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

@ -9,7 +9,7 @@ jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: 7.4
@ -22,10 +22,9 @@ jobs:
- name: Build tarball
run: make tarball
- name: Create Release
uses: softprops/action-gh-release@v1
- name: Upload tarball
uses: softprops/action-gh-release@v2
with:
body_path: docs/releases/${{ github.ref_name }}.md
draft: true
prerelease: true
files: libretime-*.tar.gz
files: |
libretime-*.tar.gz
sha256sums.txt

View File

@ -1,19 +1,25 @@
name: Shared
on:
workflow_dispatch:
push:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/shared.yml
- shared/**
- tools/python*
pull_request:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/shared.yml
- shared/**
- tools/python*
schedule:
- cron: 0 1 * * 1
jobs:
python:

View File

@ -1,118 +0,0 @@
name: Website Preview
on:
workflow_dispatch:
inputs:
pull-request-number:
description: "Pull request number to preview"
required: true
type: string
pull_request_target:
types: [closed]
branches: [main]
paths:
- website/**
- docs/**
env:
# PREVIEW_DEPLOY_KEY is present in the secrets
PREVIEW_EXTERNAL_REPOSITORY: libretime/libretime.github.io
PREVIEW_EXTERNAL_REPOSITORY_BRANCH: gh-pages
PREVIEW_URL: https://libretime.github.io
PREVIEW_BASE_URL: /
jobs:
deploy:
if: github.event_name == 'workflow_dispatch'
name: Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Checkout pull request
run: hub pr checkout ${{ github.event.inputs.pull-request-number }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: "16"
cache: yarn
cache-dependency-path: website/yarn.lock
- name: Install
working-directory: website
run: yarn install --frozen-lockfile
- name: Build
working-directory: website
run: yarn build
env:
URL: ${{ env.PREVIEW_URL }}
BASE_URL: ${{ env.PREVIEW_BASE_URL }}pr-${{ github.event.inputs.pull-request-number }}/
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
external_repository: ${{ env.PREVIEW_EXTERNAL_REPOSITORY }}
deploy_key: ${{ secrets.PREVIEW_DEPLOY_KEY }}
publish_dir: website/build
destination_dir: pr-${{ github.event.inputs.pull-request-number }}
full_commit_message: "deploy pr-${{ github.event.inputs.pull-request-number }}"
keep_files: true
- name: Find deployment comment
uses: peter-evans/find-comment@v2
id: find-comment
with:
issue-number: ${{ github.event.inputs.pull-request-number }}
comment-author: github-actions[bot]
body-includes: Website preview deployment
- name: Notify deployment succeeded
if: ${{ success() }}
uses: peter-evans/create-or-update-comment@v2
with:
issue-number: ${{ github.event.inputs.pull-request-number }}
comment-id: ${{ steps.find-comment.outputs.comment-id }}
edit-mode: replace
body: |
**:rocket: Website preview deployment succeeded!**
Website preview: ${{ env.PREVIEW_URL }}${{ env.PREVIEW_BASE_URL }}pr-${{ github.event.inputs.pull-request-number }}/
New docs preview: ${{ env.PREVIEW_URL }}${{ env.PREVIEW_BASE_URL }}pr-${{ github.event.inputs.pull-request-number }}/docs/next/
Workflow: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- name: Notify deployment failed
if: ${{ failure() }}
uses: peter-evans/create-or-update-comment@v2
with:
issue-number: ${{ github.event.inputs.pull-request-number }}
comment-id: ${{ steps.find-comment.outputs.comment-id }}
edit-mode: replace
body: |
**:boom: Website preview deployment failed!**
Workflow: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
clean:
if: github.event_name == 'pull_request_target' && github.event.action == 'closed'
name: Clean
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
repository: ${{ env.PREVIEW_EXTERNAL_REPOSITORY }}
ref: ${{ env.PREVIEW_EXTERNAL_REPOSITORY_BRANCH }}
ssh-key: ${{ secrets.PREVIEW_DEPLOY_KEY }}
- name: Remove files
run: rm -fR pr-${{ github.event.pull_request.number }}
- uses: endbug/add-and-commit@v9
with:
message: "clean pr-${{ github.event.pull_request.number }}"

View File

@ -1,53 +0,0 @@
name: Website
on:
push:
branches: [main]
paths:
- .github/workflows/website.yml
- docs/**
- website/**
pull_request:
branches: [main]
paths:
- .github/workflows/website.yml
- docs/**
- website/**
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: "16"
cache: yarn
cache-dependency-path: ./website/yarn.lock
- uses: actions/cache@v3
with:
path: website/.docusaurus
key: docusaurus-main-${{ github.sha }}
restore-keys: |
docusaurus-main-
- name: Install
working-directory: website
run: yarn install --frozen-lockfile
- name: Build
working-directory: website
run: yarn build
- name: Deploy
if: github.ref == 'refs/heads/main'
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: website/build

View File

@ -1,19 +1,25 @@
name: Worker
on:
workflow_dispatch:
push:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/worker.yml
- worker/**
- tools/python*
pull_request:
branches: [main]
branches: [main, stable-*]
paths:
- .github/workflows/_python.yml
- .github/workflows/worker.yml
- worker/**
- tools/python*
schedule:
- cron: 0 1 * * 1
jobs:
python:

7
.gitignore vendored
View File

@ -8,6 +8,13 @@
*~
VERSION
/dev/certs/*
/dev/playout/*
/website/
!.gitkeep
## Github Python .gitignore
## See https://github.com/github/gitignore/blob/master/Python.gitignore
################################################################################

View File

@ -3,7 +3,7 @@
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.3.0
rev: v5.0.0
hooks:
- id: check-added-large-files
- id: check-case-conflict
@ -26,48 +26,63 @@ repos:
exclude: \.ambr$
- id: name-tests-test
# TODO: Remove once the django api uses pytest
exclude: ^(api.*)$
exclude: ^api
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v2.7.1
rev: v3.1.0
hooks:
- id: prettier
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
rev: v2.38.2
rev: v3.19.0
hooks:
- id: pyupgrade
args: [--py3-plus, --py36-plus]
args: [--py38-plus]
- repo: https://github.com/psf/black
rev: 22.8.0
- repo: https://github.com/adamchainz/django-upgrade
rev: 1.22.2
hooks:
- id: django-upgrade
args: [--target-version, "4.2"]
- repo: https://github.com/pycqa/isort
rev: 5.13.2
hooks:
- id: isort
args: [--resolve-all-configs]
- repo: https://github.com/psf/black-pre-commit-mirror
rev: 24.10.0
hooks:
- id: black
# - repo: https://github.com/pycqa/isort
# rev: 5.9.3
# hooks:
# - id: isort
# args: ["--profile", "black", "--filter-files"]
- repo: https://github.com/codespell-project/codespell
rev: v2.2.1
rev: v2.3.0
hooks:
- id: codespell
args:
- --ignore-words=.codespellignore
- --builtin=clear,rare,informal
args: [--ignore-words=.codespellignore]
exclude: (^api/schema.yml|^legacy.*|yarn\.lock)$
- repo: local
hooks:
- id: shfmt
name: shfmt
language: docker_image
entry: mvdan/shfmt -i 2 -ci -sr -kp -w
types: [shell]
- id: shellcheck
name: shellcheck
language: docker_image
entry: koalaman/shellcheck --color=always --severity=warning
types: [shell]
- id: requirements.txt
name: requirements.txt
description: Generate requirements.txt
entry: tools/extract_requirements.py dev
entry: tools/extract_requirements.py dev sentry
pass_filenames: false
language: script
files: setup.py$
@ -80,6 +95,14 @@ repos:
language: script
files: ^installer/config.yml$
- id: legacy-migrations-version
name: legacy-migrations-version
description: Ensure valid schema version for migrations
entry: tools/legacy-migrations-version.sh
pass_filenames: false
language: script
files: ^api/libretime_api/legacy/migrations
- id: legacy-assets-checksum-update
name: legacy-assets-checksum-update
description: Update legacy assets checksum
@ -87,3 +110,11 @@ repos:
pass_filenames: false
language: script
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

@ -2,17 +2,16 @@ StylesPath = .github/vale/styles
MinAlertLevel = warning
Packages = \
https://github.com/errata-ai/Google/releases/latest/download/Google.zip, \
https://github.com/errata-ai/Microsoft/releases/latest/download/Microsoft.zip
Vocab = Docs
[*.md]
BasedOnStyles = Vale, Google, Microsoft, LibreTime
BasedOnStyles = Vale, Microsoft, LibreTime
# Exclude emoji shortcodes `:tada:`
BlockIgnores = (:[a-z-_]+:)
Google.Units = False
Microsoft.GeneralURL = False
Microsoft.RangeFormat = False
Vale.Spelling = False

View File

@ -1,4 +1,437 @@
<a name="3.0.0-beta.1"></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)
- [Release note](https://libretime.org/docs/releases/3.2.0/)
### Features
- **legacy:** move session store to database ([#2523](https://github.com/libretime/libretime/issues/2523))
- **api:** add email configuration
- add mobile devices stream config field ([#2744](https://github.com/libretime/libretime/issues/2744))
### Bug Fixes
- **playout:** liquidsoap aac output syntax errors
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.20.1 (stable) ([#2602](https://github.com/libretime/libretime/issues/2602))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.21.2 ([#2612](https://github.com/libretime/libretime/issues/2612))
- libretime process leaks and lsof high cpu usage ([#2615](https://github.com/libretime/libretime/issues/2615))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.22.1 ([#2633](https://github.com/libretime/libretime/issues/2633))
- libretime process leaks and lsof high cpu usage ([#2615](https://github.com/libretime/libretime/issues/2615))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.23.1 (stable) ([#2656](https://github.com/libretime/libretime/issues/2656))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.26.1 (stable) ([#2678](https://github.com/libretime/libretime/issues/2678))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.26.1 (main) ([#2677](https://github.com/libretime/libretime/issues/2677))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.26.2 ([#2686](https://github.com/libretime/libretime/issues/2686))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.26.2 ([#2687](https://github.com/libretime/libretime/issues/2687))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.27.1 (main) ([#2714](https://github.com/libretime/libretime/issues/2714))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.27.1 (stable) ([#2715](https://github.com/libretime/libretime/issues/2715))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.34.1 ([#2723](https://github.com/libretime/libretime/issues/2723))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.35.2 ([#2738](https://github.com/libretime/libretime/issues/2738))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.35.2 ([#2722](https://github.com/libretime/libretime/issues/2722))
### Documentation
- update chat links to point to matrix ([#2571](https://github.com/libretime/libretime/issues/2571))
- fix broken link ([#2616](https://github.com/libretime/libretime/issues/2616))
### Tests
- **playout:** check unsupported liquidsoap aac output
## [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/)
### Features
- drop Ubuntu Bionic support
- drop Python 3.6 support
- drop Debian Buster support
- drop Liquidsoap 1.1 support
- drop Liquidsoap 1.3 support
- drop Python 3.7 support
- drop cc_stream_setting table
- delete cc_pref stream preferences rows
- **legacy:** remove db allowed_cors_origins preference ([#2095](https://github.com/libretime/libretime/issues/2095))
- configure cue points analysis per track type
- **playout:** use jinja2 env for template loading
- **playout:** add jinja2 quote filter for liquidsoap
- **playout:** use liquidsoap interactive variables
- **playout:** remove unused liquidsoap outputs connection status
- **playout:** remove unused liquidsoap restart function
- **playout:** remove unused liquidsoap output namespace
- replace loguru with logging
- **playout:** use jinja to configure liquidsoap outputs
- **playout:** enable vorbis metadata per icecast output
- **playout:** use shared app for cli commands
- **installer:** configure timezone using timedatectl ([#2418](https://github.com/libretime/libretime/issues/2418))
- **playout:** don't serialize message twice
- add python packages version
- add sentry sdk
- use secret_key config field instead of api_key ([#2444](https://github.com/libretime/libretime/issues/2444))
- **api-client:** remove unused api v1 calls
- **api-client:** rewrite api-client v1 using abstract client
- **playout:** move liquidsoap auth to notify cli
- **playout:** replace schedule event dicts with objects
- **api:** add cors headers middleware ([#2479](https://github.com/libretime/libretime/issues/2479))
- **playout:** replace thread timeout with socket timeout
- remove dev files from tarball
- include tarball checksums in releases
- set icecast mount default charset to UTF-8
- **playout:** allow harbor ssl configuration
- **api:** install gunicorn/uvicorn from pip
- install inside a python3 venv
### Bug Fixes
- **deps:** update dependency adbario/php-dot-notation to v3 ([#2226](https://github.com/libretime/libretime/issues/2226))
- **deps:** update dependency league/uri to v6.7.2
- **legacy:** set platform requirements to php ^7.4
- **playout:** remove outdated liquidsoap code
- **playout:** add types
- **api:** allow single digit version for legacy schema
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.12.1
- remove systemd ProtectHome feature ([#2243](https://github.com/libretime/libretime/issues/2243))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.13.1 ([#2249](https://github.com/libretime/libretime/issues/2249))
- **worker:** replace deprecated cgi.parse_header
- **installer:** install missing sudo
- **installer:** set home and login when running as postgres
- **legacy:** add log entry on task run ([#2316](https://github.com/libretime/libretime/issues/2316))
- **legacy:** log errors on connect check failure ([#2317](https://github.com/libretime/libretime/issues/2317))
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.13.2
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.13.3
- **legacy:** advanced search by track type id
- **legacy:** move forked deps to the libretime namespace
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.14.4
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.14.5
- **legacy:** ensure options is a dict during json encoding
- **legacy:** don't use dict assignment on object ([#2384](https://github.com/libretime/libretime/issues/2384))
- **playout:** quote escape strings in liquidsoap entrypoint
- **legacy:** do not delete audio file when removing artwork ([#2395](https://github.com/libretime/libretime/issues/2395))
- **playout:** use explicit ids for liquidsoap components
- **playout:** skip the identified queue instead of the current
- **playout:** use the same number of schedule queues
- **legacy:** on air light fails when no shows are scheduled
- **playout:** flush liquidsoap response before sending new
- **playout:** use package loader for liquidsoap templates
- **playout:** %else is not defined
- **playout:** when shows ends, next shows starts without fade-in/fade-out ([#2412](https://github.com/libretime/libretime/issues/2412))
- **playout:** legacy pushes non validated data
- **playout:** explicit ogg vorbis icecast encoder
- **playout:** prevent unbound variables
- **playout:** use int for liquidsoap queues map
- **shared:** return type confusion
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.15.2
- **api:** explicit FileImportStatusEnum in schema
- pin postgresql version in docker-compose
- pin rabbitmq version in docker-compose
- allow overriding docker-compose predefined environment
- move docker specific setup to dockerfile
- **api:** cast string value to int enum ([#2461](https://github.com/libretime/libretime/issues/2461))
- **playout:** quote incompatible <py3.9 type hints
- **installer:** bump setuptools to ~=67.3 ([#2387](https://github.com/libretime/libretime/issues/2387))
- **playout:** use new api-client v1
- **playout:** catch oserror in liquidsoap client
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.16.1 (main) ([#2490](https://github.com/libretime/libretime/issues/2490))
- **api:** require django >=4.2.0,<4.3
- **api:** upgrade psycopg to v3.1
- **playout:** remove unused ecasound package ([#2496](https://github.com/libretime/libretime/issues/2496))
- **installer:** ignore whitespace during diff
- **legacy:** don't print track_type id in show builder table ([#2510](https://github.com/libretime/libretime/issues/2510))
- **legacy:** remove composer superuser warning ([#2515](https://github.com/libretime/libretime/issues/2515))
- **legacy:** keep datatable settings between views ([#2519](https://github.com/libretime/libretime/issues/2519))
- **api:** upgrade django code (pre-commit)
- **analyzer:** remove unused python3 package
- **deps:** update dependency friendsofphp/php-cs-fixer to <3.17.1 (main) ([#2556](https://github.com/libretime/libretime/issues/2556))
### Documentation
- **playout:** add simple inputs pipeline schema ([#2240](https://github.com/libretime/libretime/issues/2240))
- add DOCKER_BUILDKIT env variable for docker-compose v1 ([#2270](https://github.com/libretime/libretime/issues/2270))
- no need to update release note path
- adapt c4 to our workflows
- stop providing maintenance releases for old distributions
- add pulseaudio output in containers tutorial ([#2166](https://github.com/libretime/libretime/issues/2166))
- remove warning about docker install ([#2411](https://github.com/libretime/libretime/issues/2411))
- docker-compose env variables setup
- add instructions for the sentry setup ([#2441](https://github.com/libretime/libretime/issues/2441))
- upgrade by migrating to a new server
- fix database backup and restore commands
- move contributing to docs/contribute
- split developer and contributor manual
- extract dev workflows from contributing docs
- add some history notes
- move release docs in the release section
- fix broken links
- ignore range format during docs linting
- only use microsoft styling guide
- move configuration documentation
- rename setup to install
- split install guide per install method
- docker config template install with envsubst ([#2517](https://github.com/libretime/libretime/issues/2517))
- improve reverse proxy docs
- improve install guides
- add certbot setup guide
- ensure example values are replaced
- fix broken link ([#2532](https://github.com/libretime/libretime/issues/2532))
- add note about unused packages
- improve airtime migration guide ([#2564](https://github.com/libretime/libretime/issues/2564))
- split airtime migration into more steps ([#2565](https://github.com/libretime/libretime/issues/2565))
- remove setup without reverse proxy
- fix icecast certificates bundle command
- install using a reverse proxy by default
- be consistent with example domain ([#2568](https://github.com/libretime/libretime/issues/2568))
- add 3.1.x distribution releases support
### Tests
- liquidsoap package from ppa is version 1.4.2 ([#2223](https://github.com/libretime/libretime/issues/2223))
- **playout:** refresh snapshots after major upgrade
- re-enable pylint logging-fstring-interpolation
- **playout:** more entrypoint config test cases
- **playout:** generated liquidsoap script syntax
- **playout:** silence existing broad-exception-caught errors
- **playout:** allow pylint failure
- **playout:** check untyped defs with mypy
- **api:** fix linting errors
- **shared:** fix linting errors
- **api:** fix linting errors
- **shared:** fix linting errors
- **playout:** class creation
- **api-client:** allow linters failure
- **playout:** move liq_conn fixture to conftest
- **playout:** liquidsoap wait for version
- **api:** add django-upgrade pre-commit hook
### CI
- test project weekly
- enable renovate for 3.0.x ([#2277](https://github.com/libretime/libretime/issues/2277))
- sync docs with libretime/website repository
- pin vale version to v2.21.3
- don't squash commits during docs sync
- always print diff when schema changes
- check if locale are up to date
- update locales weekly, not for every commit ([#2403](https://github.com/libretime/libretime/issues/2403))
- use bake file for container build
- allow manual ci trigger
- use bot to update locales
- replace deprecated set-output ([#2408](https://github.com/libretime/libretime/issues/2408))
- update docker hub containers description
- replace stale bot with stale action ([#2421](https://github.com/libretime/libretime/issues/2421))
- allow Falso as a word in codespell
- allow Falso as a word in codespell
- run all tests on python tools changes
- don't run stale bot on feature requests ([#2527](https://github.com/libretime/libretime/issues/2527))
### Reverts
- chore(api): install django-rest-framework from git ([#2518](https://github.com/libretime/libretime/issues/2518))
## [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/)
### Bug Fixes
- **legacy:** advanced search by track type id
- **legacy:** refresh lock files
- **legacy:** move forked deps to the libretime namespace
- **legacy:** improve error messages and logs
- **installer:** allow different actions on template_file
- **installer:** print diff on file deployment
- **installer:** only setup nginx on first install
- **installer:** print unsupported distribution error ([#2368](https://github.com/libretime/libretime/issues/2368))
- **installer:** create systemd dirs if missing ([#2379](https://github.com/libretime/libretime/issues/2379))
### Documentation
- add DOCKER_BUILDKIT env variable for docker-compose v1 ([#2270](https://github.com/libretime/libretime/issues/2270))
- check logs before checking services status
- add small faq for troubleshooting
### Tests
- **playout:** refresh snapshots after major upgrade ([#2381](https://github.com/libretime/libretime/issues/2381))
### CI
- don't squash commits during docs sync
- test project weekly
## [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/)
### Bug Fixes
- remove systemd ProtectHome feature ([#2244](https://github.com/libretime/libretime/issues/2244))
- **installer:** install missing sudo
- **installer:** set home and login when running as postgres
- **legacy:** add log entry on task run ([#2316](https://github.com/libretime/libretime/issues/2316))
- **legacy:** log errors on connect check failure ([#2317](https://github.com/libretime/libretime/issues/2317))
- **worker:** replace deprecated cgi.parse_header
### Documentation
- no need to update release note path
### Tests
- liquidsoap package from ppa is version 1.4.2 ([#2233](https://github.com/libretime/libretime/issues/2233))
### CI
- run tests on 3.0.x
- enable renovate bot on 3.0.x
- sync docs with libretime/website repository
- pin vale version to v2.21.3
## [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/)
### Bug Fixes
- clean exit by catching keyboard interrupt ([#2206](https://github.com/libretime/libretime/issues/2206))
- **legacy:** missing plupload uk_UA translation
- **legacy:** jquery i18n translations for plupload
- **legacy:** gracefully handle missing asset checksum
- disable some systemd security features on bionic ([#2219](https://github.com/libretime/libretime/issues/2219))
### Documentation
- **legacy:** how to add a new language
### Tests
- **analyzer:** fix wrong bit_rate values
## [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/)
### Features
- systemd service hardening ([#2186](https://github.com/libretime/libretime/issues/2186))
- extra systemd service hardening ([#2197](https://github.com/libretime/libretime/issues/2197))
### Bug Fixes
- start playout service after liquidsoap ([#2164](https://github.com/libretime/libretime/issues/2164))
- include version variable inside containers
- change version format
- **legacy:** add play button to stream player ([#2190](https://github.com/libretime/libretime/issues/2190))
- **legacy:** correct log levels ([#2196](https://github.com/libretime/libretime/issues/2196))
### Documentation
- remove breaking change warning ([#2180](https://github.com/libretime/libretime/issues/2180))
- fix vale linting errors
- fix vale linting error
### CI
- allow failure when linting /docs/releases
- use github.ref_name to get tag
## [3.0.0-beta.1](https://github.com/libretime/libretime/compare/3.0.0-beta.0...3.0.0-beta.1) (2022-09-23)
@ -32,8 +465,6 @@
- don't check github.com/libretime/libretime/(issues|pulls) links
- 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)
- [Release note](https://libretime.org/docs/releases/3.0.0-beta.0/)
@ -183,8 +614,6 @@
- improve containers build caching
- 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)
- [Release note](https://libretime.org/docs/releases/3.0.0-alpha.13/)
@ -345,8 +774,6 @@
- disable codecov project 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)
- [Release note](https://libretime.org/docs/releases/3.0.0-alpha.12/)
@ -361,8 +788,6 @@
- add missing data to release note
- 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)
- [Release note](https://libretime.org/docs/releases/3.0.0-alpha.11/)

View File

@ -1,129 +0,0 @@
# Contributing to LibreTime
First and foremost, thank you! We appreciate that you want to contribute to
LibreTime, your time is valuable, and your contributions mean a lot to us.
Before any contribution, read and be prepared to adhere to our
[code of conduct](https://github.com/libretime/organization/blob/main/CODE_OF_CONDUCT.md).
In addition, LibreTime follow the standardized
[C4 development process](https://rfc.zeromq.org/spec:42/c4/), in which you can
find explanation about most of the development workflows for LibreTime.
**How to contribute**
- [Reporting bugs](#reporting-bugs)
- [Suggesting enhancements](#suggesting-enhancements)
- [Financially](https://libretime.org/contribute#financial)
- [Contributing to documentation](https://libretime.org/contribute#write-documentation)
- [Contributing to code](#code)
## Reporting bugs
This section guides you through submitting a bug report for LibreTime.
Following these guidelines helps maintainers and the community understand your
report, reproduce the behavior, and find related reports.
Before creating bug reports, please check the following list, to be sure that
you need to create one:
- **Check the [LibreTime forum](https://discourse.libretime.org/)** for existing
questions and discussion.
- **Check that your issue does not already exist in the
[issue tracker](https://github.com/libretime/libretime/issues?q=is%3aissue+label%3abug)**.
> **Note:** If you find a **Closed** issue that seems like it is the same thing
> that you're experiencing, open a new issue and include a link to the original
> issue in the body of your new one.
When you are creating a bug report, please include as many details as possible.
Fill out the [required template](https://github.com/libretime/libretime/issues/new?labels=bug&template=bug_report.md),
the information it asks helps the maintainers resolve the issue faster.
Bugs are tracked on the [official issue tracker](https://github.com/libretime/libretime/issues).
## Suggesting enhancements
This section guides you through submitting an enhancement suggestion for
LibreTime, including completely new features and minor improvements to existing
functionality. Following these guidelines helps maintainers and the community
understand your suggestion and find related suggestions.
Before creating enhancement suggestions, please check the following list, as you
might find out that you don't need to create one:
- **Check the [LibreTime forum](https://discourse.libretime.org/)** for existing
questions and discussion.
- **Check that your issue does not already exist in the
[issue tracker](https://github.com/libretime/libretime/issues?q=is%3aissue+label%3afeature-request)**.
When you are creating an enhancement suggestion, please include as many details
as possible. Fill in [the template](https://github.com/libretime/libretime/issues/new?labels=feature-request&template=feature_request.md),
including the steps that you imagine you would take if the feature you're
requesting existed.
## Code
Are you familiar with coding in PHP or Python? Have you made projects in
Liquidsoap and some of the other services we use? Take a look at the
[list of bugs and feature requests](https://github.com/libretime/libretime/issues),
and then fork our repo and have a go! Just use the **Fork** button at the top of
our [GitHub page](https://github.com/libretime/libretime), clone the forked repo
to your desktop, open up a favorite editor and make some changes, and then
commit, push, and open a pull request.
Knowledge on how to use [Github](https://guides.github.com/activities/hello-world/)
and [Git](https://git-scm.com/docs/gittutorial) will suit you well, use the
links for a quick 101.
LibreTime uses the [black](https://github.com/psf/black) coding style for Python
and you must ensure that your code follows it. If not, the CI will fail and your
Pull Request will not be merged. Similarly, the Python import statements are
sorted with [isort](https://github.com/pycqa/isort). There is configuration
provided for [pre-commit](https://pre-commit.com/), which will ensure that code
matches the expected style and conventions when you commit changes. It is set up
by running:
```bash
sudo apt install pre-commit
pre-commit install
```
You can also run it anytime using:
```bash
pre-commit run --all-files
```
## Testing and CI/CD
Before submitting code to the project, it's a good idea to test it first. To do
this, it's easiest to install LibreTime in a virtual machine on your local
system or in a cloud VM. We have instructions for setting up a virtual instance
of LibreTime with [Vagrant](/docs/vagrant) and [Multipass](/docs/multipass).
If you would like to try LibreTime in a Docker image, Odclive has instructions
[here](https://github.com/kessibi/libretime-docker) for setting up a test image
and a more persistent install.
## Modifying the Database
LibreTime is designed to work with a [PostgreSQL](https://www.postgresql.org/)
database server running locally. LibreTime uses [PropelORM](https://github.com/propelorm/Propel)
to interact with the ZendPHP components and create the database. The version 2
API uses Django to interact with the same database.
If you are a developer seeking to add new columns to the database here are the steps.
1. Modify `legacy/build/schema.xml` with any changes.
2. Run `dev_tools/propel_generate.sh`
3. Update the upgrade.sql under `legacy/application/controllers/upgrade_sql/VERSION` for example
`ALTER TABLE imported_podcast ADD COLUMN album_override boolean default 'f' NOT NULL;`
4. Update the models under `api/libretime_api/models/` to reflect the new
changes.
## Documentation and financial contributions
More information about how to contribute documentation or financially
through our [OpenCollective](https://opencollective.com/libretime) can be found
on our [website](https://libretime.org/contribute).

1
CONTRIBUTING.md Symbolic link
View File

@ -0,0 +1 @@
docs/contribute.md

View File

@ -2,7 +2,7 @@ ARG LIBRETIME_VERSION
#======================================================================================#
# Python Builder #
#======================================================================================#
FROM python:3.10-slim-bullseye as python-builder
FROM python:3.10-slim-bullseye AS python-builder
WORKDIR /build
@ -18,7 +18,7 @@ RUN pip wheel --wheel-dir . --no-deps .
#======================================================================================#
# Python base #
#======================================================================================#
FROM python:3.10-slim-bullseye as python-base
FROM python:3.10-slim-bullseye AS python-base
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
@ -28,11 +28,9 @@ ARG USER=libretime
ARG UID=1000
ARG GID=1000
RUN adduser --disabled-password --uid=$UID --gecos '' --no-create-home ${USER}
RUN install --directory --owner=${USER} \
/etc/libretime \
/srv/libretime
RUN set -eux \
&& adduser --disabled-password --uid=$UID --gecos '' --no-create-home ${USER} \
&& install --directory --owner=${USER} /etc/libretime /srv/libretime
ENV LIBRETIME_CONFIG_FILEPATH=/etc/libretime/config.yml
@ -40,8 +38,9 @@ ENV LIBRETIME_CONFIG_FILEPATH=/etc/libretime/config.yml
COPY tools/packages.py /tmp/packages.py
COPY shared/packages.ini /tmp/packages.ini
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
RUN set -eux \
&& DEBIAN_FRONTEND=noninteractive apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
$(python3 /tmp/packages.py --format=line --exclude=python bullseye /tmp/packages.ini) \
&& rm -rf /var/lib/apt/lists/* \
&& rm -f /tmp/packages.py /tmp/packages.ini
@ -49,23 +48,25 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
#======================================================================================#
# Python base with ffmpeg #
#======================================================================================#
FROM python-base as python-base-ffmpeg
FROM python-base AS python-base-ffmpeg
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
RUN set -eux \
&& DEBIAN_FRONTEND=noninteractive apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
ffmpeg \
&& rm -rf /var/lib/apt/lists/*
#======================================================================================#
# Analyzer #
#======================================================================================#
FROM python-base-ffmpeg as libretime-analyzer
FROM python-base-ffmpeg AS libretime-analyzer
COPY tools/packages.py /tmp/packages.py
COPY analyzer/packages.ini /tmp/packages.ini
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
RUN set -eux \
&& DEBIAN_FRONTEND=noninteractive apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
$(python3 /tmp/packages.py --format=line --exclude=python bullseye /tmp/packages.ini) \
&& rm -rf /var/lib/apt/lists/* \
&& rm -f /tmp/packages.py /tmp/packages.ini
@ -82,7 +83,7 @@ RUN --mount=type=cache,target=/root/.cache/pip \
COPY analyzer .
RUN --mount=type=cache,target=/root/.cache/pip \
pip install --editable .
pip install --editable .[sentry]
# Run
USER ${UID}:${GID}
@ -96,13 +97,14 @@ ENV LIBRETIME_VERSION=$LIBRETIME_VERSION
#======================================================================================#
# Playout #
#======================================================================================#
FROM python-base-ffmpeg as libretime-playout
FROM python-base-ffmpeg AS libretime-playout
COPY tools/packages.py /tmp/packages.py
COPY playout/packages.ini /tmp/packages.ini
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
RUN set -eux \
&& DEBIAN_FRONTEND=noninteractive apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
$(python3 /tmp/packages.py --format=line --exclude=python bullseye /tmp/packages.ini) \
&& rm -rf /var/lib/apt/lists/* \
&& rm -f /tmp/packages.py /tmp/packages.ini
@ -120,7 +122,7 @@ RUN --mount=type=cache,target=/root/.cache/pip \
COPY playout .
RUN --mount=type=cache,target=/root/.cache/pip \
pip install --editable .
pip install --editable .[sentry]
# Run
USER ${UID}:${GID}
@ -134,10 +136,12 @@ ENV LIBRETIME_VERSION=$LIBRETIME_VERSION
#======================================================================================#
# API #
#======================================================================================#
FROM python-base as libretime-api
FROM python-base AS libretime-api
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
RUN set -eux \
&& DEBIAN_FRONTEND=noninteractive apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
curl \
gcc \
libc6-dev \
libpq-dev \
@ -147,7 +151,7 @@ WORKDIR /src
COPY api/requirements.txt .
RUN --mount=type=cache,target=/root/.cache/pip \
pip install --no-compile gunicorn uvicorn -r requirements.txt
pip install --no-compile -r requirements.txt
COPY --from=python-builder /build/shared/*.whl .
RUN --mount=type=cache,target=/root/.cache/pip \
@ -155,7 +159,7 @@ RUN --mount=type=cache,target=/root/.cache/pip \
COPY api .
RUN --mount=type=cache,target=/root/.cache/pip \
pip install --editable .[prod]
pip install --editable .[prod,sentry]
# Run
USER ${UID}:${GID}
@ -163,7 +167,7 @@ WORKDIR /app
CMD ["/usr/local/bin/gunicorn", \
"--workers=4", \
"--worker-class=uvicorn.workers.UvicornWorker", \
"--worker-class=libretime_api.gunicorn.Worker", \
"--log-file", "-", \
"--bind=0.0.0.0:9001", \
"libretime_api.asgi"]
@ -171,10 +175,12 @@ CMD ["/usr/local/bin/gunicorn", \
ARG LIBRETIME_VERSION
ENV LIBRETIME_VERSION=$LIBRETIME_VERSION
HEALTHCHECK CMD ["curl", "--fail", "http://localhost:9001/api/v2/version"]
#======================================================================================#
# Worker #
#======================================================================================#
FROM python-base as libretime-worker
FROM python-base AS libretime-worker
WORKDIR /src
@ -183,47 +189,42 @@ RUN --mount=type=cache,target=/root/.cache/pip \
pip install --no-compile -r requirements.txt
COPY --from=python-builder /build/shared/*.whl .
COPY --from=python-builder /build/api-client/*.whl .
RUN --mount=type=cache,target=/root/.cache/pip \
pip install --no-compile *.whl && rm -Rf *.whl
COPY worker .
RUN --mount=type=cache,target=/root/.cache/pip \
pip install --editable .
pip install --editable .[sentry]
# Run
USER ${UID}:${GID}
WORKDIR /app
CMD ["/usr/local/bin/celery", "worker", \
"--app=libretime_worker.tasks:worker", \
"--config=libretime_worker.config", \
"--time-limit=1800", \
"--concurrency=1", \
"--loglevel=info"]
CMD ["/usr/local/bin/libretime-worker"]
ARG LIBRETIME_VERSION
ENV LIBRETIME_VERSION=$LIBRETIME_VERSION
#======================================================================================#
# 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_LOG_FILEPATH=php://stderr
# Custom user
ARG USER=libretime
ARG UID=1000
ARG GID=1000
RUN adduser --disabled-password --uid=$UID --gecos '' --no-create-home ${USER}
RUN set -eux \
&& adduser --disabled-password --uid=$UID --gecos '' --no-create-home ${USER} \
&& install --directory --owner=${USER} /etc/libretime /srv/libretime
RUN install --directory --owner=${USER} \
/etc/libretime \
/srv/libretime
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
RUN set -eux \
&& DEBIAN_FRONTEND=noninteractive apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
gettext \
libcurl4-openssl-dev \
libfreetype6-dev \
@ -268,8 +269,9 @@ COPY legacy/composer.* ./
RUN composer --no-cache install --no-progress --no-interaction --no-dev --no-autoloader
COPY legacy .
RUN make locale-build
RUN composer --no-cache dump-autoload --no-interaction --no-dev
RUN set -eux \
&& make locale-build \
&& composer --no-cache dump-autoload --no-interaction --no-dev
# Run
USER ${UID}:${GID}

View File

@ -7,36 +7,57 @@ all: setup
setup:
command -v pre-commit > /dev/null && pre-commit install
# https://google.github.io/styleguide/shellguide.html
shell-format:
shfmt -f . | xargs git ls-files | xargs shfmt -i 2 -ci -sr -kp -w
.env:
cp .env.dev .env
shell-check:
shfmt -f . | xargs git ls-files | xargs shfmt -i 2 -ci -sr -kp -d
shfmt -f . | xargs git ls-files | xargs shellcheck --color=always --severity=$${SEVERITY:-style}
dev-certs:
rm -f dev/certs/fake.*
openssl req -x509 \
-newkey rsa:2048 \
-days 365 \
-nodes \
-subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1" \
-keyout dev/certs/fake.key \
-out dev/certs/fake.crt
cat dev/certs/fake.{key,crt} > dev/certs/fake.pem
dev: .env dev-certs
DOCKER_BUILDKIT=1 docker compose build
docker compose run --rm legacy make build
docker compose run --rm api libretime-api migrate
docker compose up -d
.PHONY: VERSION
VERSION:
tools/version.sh
changelog:
tools/changelog.sh
.PHONY: tarball
tarball: VERSION
$(MAKE) -C legacy build
cd .. && tar -czf libretime-$(shell cat VERSION | tr -d [:blank:]).tar.gz \
--owner=root --group=root \
--exclude-vcs \
--exclude .codespellignore \
--exclude .git* \
--exclude .pre-commit-config.yaml \
--exclude dev_tools \
--exclude jekyll.sh \
libretime/analyzer \
libretime/api \
libretime/api-client \
libretime/docs \
libretime/installer \
libretime/legacy \
--exclude legacy/vendor/phing \
--exclude legacy/vendor/simplepie/simplepie/tests \
libretime
libretime/playout \
libretime/shared \
libretime/tools \
libretime/worker \
libretime/CHANGELOG.md \
libretime/install \
libretime/LICENSE \
libretime/Makefile \
libretime/README.md \
libretime/SECURITY.md \
libretime/VERSION
mv ../libretime-*.tar.gz .
sha256sum libretime-*.tar.gz > sha256sums.txt
# Only clean subdirs
clean:
@ -44,4 +65,13 @@ clean:
docs-lint:
vale sync
vale docs website/src/pages
vale docs
website:
git clone git@github.com:libretime/website.git
website/node_modules: website
yarn --cwd website install
docs-dev: website website/node_modules
DOCS_PATH="../docs" yarn --cwd website start

View File

@ -1,4 +1,4 @@
![](website/static/img/logo-512px.png)
# [![LibreTime](https://github.com/libretime/website/blob/main/static/img/logo-512px.png)](https://github.com/libretime/libretime)
[![Financial Contributors on Open Collective](https://opencollective.com/libretime/all/badge.svg?label=financial+contributors)](https://opencollective.com/libretime)
@ -9,33 +9,15 @@ It is managed by a friendly inclusive community of stations from around the
globe that use, document and improve LibreTime. Join us in fixing bugs and in
defining how we manage the codebase going forward.
We are currently ramping up development on this repository.
Check out the [documentation](https://libretime.org) for more information and
Check out the [documentation](https://libretime.org/docs/) for more information and
start broadcasting!
Please note that LibreTime is released with a [Contributor Code
of Conduct](https://github.com/libretime/organization/blob/main/CODE_OF_CONDUCT.md).
By participating in this project you agree to abide by its terms.
Please submit enhancements, bug-fixes or comments via GitHub.
## Development Process
The LibreTime follows the standardized [Collective Code Construction
Contract (C4)](https://rfc.zeromq.org/spec:42/C4/). Its abstract is
provided here.
> C4 provides a standard process for contributing, evaluating and
> discussing improvements on software projects. It defines specific
> technical requirements for projects like a style guide, unit tests,
> git and similar platforms. It also establishes different personas
> for projects, with clear and distinct duties. C4 specifies a process
> for documenting and discussing issues including seeking consensus
> and clear descriptions, use of "pull requests" and systematic reviews.
The full text of the contract is licensed under the GPL and available at
the above link courtesy of the [ZeroMQ community](https://zeromq.org/).
You can find details about our development process in the
[contributing](./CONTRIBUTING.md) guide.
## Support
@ -44,7 +26,8 @@ we have a forum at [discourse.libretime.org](https://discourse.libretime.org).
We are moving towards using the forum to provide community support and reserving
the github issue queue for confirmed bugs and well-formed feature requests.
You can also contact us through our [Mattermost instance](https://chat.libretime.org)
You can also contact us through [Matrix
(#libretime:matrix.org)](https://matrix.to/#/#libretime:matrix.org)
where you can talk with other users and developers.
## Contributors
@ -69,23 +52,8 @@ Become a financial contributor and help us sustain our community on
[Support](https://opencollective.com/libretime/contribute) this project with
your organization. Your logo will show up here with a link to your website.
<a href="https://opencollective.com/libretime/organization/0/website">
<img src="https://opencollective.com/libretime/organization/0/avatar.svg">
</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 href="https://opencollective.com/libretime">
<img src="https://opencollective.com/libretime/organizations.svg?width=890">
</a>
## License
@ -99,6 +67,6 @@ version 3 of the License.
Copyright (c) 2011-2017 Sourcefabric z.ú.
Copyright (c) 2017-2022 LibreTime Community
Copyright (c) 2017-2023 LibreTime Community
Please refer to the [LEGACY](./LEGACY.md) file for more information.

14
SECURITY.md Normal file
View File

@ -0,0 +1,14 @@
# Security Policy
## Reporting a Vulnerability
**Please do not use GitHub issues for security-sensitive communication.**
The LibreTime maintainers ask that known and suspected vulnerabilities to be privately and responsibly disclosed by:
- sending all the required detail to [security@libretime.org](security@libretime.org),
- or by filling a [security advisory on Github](https://github.com/libretime/libretime/security/advisories/new).
A LibreTime maintainer will acknowledged the report within 3 working days.
We aim to provide a security patch within 30 days, after this period the report will be disclosed to the public. The security patch will be distributed for the [maintained versions of LibreTime](https://libretime.org/docs/releases/#distributions-releases-support).

24
Vagrantfile vendored
View File

@ -6,7 +6,7 @@
# export VAGRANT_NO_PORT_FORWARDING=true
# export VAGRANT_CPUS=4
# export VAGRANT_MEMORY=4096
# vagrant up buster
# vagrant up bullseye
#
Vagrant.configure('2') do |config|
@ -79,7 +79,6 @@ Vagrant.configure('2') do |config|
LIBRETIME_POSTGRESQL_PASSWORD=libretime \
LIBRETIME_RABBITMQ_PASSWORD=libretime \
bash install \
--listen-port 8080 \
--in-place \
http://192.168.10.100:8080
@ -99,12 +98,6 @@ Vagrant.configure('2') do |config|
setup_libretime(os, "debian.sh")
end
config.vm.define 'bionic' do |os|
os.vm.box = 'bento/ubuntu-18.04'
setup_nfs(config)
setup_libretime(os, 'debian.sh')
end
config.vm.define 'bullseye' do |os|
os.vm.box = 'debian/bullseye64'
config.vm.provider 'virtualbox' do |v, override|
@ -113,19 +106,4 @@ Vagrant.configure('2') do |config|
setup_nfs(config, 4)
setup_libretime(os, 'debian.sh')
end
config.vm.define 'buster' do |os|
os.vm.box = 'debian/buster64'
config.vm.provider 'virtualbox' do |v, override|
override.vm.box = 'bento/debian-10'
end
setup_nfs(config)
setup_libretime(os, 'debian.sh')
end
config.vm.define 'centos' do |os|
os.vm.box = 'centos/8'
setup_nfs(config)
setup_libretime(os, 'centos.sh', '--selinux')
end
end

View File

@ -4,11 +4,10 @@ include ../tools/python.mk
PIP_INSTALL := \
--editable ../shared \
--editable .[dev]
--editable .[dev,sentry]
PYLINT_ARG := libretime_analyzer tests || true
MYPY_ARG := libretime_analyzer tests || true
BANDIT_ARG := libretime_analyzer || true
PYTEST_ARG := --cov=libretime_analyzer tests
format: .format
lint: .format-check .pylint .mypy .bandit
@ -17,4 +16,5 @@ fixtures:
bash tests/fixtures/generate.sh
test: fixtures .pytest
test-coverage: fixtures .coverage
clean: .clean

View File

@ -10,7 +10,6 @@ PrivateTmp=true
PrivateUsers=true
ProtectClock=true
ProtectControlGroups=true
ProtectHome=true
ProtectHostname=true
ProtectKernelLogs=true
ProtectKernelModules=true
@ -18,6 +17,7 @@ ProtectKernelTunables=true
ProtectProc=invisible
ProtectSystem=full
Environment=PYTHONOPTIMIZE=2
Environment=LIBRETIME_CONFIG_FILEPATH=@@CONFIG_FILEPATH@@
Environment=LIBRETIME_LOG_FILEPATH=@@LOG_DIR@@/analyzer.log
WorkingDirectory=@@WORKING_DIR@@/analyzer

View File

@ -0,0 +1,4 @@
from importlib.metadata import version as get_version
PACKAGE = __name__
VERSION = get_version(__name__)

View File

@ -1,15 +1,20 @@
import logging
import os
from pathlib import Path
from typing import Optional
import click
from libretime_shared.cli import cli_config_options, cli_logging_options
from libretime_shared.config import DEFAULT_ENV_PREFIX
from libretime_shared.logging import level_from_name, setup_logger
from libretime_shared.logging import setup_logger
from . import PACKAGE, VERSION
from .config import Config
from .message_listener import MessageListener
from .status_reporter import StatusReporter
logger = logging.getLogger(__name__)
VERSION = "1.0"
DEFAULT_RETRY_QUEUE_FILEPATH = Path("retry_queue")
@ -33,9 +38,19 @@ def cli(
"""
Run analyzer.
"""
setup_logger(level_from_name(log_level), log_filepath)
setup_logger(log_level, log_filepath)
config = Config(config_filepath)
if "SENTRY_DSN" in os.environ:
logger.info("installing sentry")
# pylint: disable=import-outside-toplevel
import sentry_sdk
sentry_sdk.init(
traces_sample_rate=1.0,
release=f"{PACKAGE}@{VERSION}",
)
# Start up the StatusReporter process
StatusReporter.start_thread(retry_queue_filepath)

View File

@ -1,15 +1,17 @@
import json
import logging
import signal
import time
from queue import Queue
import pika
from loguru import logger
from .config import Config
from .pipeline import Pipeline, PipelineStatus
from .pipeline import Pipeline, PipelineOptions, PipelineStatus
from .status_reporter import StatusReporter
logger = logging.getLogger(__name__)
EXCHANGE = "airtime-uploads"
EXCHANGE_TYPE = "topic"
ROUTING_KEY = ""
@ -98,7 +100,7 @@ class MessageListener:
Here we parse the message, spin up an analyzer process, and report the
metadata back to the Airtime web application (or report an error).
"""
logger.info(f" - Received '{body}' on routing_key '{method_frame.routing_key}'")
logger.info("Received '%s' on routing_key '%s'", body, method_frame.routing_key)
audio_file_path = ""
# final_file_path = ""
@ -111,17 +113,19 @@ class MessageListener:
body = body.decode()
except (UnicodeDecodeError, AttributeError):
pass
msg_dict = json.loads(body)
msg_dict: dict = json.loads(body)
file_id = msg_dict["file_id"]
audio_file_path = msg_dict["tmp_file_path"]
original_filename = msg_dict["original_filename"]
import_directory = msg_dict["import_directory"]
options = msg_dict.get("options", {})
metadata = MessageListener.spawn_analyzer_process(
audio_file_path,
import_directory,
original_filename,
options,
)
callback_url = f"{self.config.general.public_url}/rest/media/{file_id}"
@ -161,6 +165,7 @@ class MessageListener:
audio_file_path,
import_directory,
original_filename,
options: dict,
):
metadata = {}
@ -171,10 +176,11 @@ class MessageListener:
audio_file_path,
import_directory,
original_filename,
PipelineOptions(**options),
)
metadata = queue.get()
except Exception as exception:
logger.exception(f"Analyzer pipeline exception: {exception}")
logger.exception("Analyzer pipeline exception: %s", exception)
metadata["import_status"] = PipelineStatus.FAILED
# Ensure our queue doesn't fill up and block due to unexpected behavior. Defensive code.

View File

@ -1 +1 @@
from .pipeline import Pipeline, PipelineStatus
from .pipeline import Pipeline, PipelineOptions, PipelineStatus

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.
"""
cmd = _ffprobe("-i", filepath)
cmd = _ffprobe("-i", filepath, errors="backslashreplace")
track_gain_match = _PROBE_REPLAYGAIN_RE.search(cmd.stderr)
@ -75,8 +75,7 @@ def compute_silences(filepath: Path) -> List[Tuple[float, float]]:
cmd = _ffmpeg(
*("-i", filepath),
"-vn",
*("-filter", "highpass=frequency=1000"),
*("-filter", "silencedetect=noise=0.15:duration=1"),
*("-filter", "highpass=frequency=80,silencedetect=noise=-60dB:duration=0.9"),
)
starts, ends = [], []
@ -94,9 +93,8 @@ def compute_silences(filepath: Path) -> List[Tuple[float, float]]:
end = float(match.group(2))
ends.append(end)
# ffmpeg v3 (bionic) does not warn about silence end when the track ends.
# Set the last silence ending to infinity, and clamp it to the track duration before
# using this value.
# If one end is missing, set the last silence ending to infinity, and
# clamp it to the track duration before using this value.
if len(starts) - 1 == len(ends):
ends.append(inf)

View File

@ -1,6 +1,7 @@
from subprocess import PIPE, CalledProcessError, CompletedProcess, run
import logging
from subprocess import CalledProcessError, CompletedProcess, run
from loguru import logger
logger = logging.getLogger(__name__)
def run_(*args, **kwargs) -> CompletedProcess:
@ -8,15 +9,14 @@ def run_(*args, **kwargs) -> CompletedProcess:
return run(
args,
check=True,
stdout=PIPE,
stderr=PIPE,
universal_newlines=True,
capture_output=True,
text=True,
**kwargs,
)
except OSError as exception: # executable was not found
cmd = args[0]
logger.warning(f"Failed to run: {cmd} - {exception}. Is {cmd} installed?")
logger.warning("Failed to run: %s - %s. Is %s installed?", cmd, exception, cmd)
raise exception
except CalledProcessError as exception: # returned an error code

View File

@ -1,18 +1,18 @@
import logging
from datetime import timedelta
from math import isclose
from subprocess import CalledProcessError
from typing import Any, Dict
from loguru import logger
from ._ffmpeg import compute_silences, probe_duration
logger = logging.getLogger(__name__)
def analyze_cuepoint(filepath: str, metadata: Dict[str, Any]) -> Dict[str, Any]:
"""
Extracts the cuein and cueout times along and sets the file duration using ffmpeg.
"""
def analyze_duration(filepath: str, metadata: Dict[str, Any]) -> Dict[str, Any]:
"""
Extracts the file duration using ffmpeg.
"""
try:
duration = probe_duration(filepath)
@ -30,7 +30,23 @@ def analyze_cuepoint(filepath: str, metadata: Dict[str, Any]) -> Dict[str, Any]:
metadata["length"] = str(timedelta(seconds=duration))
metadata["cuein"] = 0.0
metadata["cueout"] = duration
except (CalledProcessError, OSError):
pass
return metadata
def analyze_cuepoint(filepath: str, metadata: Dict[str, Any]) -> Dict[str, Any]:
"""
Extracts the cuein and cueout times using ffmpeg.
This step must run after the 'analyze_duration' step.
"""
# Duration has been computed in the 'analyze_duration' step
duration = metadata["length_seconds"]
try:
silences = compute_silences(filepath)
if len(silences) > 2:

View File

@ -1,10 +1,26 @@
import logging
from datetime import timedelta
from pathlib import Path
from typing import Any, Dict
import mutagen
from libretime_shared.files import compute_md5
from loguru import logger
from mutagen.easyid3 import EasyID3
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]):
@ -24,7 +40,7 @@ def analyze_metadata(filepath_: str, metadata: Dict[str, Any]):
# Get audio file metadata
extracted = mutagen.File(filepath, easy=True)
if extracted is None:
logger.warning(f"no metadata were extracted for {filepath}")
logger.warning("no metadata were extracted for %s", filepath)
return metadata
metadata["mime"] = extracted.mime[0]
@ -69,34 +85,36 @@ def analyze_metadata(filepath_: str, metadata: Dict[str, Any]):
except (AttributeError, KeyError, IndexError):
pass
extracted_tags_mapping = {
"title": "track_title",
"artist": "artist_name",
"album": "album_title",
"bpm": "bpm",
"composer": "composer",
"conductor": "conductor",
"copyright": "copyright",
"comment": "comment",
"encoded_by": "encoder",
"genre": "genre",
"isrc": "isrc",
"label": "label",
"organization": "label",
# "length": "length",
"language": "language",
"last_modified": "last_modified",
"mood": "mood",
"bit_rate": "bit_rate",
"replay_gain": "replaygain",
# "tracknumber": "track_number",
# "track_total": "track_total",
"website": "website",
"date": "year",
# "mime_type": "mime",
}
extracted_tags_mapping = [
("title", "track_title"),
("artist", "artist_name"),
("album", "album_title"),
("bpm", "bpm"),
("composer", "composer"),
("conductor", "conductor"),
("copyright", "copyright"),
("comment", "comment"),
("comment", "comments"),
("comment", "description"),
("encoded_by", "encoder"),
("genre", "genre"),
("isrc", "isrc"),
("label", "label"),
("organization", "label"),
# ("length", "length"),
("language", "language"),
("last_modified", "last_modified"),
("mood", "mood"),
("bit_rate", "bit_rate"),
("replay_gain", "replaygain"),
# ("tracknumber", "track_number"),
# ("track_total", "track_total"),
("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:
metadata[metadata_key] = extracted[extracted_key]
if isinstance(metadata[metadata_key], list):

View File

@ -1,10 +1,11 @@
import logging
from subprocess import CalledProcessError
from typing import Any, Dict
from loguru import logger
from ._liquidsoap import _liquidsoap
logger = logging.getLogger(__name__)
class UnplayableFileError(Exception):
pass
@ -26,6 +27,6 @@ def analyze_playability(filename: str, metadata: Dict[str, Any]):
raise UnplayableFileError() from exception
except OSError as exception: # liquidsoap was not found
logger.warning(f"Failed to run: {exception}. Is liquidsoap installed?")
logger.warning("Failed to run: %s. Is liquidsoap installed?", exception)
return metadata

View File

@ -1,8 +1,9 @@
import logging
import shutil
from pathlib import Path
from uuid import uuid4
from loguru import logger
logger = logging.getLogger(__name__)
MAX_DIR_LEN = 48
MAX_FILE_LEN = 48
@ -42,12 +43,12 @@ def organise_file(
return metadata
dest_path = dest_path.with_name(f"{dest_path.stem}_{uuid4()}{dest_path.suffix}")
logger.warning(f"found existing file, using new filepath {dest_path}")
logger.warning("found existing file, using new filepath %s", dest_path)
# Import
dest_path.parent.mkdir(parents=True, exist_ok=True)
logger.debug(f"moving {filepath} to {dest_path}")
logger.debug("moving %s to %s", filepath, dest_path)
shutil.move(filepath, dest_path)
metadata["full_path"] = str(dest_path)

View File

@ -1,21 +1,22 @@
import logging
from enum import Enum
from queue import Queue
from typing import Any, Dict
from typing import Any, Dict, Protocol
from loguru import logger
from typing_extensions import Protocol
from pydantic import BaseModel
from .analyze_cuepoint import analyze_cuepoint
from .analyze_cuepoint import analyze_cuepoint, analyze_duration
from .analyze_metadata import analyze_metadata
from .analyze_playability import UnplayableFileError, analyze_playability
from .analyze_replaygain import analyze_replaygain
from .organise_file import organise_file
logger = logging.getLogger(__name__)
class Step(Protocol):
@staticmethod
def __call__(filename: str, metadata: Dict[str, Any]):
...
def __call__(filename: str, metadata: Dict[str, Any]): ...
class PipelineStatus(int, Enum):
@ -24,6 +25,10 @@ class PipelineStatus(int, Enum):
FAILED = 2
class PipelineOptions(BaseModel):
analyze_cue_points: bool = False
class Pipeline:
"""Analyzes and imports an audio file into the Airtime library.
@ -34,10 +39,11 @@ class Pipeline:
@staticmethod
def run_analysis(
queue,
audio_file_path,
import_directory,
original_filename,
queue: Queue,
audio_file_path: str,
import_directory: str,
original_filename: str,
options: PipelineOptions,
):
"""Analyze and import an audio file, and put all extracted metadata into queue.
@ -78,7 +84,9 @@ class Pipeline:
# First, we extract the ID3 tags and other metadata:
metadata = {}
metadata = analyze_metadata(audio_file_path, metadata)
metadata = analyze_cuepoint(audio_file_path, metadata)
metadata = analyze_duration(audio_file_path, metadata)
if options.analyze_cue_points:
metadata = analyze_cuepoint(audio_file_path, metadata)
metadata = analyze_replaygain(audio_file_path, metadata)
metadata = analyze_playability(audio_file_path, metadata)

View File

@ -1,5 +1,6 @@
import collections
import json
import logging
import pickle
import queue
import threading
@ -7,9 +8,10 @@ import time
from urllib.parse import urlparse
import requests
from loguru import logger
from requests.exceptions import HTTPError
logger = logging.getLogger(__name__)
class PicklableHttpRequest:
def __init__(self, method, url, api_key, data):
@ -55,7 +57,7 @@ def process_http_requests(ipc_queue, http_retry_queue_path):
# If we fail to unpickle a saved queue of failed HTTP requests, then we'll just log an error
# and continue because those HTTP requests are lost anyways. The pickled file will be
# overwritten the next time the analyzer is shut down too.
logger.error(f"Failed to unpickle {http_retry_queue_path}. Continuing...")
logger.error("Failed to unpickle %s. Continuing...", http_retry_queue_path)
while True:
try:
@ -86,10 +88,12 @@ def process_http_requests(ipc_queue, http_retry_queue_path):
with open(http_retry_queue_path, "wb") as pickle_file:
pickle.dump(retry_queue, pickle_file)
return
except Exception as exception: # Terrible top-level exception handler to prevent the thread from dying, just in case.
except (
Exception
) as exception: # Terrible top-level exception handler to prevent the thread from dying, just in case.
if shutdown:
return
logger.exception(f"Unhandled exception in StatusReporter {exception}")
logger.exception("Unhandled exception in StatusReporter %s", exception)
logger.info("Restarting StatusReporter thread")
time.sleep(2) # Throttle it
@ -114,7 +118,7 @@ def send_http_request(picklable_request: PicklableHttpRequest, retry_queue):
# The request failed with an error 500 probably, so let's check if Airtime and/or
# the web server are broken. If not, then our request was probably causing an
# error 500 in the media API (ie. a bug), so there's no point in retrying it.
logger.exception(f"HTTP request failed: {exception}")
logger.exception("HTTP request failed: %s", exception)
parsed_url = urlparse(exception.response.request.url)
if is_web_server_broken(parsed_url.scheme + "://" + parsed_url.netloc):
# If the web server is having problems, retry the request later:
@ -124,11 +128,12 @@ def send_http_request(picklable_request: PicklableHttpRequest, retry_queue):
# notified by sentry.
except requests.exceptions.ConnectionError as exception:
logger.exception(
f"HTTP request failed due to a connection error. Retrying later. {exception}"
"HTTP request failed due to a connection error, retrying later: %s",
exception,
)
retry_queue.append(picklable_request) # Retry it later
except Exception as exception:
logger.exception(f"HTTP request failed with unhandled exception. {exception}")
logger.exception("HTTP request failed with unhandled exception. %s", exception)
# Don't put the request into the retry queue, just give up on this one.
# I'm doing this to protect against us getting some pathological request
# that breaks our code. I don't want us pickling data that potentially
@ -210,7 +215,7 @@ class StatusReporter:
audio_metadata["import_status"] = import_status
audio_metadata["comment"] = reason # hack attack
put_payload = json.dumps(audio_metadata)
# logger.debug("sending http put with payload: " + put_payload)
# logger.debug("sending http put with payload: %s", put_payload)
StatusReporter._send_http_request(
PicklableHttpRequest(

View File

@ -1,32 +1,16 @@
# This file contains a list of package dependencies.
[python]
python3 = buster, bullseye, bookworm, bionic, focal, jammy
python3-pip = buster, bullseye, bookworm, bionic, focal, jammy
python3-pika = buster, bullseye, bookworm, bionic, focal, jammy
python3 = focal, bullseye, jammy, bookworm
python3-pip = focal, bullseye, jammy, bookworm
[liquidsoap]
# https://github.com/savonet/liquidsoap/blob/main/CHANGES.md
liquidsoap-plugin-alsa = bionic
liquidsoap-plugin-ao = bionic
liquidsoap-plugin-ogg = bionic
liquidsoap-plugin-portaudio = bionic
# Already recommended packages in bionic
# See `apt show liquidsoap`
; liquidsoap-plugin-faad = bionic
; liquidsoap-plugin-flac = bionic
; liquidsoap-plugin-icecast = bionic
; liquidsoap-plugin-lame = bionic
; liquidsoap-plugin-mad = bionic
; liquidsoap-plugin-pulseaudio = bionic
; liquidsoap-plugin-taglib = bionic
; liquidsoap-plugin-voaacenc = bionic
; liquidsoap-plugin-vorbis = bionic
liquidsoap = buster, bullseye, bookworm, bionic, focal, jammy
liquidsoap = focal, bullseye, jammy, bookworm
[ffmpeg]
# Detect duration, silences and replaygain
ffmpeg = buster, bullseye, bookworm, bionic, focal, jammy
ffmpeg = focal, bullseye, jammy, bookworm
[=development]
# Generate fixtures
ffmpeg = buster, bullseye, bookworm, bionic, focal, jammy
ffmpeg = focal, bullseye, jammy, bookworm

View File

@ -1,3 +1,8 @@
[tool.isort]
profile = "black"
combine_as_imports = true
known_first_party = ["libretime_analyzer"]
[tool.pylint.messages_control]
extension-pkg-whitelist = "pydantic"
disable = [
@ -6,13 +11,13 @@ disable = [
"missing-module-docstring",
]
[tool.pylint.format]
disable = "logging-fstring-interpolation"
[tool.pytest.ini_options]
log_cli = true
log_cli_level = "DEBUG"
[tool.coverage.run]
source = ["libretime_analyzer"]
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"

View File

@ -1,6 +1,6 @@
# Please do not edit this file, edit the setup.py file!
# This file is auto-generated by tools/extract_requirements.py.
mutagen>=1.45.1,<1.46
mutagen>=1.45.1,<1.48
pika>=1.0.0,<1.4
requests>=2.25.1,<2.29
requests>=2.32.2,<2.33
typing_extensions

View File

@ -1,8 +1,10 @@
from setuptools import find_packages, setup
version = "4.2.0" # x-release-please-version
setup(
name="libretime-analyzer",
version="3.0.0-beta.2",
version=version,
description="Libretime Analyzer",
author="LibreTime Contributors",
url="https://github.com/libretime/libretime",
@ -18,17 +20,20 @@ setup(
"libretime-analyzer=libretime_analyzer.main:cli",
]
},
python_requires=">=3.6",
python_requires=">=3.8",
install_requires=[
"mutagen>=1.45.1,<1.46",
"mutagen>=1.45.1,<1.48",
"pika>=1.0.0,<1.4",
"requests>=2.25.1,<2.29",
"requests>=2.32.2,<2.33",
"typing_extensions",
],
extras_require={
"dev": [
"distro",
"types-requests",
"distro>=1.8.0,<2",
"types-requests>=2.31.0,<3",
],
"sentry": [
"sentry-sdk>=1.15.0,<2",
],
},
zip_safe=False,

View File

@ -2,11 +2,11 @@ import shutil
from pathlib import Path
import pytest
from libretime_shared.logging import TRACE, setup_logger
from libretime_shared.logging import setup_logger
from .fixtures import fixtures_path
setup_logger(TRACE)
setup_logger("debug")
AUDIO_FILENAME = "s1-stereo-tagged.mp3"
AUDIO_FILE = fixtures_path / AUDIO_FILENAME

View File

@ -23,28 +23,28 @@ FILES = [
# 8s -> 9s: silence
# 9s -> 12s: musik
# 12s -> 15s: pink noise fade out
Fixture(here / "s1-jointstereo.mp3", 15.0, 6.0, 13.0, -5.9 ),
Fixture(here / "s1-mono.mp3", 15.0, 6.0, 13.0, -2.0 ),
Fixture(here / "s1-stereo.mp3", 15.0, 6.0, 13.0, -5.9 ),
Fixture(here / "s1-mono-12.mp3", 15.0, 9.0, 12.0, +7.0 ),
Fixture(here / "s1-stereo-12.mp3", 15.0, 9.0, 12.0, +6.1 ),
Fixture(here / "s1-mono+12.mp3", 15.0, 3.5, 13.0, -17.0 ),
Fixture(here / "s1-stereo+12.mp3", 15.0, 3.5, 13.0, -17.8 ),
Fixture(here / "s1-mono.flac", 15.0, 6.0, 13.0, -2.3 ),
Fixture(here / "s1-stereo.flac", 15.0, 6.0, 13.0, -6.0 ),
Fixture(here / "s1-mono-12.flac", 15.0, 9.0, 12.0, +10.0 ),
Fixture(here / "s1-stereo-12.flac", 15.0, 9.0, 12.0, +5.9 ),
Fixture(here / "s1-mono+12.flac", 15.0, 3.5, 13.0, -12.0 ),
Fixture(here / "s1-stereo+12.flac", 15.0, 3.5, 13.0, -14.9 ),
Fixture(here / "s1-mono.m4a", 15.0, 6.0, 13.0, -4.5 ),
Fixture(here / "s1-stereo.m4a", 15.0, 6.0, 13.0, -5.8 ),
Fixture(here / "s1-mono.ogg", 15.0, 6.0, 13.0, -4.9 ),
Fixture(here / "s1-stereo.ogg", 15.0, 6.0, 13.0, -5.7 ),
Fixture(here / "s1-stereo", 15.0, 6.0, 13.0, -5.7 ),
Fixture(here / "s1-mono.wav", 15.0, 6.0, 13.0, -2.3 ),
Fixture(here / "s1-stereo.wav", 15.0, 6.0, 13.0, -6.0 ),
Fixture(here / "s1-jointstereo.mp3", 15.0, 1.4, 15.0, -5.9 ),
Fixture(here / "s1-mono.mp3", 15.0, 1.5, 15.0, -2.0 ),
Fixture(here / "s1-stereo.mp3", 15.0, 1.4, 15.0, -5.9 ),
Fixture(here / "s1-mono-12.mp3", 15.0, 1.2, 15.0, +7.0 ),
Fixture(here / "s1-stereo-12.mp3", 15.0, 1.2, 15.0, +6.1 ),
Fixture(here / "s1-mono+12.mp3", 15.0, 1.2, 15.0, -17.0 ),
Fixture(here / "s1-stereo+12.mp3", 15.0, 1.2, 15.0, -17.8 ),
Fixture(here / "s1-mono.flac", 15.0, 1.4, 15.0, -2.3 ),
Fixture(here / "s1-stereo.flac", 15.0, 1.4, 15.0, -6.0 ),
Fixture(here / "s1-mono-12.flac", 15.0, 2.0, 15.0, +10.0 ),
Fixture(here / "s1-stereo-12.flac", 15.0, 1.8, 15.0, +5.9 ),
Fixture(here / "s1-mono+12.flac", 15.0, 0.0, 15.0, -12.0 ),
Fixture(here / "s1-stereo+12.flac", 15.0, 0.0, 15.0, -14.9 ),
Fixture(here / "s1-mono.m4a", 15.0, 1.4, 15.0, -4.5 ),
Fixture(here / "s1-stereo.m4a", 15.0, 1.4, 15.0, -5.8 ),
Fixture(here / "s1-mono.ogg", 15.0, 1.4, 15.0, -4.9 ),
Fixture(here / "s1-stereo.ogg", 15.0, 1.4, 15.0, -5.7 ),
Fixture(here / "s1-stereo", 15.0, 1.4, 15.0, -5.7 ),
Fixture(here / "s1-mono.wav", 15.0, 1.5, 15.0, -2.3 ),
Fixture(here / "s1-stereo.wav", 15.0, 1.4, 15.0, -6.0 ),
# 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
# 0s -> 1.8s: silence
# 1.8s : noise
@ -96,12 +96,18 @@ tags = {
"comment": "Test Comment",
}
mp3Tags = {
**tags,
"comments": tags["comment"],
"description": tags["comment"],
}
FILES_TAGGED = [
FixtureMeta(
here / "s1-jointstereo-tagged.mp3",
{
**meta,
**tags,
**mp3Tags,
"bit_rate": approx(128000, abs=1e2),
"channels": 2,
"mime": "audio/mp3",
@ -111,7 +117,7 @@ FILES_TAGGED = [
here / "s1-mono-tagged.mp3",
{
**meta,
**tags,
**mp3Tags,
"bit_rate": approx(64000, abs=1e2),
"channels": 1,
"mime": "audio/mp3",
@ -121,7 +127,7 @@ FILES_TAGGED = [
here / "s1-stereo-tagged.mp3",
{
**meta,
**tags,
**mp3Tags,
"bit_rate": approx(128000, abs=1e2),
"channels": 2,
"mime": "audio/mp3",
@ -151,7 +157,7 @@ FILES_TAGGED = [
here / "s1-mono-tagged.m4a",
{
**meta,
**tags,
**mp3Tags,
"bit_rate": approx(65000, abs=5e4),
"channels": 2, # Weird
"mime": "audio/mp4",
@ -161,7 +167,7 @@ FILES_TAGGED = [
here / "s1-stereo-tagged.m4a",
{
**meta,
**tags,
**mp3Tags,
"bit_rate": approx(128000, abs=1e5),
"channels": 2,
"mime": "audio/mp4",
@ -201,7 +207,7 @@ FILES_TAGGED = [
here / "s1-mono-tagged.wav",
{
**meta,
"bit_rate": approx(96000, abs=1e2),
"bit_rate": approx(768000, abs=1e2),
"channels": 1,
"mime": "audio/wav",
},
@ -210,7 +216,7 @@ FILES_TAGGED = [
here / "s1-stereo-tagged.wav",
{
**meta,
"bit_rate": approx(384000, abs=1e2),
"bit_rate": approx(1536000, abs=1e2),
"channels": 2,
"mime": "audio/wav",
},
@ -228,12 +234,18 @@ tags = {
"comment": "Ł Ą Ż Ę Ć Ń Ś Ź",
}
mp3Tags = {
**tags,
"comments": tags["comment"],
"description": tags["comment"],
}
FILES_TAGGED += [
FixtureMeta(
here / "s1-jointstereo-tagged-utf8.mp3",
{
**meta,
**tags,
**mp3Tags,
"bit_rate": approx(128000, abs=1e2),
"channels": 2,
"mime": "audio/mp3",
@ -243,7 +255,7 @@ FILES_TAGGED += [
here / "s1-mono-tagged-utf8.mp3",
{
**meta,
**tags,
**mp3Tags,
"bit_rate": approx(64000, abs=1e2),
"channels": 1,
"mime": "audio/mp3",
@ -253,7 +265,7 @@ FILES_TAGGED += [
here / "s1-stereo-tagged-utf8.mp3",
{
**meta,
**tags,
**mp3Tags,
"bit_rate": approx(128000, abs=1e2),
"channels": 2,
"mime": "audio/mp3",
@ -283,7 +295,7 @@ FILES_TAGGED += [
here / "s1-mono-tagged-utf8.m4a",
{
**meta,
**tags,
**mp3Tags,
"bit_rate": approx(65000, abs=5e4),
"channels": 2, # Weird
"mime": "audio/mp4",
@ -293,7 +305,7 @@ FILES_TAGGED += [
here / "s1-stereo-tagged-utf8.m4a",
{
**meta,
**tags,
**mp3Tags,
"bit_rate": approx(128000, abs=1e5),
"channels": 2,
"mime": "audio/mp4",
@ -333,7 +345,7 @@ FILES_TAGGED += [
here / "s1-mono-tagged-utf8.wav",
{
**meta,
"bit_rate": approx(96000, abs=1e2),
"bit_rate": approx(768000, abs=1e2),
"channels": 1,
"mime": "audio/wav",
},
@ -342,7 +354,7 @@ FILES_TAGGED += [
here / "s1-stereo-tagged-utf8.wav",
{
**meta,
"bit_rate": approx(384000, abs=1e2),
"bit_rate": approx(1536000, abs=1e2),
"channels": 2,
"mime": "audio/wav",
},

View File

@ -1,7 +1,9 @@
import distro
import pytest
from libretime_analyzer.pipeline.analyze_cuepoint import analyze_cuepoint
from libretime_analyzer.pipeline.analyze_cuepoint import (
analyze_cuepoint,
analyze_duration,
)
from ..fixtures import FILES
@ -16,11 +18,8 @@ from ..fixtures import FILES
),
)
def test_analyze_cuepoint(filepath, length, cuein, cueout):
metadata = analyze_cuepoint(filepath, {})
# On bionic, large file duration is a wrong.
if distro.codename() == "bionic" and str(filepath).endswith("s1-large.flac"):
return
metadata = analyze_duration(filepath, {})
metadata = analyze_cuepoint(filepath, metadata)
assert metadata["length_seconds"] == pytest.approx(length, abs=0.1)
assert float(metadata["cuein"]) == pytest.approx(float(cuein), abs=1)

View File

@ -27,8 +27,8 @@ def test_analyze_metadata(filepath: Path, metadata: dict):
del metadata["length"]
del found["length"]
# mp3,ogg,flac files does not support comments yet
if not filepath.suffix == ".m4a":
# ogg,flac files does not support comments yet
if not filepath.suffix == ".m4a" and not filepath.suffix == ".mp3":
if "comment" in metadata:
del metadata["comment"]

View File

@ -33,8 +33,8 @@ def test_analyze_playability_invalid_filepath():
def test_analyze_playability_invalid_wma():
# Liquisoap does not fail with wma files on buster, bullseye, focal, jammy
if distro.codename() in ("buster", "bullseye", "focal", "jammy"):
# Liquisoap does not fail with wma files on focal, bullseye, jammy
if distro.codename() in ("focal", "bullseye", "jammy"):
return
with pytest.raises(UnplayableFileError):

View File

@ -1,4 +1,3 @@
import distro
import pytest
from libretime_analyzer.pipeline.analyze_replaygain import analyze_replaygain
@ -13,10 +12,5 @@ from ..fixtures import FILES
def test_analyze_replaygain(filepath, replaygain):
tolerance = 0.8
# On bionic, replaygain is a bit higher for loud mp3 files.
# This huge tolerance makes the test pass, with values devianting from ~-17 to ~-13
if distro.codename() == "bionic" and str(filepath).endswith("+12.mp3"):
tolerance = 5
metadata = analyze_replaygain(filepath, {})
assert metadata["replay_gain"] == pytest.approx(replaygain, abs=tolerance)

View File

@ -1,6 +1,3 @@
from math import inf
import distro
import pytest
from libretime_analyzer.pipeline._ffmpeg import (
@ -30,11 +27,6 @@ def test_probe_replaygain(filepath, replaygain):
def test_compute_replaygain(filepath, replaygain):
tolerance = 0.8
# On bionic, replaygain is a bit higher for loud mp3 files.
# This huge tolerance makes the test pass, with values devianting from ~-17 to ~-13
if distro.codename() == "bionic" and str(filepath).endswith("+12.mp3"):
tolerance = 5
assert compute_replaygain(filepath) == pytest.approx(replaygain, abs=tolerance)
@ -86,10 +78,6 @@ def test_silence_detect_re(line, expected):
def test_compute_silences(filepath, length, cuein, cueout):
result = compute_silences(filepath)
# On bionic, large file duration is a wrong.
if distro.codename() == "bionic" and str(filepath).endswith("s1-large.flac"):
return
if cuein != 0.0:
assert len(result) > 0
first = result.pop(0)
@ -97,11 +85,6 @@ def test_compute_silences(filepath, length, cuein, cueout):
assert first[1] == pytest.approx(cuein, abs=1)
if cueout != length:
# ffmpeg v3 (bionic) does not warn about silence end when the track ends.
# Check for infinity on last silence ending
if distro.codename() == "bionic":
length = inf
assert len(result) > 0
last = result.pop()
assert last[0] == pytest.approx(cueout, abs=1)
@ -113,8 +96,4 @@ def test_compute_silences(filepath, length, cuein, cueout):
map(lambda i: pytest.param(i.path, i.length, id=i.path.name), FILES),
)
def test_probe_duration(filepath, length):
# On bionic, large file duration is a wrong.
if distro.codename() == "bionic" and str(filepath).endswith("s1-large.flac"):
return
assert probe_duration(filepath) == pytest.approx(length, abs=0.05)

View File

@ -4,7 +4,7 @@ from queue import Queue
import pytest
from libretime_analyzer.pipeline import Pipeline
from libretime_analyzer.pipeline import Pipeline, PipelineOptions
from ..conftest import AUDIO_FILENAME, AUDIO_IMPORT_DEST
@ -16,6 +16,7 @@ def test_run_analysis(src_dir: Path, dest_dir: Path):
str(src_dir / AUDIO_FILENAME),
str(dest_dir),
AUDIO_FILENAME,
PipelineOptions(),
)
metadata = queue.get()

View File

@ -5,12 +5,12 @@ include ../tools/python.mk
PIP_INSTALL := \
--editable ../shared \
--editable .[dev]
PYLINT_ARG := libretime_api_client tests || true
MYPY_ARG := libretime_api_client tests || true
BANDIT_ARG := libretime_api_client || true
PYTEST_ARG := --cov=libretime_api_client tests
PYLINT_ARG := libretime_api_client tests
MYPY_ARG := libretime_api_client tests
BANDIT_ARG := libretime_api_client
format: .format
lint: .format-check .pylint .mypy .bandit
test: .pytest
test-coverage: .coverage
clean: .clean

View File

@ -0,0 +1,4 @@
from importlib.metadata import version as get_version
PACKAGE = __name__
VERSION = get_version(__name__)

View File

@ -1,11 +1,13 @@
import logging
from typing import Optional
from loguru import logger
from requests import Response, Session as BaseSession
from requests.adapters import HTTPAdapter
from requests.exceptions import RequestException
from urllib3.util import Retry
logger = logging.getLogger(__name__)
DEFAULT_TIMEOUT = 5
@ -24,20 +26,26 @@ class TimeoutHTTPAdapter(HTTPAdapter):
return super().send(request, *args, **kwargs)
def default_retry(max_retries: int = 5):
return Retry(
total=max_retries,
backoff_factor=2,
status_forcelist=[413, 429, 500, 502, 503, 504],
)
class Session(BaseSession):
base_url: Optional[str]
def __init__(self, base_url: Optional[str] = None):
def __init__(
self,
base_url: Optional[str] = None,
retry: Optional[Retry] = None,
):
super().__init__()
self.base_url = base_url
retry_strategy = Retry(
total=5,
backoff_factor=2,
status_forcelist=[413, 429, 500, 502, 503, 504],
)
adapter = TimeoutHTTPAdapter(max_retries=retry_strategy)
adapter = TimeoutHTTPAdapter(max_retries=retry)
self.mount("http://", adapter)
self.mount("https://", adapter)
@ -59,9 +67,16 @@ class AbstractApiClient:
session: Session
base_url: str
def __init__(self, base_url: str):
def __init__(
self,
base_url: str,
retry: Optional[Retry] = None,
):
self.base_url = base_url
self.session = Session(base_url=base_url)
self.session = Session(
base_url=base_url,
retry=retry,
)
def _request(
self,

View File

@ -1,167 +0,0 @@
import logging
from time import sleep
import requests
from requests.auth import AuthBase
class UrlParamDict(dict):
def __missing__(self, key):
return "{" + key + "}"
class UrlException(Exception):
pass
class IncompleteUrl(UrlException):
def __init__(self, url):
super().__init__()
self.url = url
def __str__(self):
return f"Incomplete url: '{self.url}'"
class UrlBadParam(UrlException):
def __init__(self, url, param):
super().__init__()
self.url = url
self.param = param
def __str__(self):
return f"Bad param '{self.param}' passed into url: '{self.url}'"
# pylint: disable=too-few-public-methods
class KeyAuth(AuthBase):
def __init__(self, key):
self.key = key
def __call__(self, r):
r.headers["Authorization"] = f"Api-Key {self.key}"
return r
class ApcUrl:
"""A safe abstraction and testable for filling in parameters in
api_client.cfg"""
def __init__(self, base_url):
self.base_url = base_url
def params(self, **params):
temp_url = self.base_url
for k in params:
wrapped_param = "{" + k + "}"
if wrapped_param not in temp_url:
raise UrlBadParam(self.base_url, k)
temp_url = temp_url.format_map(UrlParamDict(**params))
return ApcUrl(temp_url)
def url(self):
if "{" in self.base_url:
raise IncompleteUrl(self.base_url)
return self.base_url
class ApiRequest:
API_HTTP_REQUEST_TIMEOUT = 30 # 30 second HTTP request timeout
def __init__(self, name, url, logger=None, api_key=None):
self.name = name
self.url = url
self.__req = None
if logger is None:
self.logger = logging
else:
self.logger = logger
self.auth = KeyAuth(api_key)
def __call__(self, *, _post_data=None, _put_data=None, params=None, **kwargs):
final_url = self.url.params(**kwargs).url()
self.logger.debug(final_url)
try:
if _post_data is not None:
res = requests.post(
final_url,
data=_post_data,
auth=self.auth,
timeout=ApiRequest.API_HTTP_REQUEST_TIMEOUT,
)
elif _put_data is not None:
res = requests.put(
final_url,
data=_put_data,
auth=self.auth,
timeout=ApiRequest.API_HTTP_REQUEST_TIMEOUT,
)
else:
res = requests.get(
final_url,
params=params,
auth=self.auth,
timeout=ApiRequest.API_HTTP_REQUEST_TIMEOUT,
)
# Check for bad HTTP status code
res.raise_for_status()
if "application/json" in res.headers["content-type"]:
return res.json()
return res
except requests.exceptions.Timeout:
self.logger.error("HTTP request to %s timed out", final_url)
raise
except requests.exceptions.HTTPError:
self.logger.error(
f"{res.request.method} {res.request.url} request failed '{res.status_code}':"
f"\nPayload: {res.request.body}"
f"\nResponse: {res.text}"
)
raise
def req(self, *args, **kwargs):
self.__req = lambda: self(*args, **kwargs)
return self
def retry(self, count, delay=5):
"""Try to send request n times. If after n times it fails then
we finally raise exception"""
for _ in range(0, count - 1):
try:
return self.__req()
except requests.exceptions.RequestException:
sleep(delay)
return self.__req()
class RequestProvider:
"""
Creates the available ApiRequest instance
"""
def __init__(self, base_url: str, api_key: str, endpoints: dict):
self.requests = {}
self.url = ApcUrl(base_url + "/{action}")
# Now we must discover the possible actions
for action_name, action_value in endpoints.items():
new_url = self.url.params(action=action_value)
if "{api_key}" in action_value:
new_url = new_url.params(api_key=api_key)
self.requests[action_name] = ApiRequest(
action_name, new_url, api_key=api_key
)
def available_requests(self):
return list(self.requests.keys())
def __contains__(self, request):
return request in self.requests
def __getattr__(self, attr):
if attr in self:
return self.requests[attr]
return super().__getattribute__(attr)

View File

@ -1,124 +1,150 @@
import json
import logging
import time
import urllib.parse
from functools import wraps
from time import sleep
import requests
from libretime_shared.config import BaseConfig, GeneralConfig
from requests.exceptions import RequestException
from ._utils import ApiRequest, RequestProvider
from ._client import AbstractApiClient, Response
logger = logging.getLogger(__name__)
class Config(BaseConfig):
general: GeneralConfig
def retry_decorator(max_retries: int = 5):
def retry_request(func):
@wraps(func)
def wrapper(*args, **kwargs):
retries = max_retries
while True:
try:
return func(*args, **kwargs)
except RequestException as exception:
logger.warning(exception)
retries -= 1
if retries <= 0:
break
sleep(2.0)
return None
return wrapper
return retry_request
AIRTIME_API_VERSION = "1.1"
class BaseApiClient(AbstractApiClient):
def __init__(self, base_url: str, api_key: str):
super().__init__(base_url=base_url)
self.session.headers.update({"Authorization": f"Api-Key {api_key}"})
self.session.params.update({"format": "json"}) # type: ignore[union-attr]
def version(self, **kwargs) -> Response:
return self._request(
"GET",
"/api/version",
**kwargs,
)
api_endpoints = {}
def register_component(self, component: str, **kwargs) -> Response:
return self._request(
"GET",
"/api/register-component",
params={"component": component},
**kwargs,
)
# URL to get the version number of the server API
api_endpoints["version_url"] = "version/api_key/{api_key}"
# URL to register a components IP Address with the central web server
api_endpoints[
"register_component"
] = "register-component/format/json/api_key/{api_key}/component/{component}"
def notify_media_item_start_play(self, media_id, **kwargs) -> Response:
return self._request(
"GET",
"/api/notify-media-item-start-play",
params={"media_id": media_id},
**kwargs,
)
# media-monitor
api_endpoints[
"upload_recorded"
] = "upload-recorded/format/json/api_key/{api_key}/fileid/{fileid}/showinstanceid/{showinstanceid}"
# show-recorder
api_endpoints["show_schedule_url"] = "recorded-shows/format/json/api_key/{api_key}"
api_endpoints["upload_file_url"] = "rest/media"
# pypo
api_endpoints[
"update_start_playing_url"
] = "notify-media-item-start-play/api_key/{api_key}/media_id/{media_id}/"
api_endpoints[
"get_stream_setting"
] = "get-stream-setting/format/json/api_key/{api_key}/"
api_endpoints[
"update_liquidsoap_status"
] = "update-liquidsoap-status/format/json/api_key/{api_key}/msg/{msg}/stream_id/{stream_id}/boot_time/{boot_time}"
api_endpoints[
"update_source_status"
] = "update-source-status/format/json/api_key/{api_key}/sourcename/{sourcename}/status/{status}"
api_endpoints[
"check_live_stream_auth"
] = "check-live-stream-auth/format/json/api_key/{api_key}/username/{username}/password/{password}/djtype/{djtype}"
api_endpoints["get_bootstrap_info"] = "get-bootstrap-info/format/json/api_key/{api_key}"
api_endpoints[
"notify_webstream_data"
] = "notify-webstream-data/api_key/{api_key}/media_id/{media_id}/format/json"
api_endpoints[
"notify_liquidsoap_started"
] = "rabbitmq-do-push/api_key/{api_key}/format/json"
api_endpoints[
"get_stream_parameters"
] = "get-stream-parameters/api_key/{api_key}/format/json"
api_endpoints["push_stream_stats"] = "push-stream-stats/api_key/{api_key}/format/json"
api_endpoints[
"update_stream_setting_table"
] = "update-stream-setting-table/api_key/{api_key}/format/json"
api_endpoints[
"update_metadata_on_tunein"
] = "update-metadata-on-tunein/api_key/{api_key}"
def update_liquidsoap_status(self, msg, stream_id, boot_time, **kwargs) -> Response:
return self._request(
"POST",
"/api/update-liquidsoap-status",
params={"stream_id": stream_id, "boot_time": boot_time},
data={"msg_post": msg},
**kwargs,
)
def update_source_status(self, sourcename, status, **kwargs) -> Response:
return self._request(
"GET",
"/api/update-source-status",
params={"sourcename": sourcename, "status": status},
**kwargs,
)
def check_live_stream_auth(self, username, password, djtype, **kwargs) -> Response:
return self._request(
"GET",
"/api/check-live-stream-auth",
params={"username": username, "password": password, "djtype": djtype},
**kwargs,
)
def notify_webstream_data(self, media_id, data, **kwargs) -> Response:
return self._request(
"POST",
"/api/notify-webstream-data",
params={"media_id": media_id},
data={"data": data}, # Data is already a json formatted string
**kwargs,
)
def rabbitmq_do_push(self, **kwargs) -> Response:
return self._request(
"GET",
"/api/rabbitmq-do-push",
**kwargs,
)
def push_stream_stats(self, data, **kwargs) -> Response:
return self._request(
"POST",
"/api/push-stream-stats",
data={"data": json.dumps(data)},
**kwargs,
)
def update_stream_setting_table(self, data, **kwargs) -> Response:
return self._request(
"POST",
"/api/update-stream-setting-table",
data={"data": json.dumps(data)},
**kwargs,
)
def update_metadata_on_tunein(self, **kwargs) -> Response:
return self._request(
"GET",
"/api/update-metadata-on-tunein",
**kwargs,
)
class ApiClient:
API_BASE = "/api"
UPLOAD_RETRIES = 3
UPLOAD_WAIT = 60
def __init__(self, base_url: str, api_key: str):
self._base_client = BaseApiClient(base_url=base_url, api_key=api_key)
def __init__(self, logger=None, config_path="/etc/libretime/config.yml"):
self.logger = logger or logging
config = Config(config_path)
self.base_url = config.general.public_url
self.api_key = config.general.api_key
self.services = RequestProvider(
base_url=self.base_url + self.API_BASE,
api_key=self.api_key,
endpoints=api_endpoints,
)
def __get_api_version(self):
def version(self):
try:
return self.services.version_url()["api_version"]
except Exception as exception:
self.logger.exception(exception)
resp = self._base_client.version()
payload = resp.json()
return payload["api_version"]
except RequestException:
return -1
def is_server_compatible(self, verbose=True):
api_version = self.__get_api_version()
if api_version == -1:
if verbose:
self.logger.info("Unable to get Airtime API version number.\n")
return False
if api_version[0:3] != AIRTIME_API_VERSION[0:3]:
if verbose:
self.logger.info("Airtime API version found: " + str(api_version))
self.logger.info(
"pypo is only compatible with API version: " + AIRTIME_API_VERSION
)
return False
if verbose:
self.logger.info("Airtime API version found: " + str(api_version))
self.logger.info(
"pypo is only compatible with API version: " + AIRTIME_API_VERSION
)
return True
def notify_liquidsoap_started(self):
try:
self.services.notify_liquidsoap_started()
except Exception as exception:
self.logger.exception(exception)
self._base_client.rabbitmq_do_push()
except RequestException:
pass
def notify_media_item_start_playing(self, media_id):
"""
@ -127,96 +153,20 @@ class ApiClient:
which we handed to liquidsoap in get_liquidsoap_data().
"""
try:
return self.services.update_start_playing_url(media_id=media_id)
except Exception as exception:
self.logger.exception(exception)
return self._base_client.notify_media_item_start_play(media_id=media_id)
except RequestException:
return None
def get_shows_to_record(self):
try:
return self.services.show_schedule_url()
except Exception as exception:
self.logger.exception(exception)
return None
def upload_recorded_show(self, files, show_id):
response = ""
retries = self.UPLOAD_RETRIES
retries_wait = self.UPLOAD_WAIT
url = self.construct_rest_url("upload_file_url")
self.logger.debug(url)
for i in range(0, retries):
self.logger.debug("Upload attempt: %s", i + 1)
self.logger.debug(files)
self.logger.debug(ApiRequest.API_HTTP_REQUEST_TIMEOUT)
try:
request = requests.post(
url, files=files, timeout=float(ApiRequest.API_HTTP_REQUEST_TIMEOUT)
)
response = request.json()
self.logger.debug(response)
# FIXME: We need to tell LibreTime that the uploaded track was recorded
# for a specific show
#
# My issue here is that response does not yet have an id. The id gets
# generated at the point where analyzer is done with it's work. We
# probably need to do what is below in analyzer and also make sure that
# the show instance id is routed all the way through.
#
# It already gets uploaded by this but the RestController does not seem
# to care about it. In the end analyzer doesn't have the info in it's
# rabbitmq message and imports the show as a regular track.
#
# logger.info("uploaded show result as file id %s", response.id)
#
# url = self.construct_url("upload_recorded") url =
# url.replace('%%fileid%%', response.id) url =
# url.replace('%%showinstanceid%%', show_id) request.get(url)
# logger.info("associated uploaded file %s with show instance %s",
# response.id, show_id)
break
except requests.exceptions.HTTPError as exception:
self.logger.error(f"Http error code: {exception.response.status_code}")
self.logger.exception(exception)
except requests.exceptions.ConnectionError as exception:
self.logger.exception(f"Server is down: {exception}")
except Exception as exception:
self.logger.exception(exception)
# wait some time before next retry
time.sleep(retries_wait)
return response
def check_live_stream_auth(self, username, password, dj_type):
try:
return self.services.check_live_stream_auth(
username=username, password=password, djtype=dj_type
return self._base_client.check_live_stream_auth(
username=username,
password=password,
djtype=dj_type,
)
except Exception as exception:
self.logger.exception(exception)
except RequestException:
return {}
def construct_rest_url(self, action_key):
"""
Constructs the base url for RESTful requests
"""
url = urllib.parse.urlsplit(self.base_url)
url.username = self.api_key
return f"{url.geturl()}/{api_endpoints[action_key]}"
def get_stream_setting(self):
return self.services.get_stream_setting()
def register_component(self, component):
"""
Purpose of this method is to contact the server with a "Hey its
@ -225,71 +175,45 @@ class ApiClient:
to query monit via monit's http service, or download log files via a
http server.
"""
return self.services.register_component(component=component)
return self._base_client.register_component(component=component)
@retry_decorator()
def notify_liquidsoap_status(self, msg, stream_id, time):
try:
# encoded_msg is no longer used server_side!!
encoded_msg = urllib.parse.quote("dummy")
self.services.update_liquidsoap_status.req(
_post_data={"msg_post": msg},
msg=encoded_msg,
stream_id=stream_id,
boot_time=time,
).retry(5)
except Exception as exception:
self.logger.exception(exception)
self._base_client.update_liquidsoap_status(
msg=msg,
stream_id=stream_id,
boot_time=time,
)
@retry_decorator()
def notify_source_status(self, sourcename, status):
try:
return self.services.update_source_status.req(
sourcename=sourcename, status=status
).retry(5)
except Exception as exception:
self.logger.exception(exception)
def get_bootstrap_info(self):
"""
Retrieve infomations needed on bootstrap time.
"""
return self.services.get_bootstrap_info()
return self._base_client.update_source_status(
sourcename=sourcename,
status=status,
)
@retry_decorator()
def notify_webstream_data(self, data, media_id):
"""
Update the server with the latest metadata we've received from the
external webstream
"""
self.logger.info(
self.services.notify_webstream_data.req(
_post_data={"data": data}, media_id=str(media_id)
).retry(5)
return self._base_client.notify_webstream_data(
data=data,
media_id=str(media_id),
)
def get_stream_parameters(self):
response = self.services.get_stream_parameters()
self.logger.debug(response)
return response
def push_stream_stats(self, data):
# TODO : users of this method should do their own error handling
response = self.services.push_stream_stats(
_post_data={"data": json.dumps(data)}
)
return response
return self._base_client.push_stream_stats(data=data)
def update_stream_setting_table(self, data):
try:
response = self.services.update_stream_setting_table(
_post_data={"data": json.dumps(data)}
)
return response
except Exception as exception:
self.logger.exception(exception)
return self._base_client.update_stream_setting_table(data=data)
except RequestException:
return None
def update_metadata_on_tunein(self):
self.services.update_metadata_on_tunein()
self._base_client.update_metadata_on_tunein()
class InvalidContentType(Exception):
pass
def trigger_task_manager(self):
self._base_client.version()

View File

@ -1,11 +1,14 @@
from ._client import AbstractApiClient, Response
from ._client import AbstractApiClient, Response, default_retry
class ApiClient(AbstractApiClient):
VERSION = "2.0"
def __init__(self, base_url: str, api_key: str):
super().__init__(base_url=base_url)
super().__init__(
base_url=base_url,
retry=default_retry(),
)
self.session.headers.update({"Authorization": f"Api-Key {api_key}"})
def get_info(self, **kwargs) -> Response:

View File

@ -1,3 +1,8 @@
[tool.isort]
profile = "black"
combine_as_imports = true
known_first_party = ["libretime_api_client"]
[tool.pylint.messages_control]
extension-pkg-whitelist = "pydantic"
disable = [
@ -6,13 +11,13 @@ disable = [
"missing-module-docstring",
]
[tool.pylint.format]
disable = "logging-fstring-interpolation"
[tool.pytest.ini_options]
log_cli = true
log_cli_level = "DEBUG"
[tool.coverage.run]
source = ["libretime_api_client"]
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"

View File

@ -1,4 +1,4 @@
# Please do not edit this file, edit the setup.py file!
# This file is auto-generated by tools/extract_requirements.py.
python-dateutil>=2.8.1,<2.9
requests>=2.25.1,<2.29
python-dateutil>=2.8.1,<2.10
requests>=2.32.2,<2.33

View File

@ -1,8 +1,10 @@
from setuptools import find_packages, setup
version = "4.2.0" # x-release-please-version
setup(
name="libretime-api-client",
version="3.0.0-beta.2",
version=version,
description="LibreTime API Client",
author="LibreTime Contributors",
url="https://github.com/libretime/libretime",
@ -14,16 +16,16 @@ setup(
license="AGPLv3",
packages=find_packages(exclude=["*tests*", "*fixtures*"]),
package_data={"": ["py.typed"]},
python_requires=">=3.6",
python_requires=">=3.8",
install_requires=[
"python-dateutil>=2.8.1,<2.9",
"requests>=2.25.1,<2.29",
"python-dateutil>=2.8.1,<2.10",
"requests>=2.32.2,<2.33",
],
extras_require={
"dev": [
"requests-mock",
"types-python-dateutil",
"types-requests",
"requests-mock>=1.10.0,<2",
"types-python-dateutil>=2.8.1,<3",
"types-requests>=2.31.0,<3",
],
},
zip_safe=False,

View File

@ -1,95 +0,0 @@
from unittest.mock import MagicMock, patch
import pytest
from libretime_api_client._utils import (
ApcUrl,
ApiRequest,
IncompleteUrl,
RequestProvider,
UrlBadParam,
)
@pytest.mark.parametrize(
"url, params, expected",
[
("one/two/three", {}, "one/two/three"),
("/testing/{key}", {"key": "aaa"}, "/testing/aaa"),
(
"/more/{key_a}/{key_b}/testing",
{"key_a": "aaa", "key_b": "bbb"},
"/more/aaa/bbb/testing",
),
],
)
def test_apc_url(url: str, params: dict, expected: str):
found = ApcUrl(url)
assert found.base_url == url
assert found.params(**params).url() == expected
def test_apc_url_bad_param():
url = ApcUrl("/testing/{key}")
with pytest.raises(UrlBadParam):
url.params(bad_key="testing")
def test_apc_url_incomplete():
url = ApcUrl("/{one}/{two}/three").params(two="testing")
with pytest.raises(IncompleteUrl):
url.url()
def test_api_request_init():
req = ApiRequest("request_name", ApcUrl("/test/ing"))
assert req.name == "request_name"
def test_api_request_call_json():
return_value = {"ok": "ok"}
read = MagicMock()
read.headers = {"content-type": "application/json"}
read.json = MagicMock(return_value=return_value)
with patch("requests.get") as mock_method:
mock_method.return_value = read
request = ApiRequest("mm", ApcUrl("http://localhost/testing"))()
assert request == return_value
def test_api_request_call_html():
return_value = "<html><head></head><body></body></html>"
read = MagicMock()
read.headers = {"content-type": "application/html"}
read.text = MagicMock(return_value=return_value)
with patch("requests.get") as mock_method:
mock_method.return_value = read
request = ApiRequest("mm", ApcUrl("http://localhost/testing"))()
assert request.text() == return_value
def test_request_provider_init():
request_provider = RequestProvider(
base_url="http://localhost/test",
api_key="test_key",
endpoints={},
)
assert len(request_provider.available_requests()) == 0
def test_request_provider_contains():
endpoints = {
"upload_recorded": "/1/",
}
request_provider = RequestProvider(
base_url="http://localhost/test",
api_key="test_key",
endpoints=endpoints,
)
for endpoint in endpoints:
assert endpoint in request_provider.requests

View File

@ -0,0 +1,21 @@
import pytest
from libretime_api_client.v1 import ApiClient
@pytest.mark.parametrize(
"base_url",
[
("http://localhost:8080"),
("http://localhost:8080/base"),
],
)
def test_api_client(requests_mock, base_url):
api_client = ApiClient(base_url=base_url, api_key="test-key")
requests_mock.get(
f"{base_url}/api/version",
json={"api_version": "1.0.0"},
)
assert api_client.version() == "1.0.0"

View File

@ -4,32 +4,22 @@ include ../tools/python.mk
PIP_INSTALL := \
--editable ../shared \
--editable .[dev]
--editable .[dev,sentry]
PYLINT_ARG := libretime_api
MYPY_ARG := libretime_api
BANDIT_ARG := --exclude '*/tests/*' libretime_api || true
export DJANGO_SETTINGS_MODULE=libretime_api.settings.testing
format: .format
lint: .format-check .pylint .mypy .bandit
test: .pytest
test-coverage: .coverage
clean: .clean
test: $(VENV)
source $(VENV)/bin/activate
export DJANGO_SETTINGS_MODULE=libretime_api.settings.testing
pytest -v \
--numprocesses=$(CPU_CORES) \
--color=yes \
--cov-config=pyproject.toml \
--cov-report=term \
--cov-report=xml:./coverage.xml \
--cov=libretime_api \
libretime_api
SCHEMA_FILE ?= schema.yml
schema: $(VENV)
source $(VENV)/bin/activate
export DJANGO_SETTINGS_MODULE=libretime_api.settings.testing
libretime-api spectacular --file $(SCHEMA_FILE)
$(VENV)/bin/libretime-api spectacular --file $(SCHEMA_FILE)
if command -v npx > /dev/null; then npx prettier --write $(SCHEMA_FILE); fi
schema-foreach-commit:

View File

@ -11,7 +11,6 @@ PrivateTmp=true
PrivateUsers=true
ProtectClock=true
ProtectControlGroups=true
ProtectHome=true
ProtectHostname=true
ProtectKernelLogs=true
ProtectKernelModules=true
@ -19,14 +18,15 @@ ProtectKernelTunables=true
ProtectProc=invisible
ProtectSystem=full
Environment=PYTHONOPTIMIZE=2
Environment=LIBRETIME_CONFIG_FILEPATH=@@CONFIG_FILEPATH@@
Environment=LIBRETIME_LOG_FILEPATH=@@LOG_DIR@@/api.log
Type=notify
KillMode=mixed
ExecStart=/usr/bin/gunicorn \
ExecStart=@@VENV_DIR@@/bin/gunicorn \
--workers 4 \
--worker-class uvicorn.workers.UvicornWorker \
--worker-class libretime_api.gunicorn.Worker \
--log-file - \
--bind unix:/run/libretime-api.sock \
libretime_api.asgi

View File

@ -0,0 +1,4 @@
from importlib.metadata import version as get_version
PACKAGE = __name__
VERSION = get_version(__name__)

View File

@ -18,12 +18,13 @@ class StreamPreferences(BaseModel):
input_fade_transition: float
message_format: MessageFormatKind
message_offline: str
replay_gain_enabled: bool
replay_gain_offset: float
# input_auto_switch_off: bool
# input_auto_switch_on: bool
# input_main_user: str
# input_main_password: str
# replay_gain_enabled: bool
# replay_gain_offset: float
# track_fade_in: float
# track_fade_out: float
# track_fade_transition: float
@ -78,8 +79,12 @@ class Preference(models.Model):
entries = dict(cls.site.values_list("key", "value"))
return StreamPreferences(
input_fade_transition=float(entries.get("default_transition_fade") or 0.0),
message_format=int(entries.get("stream_label_format") or 0),
message_format=MessageFormatKind(
int(entries.get("stream_label_format") or 0)
),
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

View File

@ -8,6 +8,7 @@ from .role import Role
class UserManager(BaseUserManager):
# pylint: disable=too-many-positional-arguments
def create_user(self, role, username, password, email, first_name, last_name):
user = self.model(
role=role,
@ -20,6 +21,7 @@ class UserManager(BaseUserManager):
user.save(using=self._db)
return user
# pylint: disable=too-many-positional-arguments
def create_superuser(self, username, password, email, first_name, last_name):
return self.create_user(
Role.ADMIN,

View File

@ -6,6 +6,8 @@ class StreamPreferencesSerializer(serializers.Serializer):
input_fade_transition = serializers.FloatField(read_only=True)
message_format = serializers.IntegerField(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

View File

@ -4,7 +4,7 @@ from libretime_api.core.models.preference import Preference
# pylint: disable=invalid-name,unused-argument
def test_preference_get_site_preferences(db):
result = Preference.get_site_preferences()
assert result.dict() == {
assert result.model_dump() == {
"station_name": "LibreTime",
}
@ -12,17 +12,19 @@ def test_preference_get_site_preferences(db):
# pylint: disable=invalid-name,unused-argument
def test_preference_get_stream_preferences(db):
result = Preference.get_stream_preferences()
assert result.dict() == {
assert result.model_dump() == {
"input_fade_transition": 0.0,
"message_format": 0,
"message_offline": "LibreTime - offline",
"replay_gain_enabled": True,
"replay_gain_offset": 0.0,
}
# pylint: disable=invalid-name,unused-argument
def test_preference_get_stream_state(db):
result = Preference.get_stream_state()
assert result.dict() == {
assert result.model_dump() == {
"input_main_connected": False,
"input_main_streaming": 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,
"message_format": 0,
"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):
data = Preference.get_site_preferences()
return Response(
data.dict(
data.model_dump(
include={
"station_name",
}

View File

@ -14,11 +14,13 @@ class StreamPreferencesView(views.APIView):
def get(self, request):
data = Preference.get_stream_preferences()
return Response(
data.dict(
data.model_dump(
include={
"input_fade_transition",
"message_format",
"message_offline",
"replay_gain_enabled",
"replay_gain_offset",
}
)
)
@ -32,7 +34,7 @@ class StreamStateView(views.APIView):
def get(self, request):
data = Preference.get_stream_state()
return Response(
data.dict(
data.model_dump(
include={
"input_main_connected",
"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';
-- 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

View File

@ -5,7 +5,7 @@ from django.db import migrations
from ._migrations import legacy_migration_factory
UP = """
ALTER TABLE cc_files ADD COLUMN artwork TYPE character varying(255);
ALTER TABLE cc_files ADD COLUMN artwork VARCHAR(255);
"""
DOWN = None

View File

@ -4,12 +4,18 @@ from django.db import migrations
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 = """
ALTER TABLE cc_files ADD COLUMN artwork VARCHAR(4096);
"""
DOWN = """
ALTER TABLE cc_files DROP COLUMN IF EXISTS artwork;
"""

View File

@ -0,0 +1,33 @@
# pylint: disable=invalid-name
from django.db import migrations
from ._migrations import legacy_migration_factory
UP = """
drop table if exists "cc_stream_setting" cascade;
"""
DOWN = """
create table "cc_stream_setting"
(
"keyname" varchar(64) not null,
"value" varchar(255),
"type" varchar(16) not null,
primary key ("keyname")
);
"""
class Migration(migrations.Migration):
dependencies = [
("legacy", "0040_bump_legacy_schema_version"),
]
operations = [
migrations.RunPython(
code=legacy_migration_factory(
target="41",
sql=UP,
)
)
]

View File

@ -0,0 +1,46 @@
# pylint: disable=invalid-name
from django.db import migrations
from ._migrations import legacy_migration_factory
UP = """
delete from cc_pref
where "keystr" in (
'default_icecast_password',
'default_stream_mount_point',
'live_dj_connection_url_override',
'live_dj_source_connection_url',
'master_dj_connection_url_override',
'master_dj_source_connection_url',
'max_bitrate',
'num_of_streams',
'stream_bitrate',
'stream_type'
);
"""
DOWN = """
insert into
cc_pref ("keystr", "valstr")
values
('default_stream_mount_point', 'main'),
('max_bitrate', '320'),
('num_of_streams', '3'),
('stream_bitrate', '24, 32, 48, 64, 96, 128, 160, 192, 224, 256, 320'),
('stream_type', 'ogg, mp3, opus, aac');
"""
class Migration(migrations.Migration):
dependencies = [
("legacy", "0041_drop_stream_setting_table"),
]
operations = [
migrations.RunPython(
code=legacy_migration_factory(
target="42",
sql=UP,
)
)
]

View File

@ -0,0 +1,26 @@
# pylint: disable=invalid-name
from django.db import migrations
from ._migrations import legacy_migration_factory
UP = """
delete from cc_pref
where "keystr" = 'allowed_cors_urls';
"""
DOWN = """"""
class Migration(migrations.Migration):
dependencies = [
("legacy", "0042_remove_stream_preferences"),
]
operations = [
migrations.RunPython(
code=legacy_migration_factory(
target="43",
sql=UP,
)
)
]

View File

@ -0,0 +1,29 @@
# pylint: disable=invalid-name
from django.db import migrations
from ._migrations import legacy_migration_factory
UP = """
alter table "cc_track_types" add column "analyze_cue_points" boolean default 'f' not null;
update "cc_track_types" set "analyze_cue_points" = 't';
"""
DOWN = """
alter table "cc_track_types" drop column if exists "analyze_cue_points";
"""
class Migration(migrations.Migration):
dependencies = [
("legacy", "0043_remove_cors_preference"),
]
operations = [
migrations.RunPython(
code=legacy_migration_factory(
target="44",
sql=UP,
)
)
]

View File

@ -0,0 +1,34 @@
# pylint: disable=invalid-name
from django.db import migrations
from ._migrations import legacy_migration_factory
UP = """
CREATE TABLE "sessions"
(
"id" CHAR(32) NOT NULL,
"modified" INTEGER,
"lifetime" INTEGER,
"data" TEXT,
PRIMARY KEY ("id")
);
"""
DOWN = """
DROP TABLE IF EXISTS "sessions" CASCADE;
"""
class Migration(migrations.Migration):
dependencies = [
("legacy", "0044_add_track_types_analyzer_options"),
]
operations = [
migrations.RunPython(
code=legacy_migration_factory(
target="45",
sql=UP,
)
)
]

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 +1,2 @@
LEGACY_SCHEMA_VERSION = "3.0.0-beta.0.1"
# The schema version is defined using the migration file prefix number
LEGACY_SCHEMA_VERSION = "46"

Some files were not shown because too many files have changed in this diff Show More