Source code for hpotk.store._config

import os
import platform
import re
import typing
from pathlib import Path

from ._api import OntologyStore, RemoteOntologyService, OntologyReleaseService
from ._github import GitHubRemoteOntologyService, GitHubOntologyReleaseService


[docs] def configure_ontology_store( store_dir: typing.Optional[str] = None, ontology_release_service: OntologyReleaseService = GitHubOntologyReleaseService(), remote_ontology_service: RemoteOntologyService = GitHubRemoteOntologyService(), ) -> OntologyStore: """ Configure and create the default ontology store. :param store_dir: a `str` pointing to an existing directory for caching the ontology files or `None` if the platform-specific default folder should be used. :param ontology_release_service: an :class:`OntologyReleaseService` for fetching the ontology releases. :param remote_ontology_service: a :class:`RemoteOntologyService` responsible for fetching the ontology data from a remote location if we do not have the data locally. :returns: an :class:`OntologyStore`. :raises: `ValueError` if something goes wrong. """ if store_dir is None: store_dir = get_default_ontology_store_dir() else: if not os.path.isdir(store_dir): raise ValueError(f'`store_dir` must point to an existing directory') return OntologyStore( store_dir=store_dir, ontology_release_service=ontology_release_service, remote_ontology_service=remote_ontology_service, )
def get_default_ontology_store_dir() -> str: """ Get a platform specific absolute path to the data directory. The data directory points to `$HOME/.hpo-toolkit` on UNIX and `$HOME/hpo-toolkit` on Windows. The folder is created if it does not exist. """ ps = platform.system() if re.match('(linux)|(darwin)', ps, re.IGNORECASE): store_dir_name = '.hpo-toolkit' elif re.match('windows', ps, re.IGNORECASE): store_dir_name = 'hpo-toolkit' else: raise ValueError(f'Unsupported platform {ps}') dir_name = os.path.join(Path.home(), store_dir_name) if not os.path.isdir(dir_name): os.makedirs(dir_name) return dir_name