You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
366 lines
14 KiB
Python
366 lines
14 KiB
Python
# coding:utf-8
|
|
#!/usr/bin/python
|
|
#
|
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
#
|
|
#
|
|
# -- This line is 75 characters -------------------------------------------
|
|
|
|
"""
|
|
Module Documentation:
|
|
DccScriptingInterface:: azpy//constants.py
|
|
|
|
This module is mainly a bunch of commony used constants, and default strings
|
|
So we can make an update here once that is used elsewhere.
|
|
|
|
< To Do: Further document module here>
|
|
"""
|
|
# -------------------------------------------------------------------------
|
|
# built-ins
|
|
import os
|
|
import sys
|
|
import site
|
|
from os.path import expanduser
|
|
import logging as _logging
|
|
# -------------------------------------------------------------------------
|
|
|
|
|
|
# -------------------------------------------------------------------------
|
|
# global scope
|
|
_MODULENAME = __name__
|
|
if _MODULENAME is '__main__':
|
|
_MODULENAME = 'azpy.constants'
|
|
|
|
os.environ['PYTHONINSPECT'] = 'True'
|
|
# for this module to perform standalone
|
|
# we need to set up basic access to the DCCsi
|
|
_MODULE_PATH = os.path.realpath(__file__) # To Do: what if frozen?
|
|
_DCCSIG_PATH = os.path.normpath(os.path.join(_MODULE_PATH, '../..'))
|
|
_DCCSIG_PATH = os.getenv('DCCSIG_PATH', _DCCSIG_PATH)
|
|
site.addsitedir(_DCCSIG_PATH)
|
|
|
|
# now we have azpy api access
|
|
import azpy
|
|
from azpy.env_bool import env_bool
|
|
from azpy.config_utils import return_stub_dir
|
|
# -------------------------------------------------------------------------
|
|
|
|
|
|
# -------------------------------------------------------------------------
|
|
# This is the first set of defined constants (and we use them here)
|
|
ENVAR_DCCSI_GDEBUG = str('DCCSI_GDEBUG')
|
|
ENVAR_DCCSI_DEV_MODE = str('DCCSI_DEV_MODE')
|
|
ENVAR_DCCSI_GDEBUGGER = str('DCCSI_GDEBUGGER')
|
|
ENVAR_DCCSI_LOGLEVEL = str('DCCSI_LOGLEVEL')
|
|
# Log formating
|
|
FRMT_LOG_LONG = "[%(name)s][%(levelname)s] >> %(message)s (%(asctime)s; %(filename)s:%(lineno)d)"
|
|
FRMT_LOG_SHRT = "[%(asctime)s][%(name)s][%(levelname)s] >> %(message)s"
|
|
# -------------------------------------------------------------------------
|
|
|
|
|
|
# -------------------------------------------------------------------------
|
|
# global debug stuff
|
|
_DCCSI_GDEBUG = env_bool(ENVAR_DCCSI_GDEBUG, False)
|
|
_DCCSI_DEV_MODE = env_bool(ENVAR_DCCSI_DEV_MODE, False)
|
|
_DCCSI_LOGLEVEL = int(env_bool(ENVAR_DCCSI_LOGLEVEL, int(20)))
|
|
if _DCCSI_GDEBUG:
|
|
_DCCSI_LOGLEVEL = int(10)
|
|
# -------------------------------------------------------------------------
|
|
|
|
|
|
# -------------------------------------------------------------------------
|
|
# set up module logging
|
|
for handler in _logging.root.handlers[:]:
|
|
_logging.root.removeHandler(handler)
|
|
_LOGGER = _logging.getLogger(_MODULENAME)
|
|
_logging.basicConfig(format=FRMT_LOG_LONG, level=_DCCSI_LOGLEVEL)
|
|
_LOGGER.debug('Initializing: {0}.'.format({_MODULENAME}))
|
|
# -------------------------------------------------------------------------
|
|
|
|
|
|
# -------------------------------------------------------------------------
|
|
# String Literals
|
|
BITDEPTH64 = str('64bit')
|
|
|
|
# string literals
|
|
STR_CROSSBAR = str('{0}'.format('-' * 74))
|
|
STR_CROSSBAR_RL = str('{0}\r'.format(STR_CROSSBAR))
|
|
STR_CROSSBAR_NL = str('{0}\n'.format(STR_CROSSBAR))
|
|
|
|
# some common str tags
|
|
TAG_DEFAULT_COMPANY = str('Amazon.O3DE')
|
|
TAG_DEFAULT_PROJECT = str('DccScriptingInterface')
|
|
TAG_DCCSI_NICKNAME = str('DCCsi')
|
|
TAG_MOCK_PROJECT = str('MockProject')
|
|
TAG_DIR_O3DE_DEV = str('dev')
|
|
TAG_DIR_DCCSI_AZPY = str('azpy')
|
|
TAG_DIR_DCCSI_TOOLS = str('Tools')
|
|
TAG_DIR_O3DE_BUILD_FOLDER = str('build')
|
|
TAG_QT_PLUGIN_PATH = str('QT_PLUGIN_PATH')
|
|
|
|
TAG_O3DE_FOLDER = str('.o3de')
|
|
TAG_O3DE_BOOTSTRAP = str('bootstrap.setreg')
|
|
TAG_DCCSI_CONFIG = str('dccsiconfiguration.setreg')
|
|
|
|
# filesystem markers, stub file names.
|
|
STUB_O3DE_DEV = str('engine.json')
|
|
STUB_O3DE_ROOT_DCCSI = str('dccsi_stub')
|
|
STUB_O3DE_DCCSI_AZPY = str('dccsi_azpy_stub')
|
|
STUB_O3DE_DCCSI_TOOLS = str('dccsi_tools_stub')
|
|
|
|
# config string consts, Meta Qualifiers
|
|
QUALIFIER_COMMENT = str('_meta_COMMENT')
|
|
QUALIFIER_TEMPLATE = str('_meta_{0}_TEMPLATE')
|
|
|
|
# config string consts, Section Qualifiers
|
|
QUALIFIER_EXAMPLE_SECTION = str('_Example_Block_')
|
|
QUALIFIER_INFO_SECTION = str('Info_Block')
|
|
QUALIFIER_GLOBAL_SECTION = str('Global_Block')
|
|
QUALIFIER_DEFAULT_ENV_SECTION = str('Default_Env_Block')
|
|
QUALIFIER_SERVICES_SECTION = str('Services_Block')
|
|
|
|
# config string consts, value, root and flags
|
|
QUALIFIER_VALUE = str('value')
|
|
QUALIFIER_ROOTPATH = str('rootPath')
|
|
QUALIFIER_ENVROOT = str('envRoot')
|
|
QUALIFIER_FLAGS = str('flags')
|
|
|
|
# config action flags
|
|
# the presence of a flag descriptor following a value block specifies a use case
|
|
FLAG_PATH_ADDPYTHONSITEDIR = str('addPySiteDir')
|
|
FLAG_PATH_ADDSYSPATH = str('addSysPath')
|
|
FLAG_PATH_SETSYSPATH = str('setSysPath')
|
|
FLAG_VAR_ADDENV = str('addEnv')
|
|
FLAG_VAR_SETENV = str('setEnv')
|
|
FLAG_PATH_ABSOLUTE = str('absolute')
|
|
FLAG_PATH_RELATIVE = str('relative')
|
|
FLAG_PROJECT_RELATIVE = str('project_relative')
|
|
FLAG_PATH_ROOT = str('root')
|
|
FLAG_PATH_BLOCKROOT = str('blockRoot')
|
|
|
|
# some common paths
|
|
PATH_PROGRAMFILES_X86 = str(os.environ['PROGRAMFILES(X86)'])
|
|
PATH_PROGRAMFILES_X64 = str(os.environ['PROGRAMFILES'])
|
|
|
|
# base env var key as str
|
|
ENVAR_COMPANY = str('COMPANY')
|
|
ENVAR_O3DE_PROJECT = str('O3DE_PROJECT')
|
|
ENVAR_O3DE_PROJECT_PATH = str('O3DE_PROJECT_PATH')
|
|
ENVAR_O3DE_DEV = str('O3DE_DEV')
|
|
ENVAR_DCCSIG_PATH = str('DCCSIG_PATH')
|
|
ENVAR_DCCSI_AZPY_PATH = str('DCCSI_AZPY_PATH')
|
|
ENVAR_DCCSI_TOOLS_PATH = str('DCCSI_TOOLS_PATH')
|
|
ENVAR_O3DE_BUILD_DIR_NAME = str('O3DE_BUILD_DIR_NAME')
|
|
|
|
ENVAR_O3DE_BUILD_PATH = str('O3DE_BUILD_PATH')
|
|
ENVAR_QT_PLUGIN_PATH = TAG_QT_PLUGIN_PATH
|
|
ENVAR_QTFORPYTHON_PATH = str('QTFORPYTHON_PATH')
|
|
ENVAR_O3DE_BIN_PATH = str('O3DE_BIN_PATH')
|
|
|
|
ENVAR_DCCSI_LOG_PATH = str('DCCSI_LOG_PATH')
|
|
ENVAR_DCCSI_LAUNCHERS_PATH = str('DCCSI_LAUNCHERS_PATH')
|
|
|
|
ENVAR_DCCSI_PY_VERSION_MAJOR = str('DCCSI_PY_VERSION_MAJOR')
|
|
ENVAR_DCCSI_PY_VERSION_MINOR = str('DCCSI_PY_VERSION_MINOR')
|
|
ENVAR_DCCSI_PYTHON_PATH = str('DCCSI_PYTHON_PATH')
|
|
ENVAR_DCCSI_PYTHON_LIB_PATH = str('DCCSI_PYTHON_LIB_PATH')
|
|
ENVAR_O3DE_PYTHON_INSTALL = str('O3DE_PYTHON_INSTALL')
|
|
|
|
ENVAR_WINGHOME = str('WINGHOME')
|
|
ENVAR_DCCSI_WING_VERSION_MAJOR = str('DCCSI_WING_VERSION_MAJOR')
|
|
ENVAR_DCCSI_WING_VERSION_MINOR = str('DCCSI_WING_VERSION_MINOR')
|
|
|
|
ENVAR_DCCSI_PY_BASE = str('DCCSI_PY_BASE')
|
|
ENVAR_DCCSI_PY_DCCSI = str('DCCSI_PY_DCCSI')
|
|
ENVAR_DCCSI_PY_MAYA = str('DCCSI_PY_MAYA')
|
|
ENVAR_DCCSI_PY_DEFAULT = str('DCCSI_PY_DEFAULT')
|
|
|
|
ENVAR_DCCSI_MAYA_VERSION = str('DCCSI_MAYA_VERSION')
|
|
ENVAR_MAYA_LOCATION = str('MAYA_LOCATION')
|
|
|
|
ENVAR_DCCSI_TOOLS_MAYA_PATH = str('DCCSI_TOOLS_MAYA_PATH')
|
|
ENVAR_MAYA_MODULE_PATH = str('MAYA_MODULE_PATH')
|
|
ENVAR_MAYA_BIN_PATH = str('MAYA_BIN_PATH')
|
|
|
|
ENVAR_DCCSI_MAYA_PLUG_IN_PATH = str('DCCSI_MAYA_PLUG_IN_PATH')
|
|
ENVAR_MAYA_PLUG_IN_PATH = str('MAYA_PLUG_IN_PATH')
|
|
|
|
ENVAR_DCCSI_MAYA_SHELF_PATH = str('DCCSI_MAYA_SHELF_PATH')
|
|
ENVAR_MAYA_SHELF_PATH = str('MAYA_SHELF_PATH')
|
|
|
|
ENVAR_DCCSI_MAYA_XBMLANGPATH = str('DCCSI_MAYA_XBMLANGPATH')
|
|
ENVAR_XBMLANGPATH = str('XBMLANGPATH')
|
|
|
|
ENVAR_DCCSI_MAYA_SCRIPT_MEL_PATH = str('DCCSI_MAYA_SCRIPT_MEL_PATH')
|
|
ENVAR_DCCSI_MAYA_SCRIPT_PY_PATH = str('DCCSI_MAYA_SCRIPT_PY_PATH')
|
|
ENVAR_MAYA_SCRIPT_PATH = str('MAYA_SCRIPT_PATH')
|
|
|
|
ENVAR_DCCSI_MAYA_SET_CALLBACKS = str('DCCSI_MAYA_SET_CALLBACKS')
|
|
|
|
TAG_O3DE_DCC_MAYA_MEL = 'dccsi_setup.mel'
|
|
TAG_MAYA_WORKSPACE = 'workspace.mel'
|
|
|
|
|
|
# dcc scripting interface common and default paths
|
|
PATH_O3DE_DEV = str(return_stub_dir(STUB_O3DE_DEV))
|
|
PATH_DCCSIG_PATH = str(return_stub_dir(STUB_O3DE_ROOT_DCCSI))
|
|
PATH_DCCSI_AZPY_PATH = str(return_stub_dir(STUB_O3DE_DCCSI_AZPY))
|
|
PATH_DCCSI_TOOLS_PATH = str('{0}\\{1}'.format(PATH_DCCSIG_PATH, TAG_DIR_DCCSI_TOOLS))
|
|
|
|
# logging into the cache
|
|
PATH_DCCSI_LOG_PATH = str('{O3DE_PROJECT_PATH}\\user\\log\{TAG_DCCSI_NICKNAME}')
|
|
|
|
# dev \ <build> \
|
|
STR_CONSTRUCT_O3DE_BUILD_PATH = str('{0}\\{1}')
|
|
PATH_O3DE_BUILD_PATH = str(STR_CONSTRUCT_O3DE_BUILD_PATH.format(PATH_O3DE_DEV,
|
|
TAG_DIR_O3DE_BUILD_FOLDER))
|
|
|
|
# ENVAR_QT_PLUGIN_PATH = TAG_QT_PLUGIN_PATH
|
|
STR_QTPLUGIN_DIR = str('{0}\\bin\\profile\\EditorPlugins')
|
|
STR_QTFORPYTHON_PATH = str('{0}\\Gems\\QtForPython\\3rdParty\\pyside2\\windows\\release')
|
|
STR_O3DE_BIN_PATH = str('{0}\\bin\\profile')
|
|
|
|
PATH_O3DE_BUILD_PATH = str('{0}\\{1}'.format(PATH_O3DE_DEV, TAG_DIR_O3DE_BUILD_FOLDER))
|
|
PATH_QTFORPYTHON_PATH = str(STR_QTFORPYTHON_PATH.format(PATH_O3DE_DEV))
|
|
PATH_QT_PLUGIN_PATH = str(STR_QTPLUGIN_DIR).format(PATH_O3DE_BUILD_PATH)
|
|
PATH_O3DE_BIN_PATH = str(STR_O3DE_BIN_PATH).format(PATH_O3DE_BUILD_PATH)
|
|
|
|
# py path string, parts, etc.
|
|
TAG_DEFAULT_PY = str('Launch_pyBASE.bat')
|
|
|
|
# config file stuff
|
|
FILENAME_DEFAULT_CONFIG = str('DCCSI_config.json')
|
|
|
|
# new o3de related paths
|
|
# os.path.expanduser("~") returns different values in py2.7 vs 3
|
|
PATH_USER_HOME = expanduser("~")
|
|
_LOGGER.debug('user home: {}'.format(PATH_USER_HOME))
|
|
|
|
# special case, make sure didn't return <user>\documents
|
|
parts = os.path.split(PATH_USER_HOME)
|
|
|
|
if str(parts[1].lower()) == 'documents':
|
|
PATH_USER_HOME = parts[0]
|
|
_LOGGER.debug('user home CORRECTED: {}'.format(PATH_USER_HOME))
|
|
|
|
STR_USER_O3DE_PATH = str('{home}\\{o3de}')
|
|
|
|
PATH_USER_O3DE = str(STR_USER_O3DE_PATH).format(home=PATH_USER_HOME,
|
|
o3de=TAG_O3DE_FOLDER)
|
|
|
|
TAG_DIR_REGISTRY = str('Registry')
|
|
STR_USER_O3DE_REGISTRY_PATH = str('{0}\\{1}')
|
|
PATH_USER_O3DE_REGISTRY = str(STR_USER_O3DE_REGISTRY_PATH).format(PATH_USER_O3DE, TAG_DIR_REGISTRY)
|
|
|
|
STR_USER_O3DE_BOOTSTRAP_PATH = str('{reg}\\{file}')
|
|
PATH_USER_O3DE_BOOTSTRAP = str(STR_USER_O3DE_BOOTSTRAP_PATH).format(reg=PATH_USER_O3DE_REGISTRY,
|
|
file=TAG_O3DE_BOOTSTRAP)
|
|
|
|
#python and site-dir
|
|
TAG_DCCSI_PY_VERSION_MAJOR = str(3)
|
|
TAG_DCCSI_PY_VERSION_MINOR = str(7)
|
|
TAG_DCCSI_PY_VERSION_RELEASE = str(10)
|
|
TAG_PYTHON_EXE = str('python.exe')
|
|
TAG_TOOLS_DIR = str('Tools\\Python')
|
|
TAG_PLATFORM = str('windows')
|
|
STR_CONSTRUCT_O3DE_PYTHON_INSTALL = str('{0}\\{1}\\{2}.{3}.{4}\\{5}')
|
|
PATH_DCCSI_PYTHON_PATH = str(STR_CONSTRUCT_O3DE_PYTHON_INSTALL.format(PATH_O3DE_DEV,
|
|
TAG_TOOLS_DIR,
|
|
TAG_DCCSI_PY_VERSION_MAJOR,
|
|
TAG_DCCSI_PY_VERSION_MINOR,
|
|
TAG_DCCSI_PY_VERSION_RELEASE,
|
|
TAG_PLATFORM))
|
|
PATH_DCCSI_PY_BASE = str('{0}\\{1}').format(PATH_DCCSI_PYTHON_PATH, TAG_PYTHON_EXE)
|
|
PATH_DCCSI_PY_DEFAULT = PATH_DCCSI_PY_BASE
|
|
|
|
# bootstrap site-packages by version
|
|
TAG_PY_MAJOR = str(sys.version_info.major) # future proof
|
|
TAG_PY_MINOR = str(sys.version_info.minor)
|
|
STR_DCCSI_PYTHON_LIB_PATH = str('{0}\\3rdParty\\Python\\Lib\\{1}.x\\{1}.{2}.x\\site-packages')
|
|
PATH_DCCSI_PYTHON_LIB_PATH = STR_DCCSI_PYTHON_LIB_PATH.format(PATH_DCCSIG_PATH,
|
|
TAG_PY_MAJOR,
|
|
TAG_PY_MINOR)
|
|
# default path strings (and afe associated attributes)
|
|
TAG_DEFAULT_WING_MAJOR_VER = str(7)
|
|
TAG_DEFAULT_WING_MINOR_VER = str(1)
|
|
TAG_WING_IDE = str('\\Wing IDE ') # old, pre 7
|
|
TAG_WING_PRO = str('\\Wing Pro ') # new 7+
|
|
STR_CONSTRUCT_WING_PATH = str('{progX86}{wing_tag}{major}.{minor}')
|
|
PATH_DEFAULT_WINGHOME = str('{0}{1}{2}.{3}'
|
|
''.format(PATH_PROGRAMFILES_X86,
|
|
TAG_WING_PRO,
|
|
TAG_DEFAULT_WING_MAJOR_VER,
|
|
TAG_DEFAULT_WING_MINOR_VER))
|
|
|
|
PATH_SAT_INSTALL_PATH = str('{0}\\{1}\\{2}\\{3}\\{4}'
|
|
''.format(PATH_PROGRAMFILES_X64,
|
|
'Allegorithmic',
|
|
'Substance Automation Toolkit',
|
|
'Python API',
|
|
'install'))
|
|
|
|
# -------------------------------------------------------------------------
|
|
|
|
|
|
###########################################################################
|
|
# Main Code Block, runs this script as main (testing)
|
|
# -------------------------------------------------------------------------
|
|
if __name__ == '__main__':
|
|
"""Run this file as a standalone script"""
|
|
|
|
# overide logger for standalone to be more verbose and lof to file
|
|
_LOGGER = azpy.initialize_logger(_MODULENAME,
|
|
log_to_file=_DCCSI_GDEBUG,
|
|
default_log_level=_DCCSI_LOGLEVEL)
|
|
|
|
# happy print
|
|
_LOGGER.info(STR_CROSSBAR)
|
|
_LOGGER.info('~ constants.py ... Running script as __main__')
|
|
_LOGGER.info(STR_CROSSBAR)
|
|
|
|
# this is just a debug developer convenience print (for testing acess)
|
|
import pkgutil
|
|
_LOGGER.info('Current working dir: {0}'.format(os.getcwd()))
|
|
search_path = ['.'] # set to None to see all modules importable from sys.path
|
|
all_modules = [x[1] for x in pkgutil.iter_modules(path=search_path)]
|
|
_LOGGER.info('All Available Modules in working dir: {0}'.format(all_modules))
|
|
|
|
# test anything procedurally generated
|
|
_LOGGER.info('Testing procedural env paths ...')
|
|
from pathlib import Path
|
|
|
|
_stash_dict = {}
|
|
_stash_dict['O3DE_DEV'] = Path(PATH_O3DE_DEV)
|
|
_stash_dict['DCCSIG_PATH'] = Path(PATH_DCCSIG_PATH)
|
|
_stash_dict['DCCSI_AZPY_PATH'] = Path(PATH_DCCSI_AZPY_PATH)
|
|
_stash_dict['DCCSI_TOOLS_PATH'] = Path(PATH_DCCSI_TOOLS_PATH)
|
|
_stash_dict['DCCSI_PYTHON_PATH'] = Path(PATH_DCCSI_PYTHON_PATH)
|
|
_stash_dict['DCCSI_PY_BASE'] = Path(PATH_DCCSI_PY_BASE)
|
|
_stash_dict['DCCSI_PYTHON_LIB_PATH'] = Path(PATH_DCCSI_PYTHON_LIB_PATH)
|
|
_stash_dict['O3DE_BUILD_PATH'] = Path(PATH_O3DE_BUILD_PATH)
|
|
_stash_dict['O3DE_BIN_PATH'] = Path(PATH_O3DE_BIN_PATH)
|
|
_stash_dict['QTFORPYTHON_PATH'] = Path(PATH_QTFORPYTHON_PATH)
|
|
_stash_dict['QT_PLUGIN_PATH'] = Path(PATH_QT_PLUGIN_PATH)
|
|
_stash_dict['SAT_INSTALL_PATH'] = Path(PATH_SAT_INSTALL_PATH)
|
|
_stash_dict['PATH_USER_O3DE_BOOTSTRAP'] = Path(PATH_USER_O3DE_BOOTSTRAP)
|
|
|
|
# ---------------------------------------------------------------------
|
|
# py 2 and 3 compatible iter
|
|
def get_items(dict_object):
|
|
for key in dict_object:
|
|
yield key, dict_object[key]
|
|
|
|
for key, value in get_items(_stash_dict):
|
|
# check if path exists
|
|
try:
|
|
value.exists()
|
|
_LOGGER.info('{0}: {1}'.format(key, value))
|
|
except Exception as e:
|
|
_LOGGER.warning('FAILED PATH: {}'.format(e))
|
|
|
|
# custom prompt
|
|
sys.ps1 = "[azpy]>>"
|