Source code for rootski.services.database.make_morphemes_json
import json
from pathlib import Path
from typing import Any, Dict, List, Union
from rootski.schemas.morpheme import CompleteMorpheme
# from rootski.services.database import models as orm
# from sqlalchemy.orm import Session
[docs]def make_morphemes_json(
complete_morphemes: List[CompleteMorpheme], morphemes_json_fpath: Union[Path, str]
) -> None:
"""Cache all of the queries morphemes in a JSON file on local disk."""
def morpheme_to_dict(m: CompleteMorpheme) -> Dict[str, Any]:
"""The frontend currently expects the meanings field to be a list of dictionaries."""
to_return = m.dict()
to_return["meanings"] = [{"meaning": meaning for meaning in m.meanings}]
return to_return
morphemes_json: Dict[int, Dict[str, Union[str, List[str]]]] = {
m.morpheme_id: morpheme_to_dict(m) for m in complete_morphemes
}
# write the dictionary to a json file
with open(morphemes_json_fpath, "w") as file:
json.dump(morphemes_json, file)
# def make_morphemes_json(session: Session, morphemes_json_fpath: Union[Path, str]) -> None:
# """Query all morphemes and their adjoining tables from the database at once.
# Cache all of this information in a JSON file on local disk."""
# # query all morphemes from the database, eagerly-loading all joining tables
# morphemes: List[orm.Morpheme] = (
# session.query(orm.Morpheme).join(orm.MorphemeFamily).join(orm.MorphemeFamilyMeaning).all()
# )
# # collect the data from each of the tables into one object
# complete_morphemes: List[CompleteMorpheme] = [CompleteMorpheme.from_orm_morpheme(m) for m in morphemes]
# # create a dictionary containing all of the data for each of the morphemes
# m: CompleteMorpheme
# def morpheme_to_dict(m: CompleteMorpheme) -> Dict[str, Any]:
# """The frontend currently expects the meanings field to be a list of dictionaries."""
# to_return = m.dict()
# to_return["meanings"] = [{"meaning": meaning for meaning in m.meanings}]
# return to_return
# morphemes_json: Dict[int, Dict[str, Union[str, List[str]]]] = {
# m.morpheme_id: morpheme_to_dict(m) for m in complete_morphemes
# }
# # write the dictionary to a json file
# with open(morphemes_json_fpath, "w") as file:
# json.dump(morphemes_json, file)