mirror of
https://github.com/denizsafak/abogen.git
synced 2026-07-18 13:40:27 +02:00
feat: Add series sequence handling and normalization for Audiobookshelf metadata
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
|
||||
from abogen.integrations.audiobookshelf import AudiobookshelfClient, AudiobookshelfConfig
|
||||
|
||||
|
||||
def test_upload_fields_include_series_sequence(tmp_path):
|
||||
audio_path = tmp_path / "book.mp3"
|
||||
audio_path.write_bytes(b"audio")
|
||||
|
||||
config = AudiobookshelfConfig(
|
||||
base_url="https://example.test",
|
||||
api_token="token",
|
||||
library_id="library-id",
|
||||
folder_id="folder-id",
|
||||
)
|
||||
client = AudiobookshelfClient(config)
|
||||
|
||||
client._folder_cache = ("folder-id", "Folder", "Library")
|
||||
|
||||
metadata = {
|
||||
"title": "Example Title",
|
||||
"seriesName": "Example Saga",
|
||||
"seriesSequence": "7",
|
||||
}
|
||||
|
||||
fields = client._build_upload_fields(audio_path, metadata, chapters=None)
|
||||
|
||||
assert fields["series"] == "Example Saga"
|
||||
assert fields["seriesSequence"] == "7"
|
||||
|
||||
assert "metadata" in fields
|
||||
payload = json.loads(fields["metadata"])
|
||||
assert payload["seriesSequence"] == "7"
|
||||
|
||||
|
||||
def test_upload_fields_normalize_alternate_sequence_keys(tmp_path):
|
||||
audio_path = tmp_path / "book.mp3"
|
||||
audio_path.write_bytes(b"audio")
|
||||
|
||||
config = AudiobookshelfConfig(
|
||||
base_url="https://example.test",
|
||||
api_token="token",
|
||||
library_id="library-id",
|
||||
folder_id="folder-id",
|
||||
)
|
||||
client = AudiobookshelfClient(config)
|
||||
client._folder_cache = ("folder-id", "Folder", "Library")
|
||||
|
||||
metadata = {
|
||||
"title": "Example Title",
|
||||
"seriesName": "Example Saga",
|
||||
"series_index": "Book 3",
|
||||
}
|
||||
|
||||
fields = client._build_upload_fields(audio_path, metadata, chapters=None)
|
||||
|
||||
assert fields["series"] == "Example Saga"
|
||||
assert fields["seriesSequence"] == "3"
|
||||
|
||||
|
||||
def test_upload_fields_preserve_decimal_sequence(tmp_path):
|
||||
audio_path = tmp_path / "book.mp3"
|
||||
audio_path.write_bytes(b"audio")
|
||||
|
||||
config = AudiobookshelfConfig(
|
||||
base_url="https://example.test",
|
||||
api_token="token",
|
||||
library_id="library-id",
|
||||
folder_id="folder-id",
|
||||
)
|
||||
client = AudiobookshelfClient(config)
|
||||
client._folder_cache = ("folder-id", "Folder", "Library")
|
||||
|
||||
metadata = {
|
||||
"title": "Example Title",
|
||||
"seriesName": "Example Saga",
|
||||
"seriesSequence": "0.5",
|
||||
}
|
||||
|
||||
fields = client._build_upload_fields(audio_path, metadata, chapters=None)
|
||||
|
||||
assert fields["seriesSequence"] == "0.5"
|
||||
+62
-1
@@ -187,4 +187,65 @@ def test_audiobookshelf_metadata_uses_book_number(tmp_path):
|
||||
metadata = _build_audiobookshelf_metadata(job)
|
||||
|
||||
assert metadata["seriesName"] == "Example Saga"
|
||||
assert metadata["seriesSequence"] == "7"
|
||||
assert metadata["seriesSequence"] == "7"
|
||||
|
||||
|
||||
def test_audiobookshelf_metadata_normalizes_sequence_value(tmp_path):
|
||||
source = tmp_path / "book.txt"
|
||||
source.write_text("content", encoding="utf-8")
|
||||
|
||||
job = Job(
|
||||
id="job-abs-normalize",
|
||||
original_filename="book.txt",
|
||||
stored_path=source,
|
||||
language="en",
|
||||
voice="af_alloy",
|
||||
speed=1.0,
|
||||
use_gpu=False,
|
||||
subtitle_mode="Sentence",
|
||||
output_format="mp3",
|
||||
save_mode="Save next to input file",
|
||||
output_folder=tmp_path,
|
||||
replace_single_newlines=False,
|
||||
subtitle_format="srt",
|
||||
created_at=time.time(),
|
||||
metadata_tags={
|
||||
"series": "Example Saga",
|
||||
"series_index": "Book 7 of the Series",
|
||||
},
|
||||
)
|
||||
|
||||
metadata = _build_audiobookshelf_metadata(job)
|
||||
|
||||
assert metadata["seriesName"] == "Example Saga"
|
||||
assert metadata["seriesSequence"] == "7"
|
||||
|
||||
|
||||
def test_audiobookshelf_metadata_allows_decimal_sequence(tmp_path):
|
||||
source = tmp_path / "book.txt"
|
||||
source.write_text("content", encoding="utf-8")
|
||||
|
||||
job = Job(
|
||||
id="job-abs-decimal",
|
||||
original_filename="book.txt",
|
||||
stored_path=source,
|
||||
language="en",
|
||||
voice="af_alloy",
|
||||
speed=1.0,
|
||||
use_gpu=False,
|
||||
subtitle_mode="Sentence",
|
||||
output_format="mp3",
|
||||
save_mode="Save next to input file",
|
||||
output_folder=tmp_path,
|
||||
replace_single_newlines=False,
|
||||
subtitle_format="srt",
|
||||
created_at=time.time(),
|
||||
metadata_tags={
|
||||
"series": "Example Saga",
|
||||
"series_number": "Book 4.5",
|
||||
},
|
||||
)
|
||||
|
||||
metadata = _build_audiobookshelf_metadata(job)
|
||||
|
||||
assert metadata["seriesSequence"] == "4.5"
|
||||
Reference in New Issue
Block a user