Source code for idmtools.utils.info

"""
Utilities to fetch info about local system such as packages installed.

Copyright 2021, Bill & Melinda Gates Foundation. All rights reserved.
"""
import sys
from logging import getLogger
from typing import List, Optional

logger = getLogger(__name__)


[docs]def get_doc_base_url() -> str: """ Get base url for documentation links. Returns: Doc base url """ return "https://institutefordiseasemodeling.github.io/idmtools/"
[docs]def get_pip_packages_10_to_6(): """ Load packages for versions 1.0 to 6 of pip. Returns: None Raises: ImportError: If the pip version is different. """ from pip.util import get_installed_distributions return get_installed_distributions()
[docs]def get_pip_packages_6_to_9(): """ Get packages for pip versions 6 through 9. Returns: None Raises: ImportError: If the pip version is different. """ from pip.utils import get_installed_distributions return get_installed_distributions()
[docs]def get_pip_packages_10_to_current(): """ Get packages for pip versions 10 to current. Returns: None Raises: ImportError: If the pip version is different. """ from pip._internal.utils.misc import get_installed_distributions return get_installed_distributions()
[docs]def get_packages_from_pip(): """ Attempt to load packages from pip. Returns: (List[str]): A list of packages installed. """ try: from importlib.metadata import distributions except ImportError: from importlib_metadata import distributions # for python 3.7 return [f'{d.metadata["Name"]} {d.version}' for d in distributions()]
[docs]def get_packages_list() -> List[str]: """ Return a list of installed packages in the current environment. Currently |IT_s| depends on pip for this functionality and since it is just used for troubleshooting, errors can be ignored. Returns: (List[str]): A list of packages installed. """ packages = get_packages_from_pip() if packages is None: # fall back to sys modules packages = [] # for name, module in sys.modules: modules = list(sys.modules.items()) for name, mod in modules: version = '' if hasattr(mod, 'version'): version = mod.version elif hasattr(mod, '__version__'): version = mod.__version__ packages.append(f'{name}=={version}') packages = list(sorted(packages)) return packages
[docs]def get_help_version_url(help_path, url_template: str = 'https://docs.idmod.org/projects/idmtools/en/{version}/', version: Optional[str] = None) -> str: """ Get the help url for a subject based on a version. Args: help_path: Path to config(minus base url). For example, configuration.html url_template: Template for URL containing version replacement formatter version: Optional version. If not provided, the version of idmtools installed will be used. For development versions, the version will always be nightly Returns: Path to url """ from idmtools import __version__ from urllib import parse if version is None: if "nightly" in __version__: version = "latest" else: version = f'v{__version__[0:5]}' return parse.urljoin(url_template.format(version=version), help_path)