Refactor process_audible_serie to improve handling of non-series books and enhance logging for missing books

This commit is contained in:
Yunn Xairou 2025-09-13 21:01:32 +02:00
parent 6e151a8d28
commit 043f57842a

55
main.py
View file

@ -56,39 +56,17 @@ def expand_range(part):
return [] # Handle non-numeric input or invalid format return [] # Handle non-numeric input or invalid format
def process_sequence(books):
"""Groups books by ASIN, handling sequence ranges (including floats)."""
books_sequence = {}
for book in books:
asin = book["asin"]
sequence = book.get("sequence", "")
if sequence:
keys = expand_range(sequence.split(", ")[0])
else:
keys = [float(book.get("sort", "1")) * -1]
for key in keys:
if key not in books_sequence:
books_sequence[key] = []
books_sequence[key].append(asin)
keys = sorted(books_sequence.keys(), key=lambda x: float(x))
ordered_sequence = {}
for key in keys:
ordered_sequence[key] = books_sequence[key]
return ordered_sequence
def process_audible_serie(books, serie_name): def process_audible_serie(books, serie_name):
processed_books = BookCollection(serie_name) processed_books = BookCollection(serie_name)
for json in books: for json in books:
if book["relationship_type"] == "series": if json["relationship_type"] == "series":
book = Book(json["asin"]) book = Book(json["asin"])
book.series.setdefault(serie_name, json["sequence"]) book.series.setdefault(serie_name, json["sequence"])
book.series.setdefault(serie_name, f"-{json['sort']}") book.series.setdefault(serie_name, f"-{json['sort']}")
processed_books.add(book) processed_books.add(book)
else:
logger.debug("Skipping non-series book: %s", json["asin"])
return processed_books return processed_books
@ -169,7 +147,9 @@ def main():
continue continue
audible_serie = audible.get_produce_from_asin(series_asin) audible_serie = audible.get_produce_from_asin(series_asin)
audible_book_sequence = process_sequence(audible_serie["relationships"]) audible_book_sequence = process_audible_serie(
audible_serie["relationships"], series_name
)
if len(abs_book_sequence) >= len(audible_book_sequence): if len(abs_book_sequence) >= len(audible_book_sequence):
continue continue
@ -187,13 +167,30 @@ def main():
soon_to_release_books = [] soon_to_release_books = []
for key in missing_keys: for key in missing_keys:
found = False
for asin in audible_book_sequence[key]:
try: try:
audnexus.get_book_from_asin(audible_book_sequence[key][0]) audnexus.get_book_from_asin(asin)
missing_books.append(key) missing_books.append(key)
logger.debug(
"%s Book %.1f is missing - %s",
series_name,
key,
audible_book_sequence[key][0],
)
found = True
break
except requests.exceptions.HTTPError: except requests.exceptions.HTTPError:
logger.debug("%s Book %d is yet to be released", series_name, key) pass
if not found:
soon_to_release_books.append(key) soon_to_release_books.append(key)
logger.debug(
"%s Book %d is yet to be released - %s",
series_name,
key,
audible_book_sequence[key][0],
)
msgs = [] msgs = []