def _validate_versions()

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