Source code for pybel_tools.definition_utils.summary_dependent

# -*- coding: utf-8 -*-

import logging
import os

from bel_resources import write_namespace
from pybel.constants import *
from pybel.struct.summary.node_summary import get_names_by_namespace
from ..summary.error_summary import get_incorrect_names_by_namespace, get_undefined_namespace_names

log = logging.getLogger(__name__)

__all__ = [
    'export_namespace',
    'export_namespaces',
]


[docs]def export_namespace(graph, namespace, directory=None, cacheable=False): """Exports all names and missing names from the given namespace to its own BEL Namespace files in the given directory. Could be useful during quick and dirty curation, where planned namespace building is not a priority. :param pybel.BELGraph graph: A BEL graph :param str namespace: The namespace to process :param str directory: The path to the directory where to output the namespace. Defaults to the current working directory returned by :func:`os.getcwd` :param bool cacheable: Should the namespace be cacheable? Defaults to ``False`` because, in general, this operation will probably be used for evil, and users won't want to reload their entire cache after each iteration of curation. """ directory = os.getcwd() if directory is None else directory path = os.path.join(directory, '{}.belns'.format(namespace)) with open(path, 'w') as file: log.info('Outputting to %s', path) right_names = get_names_by_namespace(graph, namespace) log.info('Graph has %d correct names in %s', len(right_names), namespace) wrong_names = get_incorrect_names_by_namespace(graph, namespace) log.info('Graph has %d incorrect names in %s', len(right_names), namespace) undefined_ns_names = get_undefined_namespace_names(graph, namespace) log.info('Graph has %d names in missing namespace %s', len(right_names), namespace) names = (right_names | wrong_names | undefined_ns_names) if 0 == len(names): log.warning('%s is empty', namespace) write_namespace( namespace_name=namespace, namespace_keyword=namespace, namespace_domain='Other', author_name=graph.authors, author_contact=graph.contact, citation_name=graph.name, values=names, cacheable=cacheable, file=file )
[docs]def export_namespaces(graph, namespaces, directory=None, cacheable=False): """Thinly wraps :func:`export_namespace` for an iterable of namespaces. :param pybel.BELGraph graph: A BEL graph :param iter[str] namespaces: An iterable of strings for the namespaces to process :param str directory: The path to the directory where to output the namespaces. Defaults to the current working directory returned by :func:`os.getcwd` :param bool cacheable: Should the namespaces be cacheable? Defaults to ``False`` because, in general, this operation will probably be used for evil, and users won't want to reload their entire cache after each iteration of curation. """ directory = os.getcwd() if directory is None else directory # avoid making multiple calls to os.getcwd later for namespace in namespaces: export_namespace(graph, namespace, directory=directory, cacheable=cacheable)