1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
# 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>abc@google.com</owner>
<owner>xyz@chromium.org</owner>
</variant>
This would be represented as:
Variant(
name='TOSAccepted',
summary='Terms of service were accepted.',
obsolete='Removed in M90.',
owners=['abc@google.com', 'xyz@chromium.org'],
)
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]
|