[default_3rdparty] add 3rd party to engine registration + specific path registration fixes

main
scottr 5 years ago
parent 3634277317
commit 85e6d06c2c

@ -383,7 +383,7 @@ namespace O3DE::ProjectManager
engineInfo.m_defaultProjectsFolder = Py_To_String(o3deData["default_projects_folder"]); engineInfo.m_defaultProjectsFolder = Py_To_String(o3deData["default_projects_folder"]);
engineInfo.m_defaultRestrictedFolder = Py_To_String(o3deData["default_restricted_folder"]); engineInfo.m_defaultRestrictedFolder = Py_To_String(o3deData["default_restricted_folder"]);
engineInfo.m_defaultTemplatesFolder = Py_To_String(o3deData["default_templates_folder"]); engineInfo.m_defaultTemplatesFolder = Py_To_String(o3deData["default_templates_folder"]);
engineInfo.m_thirdPartyPath = Py_To_String_Optional(o3deData,"third_party_path",""); engineInfo.m_thirdPartyPath = Py_To_String(o3deData["default_third_party_folder"]);
} }
auto engineData = m_manifest.attr("get_engine_json_data")(pybind11::none(), enginePath); auto engineData = m_manifest.attr("get_engine_json_data")(pybind11::none(), enginePath);
@ -420,6 +420,7 @@ namespace O3DE::ProjectManager
pybind11::str defaultProjectsFolder = engineInfo.m_defaultProjectsFolder.toStdString(); pybind11::str defaultProjectsFolder = engineInfo.m_defaultProjectsFolder.toStdString();
pybind11::str defaultGemsFolder = engineInfo.m_defaultGemsFolder.toStdString(); pybind11::str defaultGemsFolder = engineInfo.m_defaultGemsFolder.toStdString();
pybind11::str defaultTemplatesFolder = engineInfo.m_defaultTemplatesFolder.toStdString(); pybind11::str defaultTemplatesFolder = engineInfo.m_defaultTemplatesFolder.toStdString();
pybind11::str defaultThridPartyFolder = engineInfo.m_thirdPartyPath.toStdString();
auto registrationResult = m_register.attr("register")( auto registrationResult = m_register.attr("register")(
enginePath, // engine_path enginePath, // engine_path
@ -432,28 +433,15 @@ namespace O3DE::ProjectManager
pybind11::none(), // default_engines_folder pybind11::none(), // default_engines_folder
defaultProjectsFolder, defaultProjectsFolder,
defaultGemsFolder, defaultGemsFolder,
defaultTemplatesFolder defaultTemplatesFolder,
pybind11::none(), // default_restricted_folder
defaultThridPartyFolder
); );
if (registrationResult.cast<int>() != 0) if (registrationResult.cast<int>() != 0)
{ {
result = false; result = false;
} }
auto manifest = m_manifest.attr("load_o3de_manifest")();
if (pybind11::isinstance<pybind11::dict>(manifest))
{
try
{
manifest["third_party_path"] = engineInfo.m_thirdPartyPath.toStdString();
m_manifest.attr("save_o3de_manifest")(manifest);
}
catch ([[maybe_unused]] const std::exception& e)
{
AZ_Warning("PythonBindings", false, "Failed to set third party path.");
}
}
}); });
return result; return result;

@ -97,6 +97,12 @@ def get_o3de_logs_folder() -> pathlib.Path:
return logs_folder return logs_folder
def get_o3de_third_party_folder() -> pathlib.Path:
third_party_folder = get_o3de_folder() / '3rdParty'
third_party_folder.mkdir(parents=True, exist_ok=True)
return third_party_folder
# o3de manifest file methods # o3de manifest file methods
def get_o3de_manifest() -> pathlib.Path: def get_o3de_manifest() -> pathlib.Path:
manifest_path = get_o3de_folder() / 'o3de_manifest.json' manifest_path = get_o3de_folder() / 'o3de_manifest.json'
@ -113,6 +119,7 @@ def get_o3de_manifest() -> pathlib.Path:
default_gems_folder = get_o3de_gems_folder() default_gems_folder = get_o3de_gems_folder()
default_templates_folder = get_o3de_templates_folder() default_templates_folder = get_o3de_templates_folder()
default_restricted_folder = get_o3de_restricted_folder() default_restricted_folder = get_o3de_restricted_folder()
default_third_party_folder = get_o3de_third_party_folder()
default_projects_restricted_folder = default_projects_folder / 'Restricted' default_projects_restricted_folder = default_projects_folder / 'Restricted'
default_projects_restricted_folder.mkdir(parents=True, exist_ok=True) default_projects_restricted_folder.mkdir(parents=True, exist_ok=True)
@ -129,6 +136,7 @@ def get_o3de_manifest() -> pathlib.Path:
json_data.update({'default_gems_folder': default_gems_folder.as_posix()}) json_data.update({'default_gems_folder': default_gems_folder.as_posix()})
json_data.update({'default_templates_folder': default_templates_folder.as_posix()}) json_data.update({'default_templates_folder': default_templates_folder.as_posix()})
json_data.update({'default_restricted_folder': default_restricted_folder.as_posix()}) json_data.update({'default_restricted_folder': default_restricted_folder.as_posix()})
json_data.update({'default_third_party_folder': default_third_party_folder.as_posix()})
json_data.update({'projects': []}) json_data.update({'projects': []})
json_data.update({'external_subdirectories': []}) json_data.update({'external_subdirectories': []})

@ -486,7 +486,7 @@ def register_default_engines_folder(json_data: dict,
remove: bool = False) -> int: remove: bool = False) -> int:
return register_default_o3de_object_folder(json_data, return register_default_o3de_object_folder(json_data,
manifest.get_o3de_engines_folder() if remove else default_engines_folder, manifest.get_o3de_engines_folder() if remove else default_engines_folder,
'default_engines_folder', remove) 'default_engines_folder')
def register_default_projects_folder(json_data: dict, def register_default_projects_folder(json_data: dict,
@ -494,7 +494,7 @@ def register_default_projects_folder(json_data: dict,
remove: bool = False) -> int: remove: bool = False) -> int:
return register_default_o3de_object_folder(json_data, return register_default_o3de_object_folder(json_data,
manifest.get_o3de_projects_folder() if remove else default_projects_folder, manifest.get_o3de_projects_folder() if remove else default_projects_folder,
'default_projects_folder', remove) 'default_projects_folder')
def register_default_gems_folder(json_data: dict, def register_default_gems_folder(json_data: dict,
@ -502,7 +502,7 @@ def register_default_gems_folder(json_data: dict,
remove: bool = False) -> int: remove: bool = False) -> int:
return register_default_o3de_object_folder(json_data, return register_default_o3de_object_folder(json_data,
manifest.get_o3de_gems_folder() if remove else default_gems_folder, manifest.get_o3de_gems_folder() if remove else default_gems_folder,
'default_gems_folder', remove) 'default_gems_folder')
def register_default_templates_folder(json_data: dict, def register_default_templates_folder(json_data: dict,
@ -510,16 +510,22 @@ def register_default_templates_folder(json_data: dict,
remove: bool = False) -> int: remove: bool = False) -> int:
return register_default_o3de_object_folder(json_data, return register_default_o3de_object_folder(json_data,
manifest.get_o3de_templates_folder() if remove else default_templates_folder, manifest.get_o3de_templates_folder() if remove else default_templates_folder,
'default_templates_folder', remove) 'default_templates_folder')
def register_default_restricted_folder(json_data: dict, def register_default_restricted_folder(json_data: dict,
default_restricted_folder: str or pathlib.Path, default_restricted_folder: str or pathlib.Path,
reset_to_default: bool = False) -> int: remove: bool = False) -> int:
return register_default_o3de_object_folder(json_data, return register_default_o3de_object_folder(json_data,
manifest.get_o3de_restricted_folder() if remove else default_restricted_folder, manifest.get_o3de_restricted_folder() if remove else default_restricted_folder,
'default_restricted_folder', remove) 'default_restricted_folder')
def register_default_third_party_folder(json_data: dict,
default_third_party_folder: str or pathlib.Path,
remove: bool = False) -> int:
return register_default_o3de_object_folder(json_data,
manifest.get_o3de_third_party_folder() if remove else default_third_party_folder,
'default_third_party_folder')
def register(engine_path: str or pathlib.Path = None, def register(engine_path: str or pathlib.Path = None,
project_path: str or pathlib.Path = None, project_path: str or pathlib.Path = None,
@ -533,6 +539,7 @@ def register(engine_path: str or pathlib.Path = None,
default_gems_folder: str or pathlib.Path = None, default_gems_folder: str or pathlib.Path = None,
default_templates_folder: str or pathlib.Path = None, default_templates_folder: str or pathlib.Path = None,
default_restricted_folder: str or pathlib.Path = None, default_restricted_folder: str or pathlib.Path = None,
default_third_party_folder: str or pathlib.Path = None,
external_subdir_engine_path: pathlib.Path = None, external_subdir_engine_path: pathlib.Path = None,
external_subdir_project_path: pathlib.Path = None, external_subdir_project_path: pathlib.Path = None,
remove: bool = False, remove: bool = False,
@ -553,6 +560,7 @@ def register(engine_path: str or pathlib.Path = None,
:param default_gems_folder: default gems folder :param default_gems_folder: default gems folder
:param default_templates_folder: default templates folder :param default_templates_folder: default templates folder
:param default_restricted_folder: default restricted code folder :param default_restricted_folder: default restricted code folder
:param default_third_party_folder: default 3rd party cache folder
:param external_subdir_engine_path: Path to the engine to use when registering an external subdirectory. :param external_subdir_engine_path: Path to the engine to use when registering an external subdirectory.
The registration occurs in the engine.json file in this case The registration occurs in the engine.json file in this case
:param external_subdir_engine_path: Path to the project to use when registering an external subdirectory. :param external_subdir_engine_path: Path to the project to use when registering an external subdirectory.
@ -620,6 +628,9 @@ def register(engine_path: str or pathlib.Path = None,
elif isinstance(default_restricted_folder, str) or isinstance(default_restricted_folder, pathlib.PurePath): elif isinstance(default_restricted_folder, str) or isinstance(default_restricted_folder, pathlib.PurePath):
result = register_default_restricted_folder(json_data, default_restricted_folder, remove) result = register_default_restricted_folder(json_data, default_restricted_folder, remove)
elif isinstance(default_third_party_folder, str) or isinstance(default_third_party_folder, pathlib.PurePath):
result = register_default_third_party_folder(json_data, default_third_party_folder, remove)
# engine is done LAST # engine is done LAST
# Now that everything that could have an engine context is done, if the engine is supplied that means this is # Now that everything that could have an engine context is done, if the engine is supplied that means this is
# registering the engine itself # registering the engine itself
@ -712,6 +723,15 @@ def remove_invalid_o3de_objects() -> None:
f" Set default {default_restricted_folder}") f" Set default {default_restricted_folder}")
register(default_restricted_folder=default_restricted_folder.as_posix()) register(default_restricted_folder=default_restricted_folder.as_posix())
default_third_party_folder = pathlib.Path(json_data['default_third_party_folder']).resolve()
if not default_third_party_folder.is_dir():
default_third_party_folder = manifest.get_o3de_folder() / '3rdParty'
default_third_party_folder.mkdir(parents=True, exist_ok=True)
logger.warn(
f"Default 3rd Party folder {default_third_party_folder} is invalid."
f" Set default {default_third_party_folder}")
register(default_third_party_folder=default_third_party_folder.as_posix())
def _run_register(args: argparse) -> int: def _run_register(args: argparse) -> int:
if args.override_home_folder: if args.override_home_folder:
@ -751,6 +771,7 @@ def _run_register(args: argparse) -> int:
default_gems_folder=args.default_gems_folder, default_gems_folder=args.default_gems_folder,
default_templates_folder=args.default_templates_folder, default_templates_folder=args.default_templates_folder,
default_restricted_folder=args.default_restricted_folder, default_restricted_folder=args.default_restricted_folder,
default_third_party_folder=args.default_third_party_folder,
external_subdir_engine_path=args.external_subdirectory_engine_path, external_subdir_engine_path=args.external_subdirectory_engine_path,
external_subdir_project_path=args.external_subdirectory_project_path, external_subdir_project_path=args.external_subdirectory_project_path,
remove=args.remove, remove=args.remove,
@ -804,6 +825,8 @@ def add_parser_args(parser):
help='The default templates folder to register/remove.') help='The default templates folder to register/remove.')
group.add_argument('-drf', '--default-restricted-folder', type=str, required=False, group.add_argument('-drf', '--default-restricted-folder', type=str, required=False,
help='The default restricted folder to register/remove.') help='The default restricted folder to register/remove.')
group.add_argument('-dtpf', '--default-third-party-folder', type=str, required=False,
help='The default 3rd Party folder to register/remove.')
group.add_argument('-u', '--update', action='store_true', required=False, group.add_argument('-u', '--update', action='store_true', required=False,
default=False, default=False,
help='Refresh the repo cache.') help='Refresh the repo cache.')

Loading…
Cancel
Save