Compare commits

...

10 Commits

Author SHA1 Message Date
Thomas Göttgens
643504edc9
fix(api): file upload with library (#3213)
Some checks failed
Container / meta (analyzer) (push) Waiting to run
Container / meta (api) (push) Waiting to run
Container / meta (legacy) (push) Waiting to run
Container / meta (nginx) (push) Waiting to run
Container / meta (playout) (push) Waiting to run
Container / meta (worker) (push) Waiting to run
Container / build (push) Blocked by required conditions
Project / pre-commit (push) Waiting to run
Project / test-tools (push) Waiting to run
Release-Please / release-please (push) Waiting to run
API schema / check (push) Has been cancelled
API schema / dispatch (push) Has been cancelled
API / lint (push) Has been cancelled
API / test-with-database (bullseye) (push) Has been cancelled
API / test-with-database (focal) (push) Has been cancelled
API / test-with-database (jammy) (push) Has been cancelled
Legacy / lint (7.4) (push) Has been cancelled
Legacy / test (7.4) (push) Has been cancelled
Legacy / locale (push) Has been cancelled
### Description

Uploads with bulk_import defining --library fail with error 400 in the
REST API

The primary key of the track_type was changed from chars to a numerical
ID, and the data model expects this now in the REST endpoint. However
the bulk import still populates this field with the Char Tag.

### Testing Notes

**What I did:**

`libretime-api bulk_import --path /home/libretime/upload/ --library POD
--allowed-extensions mp3`

**How you can replicate my testing:**

see above

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-09-19 12:38:04 +02:00
renovate[bot]
6ff6de7124
chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.28.0 (#3220)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[adamchainz/django-upgrade](https://redirect.github.com/adamchainz/django-upgrade)
| repository | minor | `1.27.0` -> `1.28.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://redirect.github.com/renovatebot/renovate/discussions/new)
if you have any questions.

---

### Release Notes

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

###
[`v1.28.0`](https://redirect.github.com/adamchainz/django-upgrade/compare/1.27.0...1.28.0)

[Compare
Source](https://redirect.github.com/adamchainz/django-upgrade/compare/1.27.0...1.28.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:eyJjcmVhdGVkSW5WZXIiOiI0MS45Ny4xMCIsInVwZGF0ZWRJblZlciI6IjQxLjk3LjEwIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-10 06:08:57 +00:00
renovate[bot]
ea880e87ab
chore(deps): update actions/stale action to v10 (#3219)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/stale](https://redirect.github.com/actions/stale) | action |
major | `v9` -> `v10` |

---

### Release Notes

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

### [`v10`](https://redirect.github.com/actions/stale/compare/v9...v10)

[Compare
Source](https://redirect.github.com/actions/stale/compare/v9...v10)

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-07 17:37:26 +00:00
renovate[bot]
3c9e8f9f2e
chore(deps): update actions/setup-python action to v6 (#3218)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[actions/setup-python](https://redirect.github.com/actions/setup-python)
| action | major | `v5` -> `v6` |

---

### Release Notes

<details>
<summary>actions/setup-python (actions/setup-python)</summary>

###
[`v6`](https://redirect.github.com/actions/setup-python/compare/v5...v6)

[Compare
Source](https://redirect.github.com/actions/setup-python/compare/v5...v6)

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-06 12:55:42 +00:00
renovate[bot]
a3898c007d
chore(deps): update actions/setup-node action to v5 (#3217)
This PR contains the following updates:

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

---

### Release Notes

<details>
<summary>actions/setup-node (actions/setup-node)</summary>

###
[`v5`](https://redirect.github.com/actions/setup-node/compare/v4...v5)

[Compare
Source](https://redirect.github.com/actions/setup-node/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:eyJjcmVhdGVkSW5WZXIiOiI0MS45MS4xIiwidXBkYXRlZEluVmVyIjoiNDEuOTEuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2kiLCJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-05 09:58:29 +00:00
renovate[bot]
3257f7a8ec
chore(deps): update pre-commit hook adamchainz/django-upgrade to v1.27.0 (#3216)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[adamchainz/django-upgrade](https://redirect.github.com/adamchainz/django-upgrade)
| repository | minor | `1.25.0` -> `1.27.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://redirect.github.com/renovatebot/renovate/discussions/new)
if you have any questions.

---

### Release Notes

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

###
[`v1.27.0`](https://redirect.github.com/adamchainz/django-upgrade/compare/1.26.0...1.27.0)

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

###
[`v1.26.0`](https://redirect.github.com/adamchainz/django-upgrade/compare/1.25.0...1.26.0)

[Compare
Source](https://redirect.github.com/adamchainz/django-upgrade/compare/1.25.0...1.26.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:eyJjcmVhdGVkSW5WZXIiOiI0MS45MS4xIiwidXBkYXRlZEluVmVyIjoiNDEuOTEuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-31 11:01:57 +00:00
renovate[bot]
2baa06c9e8
chore(deps): update lycheeverse/lychee-action action to v2.6.1 (#3215)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[lycheeverse/lychee-action](https://redirect.github.com/lycheeverse/lychee-action)
| action | patch | `v2.6.0` -> `v2.6.1` |

---

### Release Notes

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

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

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

#### What's Changed

- Update lycheeVersion to v0.20.1 by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in
[#&#8203;306](https://redirect.github.com/lycheeverse/lychee-action/pull/306),
which contains a hotfix for
[#&#8203;305](https://redirect.github.com/lycheeverse/lychee-action/issues/305).

**Full Changelog**:
<https://github.com/lycheeverse/lychee-action/compare/v2...v2.6.1>

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-27 23:02:26 +00:00
jo
2b6c9b74ed
chore(deps): revert lock file maintenance (legacy/composer.json) (#3209)
This reverts commit 8cce9c38cd7179ada7ee443007b174bd75642423.
2025-08-26 11:41:50 +02:00
renovate[bot]
b87287e0f8
chore(deps): update lycheeverse/lychee-action action to v2.6.0 (#3212)
This PR contains the following updates:

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

---

### Release Notes

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

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

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

#### What's Changed

- Update lychee version to v0.20.0 by
[@&#8203;github-actions](https://redirect.github.com/github-actions)\[bot]
in[https://github.com/lycheeverse/lychee-action/pull/304](https://redirect.github.com/lycheeverse/lychee-action/pull/304)4
- Bump actions/checkout from 4 to 5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot]
in[https://github.com/lycheeverse/lychee-action/pull/303](https://redirect.github.com/lycheeverse/lychee-action/pull/303)3

**Full Changelog**:
https://github.com/lycheeverse/lychee-action/compare/v2...v2.6.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:eyJjcmVhdGVkSW5WZXIiOiI0MS44MS4yIiwidXBkYXRlZEluVmVyIjoiNDEuODEuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2kiLCJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-23 13:54:31 +00:00
renovate[bot]
f3d95815f3
chore(deps): update amannn/action-semantic-pull-request action to v6.1.1 (#3211)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[amannn/action-semantic-pull-request](https://redirect.github.com/amannn/action-semantic-pull-request)
| action | patch | `v6.1.0` -> `v6.1.1` |

---

### Release Notes

<details>
<summary>amannn/action-semantic-pull-request
(amannn/action-semantic-pull-request)</summary>

###
[`v6.1.1`](https://redirect.github.com/amannn/action-semantic-pull-request/releases/tag/v6.1.1)

[Compare
Source](https://redirect.github.com/amannn/action-semantic-pull-request/compare/v6.1.0...v6.1.1)

##### Bug Fixes

- Parse `headerPatternCorrespondence` properly
([#&#8203;295](https://redirect.github.com/amannn/action-semantic-pull-request/issues/295))
([800da4c](800da4c97f))

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-23 13:54:27 +00:00
11 changed files with 129 additions and 125 deletions

View File

@ -15,7 +15,7 @@ jobs:
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- uses: actions/cache@v4

View File

@ -25,7 +25,7 @@ jobs:
with:
fetch-depth: 0
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"

View File

@ -34,7 +34,7 @@ jobs:
restore-keys: |
${{ runner.os }}-docs-lint-tools
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: "22"

View File

@ -22,7 +22,7 @@ jobs:
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: "22"
@ -48,7 +48,7 @@ jobs:
- name: Check Links
id: lychee
uses: lycheeverse/lychee-action@v2.5.0
uses: lycheeverse/lychee-action@v2.6.1
with:
args: >-
'**/*.md'
@ -77,7 +77,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
- uses: actions/stale@v10
with:
stale-issue-message: >
This issue has been automatically marked as stale because it has not had

View File

@ -12,7 +12,7 @@ jobs:
name: Validate PR title
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@v6.1.0
- uses: amannn/action-semantic-pull-request@v6.1.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:

View File

@ -17,7 +17,7 @@ jobs:
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"
@ -34,7 +34,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: "3.x"
- run: make all

View File

@ -47,7 +47,7 @@ repos:
args: [--py38-plus]
- repo: https://github.com/adamchainz/django-upgrade
rev: 1.25.0
rev: 1.28.0
hooks:
- id: django-upgrade
args: [--target-version, "4.2"]

View File

@ -85,7 +85,7 @@ class Importer:
return File.objects.filter(md5=file_md5).exists()
def _upload_file(self, filepath: Path, library: Optional[str]) -> None:
def _upload_file(self, filepath: Path, library_id: Optional[int]) -> None:
try:
resp = requests.post(
f"{self.url}/rest/media",
@ -94,7 +94,11 @@ class Importer:
("file", (filepath.name, filepath.open("rb"))),
],
timeout=30,
cookies={"tt_upload": library} if library is not None else {},
cookies=(
{"tt_upload": str(library_id)}
if library_id not in (None, 0)
else {}
),
)
resp.raise_for_status()
@ -105,7 +109,7 @@ class Importer:
logger.info("deleting %s", filepath)
filepath.unlink()
def _handle_file(self, filepath: Path, library: Optional[str]) -> None:
def _handle_file(self, filepath: Path, library_id: Optional[int]) -> None:
logger.debug("handling file %s", filepath)
if not filepath.is_file():
@ -117,7 +121,7 @@ class Importer:
self._delete_file(filepath)
return
self._upload_file(filepath, library)
self._upload_file(filepath, library_id)
if self.delete_after_upload:
self._delete_file(filepath)
@ -125,7 +129,7 @@ class Importer:
def _walk_dir(
self,
path: Path,
library: Optional[str],
library_id: Optional[int],
allowed_extensions: List[str],
) -> None:
if not path.is_dir():
@ -133,13 +137,13 @@ class Importer:
for sub_path in path.iterdir():
if sub_path.is_dir():
self._walk_dir(sub_path, library, allowed_extensions)
self._walk_dir(sub_path, library_id, allowed_extensions)
continue
if sub_path.suffix.lower() not in allowed_extensions:
continue
self._handle_file(sub_path.resolve(), library)
self._handle_file(sub_path.resolve(), library_id)
def _check_library(self, library: str) -> bool:
return Library.objects.filter(code=library).exists()
@ -153,8 +157,16 @@ class Importer:
if library is not None and not self._check_library(library):
raise ValueError(f"provided library {library} does not exist")
if library:
try:
library_id = Library.objects.get(code=library).id
except Library.DoesNotExist as exc:
raise ValueError(f"provided library {library} does not exist") from exc
else:
library_id = 0
allowed_extensions = [
(x if x.startswith(".") else "." + x) for x in allowed_extensions
]
self._walk_dir(path, library, allowed_extensions)
self._walk_dir(path, library_id, allowed_extensions)

View File

@ -22,6 +22,8 @@ class Library(models.Model):
db_column="analyze_cue_points",
)
id = models.AutoField(primary_key=True)
class Meta:
managed = False
db_table = "cc_track_types"

View File

@ -30,6 +30,7 @@ def _import_paths(tmp_path: Path):
def _library():
return baker.make(
"storage.Library",
id=1,
code="MUS",
name="Music",
description="Some music",
@ -62,8 +63,8 @@ def test_importer(
):
importer.import_dir(import_paths[0], library.code, [".mp3"])
importer._handle_file.assert_called_with(import_paths[1], library.code)
importer._upload_file.assert_called_with(import_paths[1], library.code)
importer._handle_file.assert_called_with(import_paths[1], library.id)
importer._upload_file.assert_called_with(import_paths[1], library.id)
importer._delete_file.assert_not_called()
@ -76,8 +77,8 @@ def test_importer_and_delete(
importer.delete_after_upload = True
importer.import_dir(import_paths[0], library.code, [".mp3"])
importer._handle_file.assert_called_with(import_paths[1], library.code)
importer._upload_file.assert_called_with(import_paths[1], library.code)
importer._handle_file.assert_called_with(import_paths[1], library.id)
importer._upload_file.assert_called_with(import_paths[1], library.id)
importer._delete_file.assert_called_with(import_paths[1])
@ -87,11 +88,11 @@ def test_importer_existing_file(
importer: MockImporter,
library,
):
baker.make("storage.File", md5="46305a7cf42ee53976c88d337e47e940")
baker.make("storage.File", id=1, md5="46305a7cf42ee53976c88d337e47e940")
importer.import_dir(import_paths[0], library.code, [".mp3"])
importer._handle_file.assert_called_with(import_paths[1], library.code)
importer._handle_file.assert_called_with(import_paths[1], library.id)
importer._upload_file.assert_not_called()
importer._delete_file.assert_not_called()
@ -102,12 +103,12 @@ def test_importer_existing_file_and_delete(
importer: MockImporter,
library,
):
baker.make("storage.File", md5="46305a7cf42ee53976c88d337e47e940")
baker.make("storage.File", id=1, md5="46305a7cf42ee53976c88d337e47e940")
importer.delete_if_exists = True
importer.import_dir(import_paths[0], library.code, [".mp3"])
importer._handle_file.assert_called_with(import_paths[1], library.code)
importer._handle_file.assert_called_with(import_paths[1], library.id)
importer._upload_file.assert_not_called()
importer._delete_file.assert_called_with(import_paths[1])

187
legacy/composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "99a8bfaf51b5e36bb702f789ce200fea",
"content-hash": "3664fa9473d4b70e3c383b59ca794c82",
"packages": [
{
"name": "adbario/php-dot-notation",
@ -62,16 +62,16 @@
},
{
"name": "composer/semver",
"version": "3.4.4",
"version": "3.4.3",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
"reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
"reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
"reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
"shasum": ""
},
"require": {
@ -123,7 +123,7 @@
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
"source": "https://github.com/composer/semver/tree/3.4.4"
"source": "https://github.com/composer/semver/tree/3.4.3"
},
"funding": [
{
@ -133,9 +133,13 @@
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2025-08-20T19:15:30+00:00"
"time": "2024-09-19T14:15:21+00:00"
},
{
"name": "james-heinrich/getid3",
@ -454,17 +458,17 @@
"source": {
"type": "git",
"url": "https://github.com/libretime/propel1.git",
"reference": "64a9a47a8d492945b6810d8c3f0e5fc1b20a7d90"
"reference": "b7e07124f494646da5be7342e949e133140c8eba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/libretime/propel1/zipball/64a9a47a8d492945b6810d8c3f0e5fc1b20a7d90",
"reference": "64a9a47a8d492945b6810d8c3f0e5fc1b20a7d90",
"url": "https://api.github.com/repos/libretime/propel1/zipball/b7e07124f494646da5be7342e949e133140c8eba",
"reference": "b7e07124f494646da5be7342e949e133140c8eba",
"shasum": ""
},
"require": {
"phing/phing": "^2.17",
"php": ">7.1"
"phing/phing": "~2.4",
"php": "^7.1"
},
"require-dev": {
"pear-pear.php.net/pear_packagefilemanager2": "@stable",
@ -523,7 +527,7 @@
"support": {
"source": "https://github.com/libretime/propel1/tree/main"
},
"time": "2025-08-10T11:00:05+00:00"
"time": "2023-01-12T16:06:29+00:00"
},
{
"name": "paragonie/constant_time_encoding",
@ -756,16 +760,16 @@
},
{
"name": "php-amqplib/php-amqplib",
"version": "v3.7.3",
"version": "v3.7.2",
"source": {
"type": "git",
"url": "https://github.com/php-amqplib/php-amqplib.git",
"reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59"
"reference": "738a73eb0019b6c99d9bc25d7a0c0dd8f56a5199"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/9f50fe69a9f1a19e2cb25596a354d705de36fe59",
"reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59",
"url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/738a73eb0019b6c99d9bc25d7a0c0dd8f56a5199",
"reference": "738a73eb0019b6c99d9bc25d7a0c0dd8f56a5199",
"shasum": ""
},
"require": {
@ -831,22 +835,22 @@
],
"support": {
"issues": "https://github.com/php-amqplib/php-amqplib/issues",
"source": "https://github.com/php-amqplib/php-amqplib/tree/v3.7.3"
"source": "https://github.com/php-amqplib/php-amqplib/tree/v3.7.2"
},
"time": "2025-02-18T20:11:13+00:00"
"time": "2024-11-21T09:21:41+00:00"
},
{
"name": "phpseclib/phpseclib",
"version": "3.0.46",
"version": "3.0.42",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6"
"reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6",
"reference": "56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/db92f1b1987b12b13f248fe76c3a52cadb67bb98",
"reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98",
"shasum": ""
},
"require": {
@ -927,7 +931,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.46"
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.42"
},
"funding": [
{
@ -943,7 +947,7 @@
"type": "tidelift"
}
],
"time": "2025-06-26T16:29:55+00:00"
"time": "2024-09-16T03:06:04+00:00"
},
{
"name": "psr/http-message",
@ -1172,12 +1176,12 @@
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/contracts",
"name": "symfony/contracts"
},
"branch-alias": {
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
@ -1289,7 +1293,7 @@
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.33.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
@ -1313,8 +1317,8 @@
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -1348,7 +1352,7 @@
"portable"
],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
},
"funding": [
{
@ -1359,10 +1363,6 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@ -1372,20 +1372,19 @@
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.33.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
"reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
"reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
"shasum": ""
},
"require": {
"ext-iconv": "*",
"php": ">=7.2"
},
"provide": {
@ -1397,8 +1396,8 @@
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -1433,7 +1432,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
},
"funding": [
{
@ -1444,29 +1443,25 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-12-23T08:48:59+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.33.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"shasum": ""
},
"require": {
@ -1475,8 +1470,8 @@
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -1517,7 +1512,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
},
"funding": [
{
@ -1528,20 +1523,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2025-01-02T08:10:11+00:00"
"time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php81",
"version": "v1.33.0",
"version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
@ -1559,8 +1550,8 @@
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
@ -1597,7 +1588,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0"
"source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
},
"funding": [
{
@ -1608,10 +1599,6 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@ -3336,27 +3323,29 @@
"packages-dev": [
{
"name": "doctrine/deprecations",
"version": "1.1.4",
"version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
"reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9"
"reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9",
"reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
"reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9 || ^12",
"phpstan/phpstan": "1.4.10 || 2.0.3",
"phpstan/phpstan-phpunit": "^1.0 || ^2",
"doctrine/coding-standard": "^9",
"phpstan/phpstan": "1.4.10 || 1.10.15",
"phpstan/phpstan-phpunit": "^1.0",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psr/log": "^1 || ^2 || ^3"
"psalm/plugin-phpunit": "0.18.4",
"psr/log": "^1 || ^2 || ^3",
"vimeo/psalm": "4.30.0 || 5.12.0"
},
"suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
@ -3364,7 +3353,7 @@
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Deprecations\\": "src"
"Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -3375,9 +3364,9 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
"source": "https://github.com/doctrine/deprecations/tree/1.1.4"
"source": "https://github.com/doctrine/deprecations/tree/1.1.3"
},
"time": "2024-12-07T21:18:45+00:00"
"time": "2024-01-30T19:34:25+00:00"
},
{
"name": "doctrine/instantiator",
@ -3451,16 +3440,16 @@
},
{
"name": "myclabs/deep-copy",
"version": "1.13.4",
"version": "1.12.1",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
"reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
"reference": "123267b2c49fbf30d78a7b2d333f6be754b94845"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
"reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845",
"reference": "123267b2c49fbf30d78a7b2d333f6be754b94845",
"shasum": ""
},
"require": {
@ -3499,7 +3488,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
"source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
"source": "https://github.com/myclabs/DeepCopy/tree/1.12.1"
},
"funding": [
{
@ -3507,7 +3496,7 @@
"type": "tidelift"
}
],
"time": "2025-08-01T08:46:24+00:00"
"time": "2024-11-08T17:47:46+00:00"
},
{
"name": "phpdocumentor/reflection-common",
@ -3564,16 +3553,16 @@
},
{
"name": "phpdocumentor/reflection-docblock",
"version": "5.6.3",
"version": "5.6.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
"reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9"
"reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94f8051919d1b0369a6bcc7931d679a511c03fe9",
"reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c",
"reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c",
"shasum": ""
},
"require": {
@ -3622,9 +3611,9 @@
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.3"
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0"
},
"time": "2025-08-01T19:43:32+00:00"
"time": "2024-11-12T11:25:25+00:00"
},
{
"name": "phpdocumentor/type-resolver",
@ -3753,16 +3742,16 @@
},
{
"name": "phpstan/phpdoc-parser",
"version": "2.2.0",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8"
"reference": "c00d78fb6b29658347f9d37ebe104bffadf36299"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/b9e61a61e39e02dd90944e9115241c7f7e76bfd8",
"reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299",
"reference": "c00d78fb6b29658347f9d37ebe104bffadf36299",
"shasum": ""
},
"require": {
@ -3794,9 +3783,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
"source": "https://github.com/phpstan/phpdoc-parser/tree/2.2.0"
"source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0"
},
"time": "2025-07-13T07:04:09+00:00"
"time": "2024-10-13T11:29:49+00:00"
},
{
"name": "phpunit/dbunit",