Source code for schrodinger.application.utils

"""
Utility functions for finding python packages in product directories.
"""

import glob
import os


[docs]def add_package_dir_to_path(path, product_dir_name, subdir=""): """ Adds product specific directory to __path__ or raises an ImportError if no such directory exists :type path: list of str :param path: __path__ of the calling module :type product_dir_name: str :param product_dir_name: The product subdirectory name of the SCHRODINGER directory, without the "-v*" version suffix (e.g. 'psp). :type subdir: str :param subdir: Specifies the subdirectory of the product python packages directory that should be added to the product package directory. Use this if the product package directory has packages you want to ignore (e.g. 'schrodinger.application.prime.packages'). """ d = find_product_package_dir(product_dir_name, subdir) # This would only be in path if the module was reloaded if d not in path: path.append(d)
[docs]def find_full_product_version(product_name): return product_name + "-v[0-9]*.*[0-9]"
[docs]def find_product_package_dir(product_dir_name, subdir=""): base_dir = glob.glob( os.path.join(os.environ["SCHRODINGER"], find_full_product_version(product_dir_name))) if not base_dir: raise ImportError("Product {} not found in " "$SCHRODINGER".format(product_dir_name)) product_package_dirname = os.path.join(base_dir[0], "lib", "*", "python_packages", subdir) product_package_dir = glob.glob(product_package_dirname) if product_package_dir and os.path.isdir(product_package_dir[0]): return product_package_dir[0] else: raise ImportError("Directory {} does not exist to import {} specific " "modules".format(product_package_dirname, product_dir_name))