bookwyrm/bookwyrm/importers/librarything_import.py

39 lines
1.2 KiB
Python
Raw Normal View History

""" handle reading a tsv from librarything """
2021-11-11 17:54:36 +00:00
import re
from typing import Optional
from bookwyrm.models import Shelf
2021-03-30 15:56:25 +00:00
from . import Importer
2021-02-20 16:02:36 +00:00
def _remove_brackets(value: Optional[str]) -> Optional[str]:
return re.sub(r"\[|\]", "", value) if value else None
2021-02-20 16:02:36 +00:00
class LibrarythingImporter(Importer):
2021-04-26 16:15:42 +00:00
"""csv downloads from librarything"""
2021-03-30 15:43:38 +00:00
2021-03-08 16:49:10 +00:00
service = "LibraryThing"
delimiter = "\t"
encoding = "ISO-8859-1"
2021-11-11 17:54:36 +00:00
def normalize_row(
self, entry: dict[str, str], mappings: dict[str, Optional[str]]
) -> dict[str, Optional[str]]: # pylint: disable=no-self-use
2021-11-11 17:54:36 +00:00
"""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
2021-11-11 17:54:36 +00:00
return normalized
2021-11-11 20:29:38 +00:00
def get_shelf(self, normalized_row: dict[str, Optional[str]]) -> Optional[str]:
2021-11-11 20:29:38 +00:00
if normalized_row["date_finished"]:
return Shelf.READ_FINISHED
2021-11-11 20:29:38 +00:00
if normalized_row["date_started"]:
return Shelf.READING
return Shelf.TO_READ