refSync-API / utils /parse_bibtex.py
Al-Fathir
feat init and add mendeley auth and import ref endpoint
18d060d
from typing import Any, Dict
def parse_bibtex_entry_to_mendeley(entry: Dict[str, str]) -> Dict[str, Any]:
"""
Helper function untuk mengubah satu entry bibtexparser menjadi format JSON Mendeley.
"""
authors_list = []
if "author" in entry:
authors = entry["author"].split(" and ")
for name_str in authors:
if "," in name_str:
# Format: "Last, First"
parts = name_str.split(",", 1)
last_name = parts[0].strip()
first_name = parts[1].strip()
else:
# Format: "First Last"
parts = name_str.split()
last_name = parts[-1]
first_name = " ".join(parts[:-1])
authors_list.append({"first_name": first_name, "last_name": last_name})
# 2. Mapping Tipe Dokumen
# Ini bisa diperluas sesuai kebutuhan
type_map = {
"article": "journal",
"book": "book",
"incollection": "book_section",
"inbook": "book_section",
"inproceedings": "conference_proceedings",
"conference": "conference_proceedings",
"phdthesis": "thesis",
"mastersthesis": "thesis",
}
mendeley_type = type_map.get(entry.get("ENTRYTYPE", "generic").lower(), "generic")
# 3. Identifiers
identifiers = {}
if entry.get("doi"):
identifiers["doi"] = entry["doi"]
if entry.get("issn"):
identifiers["issn"] = entry["issn"]
if entry.get("isbn"):
identifiers["isbn"] = entry["isbn"]
# 4. Merakit Payload Dokumen
doc = {
"type": mendeley_type,
"title": entry.get("title"),
"authors": authors_list if authors_list else None, # Kirim list jika ada
"year": entry.get("year"),
"source": entry.get("journal") or entry.get("booktitle"), # 'source' di Mendeley
"volume": entry.get("volume"),
"issue": entry.get("issue"),
"pages": entry.get("pages"),
"identifiers": identifiers if identifiers else None, # Kirim dict jika ada
}
# 5. Membersihkan field yang nilainya None agar tidak dikirim
return {k: v for k, v in doc.items() if v is not None}