Untitled
unknown
plain_text
3 years ago
6.3 kB
8
Indexable
import rigging_widgets.rig_builder as rig_builder import maya.cmds as mc import site import inspect import logging import gc MODULE_ROOT = 'iRig' USER = os.getenv('USERNAME') __file__ = 'D:/Pipeline/{}/dev/git_repo/iRig/extra\iRigLoader.py'.format(USER) SHOW_NAME = os.getenv('TT_PROJCODE') logger = logging.getLogger('irig_loader') def reset_by_path(module_path=None): if module_path is None: module_path = os.path.dirname('__file__') print 'module_path:',module_path module_path = os.path.abspath(module_path).lower() # cleaner comparison later print 'module_path:',module_path sys_key_to_delete = list() sys_module_to_be_deleted = list() for key, module in sys.modules.iteritems(): # Iterate through currently loaded modules # try: if module and module.__name__ not in sys.builtin_module_names: try: f = inspect.getfile(module) except Exception as e: logger.critical('Unable to inspect module: %s' % module.__name__) continue module_file_path = os.path.abspath(f.lower()) if module_file_path == __file__.lower(): # Removing this script will break the process. continue if getattr(module, "__dnr__", False): logger.debug("Skipping %s, found __dnr__" % key) continue if module_file_path.startswith(module_path): logger.info("Removing %s" % key) sys_key_to_delete.append(key) sys_module_to_be_deleted.append(module) # Remove modules in to_delete from current session globals() if they're referenced in some way. global_key_to_delete = list() for key, module in globals().iteritems(): if module in sys_module_to_be_deleted: global_key_to_delete.append(key) for global_key in global_key_to_delete: logger.info('Deleting from globals(): {}'.format(global_key)) del (globals()[global_key]) # If we'd deleted the module in the loop above, it would have changed the size of the dictionary and # testing the loop. So now we go over the list we made and delete all the modules for module in sys_key_to_delete: logger.info('Removing from sys: {}'.format(module)) del (sys.modules[module]) def add_dir_pth_files_to_site(path='', index=None): pre_add_length = len(sys.path) if path and os.path.exists(path): dirs_to_source = [ path + '/src/', path + '/src/iRig/', path + '/src/iRig/iRig_maya/framework/' ] for source_dir in dirs_to_source: sys.path.insert(0, source_dir) if isinstance(index, int) and index <= pre_add_length: added_path_list = sys.path[pre_add_length:] for pos, sys_path in enumerate(added_path_list): target_index = index + pos logger.debug('Inserting at index: [{}] - {}'.format(target_index, sys_path)) sys.path.insert(target_index, sys_path) logger.debug('Removing duplicates') site.removeduppaths() def teardown(): if 'MAYA_CALLBACKS' in globals(): global MAYA_CALLBACKS if MAYA_CALLBACKS: import maya.OpenMaya as om for callback in MAYA_CALLBACKS: logging.critical('Removing MMessage callback: %s' % callback) om.MMessage.removeCallback(callback) if 'ALL_SIGNALS' in globals(): global ALL_SIGNALS if ALL_SIGNALS: for s in ALL_SIGNALS: logging.getLogger('rig_build').info('Blocking signal: %s' % s) s._block = True s._slots = [] if 'ALL_CLASS_SIGNALS' in globals(): global ALL_CLASS_SIGNALS if ALL_CLASS_SIGNALS: for s in ALL_CLASS_SIGNALS: logging.getLogger('rig_build').info('Blocking class signals: %s' % s) s._map = {} def irig_reload(reopen_toolbox=False): selected_iRig = 'D:/Pipeline/{}/dev/git_repo/iRig'.format(USER) os.environ['PIPE_DEV_MODE'] = 'True' teardown() # close iRig toolbox if mc.workspaceControl('iRig_Toolbox_Dock_Control', q=True, exists=True): mc.workspaceControl('iRig_Toolbox_Dock_Control', e=True, close=True) # Close framework GUI widget_name = ['Rig Builder', 'Face Builder'] for workspace_control in mc.lsUI(type='workspaceControl'): if 'WorkspaceControl' in workspace_control: for name in widget_name: if mc.workspaceControl(workspace_control, q=True, label=True) == name: mc.workspaceControl(workspace_control, e=True, close=True) existing_index = None module_search = os.path.normpath('/{}/'.format(MODULE_ROOT)) print 'module_search:',module_search for i, p in enumerate(sys.path): p_norm = os.path.normpath(p) if module_search.lower() in p_norm.lower(): if existing_index is None: existing_index = i sys.path.remove(p) reset_by_path(module_path=p) add_dir_pth_files_to_site(selected_iRig, index = existing_index) logger.info('{} was loaded from: {}'.format(MODULE_ROOT, selected_iRig)) gc.collect() if reopen_toolbox: from iRig.iRig_maya.toolbox import toolboxUI reload(toolboxUI) toolboxUI.launch() else: current_show_dev_mode = os.getenv('SHOW_DEV_MODE', 'False') if current_show_dev_mode == 'True': SHOWS_DIR = "D:/Pipeline/{}/dev/git_repo/{}".format(USER, SHOW_NAME) else: SHOWS_DIR = 'G:/Rigging/Shows/{}'.format(SHOW_NAME) # add show to sys.path while SHOWS_DIR in sys.path: sys.path.remove(SHOWS_DIR) sys.path.insert(0, SHOWS_DIR) import widget_launchers.launch_widgets as lw reload(lw) lw.launch_rig_widget() irig_reload(reopen_toolbox=False)
Editor is loading...