Module adcp.compat.reporting_version

Release gates for reporting controls added in AdCP 3.2 beta.6.

Functions

def assert_reporting_request_supported(tool_name: str, params: Any) ‑> None
Expand source code
def assert_reporting_request_supported(tool_name: str, params: Any) -> None:
    """Fail before transport when the target predates a used reporting feature."""
    payload = _record(params)
    target_version = payload.get("adcp_version")
    issue = beta6_reporting_request_issue(tool_name, payload)
    if (
        issue is None
        or not isinstance(target_version, str)
        or is_adcp_version_at_least(target_version, "3.2.0-beta.6")
    ):
        return
    raise ADCPFeatureUnsupportedError(
        [
            f"{issue.detail} at {issue.field} requires AdCP 3.2-beta.6 or newer "
            f"(target is {target_version}); no request was sent"
        ]
    )

Fail before transport when the target predates a used reporting feature.

def beta6_delivery_request_issue(params: Any) ‑> Beta6ReportingIssue | None
Expand source code
def beta6_delivery_request_issue(params: Any) -> Beta6ReportingIssue | None:
    """Return the first beta.6-only delivery request feature in ``params``."""
    payload = _record(params)
    if "requested_metrics" in payload:
        return Beta6ReportingIssue("requested_metrics", "requested delivery metrics")

    for dimension, value in _record(payload.get("reporting_dimensions")).items():
        if dimension in _BETA6_REPORTING_DIMENSIONS:
            return Beta6ReportingIssue(
                f"reporting_dimensions.{dimension}",
                f"the {dimension} delivery breakdown",
            )
        settings = _record(value)
        if "sort_direction" in settings:
            return Beta6ReportingIssue(
                f"reporting_dimensions.{dimension}.sort_direction",
                "delivery sort direction",
            )
        if settings.get("sort_by") in _BETA6_SORT_METRICS:
            metric = settings["sort_by"]
            return Beta6ReportingIssue(
                f"reporting_dimensions.{dimension}.sort_by",
                f"delivery sort metric {metric}",
            )
    return None

Return the first beta.6-only delivery request feature in params.

def beta6_reporting_request_issue(tool_name: str, params: Any) ‑> Beta6ReportingIssue | None
Expand source code
def beta6_reporting_request_issue(tool_name: str, params: Any) -> Beta6ReportingIssue | None:
    """Return the first beta.6-only reporting feature used by a request."""
    if tool_name == "get_media_buy_delivery":
        return beta6_delivery_request_issue(params)
    if tool_name in _BETA6_REPORTING_TASKS:
        return _beta6_metric_issue(params)
    return None

Return the first beta.6-only reporting feature used by a request.

Classes

class Beta6ReportingIssue (field: str, detail: str)
Expand source code
@dataclass(frozen=True)
class Beta6ReportingIssue:
    field: str
    detail: str

Beta6ReportingIssue(field: 'str', detail: 'str')

Instance variables

var detail : str
var field : str