2025-03-03 22:30:08 -05:00
|
|
|
import os
|
|
|
|
import zipfile
|
|
|
|
|
2025-03-03 00:15:53 -05:00
|
|
|
from .csv import CsvImporter
|
2024-12-26 01:51:24 -05:00
|
|
|
from .douban import DoubanImporter
|
|
|
|
from .goodreads import GoodreadsImporter
|
|
|
|
from .letterboxd import LetterboxdImporter
|
2025-03-06 11:21:01 -05:00
|
|
|
from .ndjson import NdjsonImporter
|
2024-12-26 01:51:24 -05:00
|
|
|
from .opml import OPMLImporter
|
|
|
|
|
2025-03-03 22:30:08 -05:00
|
|
|
|
2025-03-06 11:21:01 -05:00
|
|
|
def get_neodb_importer(
|
|
|
|
filename: str,
|
|
|
|
) -> type[CsvImporter] | type[NdjsonImporter] | None:
|
2025-03-03 22:30:08 -05:00
|
|
|
if not os.path.exists(filename) or not zipfile.is_zipfile(filename):
|
|
|
|
return None
|
|
|
|
with zipfile.ZipFile(filename, "r") as z:
|
|
|
|
files = z.namelist()
|
|
|
|
if any(f == "journal.ndjson" for f in files):
|
2025-03-06 11:21:01 -05:00
|
|
|
return NdjsonImporter
|
2025-03-03 22:30:08 -05:00
|
|
|
if any(
|
|
|
|
f.endswith("_mark.csv")
|
|
|
|
or f.endswith("_review.csv")
|
|
|
|
or f.endswith("_note.csv")
|
|
|
|
for f in files
|
|
|
|
):
|
|
|
|
return CsvImporter
|
|
|
|
|
|
|
|
|
2025-03-03 00:15:53 -05:00
|
|
|
__all__ = [
|
|
|
|
"CsvImporter",
|
2025-03-06 11:21:01 -05:00
|
|
|
"NdjsonImporter",
|
2025-03-03 00:15:53 -05:00
|
|
|
"LetterboxdImporter",
|
|
|
|
"OPMLImporter",
|
|
|
|
"DoubanImporter",
|
|
|
|
"GoodreadsImporter",
|
2025-03-03 22:30:08 -05:00
|
|
|
"get_neodb_importer",
|
2025-03-03 00:15:53 -05:00
|
|
|
]
|