def validate_request_glean()

in glam/api/views.py [0:0]


def validate_request_glean(**kwargs):
    REQUIRED_QUERY_PARAMETERS = [
        "aggregationLevel",
        "app_id",
        "ping_type",
        "probe",
        "product",
    ]
    if any([k not in kwargs.keys() for k in REQUIRED_QUERY_PARAMETERS]):
        # Figure out which query parameter is missing.
        missing = set(REQUIRED_QUERY_PARAMETERS) - set(kwargs.keys())
        raise ValidationError(
            "Missing required query parameters: {}".format(", ".join(sorted(missing)))
        )

    validated_data = {}
    validated_data["channel"] = kwargs.get("app_id")
    validated_data["product"] = kwargs.get("product")
    validated_data["aggregation_level"] = kwargs.get("aggregationLevel")
    validated_data["probe"] = kwargs.get("probe")
    validated_data["os"] = kwargs.get("os", "*")
    validated_data["num_versions"] = kwargs.get("versions", 3)
    validated_data["ping_type"] = kwargs.get("ping_type")

    if validated_data["channel"] not in ["beta", "nightly", "release"]:
        raise ValidationError("Invalid channel: {}".format(validated_data["channel"]))

    if validated_data["product"] not in ["fog", "fenix"]:
        raise ValidationError("Invalid product: {}".format(validated_data["product"]))

    if validated_data["aggregation_level"] not in ["version", "build_id"]:
        raise ValidationError(
            "Invalid aggregation level: {}".format(validated_data["aggregation_level"])
        )

    if validated_data["os"] not in [
        "Windows",
        "Darwin",
        "Mac",
        "Linux",
        "*",
        "Android",
    ]:
        raise ValidationError("Invalid os: {}".format(validated_data["os"]))

    if not isinstance(validated_data["num_versions"], int):
        raise ValidationError(
            "Invalid versions: {}".format(validated_data["num_versions"])
        )

    return validated_data