Refactor DCCsi to work better with O3DE changes (#4226)
* moving files in refactor/re-org Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * dev env refactor/re-org Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * moving/re-org so we can deprate the SDK nomiclature Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * moving/re-org so we can deprate the SDK nomiclature Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * Refactoring env so I can replace SDK with Tools folder Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * re-org and prune, from SKD to Tools Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * Removing old .bat files from SDK Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * updated how to retreive PYTHONHOME Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * Can't use/set PYTHONHOME with DCC Tools Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * small refactor Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * repaired a missed typo (causes error) Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * Added missing EntityId.h include to FocusModeInterface.h Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * refactor additional LY to O3DE tags Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * Some design scaffold file stubs Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * stubbing in scaffold file pattern Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * Removal of corrupted prefabs Signed-off-by: Benjamin Black <benblac@amazon.com> * refactored config_utils to maintain py2.7 support for maya 2020 Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * refactored config_utils to maintain py2.7 support for maya 2020 Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * pruning and cleanup Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * .env is for local dev overrides Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * .env is for local dev overrides Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * clean up init and logging patterns Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * Core refactoring, config.py functional standalone Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * cleaned up some bad logging, fixed up boostrap Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * fixed validation errors Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * fix logging issue, tiddy up Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * tiddy up maya for .bat bootstraping and launch Signed-off-by: Jonny Gallowy <gallowj@amazon.com> * name stub, fix validation Signed-off-by: Jonny Gallowy <gallowj@amazon.com> Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Co-authored-by: Benjamin Black <benblac@amazon.com>
This commit is contained in:
+128
-52
@@ -7,9 +7,9 @@
|
||||
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
#
|
||||
#
|
||||
# -- This line is 75 characters -------------------------------------------
|
||||
# -------------------------------------------------------------------------
|
||||
"""This module is for use in boostrapping the DccScriptingInterface Gem
|
||||
with Lumberyard. Note: this boostrap is only designed fo be py3 compatible.
|
||||
with O3DE. Note: this boostrap is only designed fo be py3 compatible.
|
||||
If you need DCCsi access in py27 (Autodesk Maya for instance) you may need
|
||||
to implement your own boostrapper module. Currently this is boostrapped
|
||||
from add_dccsi.py, as a temporty measure related to this Jira:
|
||||
@@ -24,40 +24,64 @@ import logging as _logging
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
_O3DE_RUNNING=None
|
||||
try:
|
||||
import azlmbr
|
||||
_O3DE_RUNNING=True
|
||||
except:
|
||||
_O3DE_RUNNING=False
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# we don't use dynaconf setting here as we might not yet have access
|
||||
# to that site-dir.
|
||||
|
||||
_MODULE = 'DCCsi.bootstrap'
|
||||
_MODULENAME = __name__
|
||||
if _MODULENAME is '__main__':
|
||||
_MODULENAME = 'O3DE.DCCsi.bootstrap'
|
||||
|
||||
# set up module logging
|
||||
for handler in _logging.root.handlers[:]:
|
||||
_logging.root.removeHandler(handler)
|
||||
_LOGGER = _logging.getLogger(_MODULENAME)
|
||||
|
||||
# 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)
|
||||
_DCCSI_PATH = os.path.normpath(os.path.join(_MODULE_PATH, '../../..'))
|
||||
_DCCSI_PATH = os.getenv('DCCSI_PATH', _DCCSI_PATH)
|
||||
site.addsitedir(_DCCSI_PATH)
|
||||
|
||||
# we can get basic access to the DCCsi.azpy api now
|
||||
import azpy
|
||||
# now we have azpy api access
|
||||
from azpy.env_bool import env_bool
|
||||
from azpy.constants import ENVAR_DCCSI_GDEBUG
|
||||
from azpy.constants import ENVAR_DCCSI_DEV_MODE
|
||||
from azpy.constants import ENVAR_DCCSI_LOGLEVEL
|
||||
from azpy.constants import FRMT_LOG_LONG
|
||||
|
||||
# early attach WingIDE debugger (can refactor to include other IDEs later)
|
||||
while 0: # flag on to attemp to connect wingIDE debugger
|
||||
from azpy.env_bool import env_bool
|
||||
if not env_bool('DCCSI_DEBUGGER_ATTACHED', False):
|
||||
# if not already attached lets do it here
|
||||
from azpy.test.entry_test import connect_wing
|
||||
foo = connect_wing()
|
||||
# set up global space, logging etc.
|
||||
# set these true if you want them set globally for debugging
|
||||
_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)
|
||||
|
||||
_logging.basicConfig(format=FRMT_LOG_LONG, level=_DCCSI_LOGLEVEL)
|
||||
_LOGGER.debug('Initializing: {0}.'.format({_MODULENAME}))
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# settings.setenv() # doing this will add the additional DYNACONF_ envars
|
||||
def get_dccsi_config(DCCSIG_PATH=_DCCSIG_PATH):
|
||||
# _settings.setenv() # doing this will add the additional DYNACONF_ envars
|
||||
def get_dccsi_config(DCCSI_PATH=_DCCSI_PATH):
|
||||
"""Convenience method to set and retreive settings directly from module."""
|
||||
|
||||
# we can go ahead and just make sure the the DCCsi env is set
|
||||
# config is SO generic this ensures we are importing a specific one
|
||||
_spec_dccsi_config = importlib.util.spec_from_file_location("dccsi.config",
|
||||
Path(DCCSIG_PATH,
|
||||
# _config is SO generic this ensures we are importing a specific one
|
||||
_spec_dccsi_config = importlib.util.spec_from_file_location("dccsi._config",
|
||||
Path(DCCSI_PATH,
|
||||
"config.py"))
|
||||
_dccsi_config = importlib.util.module_from_spec(_spec_dccsi_config)
|
||||
_spec_dccsi_config.loader.exec_module(_dccsi_config)
|
||||
@@ -65,9 +89,12 @@ def get_dccsi_config(DCCSIG_PATH=_DCCSIG_PATH):
|
||||
return _dccsi_config
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
# set and retreive the base settings on import
|
||||
config = get_dccsi_config()
|
||||
settings = config.get_config_settings()
|
||||
# set and retreive the base env context/_settings on import
|
||||
_config = get_dccsi_config()
|
||||
_settings = _config.get_config_settings()
|
||||
|
||||
if _DCCSI_DEV_MODE:
|
||||
_config.attach_debugger() # attempts to start debugger
|
||||
# done with basic setup
|
||||
# --- END -----------------------------------------------------------------
|
||||
|
||||
@@ -77,50 +104,99 @@ settings = config.get_config_settings()
|
||||
# -------------------------------------------------------------------------
|
||||
if __name__ == '__main__':
|
||||
"""Run this file as main"""
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
_O3DE_RUNNING=None
|
||||
try:
|
||||
import azlmbr
|
||||
_O3DE_RUNNING=True
|
||||
except:
|
||||
_O3DE_RUNNING=False
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
_G_DEBUG = False
|
||||
_G_TEST_PYSIDE = False
|
||||
_MODULENAME = __name__
|
||||
if _MODULENAME is '__main__':
|
||||
_MODULENAME = 'O3DE.DCCsi.bootstrap'
|
||||
|
||||
from azpy.constants import STR_CROSSBAR
|
||||
|
||||
# module internal debugging flags
|
||||
while 0: # temp internal debug flag
|
||||
_DCCSI_GDEBUG = True
|
||||
break
|
||||
|
||||
# overide logger for standalone to be more verbose and log to file
|
||||
import azpy
|
||||
_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)
|
||||
|
||||
# parse the command line args
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser(
|
||||
description='O3DE DCCsi Boostrap (Test)',
|
||||
epilog="Will externally test the DCCsi boostrap")
|
||||
|
||||
_config = get_dccsi_config()
|
||||
_settings = config.get_config_settings()
|
||||
|
||||
_log_level = int(_settings.DCCSI_LOGLEVEL)
|
||||
if _G_DEBUG:
|
||||
_log_level = int(10) # force debug level
|
||||
_LOGGER = azpy.initialize_logger(_MODULE,
|
||||
log_to_file=True,
|
||||
default_log_level=_log_level)
|
||||
_settings = _config.get_config_settings(enable_o3de_python=True,
|
||||
enable_o3de_pyside2=True)
|
||||
parser.add_argument('-gd', '--global-debug',
|
||||
type=bool,
|
||||
required=False,
|
||||
help='Enables global debug flag.')
|
||||
parser.add_argument('-dm', '--developer-mode',
|
||||
type=bool,
|
||||
required=False,
|
||||
help='Enables dev mode for early auto attaching debugger.')
|
||||
parser.add_argument('-tp', '--test-pyside2',
|
||||
type=bool,
|
||||
required=False,
|
||||
help='Runs Qt/PySide2 tests and reports.')
|
||||
args = parser.parse_args()
|
||||
|
||||
# we can now grab values from the DCCsi.config.py dynamic env settings
|
||||
# the rest of this block is basic debug testing the dynamic settings at boot
|
||||
_LOGGER.info(f'Running module: {_MODULE}')
|
||||
_LOGGER.info(f'DCCSIG_PATH: {_settings.DCCSIG_PATH}')
|
||||
_LOGGER.info(f'DCCSI_G_DEBUG: {_settings.DCCSI_GDEBUG}')
|
||||
_LOGGER.info(f'DCCSI_DEV_MODE: {_settings.DCCSI_DEV_MODE}')
|
||||
|
||||
_LOGGER.info(f'OS_FOLDER: {_settings.OS_FOLDER}')
|
||||
_LOGGER.info(f'LY_PROJECT: {_settings.LY_PROJECT}')
|
||||
_LOGGER.info(f'LY_PROJECT_PATH: {_settings.LY_PROJECT_PATH}')
|
||||
_LOGGER.info(f'LY_DEV: {_settings.LY_DEV}')
|
||||
_LOGGER.info(f'LY_BUILD_PATH: {_settings.LY_BUILD_PATH}')
|
||||
_LOGGER.info(f'LY_BIN_PATH: {_settings.LY_BIN_PATH}')
|
||||
# easy overrides
|
||||
if args.global_debug:
|
||||
_DCCSI_GDEBUG = True
|
||||
if args.developer_mode:
|
||||
_DCCSI_DEV_MODE = True
|
||||
_config.attach_debugger() # attempts to start debugger
|
||||
|
||||
_LOGGER.info(f'DCCSIG_PATH: {_settings.DCCSIG_PATH}')
|
||||
_LOGGER.info(f'DCCSI_PYTHON_LIB_PATH: {_settings.DCCSI_PYTHON_LIB_PATH}')
|
||||
_LOGGER.info(f'DDCCSI_PY_BASE: {_settings.DDCCSI_PY_BASE}')
|
||||
if _DCCSI_GDEBUG:
|
||||
_LOGGER.info(f'DCCSI_PATH: {_settings.DCCSI_PATH}')
|
||||
_LOGGER.info(f'DCCSI_G_DEBUG: {_settings.DCCSI_GDEBUG}')
|
||||
_LOGGER.info(f'DCCSI_DEV_MODE: {_settings.DCCSI_DEV_MODE}')
|
||||
|
||||
_LOGGER.info(f'DCCSI_OS_FOLDER: {_settings.DCCSI_OS_FOLDER}')
|
||||
_LOGGER.info(f'O3DE_PROJECT: {_settings.O3DE_PROJECT}')
|
||||
_LOGGER.info(f'O3DE_PROJECT_PATH: {_settings.O3DE_PROJECT_PATH}')
|
||||
_LOGGER.info(f'O3DE_DEV: {_settings.O3DE_DEV}')
|
||||
_LOGGER.info(f'O3DE_BUILD_PATH: {_settings.O3DE_BUILD_PATH}')
|
||||
_LOGGER.info(f'O3DE_BIN_PATH: {_settings.O3DE_BIN_PATH}')
|
||||
|
||||
_LOGGER.info(f'DCCSI_PATH: {_settings.DCCSI_PATH}')
|
||||
_LOGGER.info(f'DCCSI_PYTHON_LIB_PATH: {_settings.DCCSI_PYTHON_LIB_PATH}')
|
||||
_LOGGER.info(f'DCCSI_PY_BASE: {_settings.DCCSI_PY_BASE}')
|
||||
|
||||
if _G_TEST_PYSIDE:
|
||||
if _DCCSI_GDEBUG or args.test_pyside2:
|
||||
try:
|
||||
import PySide2
|
||||
except:
|
||||
# set up Qt/PySide2 access and test
|
||||
_settings = _config.get_config_settings(setup_ly_pyside=True)
|
||||
_settings = _config.get_config_settings(enable_o3de_pyside2=True)
|
||||
import PySide2
|
||||
|
||||
_LOGGER.info(f'PySide2: {PySide2}')
|
||||
_LOGGER.info(f'LY_BIN_PATH: {_settings.LY_BIN_PATH}')
|
||||
_LOGGER.info(f'O3DE_BIN_PATH: {_settings.O3DE_BIN_PATH}')
|
||||
_LOGGER.info(f'QT_PLUGIN_PATH: {_settings.QT_PLUGIN_PATH}')
|
||||
_LOGGER.info(f'QT_QPA_PLATFORM_PLUGIN_PATH: {_settings.QT_QPA_PLATFORM_PLUGIN_PATH}')
|
||||
|
||||
_config.test_pyside2()
|
||||
|
||||
if not _O3DE_RUNNING:
|
||||
# return
|
||||
sys.exit()
|
||||
# --- END -----------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user