Convert a joined paper row into a normalized dict.
(
row: sqlite3.Row,
metadata_key: str = "metadata",
extra_metadata_keys: Optional[List[str]] = None,
)
| 65 | |
| 66 | |
| 67 | def _build_paper_dict( |
| 68 | row: sqlite3.Row, |
| 69 | metadata_key: str = "metadata", |
| 70 | extra_metadata_keys: Optional[List[str]] = None, |
| 71 | ) -> Dict[str, Any]: |
| 72 | """Convert a joined paper row into a normalized dict.""" |
| 73 | paper = dict(row) |
| 74 | paper["authors"] = _deserialize_json_list(paper.get("authors")) |
| 75 | paper["embedding"] = _deserialize_json_list(paper.get("embedding")) |
| 76 | |
| 77 | metadata: Dict[str, Any] = {} |
| 78 | for extra_key in extra_metadata_keys or []: |
| 79 | metadata.update(_load_json_metadata(paper.get(extra_key))) |
| 80 | |
| 81 | metadata.update(_load_json_metadata(paper.get(metadata_key))) |
| 82 | |
| 83 | if metadata_key != "metadata": |
| 84 | paper.pop(metadata_key, None) |
| 85 | for extra_key in extra_metadata_keys or []: |
| 86 | if extra_key != "metadata": |
| 87 | paper.pop(extra_key, None) |
| 88 | |
| 89 | if metadata: |
| 90 | paper["metadata"] = metadata |
| 91 | if "category" in metadata: |
| 92 | paper["category"] = metadata["category"] |
| 93 | if "score" in metadata: |
| 94 | paper["score"] = metadata["score"] |
| 95 | if "rank" in metadata: |
| 96 | paper["rank"] = metadata["rank"] |
| 97 | for key, value in metadata.items(): |
| 98 | if key not in paper or paper.get(key) in (None, "", [], {}): |
| 99 | paper[key] = value |
| 100 | |
| 101 | for list_key in ("categories", "keywords", "topics"): |
| 102 | paper[list_key] = _deserialize_json_list(paper.get(list_key)) |
| 103 | |
| 104 | return paper |
| 105 | |
| 106 | |
| 107 | def _derive_push_metadata_from_papers(papers: List[Dict[str, Any]]) -> Dict[str, Any]: |
no test coverage detected