in experimenter/experimenter/experiments/api/v5/serializers.py [0:0]
def _validate_versions(self, data):
min_version = data.get("firefox_min_version", "")
max_version = data.get("firefox_max_version", "")
is_rollout = data.get("is_rollout")
application = data.get("application")
if NimbusExperiment.Application.is_web(application):
return data
if min_version == "":
raise serializers.ValidationError(
{
"firefox_min_version": [
NimbusExperiment.ERROR_FIREFOX_VERSION_MIN_96
],
}
)
parsed_min_version = NimbusExperiment.Version.parse(min_version)
if parsed_min_version < NimbusExperiment.Version.parse(
NimbusExperiment.MIN_REQUIRED_VERSION
):
raise serializers.ValidationError(
{
"firefox_min_version": [
NimbusExperiment.ERROR_FIREFOX_VERSION_MIN_96
],
}
)
if rollout_live_resize_min_app_version := (
NimbusConstants.ROLLOUT_LIVE_RESIZE_MIN_SUPPORTED_VERSION.get(application)
):
parsed_min_app_version = NimbusExperiment.Version.parse(
rollout_live_resize_min_app_version
)
if is_rollout and parsed_min_version < parsed_min_app_version:
self.warnings["firefox_min_version"] = [
NimbusConstants.ERROR_ROLLOUT_VERSION.format(
application=NimbusExperiment.Application(application).label,
version=parsed_min_app_version,
)
]
excluded_experiments = data.get("excluded_experiments")
required_experiments = data.get("required_experiments")
if (excluded_experiments or required_experiments) and (
parsed_min_version
< NimbusExperiment.Version.parse(
NimbusExperiment.EXCLUDED_REQUIRED_MIN_VERSION
)
):
raise serializers.ValidationError(
{
"firefox_min_version": [
NimbusExperiment.ERROR_EXCLUDED_REQUIRED_MIN_VERSION,
],
}
)
if (
min_version != ""
and max_version != ""
and (parsed_min_version > NimbusExperiment.Version.parse(max_version))
):
raise serializers.ValidationError(
{
"firefox_min_version": [NimbusExperiment.ERROR_FIREFOX_VERSION_MIN],
"firefox_max_version": [NimbusExperiment.ERROR_FIREFOX_VERSION_MAX],
}
)
return data