38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
""" handle reading a tsv from librarything """
|
|
import re
|
|
from typing import Optional
|
|
|
|
from bookwyrm.models import Shelf
|
|
|
|
from . import Importer
|
|
|
|
|
|
def _remove_brackets(value: Optional[str]) -> Optional[str]:
|
|
return re.sub(r"\[|\]", "", value) if value else None
|
|
|
|
|
|
class LibrarythingImporter(Importer):
|
|
"""csv downloads from librarything"""
|
|
|
|
service = "LibraryThing"
|
|
delimiter = "\t"
|
|
encoding = "ISO-8859-1"
|
|
|
|
def normalize_row(
|
|
self, entry: dict[str, str], mappings: dict[str, Optional[str]]
|
|
) -> dict[str, Optional[str]]: # pylint: disable=no-self-use
|
|
"""use the dataclass to create the formatted row of data"""
|
|
normalized = {
|
|
k: _remove_brackets(entry.get(v) if v else None)
|
|
for k, v in mappings.items()
|
|
}
|
|
isbn_13 = value.split(", ") if (value := normalized.get("isbn_13")) else []
|
|
normalized["isbn_13"] = isbn_13[1] if len(isbn_13) > 1 else None
|
|
return normalized
|
|
|
|
def get_shelf(self, normalized_row: dict[str, Optional[str]]) -> Optional[str]:
|
|
if normalized_row["date_finished"]:
|
|
return Shelf.READ_FINISHED
|
|
if normalized_row["date_started"]:
|
|
return Shelf.READING
|
|
return Shelf.TO_READ
|