-
Notifications
You must be signed in to change notification settings - Fork 13
feat: Set right UE version to CondaPackages parameter #196
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: mainline
Are you sure you want to change the base?
Changes from all commits
df11260
74897c3
7c953f0
afaadf4
20490b4
f26c1f7
5ff9df6
4c1db60
d0dbf8e
effd7cc
dbd119e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -339,6 +339,11 @@ def _build_parameter_values(self) -> list: | |
if self._job_shared_settings: | ||
parameter_values += self._job_shared_settings.serialize() | ||
|
||
if not UnrealOpenJob.check_conda_package_version(parameter_values): | ||
raise exceptions.InvalidUEVersionInCondaPackageParameterNoUI( | ||
"CondaPackages Unreal Engine version mismatch" | ||
) | ||
|
||
return parameter_values | ||
|
||
def _check_parameters_consistency(self): | ||
|
@@ -500,6 +505,76 @@ def create_job_bundle(self): | |
|
||
return job_bundle_path | ||
|
||
@staticmethod | ||
def get_current_ue_version(): | ||
""" | ||
Get current Unreal Engine version in x.y format | ||
|
||
:return: Current Unreal Engine version | ||
:rtype: str | ||
""" | ||
|
||
current_ue_version = unreal.SystemLibrary.get_engine_version() | ||
logger.info(f"Current Unreal Engine version: {current_ue_version}") | ||
current_version_match = re.search(r"\b\d+\.\d+\b", current_ue_version) | ||
if not current_version_match: | ||
logger.warning(f"Could not parse current UE version: {current_ue_version}") | ||
raise exceptions.InvalidUEVersionInCondaPackageParameter( | ||
f"Could not parse current UE version: {current_ue_version}" | ||
) | ||
|
||
return current_version_match.group(0) | ||
|
||
@staticmethod | ||
def check_conda_package_version(parameter_values: list[dict[str, Any]]) -> bool: | ||
""" | ||
Check if the CondaPackages parameter contains Unreal Engine version and compare with current UE version. | ||
|
||
:return: True if version check passes or user confirms, False if user cancels | ||
:rtype: bool | ||
""" | ||
|
||
conda_packages_param = next( | ||
(p for p in parameter_values if p["name"] == OpenJobParameterNames.CONDA_PACKAGES), None | ||
) | ||
|
||
if not conda_packages_param: | ||
return True | ||
|
||
current_version = UnrealOpenJob.get_current_ue_version() | ||
|
||
conda_packages_value = conda_packages_param.get("value", "") | ||
if not conda_packages_value: | ||
conda_packages_param["value"] = f"unrealengine={current_version}" | ||
return True | ||
|
||
# Check for unrealengine=x.x pattern | ||
ue_version_match = re.search(r"unrealengine=(\d+\.\d+)", conda_packages_value) | ||
if not ue_version_match: | ||
conda_packages_param["value"] = ( | ||
f"unrealengine={current_version} " + conda_packages_value | ||
) | ||
return True | ||
|
||
template_ue_version = ue_version_match.group(1) | ||
logger.info(f"Template specifies Unreal Engine version: {template_ue_version}") | ||
|
||
# Compare versions | ||
if not template_ue_version == current_version: | ||
# Versions don't match | ||
result = unreal.EditorDialog.show_message( | ||
"Version Mismatch Warning", | ||
f"You are attempting to render a UE {current_version} project using UE {template_ue_version}. Do you wish to continue?", | ||
unreal.AppMsgType.YES_NO, | ||
unreal.AppReturnType.YES, | ||
) | ||
|
||
if result != unreal.AppReturnType.YES: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same feed back as the video recording above. No need to raise error here. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. After following the code, I can see why you wanted to throw an exception here now. The alternative is handling this in multiple places along the code path. I agree throwing an error here is the easier solution, please put that code back, I apologize for the bad suggestion. However, could you please rename the exception from |
||
return False | ||
|
||
logger.info("Unreal Engine versions match, continuing with submission") | ||
return True | ||
|
||
|
||
# Render Open Job | ||
class RenderUnrealOpenJob(UnrealOpenJob): | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
|
||
import sys | ||
from typing import Any | ||
|
||
from unittest.mock import MagicMock, patch | ||
|
||
unreal_mock = MagicMock() | ||
sys.modules["unreal"] = unreal_mock | ||
|
||
from deadline.unreal_submitter.unreal_open_job.unreal_open_job import ( # noqa: E402 | ||
UnrealOpenJob, | ||
) | ||
|
||
from deadline.unreal_submitter.unreal_open_job.unreal_open_job_entity import ( # noqa: E402 | ||
OpenJobParameterNames, | ||
) | ||
|
||
|
||
class TestCheckCondaPackageVersion: | ||
|
||
@patch( | ||
"deadline.unreal_submitter.unreal_open_job.unreal_open_job.unreal.SystemLibrary.get_engine_version" | ||
) | ||
def test_check_conda_package_version_no_conda_packages_param(self, get_engine_version_mock): | ||
# GIVEN | ||
get_engine_version_mock.return_value = "5.4.0" | ||
|
||
job_parameter_values: list[dict[str, Any]] = [] | ||
|
||
# WHEN | ||
assert UnrealOpenJob.check_conda_package_version(job_parameter_values) | ||
|
||
# THEN | ||
assert job_parameter_values == [] | ||
|
||
@patch( | ||
"deadline.unreal_submitter.unreal_open_job.unreal_open_job.unreal.SystemLibrary.get_engine_version" | ||
) | ||
def test_check_conda_package_version_conda_packages_no_value(self, get_engine_version_mock): | ||
# GIVEN | ||
get_engine_version_mock.return_value = "5.3.0" | ||
|
||
job_parameter_values = [dict(name=OpenJobParameterNames.CONDA_PACKAGES, value="")] | ||
|
||
# WHEN | ||
assert UnrealOpenJob.check_conda_package_version(job_parameter_values) | ||
|
||
# THEN | ||
assert job_parameter_values[0].get("value") == "unrealengine=5.3" | ||
|
||
@patch( | ||
"deadline.unreal_submitter.unreal_open_job.unreal_open_job.unreal.SystemLibrary.get_engine_version" | ||
) | ||
def test_check_conda_package_version_no_unrealengine_pattern(self, get_engine_version_mock): | ||
# GIVEN | ||
get_engine_version_mock.return_value = "5.3.0" | ||
|
||
job_parameter_values = [ | ||
dict(name=OpenJobParameterNames.CONDA_PACKAGES, value="somepackage=1.0") | ||
] | ||
|
||
# WHEN | ||
assert UnrealOpenJob.check_conda_package_version(job_parameter_values) | ||
|
||
# THEN | ||
assert job_parameter_values[0].get("value") == "unrealengine=5.3 somepackage=1.0" | ||
|
||
@patch( | ||
"deadline.unreal_submitter.unreal_open_job.unreal_open_job.unreal.SystemLibrary.get_engine_version" | ||
) | ||
def test_check_conda_package_version_versions_match(self, get_engine_version_mock): | ||
# GIVEN | ||
get_engine_version_mock.return_value = "5.3" | ||
|
||
job_parameter_values = [ | ||
dict(name=OpenJobParameterNames.CONDA_PACKAGES, value="unrealengine=5.3") | ||
] | ||
|
||
# WHEN | ||
assert UnrealOpenJob.check_conda_package_version(job_parameter_values) | ||
|
||
@patch( | ||
"deadline.unreal_submitter.unreal_open_job.unreal_open_job.unreal.SystemLibrary.get_engine_version" | ||
) | ||
def test_check_conda_package_version_versions_mismatch(self, get_engine_version_mock): | ||
# GIVEN | ||
get_engine_version_mock.return_value = "5.4" | ||
|
||
job_parameter_values = [ | ||
dict(name=OpenJobParameterNames.CONDA_PACKAGES, value="unrealengine=5.3") | ||
] | ||
|
||
# WHEN | ||
assert not UnrealOpenJob.check_conda_package_version(job_parameter_values) | ||
|
||
@patch( | ||
"deadline.unreal_submitter.unreal_open_job.unreal_open_job.unreal.SystemLibrary.get_engine_version" | ||
) | ||
def test_check_conda_package_version_minor_version_difference(self, get_engine_version_mock): | ||
# GIVEN | ||
get_engine_version_mock.return_value = "5.3.2" | ||
|
||
job_parameter_values = [ | ||
dict(name=OpenJobParameterNames.CONDA_PACKAGES, value="unrealengine=5.3") | ||
] | ||
|
||
# WHEN | ||
assert UnrealOpenJob.check_conda_package_version(job_parameter_values) |
Uh oh!
There was an error while loading. Please reload this page.