def load_bibliography(path) -> list: """ Load a bibliography as CSL Items (a CSL JSON Python object). For paths that already contain CSL Items (inferred from a .json or .yaml extension), parse these files directly. Otherwise, delegate conversion to CSL Items to pandoc-citeproc. """ path = pathlib.Path(path) if path.suffix in {".json", ".yaml"}: try: csl_items = read_serialized_data(path) except Exception: logging.exception( f"process.load_bibliography: error parsing {path}.\n") csl_items = [] else: from manubot.pandoc.bibliography import ( load_bibliography as load_bibliography_pandoc, ) csl_items = load_bibliography_pandoc(path) if not isinstance(csl_items, list): logging.error( f"process.load_bibliography: csl_items read from {path} are of type {type(csl_items)}. " "Setting csl_items to an empty list.") csl_items = [] from manubot.cite.csl_item import CSL_Item csl_items = [CSL_Item(csl_item) for csl_item in csl_items] return csl_items
def load_bibliography(path): """ Load a bibliography as CSL Items (a CSL JSON Python object). For paths that already contain CSL Items (inferred from a .json or .yaml extension), parse these files directly. Otherwise, delegate conversion to CSL Items to pandoc-citeproc. """ path = pathlib.Path(path) use_pandoc_citeproc = True try: if path.suffix == '.json': use_pandoc_citeproc = False with path.open() as read_file: csl_items = json.load(read_file) if path.suffix == '.yaml': use_pandoc_citeproc = False import yaml with path.open() as read_file: csl_items = yaml.safe_load(read_file) except Exception: logging.exception( f'process.load_bibliography: error parsing {path}.\n') csl_items = [] if use_pandoc_citeproc: from manubot.pandoc.bibliography import ( load_bibliography as load_bibliography_pandoc, ) csl_items = load_bibliography_pandoc(path) if not isinstance(csl_items, list): logging.error( f'process.load_bibliography: csl_items read from {path} are of type {type(csl_items)}. ' 'Setting csl_items to an empty list.') csl_items = [] return csl_items
def load_bibliography(path: str) -> list: """ Load a bibliography as CSL Items (a CSL JSON Python object). For paths that already contain CSL Items (inferred from a .json or .yaml extension), parse these files directly (URLs supported). Otherwise, delegate conversion to CSL Items to pandoc-citeproc (URLs not supported). If loading fails, log an error and return an empty list. """ path_obj = pathlib.Path(path) if path_obj.suffix in {".json", ".yaml"}: try: csl_items = read_serialized_data(path) except Exception as error: logging.error(f"load_bibliography: error reading {path!r}.\n{error}") logging.info("load_bibliography exception info", exc_info=True) csl_items = [] else: from manubot.pandoc.bibliography import ( load_bibliography as load_bibliography_pandoc, ) csl_items = load_bibliography_pandoc(path) if not isinstance(csl_items, list): logging.error( f"process.load_bibliography: csl_items read from {path} are of type {type(csl_items)}. " "Setting csl_items to an empty list." ) csl_items = [] from manubot.cite.csl_item import CSL_Item csl_items = [CSL_Item(csl_item) for csl_item in csl_items] return csl_items