Source code for ladybug_rhino.ghpath

"""Functions for managing the copying of user objects to the Grasshopper path."""
import os

try:
    from ladybug.futil import nukedir, copy_file_tree
except ImportError as e:
    raise ImportError("Failed to import ladybug.\n{}".format(e))

from .pythonpath import RHINO_VERSIONS

# core library packages, which get copied or cleaned out of the Rhino scripts folder
PACKAGES = \
    ('ladybug_grasshopper', 'honeybee_grasshopper_core', 'honeybee_grasshopper_energy',
     'honeybee_grasshopper_radiance', 'dragonfly_grasshopper')
# package containing .gha files
DOTNET_PACKAGES = ('ladybug_grasshopper_dotnet',)
GRASSHOPPER_ID = 'b45a29b1-4343-4035-989e-044e8580d9cf'


[docs]def copy_components_packages(directory): """Copy all Ladybug tools components packages to their respective locations. Args: directory: The path to a directory that contains all of the Ladybug Tools Grasshopper python packages to be copied (both user object packages and dotnet gha packages). """ clean_userobjects() copy_packages_to_userobjects(directory) clean_libraries() copy_packages_to_libraries(directory)
[docs]def find_grasshopper_userobjects(): """Get the paths to the current user's Grasshopper user object folder. The folder(s) will be created if they do not already exist. """ if os.name == 'nt': # we are on Windows appdata_roaming = os.getenv('APPDATA') uo_folder = [os.path.join(appdata_roaming, 'Grasshopper', 'UserObjects')] else: # we are on Mac home_folder = os.getenv('HOME') or os.path.expanduser('~') uo_folder = [] for ver in RHINO_VERSIONS: uo_fold = os.path.join( home_folder, 'Library', 'Application Support', 'McNeel', 'Rhinoceros', ver, 'Plug-ins', 'Grasshopper ({})'.format(GRASSHOPPER_ID), 'UserObjects') uo_folder.append(uo_fold) for uo_fold in uo_folder: if not os.path.isdir(uo_fold): os.makedirs(uo_fold) return uo_folder
[docs]def copy_packages_to_userobjects(directory): """Copy Ladybug Tools user object packages to the current user's userobject folder. Args: directory: The path to a directory that contains the Ladybug Tools Grasshopper python packages to be copied. """ uo_folders = find_grasshopper_userobjects() for uo_folder in uo_folders: for pkg in PACKAGES: lib_folder = os.path.join(directory, pkg) dest_folder = os.path.join(uo_folder, pkg) if os.path.isdir(lib_folder): copy_file_tree(lib_folder, dest_folder, True) print('UserObjects copied to: {}'.format(dest_folder))
[docs]def clean_userobjects(): """Remove installed Ladybug Tools packages from the user's userobjects folder.""" uo_folders = find_grasshopper_userobjects() for uo_folder in uo_folders: for pkg in PACKAGES: lib_folder = os.path.join(uo_folder, pkg) if os.path.isdir(lib_folder): nukedir(lib_folder, True) print('UserObjects removed from: {}'.format(lib_folder))
[docs]def find_grasshopper_libraries(): """Get the paths to the current user's Grasshopper Libraries folder. The folder(s) will be created if they do not already exist. """ if os.name == 'nt': # we are on Windows appdata_roaming = os.getenv('APPDATA') lib_folder = [os.path.join(appdata_roaming, 'Grasshopper', 'Libraries')] else: # we are on Mac home_folder = os.getenv('HOME') or os.path.expanduser('~') lib_folder = [] for ver in RHINO_VERSIONS: lib_fold = os.path.join( home_folder, 'Library', 'Application Support', 'McNeel', 'Rhinoceros', ver, 'Plug-ins', 'Grasshopper ({})'.format(GRASSHOPPER_ID), 'Libraries') lib_folder.append(lib_fold) for lib_fold in lib_folder: if not os.path.isdir(lib_fold): os.makedirs(lib_fold) return lib_folder
[docs]def copy_packages_to_libraries(directory): """Copy Ladybug tools Libraries packages to the current user's libraries folder. Args: directory: The path to a directory that contains the Ladybug Tools Grasshopper python packages. """ lib_folders = find_grasshopper_libraries() for lib_folder in lib_folders: for pkg in DOTNET_PACKAGES: src_folder = os.path.join(directory, pkg) dest_folder = os.path.join(lib_folder, pkg) if os.path.isdir(src_folder): copy_file_tree(src_folder, dest_folder, True) print('Components copied to: {}'.format(dest_folder))
[docs]def clean_libraries(): """Remove installed Ladybug Tools packages from the user's Libraries folder.""" lib_folders = find_grasshopper_libraries() for lib_folder in lib_folders: for pkg in DOTNET_PACKAGES: lib_folder = os.path.join(lib_folder, pkg) if os.path.isdir(lib_folder): nukedir(lib_folder, True) print('Components removed from: {}'.format(lib_folder))