Source code for pybel_tools.definition_utils.summary_independent

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

"""Utilities for serializing to BEL namespace and BEL annotation files"""

import logging

from bel_resources import get_bel_resource, write_namespace

__all__ = [
    'get_merged_namespace_names',
    'merge_namespaces',
]

log = logging.getLogger(__name__)

DATETIME_FMT = '%Y-%m-%dT%H:%M:%S'
DATE_FMT = '%Y-%m-%d'
DATE_VERSION_FMT = '%Y%m%d'
DEFAULT_NS_DESCRIPTION = 'This namespace was serialized by PyBEL Tools'


[docs]def get_merged_namespace_names(locations, check_keywords=True): """Loads many namespaces and combines their names. :param iter[str] locations: An iterable of URLs or file paths pointing to BEL namespaces. :param bool check_keywords: Should all the keywords be the same? Defaults to ``True`` :return: A dictionary of {names: labels} :rtype: dict[str, str] Example Usage >>> from pybel.resources import write_namespace >>> from pybel_tools.definition_utils import export_namespace, get_merged_namespace_names >>> graph = ... >>> original_ns_url = ... >>> export_namespace(graph, 'MBS') # Outputs in current directory to MBS.belns >>> value_dict = get_merged_namespace_names([original_ns_url, 'MBS.belns']) >>> with open('merged_namespace.belns', 'w') as f: >>> ... write_namespace('MyBrokenNamespace', 'MBS', 'Other', 'Charles Hoyt', 'PyBEL Citation', value_dict, file=f) """ resources = {location: get_bel_resource(location) for location in locations} if check_keywords: resource_keywords = set(config['Namespace']['Keyword'] for config in resources.values()) if 1 != len(resource_keywords): raise ValueError('Tried merging namespaces with different keywords: {}'.format(resource_keywords)) result = {} for resource in resources: result.update(resource['Values']) return result
[docs]def merge_namespaces(input_locations, output_path, namespace_name, namespace_keyword, namespace_domain, author_name, citation_name, namespace_description=None, namespace_species=None, namespace_version=None, namespace_query_url=None, namespace_created=None, author_contact=None, author_copyright=None, citation_description=None, citation_url=None, citation_version=None, citation_date=None, case_sensitive=True, delimiter='|', cacheable=True, functions=None, value_prefix='', sort_key=None, check_keywords=True): """Merges namespaces from multiple locations to one. :param iter input_locations: An iterable of URLs or file paths pointing to BEL namespaces. :param str output_path: The path to the file to write the merged namespace :param str namespace_name: The namespace name :param str namespace_keyword: Preferred BEL Keyword, maximum length of 8 :param str namespace_domain: One of: :data:`pybel.constants.NAMESPACE_DOMAIN_BIOPROCESS`, :data:`pybel.constants.NAMESPACE_DOMAIN_CHEMICAL`, :data:`pybel.constants.NAMESPACE_DOMAIN_GENE`, or :data:`pybel.constants.NAMESPACE_DOMAIN_OTHER` :param str author_name: The namespace's authors :param str citation_name: The name of the citation :param str namespace_query_url: HTTP URL to query for details on namespace values (must be valid URL) :param str namespace_description: Namespace description :param str namespace_species: Comma-separated list of species taxonomy id's :param str namespace_version: Namespace version :param str namespace_created: Namespace public timestamp, ISO 8601 datetime :param str author_contact: Namespace author's contact info/email address :param str author_copyright: Namespace's copyright/license information :param str citation_description: Citation description :param str citation_url: URL to more citation information :param str citation_version: Citation version :param str citation_date: Citation publish timestamp, ISO 8601 Date :param bool case_sensitive: Should this config file be interpreted as case-sensitive? :param str delimiter: The delimiter between names and labels in this config file :param bool cacheable: Should this config file be cached? :param functions: The encoding for the elements in this namespace :type functions: iterable of characters :param str value_prefix: a prefix for each name :param sort_key: A function to sort the values with :func:`sorted` :param bool check_keywords: Should all the keywords be the same? Defaults to ``True`` """ results = get_merged_namespace_names(input_locations, check_keywords=check_keywords) with open(output_path, 'w') as file: write_namespace( namespace_name=namespace_name, namespace_keyword=namespace_keyword, namespace_domain=namespace_domain, author_name=author_name, citation_name=citation_name, values=results, namespace_species=namespace_species, namespace_description=namespace_description, namespace_query_url=namespace_query_url, namespace_version=namespace_version, namespace_created=namespace_created, author_contact=author_contact, author_copyright=author_copyright, citation_description=citation_description, citation_url=citation_url, citation_version=citation_version, citation_date=citation_date, case_sensitive=case_sensitive, delimiter=delimiter, cacheable=cacheable, functions=functions, value_prefix=value_prefix, sort_key=sort_key, file=file )