Source code for helga.general.setup.quick_setup.quick_setup

"""
quick_setup
==========================================

Simple but hopefully helpful module to automatically put the helga pipeline DCCs
into deployment or remove them from it.

-----------------------

The tool is available as precompiled binary under $PIPELINE_SCRIPTS_BASE_PATH/bin

-----------------------

**Author:** `Timm Wagener <mailto:wagenertimm@gmail.com>`_
"""





#FAVORITES_DICT
#------------------------------------------------------------------

import os


#clean_path_for_favorites (upfront definition)
def clean_path_for_favorites(path):
    """
[docs] Modify path to match favorite neccessities. """ #remove forward slashes path = path.replace('/', '\\') return path #PIPELINE_BASE_PATH PIPELINE_BASE_PATH = r'//bigfoot/grimmhelga'
#if env. var. exists, replace if (os.getenv('HELGA_PIPELINE_BASE_PATH', False)): PIPELINE_BASE_PATH = os.getenv('HELGA_PIPELINE_BASE_PATH', False) #clean base path PIPELINE_BASE_PATH = clean_path_for_favorites(PIPELINE_BASE_PATH) #FAVORITES_DICT FAVORITES_DICT = dict( helga_rnd = '{0}\\Production\\rnd'.format(PIPELINE_BASE_PATH), helga_scripts = '{0}\\Production\\scripts'.format(PIPELINE_BASE_PATH), helga_2d = '{0}\\Production\\2d'.format(PIPELINE_BASE_PATH), helga_3d = '{0}\\Production\\3d'.format(PIPELINE_BASE_PATH), helga_assets = '{0}\\Production\\3d\\maya\\scenes\\assets'.format(PIPELINE_BASE_PATH), helga_assets_work = '{0}\\Production\\3d\\maya\\scenes\\assets\\work'.format(PIPELINE_BASE_PATH), helga_shots = '{0}\\Production\\3d\\maya\\scenes\\shots'.format(PIPELINE_BASE_PATH), helga_tools = '{0}\\Production\\scripts\\deploy\\helga\\bin'.format(PIPELINE_BASE_PATH) ) #Add relative pathes #------------------------------------------------------------------ #import import sys #tool_root_path tool_root_path = os.path.dirname(__file__) sys.path.append(tool_root_path) #media_path media_path = os.path.join(os.path.dirname(__file__), 'media') media_path_py2exe = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'media')) sys.path.append(media_path) sys.path.append(media_path_py2exe) #icons_path icons_path = os.path.join(media_path, 'icons') icons_path_py2exe = os.path.join(media_path_py2exe, 'icons') sys.path.append(icons_path) sys.path.append(icons_path_py2exe) #Import #------------------------------------------------------------------ #python import functools import logging import subprocess import time #PyQt4 from PyQt4 import QtGui from PyQt4 import QtCore from PyQt4 import uic #Import variable do_reload = True #quick_setup_logging_handler from lib import quick_setup_logging_handler if(do_reload):reload(quick_setup_logging_handler) #quick_setup_functionality from lib import quick_setup_functionality if(do_reload):reload(quick_setup_functionality) #UI classes #------------------------------------------------------------------ #ui_file_path when run from interpreter try: #ui_file_path ui_file_path = os.path.join(media_path, 'quick_setup.ui') classes_list = uic.loadUiType(ui_file_path) #ui_file_path when run from distribution except: #ui_file_path ui_file_path = os.path.join(media_path_py2exe, 'quick_setup.ui') classes_list = uic.loadUiType(ui_file_path) #QuickSetup class #------------------------------------------------------------------ class QuickSetup(classes_list[0], classes_list[1]): #Constructor def __init__(self, logging_level = logging.DEBUG, parent = None): #super class init super(QuickSetup, self).__init__(parent) #instance variables #------------------------------------------------------------------ self.title_name = self.__class__.__name__ self.version = 0.2 self.title = self.title_name +' ' + str(self.version) #logger #------------------------------------------------------------------ #status_handler self.status_handler = quick_setup_logging_handler.StatusStreamHandler(self) #logger self.logger = logging.getLogger(self.__class__.__name__) self.logging_level = logging_level self.logger.setLevel(self.logging_level) self.logger.addHandler(self.status_handler) #Init procedure #------------------------------------------------------------------ #setupUi self.setupUi(self) #setup_additional_ui self.setup_additional_ui() #connect_ui self.connect_ui() #show self.show() #UI Methods #------------------------------------------------------------------ #setup_additional_ui def setup_additional_ui(self): """ Setup additional ui elements. """ #set header icon header_icon_path = '' header_icon_name = 'icon_quick_setup.png' #executed from python if (os.path.isdir(icons_path)): header_icon_path = os.path.join(icons_path, header_icon_name) #executed from distribution elif (os.path.isdir(icons_path_py2exe)): header_icon_path = os.path.join(icons_path_py2exe, header_icon_name) #set stylesheet header self.wdgt_header_icon.setStyleSheet("border-image: url({0});".format(header_icon_path.replace('\\', '/'))) #set title self.setWindowTitle(self.title) #set header label self.lbl_header_text.setText(self.title) #set lbl_user self.lbl_user.setText(quick_setup_functionality.get_user()) #set lbl_pipeline_base_path self.lbl_pipeline_base_path.setText(quick_setup_functionality.get_pipeline_base_path()) #connect_ui def connect_ui(self): """ Connect ui elements. """ #btn_quick_setup self.btn_quick_setup.clicked.connect(functools.partial(self.quick_setup_pipeline)) #btn_quick_remove self.btn_quick_remove.clicked.connect(functools.partial(self.quick_remove_pipeline)) #btn_create_favorites self.btn_create_favorites.clicked.connect(functools.partial(self.add_favorites)) #btn_remove_favorites self.btn_remove_favorites.clicked.connect(functools.partial(self.remove_favorites)) #Pipeline Setup Methods #------------------------------------------------------------------ #quick_setup_pipeline def quick_setup_pipeline(self): """ Quick setup the pipeline (Copy DCC startup scripts). If startup scripts already exist, rename them in order to keep them. """ #clear status self.clear_setup_status() #setup_maya_pipeline self.setup_maya_pipeline() #append status self.append_setup_status('---------------------------------') #setup_nuke_pipeline self.setup_nuke_pipeline() #append status self.append_setup_status('---------------------------------') #setup_houdini_pipeline self.setup_houdini_pipeline() #append status self.append_setup_status('---------------------------------') #append status self.append_setup_status('Quick setup of helga pipeline finished') #log self.logger.debug('Quick setup of helga pipeline finished') #setup_maya_pipeline def setup_maya_pipeline(self): """ Setup maya pipeline. """ #append status self.append_setup_status('Maya:') #user_setup_destination_dir user_setup_destination_dir = quick_setup_functionality.get_user_setup_destination_dir('maya', '2014-x64') #user setup dir non existent if not(os.path.isdir(user_setup_destination_dir)): #append status self.append_setup_status('User setup destination dir: {0} not found. Maybe you have never started Maya so far'.format(user_setup_destination_dir)) self.append_setup_status('Aborting...') return None #append status self.append_setup_status('User setup destination dir: {0}.'.format(user_setup_destination_dir)) #userSetup already exists at user destination if('userSetup.py' in os.listdir(user_setup_destination_dir)): #current_file_name current_file_name = os.path.join(user_setup_destination_dir, 'userSetup.py') #target_file_name target_file_name = os.path.join(user_setup_destination_dir, 'backup_helga_{0}_userSetup.py'.format(quick_setup_functionality.get_time_string())) #rename os.rename(current_file_name, target_file_name) #append status self.append_setup_status('Backuped existing userSetup: {0}.'.format(target_file_name)) #pipeline_user_setup_source_dir pipeline_user_setup_source_dir = quick_setup_functionality.get_user_setup_source_dir('maya') #user setup dir non existent if not(os.path.isdir(pipeline_user_setup_source_dir)): #append status self.append_setup_status('Pipeline user setup source dir: {0} not found. Maybe you have not mounted the network path.'.format(pipeline_user_setup_source_dir)) self.append_setup_status('Aborting...') return None #append status self.append_setup_status('Pipeline user setup source dir: {0}.'.format(pipeline_user_setup_source_dir)) #pipeline_user_setup_source_file pipeline_user_setup_source_file = 'userSetup.py' #pipeline_user_setup_source_file_path pipeline_user_setup_source_file_path = os.path.join(pipeline_user_setup_source_dir, pipeline_user_setup_source_file) #user setup file non existent if not(os.path.isfile(pipeline_user_setup_source_file_path)): #append status self.append_setup_status('Pipeline user setup source file: {0} not found. Maybe you have not mounted the network path.'.format(pipeline_user_setup_source_file_path)) self.append_setup_status('Aborting...') return None #append status self.append_setup_status('Pipeline user setup source file: {0}.'.format(pipeline_user_setup_source_file_path)) #copy quick_setup_functionality.copy_file(pipeline_user_setup_source_file, pipeline_user_setup_source_dir, user_setup_destination_dir) #append status self.append_setup_status('{0} copied'.format(pipeline_user_setup_source_file)) #append status self.append_setup_status('Maya setup successfull') #setup_nuke_pipeline def setup_nuke_pipeline(self): """ Setup nuke pipeline. """ #append status self.append_setup_status('Nuke:') #user_setup_destination_dir user_setup_destination_dir = quick_setup_functionality.get_user_setup_destination_dir('nuke') #user setup dir non existent if not(os.path.isdir(user_setup_destination_dir)): #append status self.append_setup_status('User setup destination dir: {0} not found. Maybe you have never started Maya so far'.format(user_setup_destination_dir)) self.append_setup_status('Aborting...') return None #append status self.append_setup_status('User setup destination dir: {0}.'.format(user_setup_destination_dir)) #init already exists at user destination if('init.py' in os.listdir(user_setup_destination_dir)): #current_file_name current_file_name = os.path.join(user_setup_destination_dir, 'init.py') #target_file_name target_file_name = os.path.join(user_setup_destination_dir, 'backup_helga_{0}_init.py'.format(quick_setup_functionality.get_time_string())) #rename os.rename(current_file_name, target_file_name) #append status self.append_setup_status('Backuped existing init.py: {0}.'.format(target_file_name)) #menu already exists at user destination if('menu.py' in os.listdir(user_setup_destination_dir)): #current_file_name current_file_name = os.path.join(user_setup_destination_dir, 'menu.py') #target_file_name target_file_name = os.path.join(user_setup_destination_dir, 'backup_helga_{0}_menu.py'.format(quick_setup_functionality.get_time_string())) #rename os.rename(current_file_name, target_file_name) #append status self.append_setup_status('Backuped existing menu.py: {0}.'.format(target_file_name)) #pipeline_user_setup_source_dir pipeline_user_setup_source_dir = quick_setup_functionality.get_user_setup_source_dir('nuke') #user setup dir non existent if not(os.path.isdir(pipeline_user_setup_source_dir)): #append status self.append_setup_status('Pipeline user setup source dir: {0} not found. Maybe you have not mounted the network path.'.format(pipeline_user_setup_source_dir)) self.append_setup_status('Aborting...') return None #append status self.append_setup_status('Pipeline user setup source dir: {0}.'.format(pipeline_user_setup_source_dir)) #pipeline_menu_source_dir pipeline_menu_source_dir = quick_setup_functionality.get_nuke_menu_source_dir() #user setup dir non existent if not(os.path.isdir(pipeline_menu_source_dir)): #append status self.append_setup_status('Pipeline menu source dir: {0} not found. Maybe you have not mounted the network path.'.format(pipeline_menu_source_dir)) self.append_setup_status('Aborting...') return None #append status self.append_setup_status('Pipeline menu source dir: {0}.'.format(pipeline_menu_source_dir)) #pipeline_user_setup_source_file pipeline_user_setup_source_file = 'init.py' #pipeline_user_setup_source_file_path pipeline_user_setup_source_file_path = os.path.join(pipeline_user_setup_source_dir, pipeline_user_setup_source_file) #user setup file non existent if not(os.path.isfile(pipeline_user_setup_source_file_path)): #append status self.append_setup_status('Pipeline user setup source file: {0} not found. Maybe you have not mounted the network path.'.format(pipeline_user_setup_source_file_path)) self.append_setup_status('Aborting...') return None #append status self.append_setup_status('Pipeline user setup source file: {0}.'.format(pipeline_user_setup_source_file_path)) #pipeline_menu_source_file pipeline_menu_source_file = 'menu.py' #pipeline_menu_source_file_path pipeline_menu_source_file_path = os.path.join(pipeline_menu_source_dir, pipeline_menu_source_file) #user setup file non existent if not(os.path.isfile(pipeline_menu_source_file_path)): #append status self.append_setup_status('Pipeline menu source file: {0} not found. Maybe you have not mounted the network path.'.format(pipeline_menu_source_file_path)) self.append_setup_status('Aborting...') return None #append status self.append_setup_status('Pipeline menu source file: {0}.'.format(pipeline_menu_source_file_path)) #copy init.py quick_setup_functionality.copy_file(pipeline_user_setup_source_file, pipeline_user_setup_source_dir, user_setup_destination_dir) #append status self.append_setup_status('{0} copied'.format(pipeline_user_setup_source_file)) #copy menu.py quick_setup_functionality.copy_file(pipeline_menu_source_file, pipeline_menu_source_dir, user_setup_destination_dir) #append status self.append_setup_status('{0} copied'.format(pipeline_menu_source_file)) #append status self.append_setup_status('Nuke setup successfull') #setup_houdini_pipeline def setup_houdini_pipeline(self): """ Setup houdini pipeline. """ #append status self.append_setup_status('Houdini:') #user_setup_destination_dir user_setup_destination_dir = quick_setup_functionality.get_user_setup_destination_dir('houdini', '13.0') #user setup dir non existent if not(os.path.isdir(user_setup_destination_dir)): #append status self.append_setup_status('User setup destination dir: {0} not found. Maybe you have never started Maya so far'.format(user_setup_destination_dir)) self.append_setup_status('Aborting...') return None #append status self.append_setup_status('User setup destination dir: {0}.'.format(user_setup_destination_dir)) #houdini already exists at user destination if('houdini.env' in os.listdir(user_setup_destination_dir)): #current_file_name current_file_name = os.path.join(user_setup_destination_dir, 'houdini.env') #target_file_name target_file_name = os.path.join(user_setup_destination_dir, 'backup_helga_{0}_houdini.env'.format(quick_setup_functionality.get_time_string())) #rename os.rename(current_file_name, target_file_name) #append status self.append_setup_status('Backuped existing houdini.env: {0}.'.format(target_file_name)) #pipeline_user_setup_source_dir pipeline_user_setup_source_dir = quick_setup_functionality.get_user_setup_source_dir('houdini') #user setup dir non existent if not(os.path.isdir(pipeline_user_setup_source_dir)): #append status self.append_setup_status('Pipeline user setup source dir: {0} not found. Maybe you have not mounted the network path.'.format(pipeline_user_setup_source_dir)) self.append_setup_status('Aborting...') return None #append status self.append_setup_status('Pipeline user setup source dir: {0}.'.format(pipeline_user_setup_source_dir)) #pipeline_user_setup_source_file pipeline_user_setup_source_file = 'houdini.env' #pipeline_user_setup_source_file_path pipeline_user_setup_source_file_path = os.path.join(pipeline_user_setup_source_dir, pipeline_user_setup_source_file) #user setup file non existent if not(os.path.isfile(pipeline_user_setup_source_file_path)): #append status self.append_setup_status('Pipeline user setup source file: {0} not found. Maybe you have not mounted the network path.'.format(pipeline_user_setup_source_file_path)) self.append_setup_status('Aborting...') return None #append status self.append_setup_status('Pipeline user setup source file: {0}.'.format(pipeline_user_setup_source_file_path)) #copy quick_setup_functionality.copy_file(pipeline_user_setup_source_file, pipeline_user_setup_source_dir, user_setup_destination_dir) #append status self.append_setup_status('{0} copied'.format(pipeline_user_setup_source_file)) #append status self.append_setup_status('Houdini setup successfull') #Pipeline Remove Methods #------------------------------------------------------------------ #quick_remove_pipeline def quick_remove_pipeline(self): """ Quick remove the pipeline (Remove DCC startup scripts). """ #clear status self.clear_setup_status() #remove_maya_pipeline self.remove_maya_pipeline() #append status self.append_setup_status('---------------------------------') #remove_nuke_pipeline self.remove_nuke_pipeline() #append status self.append_setup_status('---------------------------------') #remove_houdini_pipeline self.remove_houdini_pipeline() #append status self.append_setup_status('---------------------------------') #append status self.append_setup_status('Quick removal of helga pipeline finished') #log self.logger.debug('Quick removal of helga pipeline finished') #remove_maya_pipeline def remove_maya_pipeline(self): """ Remove maya pipeline. """ try: #user_setup_destination_dir user_setup_destination_dir = quick_setup_functionality.get_user_setup_destination_dir('maya', '2014-x64') #user_setup_file user_setup_file = os.path.join(user_setup_destination_dir, 'userSetup.py') #delete os.remove(user_setup_file) except: #append status self.append_setup_status('Error removing Maya userSetup file. Maybe no userSetup file or directory existed.') return None #append status self.append_setup_status('Removed local helga maya pipeline files') #remove_nuke_pipeline def remove_nuke_pipeline(self): """ Remove nuke pipeline. """ try: #user_setup_destination_dir user_setup_destination_dir = quick_setup_functionality.get_user_setup_destination_dir('nuke') #user_setup_file user_setup_file = os.path.join(user_setup_destination_dir, 'init.py') #menu_file menu_file = os.path.join(user_setup_destination_dir, 'menu.py') #delete os.remove(user_setup_file) os.remove(menu_file) except: #append status self.append_setup_status('Error removing Nuke init.py and menu.py files. Maybe none of these files or the .nuke directory existed.') return None #append status self.append_setup_status('Removed local helga nuke pipeline files') #remove_houdini_pipeline def remove_houdini_pipeline(self): """ Remove houdini pipeline. """ try: #user_setup_destination_dir user_setup_destination_dir = quick_setup_functionality.get_user_setup_destination_dir('houdini', '13.0') #user_setup_file user_setup_file = os.path.join(user_setup_destination_dir, 'houdini.env') #delete os.remove(user_setup_file) except: #append status self.append_setup_status('Error removing hoduini.env file. Maybe no houdini.env file or Houdini directory existed.') return None #append status self.append_setup_status('Removed local helga hoduini pipeline files') #Favorites #------------------------------------------------------------------ #add_favorites def add_favorites(self): """ Add favorites. """ #clear status self.clear_setup_status() #iterate and set favorites for shortcut_name in sorted(FAVORITES_DICT.keys()): #target_path target_path = FAVORITES_DICT[shortcut_name] try: #add quick_setup_functionality.add_favorite(shortcut_name, target_path) #append status self.append_setup_status('Added favorite: {0} --> {1}'.format(shortcut_name, target_path)) except: #append status self.append_setup_status('Error adding favorite: {0} --> {1}'.format(shortcut_name, target_path)) #append status self.append_setup_status('---------------------------------') #append status self.append_setup_status('Setting favorites finished') #log self.logger.debug('Setting favorites finished') #remove_favorites def remove_favorites(self): """ Remove favorites. """ #clear status self.clear_setup_status() #iterate and set favorites for shortcut_name, target_path in FAVORITES_DICT.iteritems(): try: #shortcut_path shortcut_path = os.path.join(quick_setup_functionality.get_links_directory(), '{0}.lnk'.format(shortcut_name)) #if isfile delete if(os.path.isfile(shortcut_path)): #delete os.remove(shortcut_path) #append status self.append_setup_status('Deleted favorite: {0}'.format(shortcut_name)) except: #append status self.append_setup_status('Error deleting favorite: {0}'.format(shortcut_name)) #append status self.append_setup_status('---------------------------------') #append status self.append_setup_status('Removing favorites finished') #log self.logger.debug('Removing favorites finished') #Getter & Setter #------------------------------------------------------------------ #set_status def set_status(self, new_value): """ Set le_status text """ #clear self.le_status.clear() #set text self.le_status.setText(new_value) #get_status def get_status(self): """ Return content of le_status """ return str(self.le_status.text()) #append_setup_status def append_setup_status(self, message): """ Append to self.te_setup_status """ #append self.te_setup_status.append(message) #clear_setup_status def clear_setup_status(self): """ Clear self.te_setup_status """ #clear self.te_setup_status.clear()