# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Data structures to expand patterned/suffixed histogram names.
See here for specifications:
https://source.chromium.org/chromium/chromium/src/+/main:tools/metrics/histograms/histogram_configuration_model.py
"""
from typing import TypedDict
class Variant(TypedDict, total=False):
"""Representation of a histograms.xml <variant> tag for a patterned histogram.
See _VARIANT_TYPE in histogram_configuration_model.py for specifications.
For example:
<variant
name="TOSAccepted"
summary="Terms of service were accepted.">
<obsolete>Removed in M90.</obsolete>
<owner>[email protected]</owner>
<owner>[email protected]</owner>
</variant>
This would be represented as:
Variant(
name='TOSAccepted',
summary='Terms of service were accepted.',
obsolete='Removed in M90.',
owners=['[email protected]', '[email protected]'],
)
Attributes:
name: Name attribute of the variant.
summary: Summary attribute of the variant.
obsolete: Optional <obsolete> text content.
owners: List of <owner> text content.
"""
name: str
summary: str
obsolete: str | None
owners: list[str]
class Token(TypedDict, total=False):
"""Representation of a histograms.xml <token> tag for a patterned histogram.
See _TOKEN_TYPE in histogram_configuration_model.py for specifications.
For example:
<token key="UserChoice" variants="TOS">
<variant name="TOSIgnored">
<token/>
Note that the variants attribute refers to a Variants instance. The totality
of variants is taken from that <variants> block as well as child <variant>
nodes.
That example would be represented as:
Token(
key='UserChoice',
variants=[
Variant(name='TOSAccepted'),
Variant(name='TOSDeclined'),
Variant(name='TOSIgnored'),
],
)
Attributes:
key: The key attribute that is used in histogram names/summaries as '{key}'.
variants: The variants whose names are substituted for '{key}'.
"""
key: str
variants: list[Variant]
# Assignment of a variant for each token in a patterned histogram.
TokenAssignment = dict[str, Variant]