示例#1
0
import logging
import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
import models
import presubmit_util

# Model definitions for rappor.xml content
_SUMMARY_TYPE = models.TextNodeType('summary')

_NOISE_VALUES_TYPE = models.ObjectNodeType('noise-values',
                                           float_attributes=[
                                               'fake-prob',
                                               'fake-one-prob',
                                               'one-coin-prob',
                                               'zero-coin-prob',
                                           ])

_NOISE_LEVEL_TYPE = models.ObjectNodeType(
    'noise-level',
    extra_newlines=(1, 1, 1),
    string_attributes=['name'],
    children=[
        models.ChildType('summary', _SUMMARY_TYPE, False),
        models.ChildType('values', _NOISE_VALUES_TYPE, False),
    ])

_NOISE_LEVELS_TYPE = models.ObjectNodeType('noise-levels',
                                           extra_newlines=(1, 1, 1),
# i.e. "suffix11" should come after "suffix2"
def _NaturalSortByName(node):
  """Sort by name, ordering numbers in the way humans expect."""
  # See: https://blog.codinghorror.com/sorting-for-humans-natural-sort-order/
  name = node.get('name').lower()
  convert = lambda text: int(text) if text.isdigit() else text
  return [convert(c) for c in re.split('([0-9]+)', name)]

# The following types are used for enums.xml.
_INT_TYPE = models.ObjectNodeType(
    'int',
    attributes=[
        ('value', str, r'^[-1]|[0-9]+$'),
        ('label', str, None),
    ],
    required_attributes=['value'],
    text_attribute=True,
    single_line=True,
    children=[
        models.ChildType(_OBSOLETE_TYPE.tag, _OBSOLETE_TYPE, multiple=False),
        models.ChildType(_SUMMARY_TYPE.tag, _SUMMARY_TYPE, multiple=False),
    ])

_ENUM_TYPE = models.ObjectNodeType(
    'enum',
    attributes=[
        ('name', str, r'^[A-Za-z0-9_.]+$'),
    ],
    required_attributes=['name'],
    alphabetization=[
        (_OBSOLETE_TYPE.tag, _KEEP_ORDER),
示例#3
0
import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
import models

# Model definitions for ukm.xml content
_OBSOLETE_TYPE = models.TextNodeType('obsolete')
_OWNER_TYPE = models.TextNodeType('owner', single_line=True)
_SUMMARY_TYPE = models.TextNodeType('summary')

_LOWERCASE_NAME_FN = lambda n: n.get('name').lower()

_ENUMERATION_TYPE = models.ObjectNodeType('enumeration',
                                          attributes=[],
                                          single_line=True)

_QUANTILES_TYPE = models.ObjectNodeType('quantiles',
                                        attributes=[
                                            ('type', unicode, None),
                                        ],
                                        single_line=True)

_INDEX_TYPE = models.ObjectNodeType('index',
                                    attributes=[
                                        ('fields', unicode, None),
                                    ],
                                    single_line=True)

_STATISTICS_TYPE = models.ObjectNodeType(
示例#4
0
import os
import re
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
import models

# Model definitions for rappor.xml content
_OBSOLETE_TYPE = models.TextNodeType('obsolete')
_OWNER_TYPE = models.TextNodeType('owner', single_line=True)
_SUMMARY_TYPE = models.TextNodeType('summary')

_NOISE_VALUES_TYPE = models.ObjectNodeType('noise-values',
                                           attributes=[
                                               ('fake-prob', float),
                                               ('fake-one-prob', float),
                                               ('one-coin-prob', float),
                                               ('zero-coin-prob', float),
                                           ])

_NOISE_LEVEL_TYPE = models.ObjectNodeType(
    'noise-level',
    extra_newlines=(1, 1, 1),
    attributes=[('name', unicode)],
    children=[
        models.ChildType('summary', _SUMMARY_TYPE, False),
        models.ChildType('values', _NOISE_VALUES_TYPE, False),
    ])

_NOISE_LEVELS_TYPE = models.ObjectNodeType('noise-levels',
                                           extra_newlines=(1, 1, 1),
示例#5
0
_OBSOLETE_TYPE = models.TextNodeType('obsolete')
_OWNER_TYPE = models.TextNodeType('owner', single_line=True)
_SUMMARY_TYPE = models.TextNodeType('summary')

_METRIC_TYPE = models.ObjectNodeType('metric',
                                     attributes=[
                                         ('name', unicode,
                                          r'^[A-Za-z0-9_.]+$'),
                                         ('kind', unicode,
                                          r'^(?i)(|hashed-string|int)$'),
                                     ],
                                     alphabetization=[
                                         (_OBSOLETE_TYPE.tag, lambda _: 1),
                                         (_SUMMARY_TYPE.tag, lambda _: 2),
                                     ],
                                     children=[
                                         models.ChildType(_OBSOLETE_TYPE.tag,
                                                          _OBSOLETE_TYPE,
                                                          multiple=False),
                                         models.ChildType(_OWNER_TYPE.tag,
                                                          _OWNER_TYPE,
                                                          multiple=True),
                                         models.ChildType(_SUMMARY_TYPE.tag,
                                                          _SUMMARY_TYPE,
                                                          multiple=False),
                                     ])

_EVENT_TYPE = models.ObjectNodeType(
    'event',
    attributes=[
        ('name', unicode, r'^[A-Z][A-Za-z0-9.]*$'),
示例#6
0
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
import models

# Model definitions for ukm.xml content
_OBSOLETE_TYPE = models.TextNodeType('obsolete')
_OWNER_TYPE = models.TextNodeType('owner', single_line=True)
_SUMMARY_TYPE = models.TextNodeType('summary')

_LOWERCASE_NAME_FN = lambda n: n.attributes['name'].value.lower()

_METRIC_TYPE = models.ObjectNodeType(
    'metric',
    attributes=[
        ('name', unicode),
        ('semantic_type', unicode),
    ],
    children=[
        models.ChildType('obsolete', _OBSOLETE_TYPE, False),
        models.ChildType('owners', _OWNER_TYPE, True),
        models.ChildType('summary', _SUMMARY_TYPE, False),
    ])

_EVENT_TYPE = models.ObjectNodeType(
    'event',
    alphabetization=[('metric', _LOWERCASE_NAME_FN)],
    attributes=[('name', unicode), ('singular', bool)],
    extra_newlines=(1, 1, 1),
    children=[
        models.ChildType('obsolete', _OBSOLETE_TYPE, False),
        models.ChildType('owners', _OWNER_TYPE, True),
        models.ChildType('summary', _SUMMARY_TYPE, False),
示例#7
0
_LOWERCASE_FN = lambda attribute: (lambda node: node.get(attribute).lower())

# A constant function as the sorting key for nodes whose orderings should be
# kept as given in the XML file within their parent node.
_KEEP_ORDER = lambda node: 1

_ACTION_TYPE = models.ObjectNodeType(
    'action',
    attributes=[
        ('name', str, None),
        ('not_user_triggered', str, r'^$|^true|false|True|False$'),
    ],
    required_attributes=['name'],
    alphabetization=[
        (_OBSOLETE_TYPE.tag, _KEEP_ORDER),
        (_OWNER_TYPE.tag, _KEEP_ORDER),
        (_DESCRIPTION_TYPE.tag, _KEEP_ORDER),
    ],
    extra_newlines=(1, 1, 1),
    children=[
        models.ChildType(_OBSOLETE_TYPE.tag, _OBSOLETE_TYPE, multiple=False),
        models.ChildType(_OWNER_TYPE.tag, _OWNER_TYPE, multiple=True),
        models.ChildType(_DESCRIPTION_TYPE.tag,
                         _DESCRIPTION_TYPE,
                         multiple=False),
    ])

_SUFFIX_TYPE = models.ObjectNodeType(
    'suffix',
    attributes=[
        ('name', str, r'^[A-Za-z0-9.-_]*$'),
        ('label', str, None),
示例#8
0
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
import models
import presubmit_util

# Model definitions for rappor.xml content
_SUMMARY_TYPE = models.TextNodeType('summary')

_PARAMETERS_TYPE = models.ObjectNodeType('parameters',
                                         int_attributes=[
                                             'num-cohorts',
                                             'bytes',
                                             'hash-functions',
                                         ],
                                         float_attributes=[
                                             'fake-prob',
                                             'fake-one-prob',
                                             'one-coin-prob',
                                             'zero-coin-prob',
                                         ],
                                         string_attributes=['reporting-level'])

_RAPPOR_PARAMETERS_TYPE = models.ObjectNodeType(
    'rappor-parameters',
    extra_newlines=(1, 1, 1),
    string_attributes=['name'],
    children=[
        models.ChildType('summary', _SUMMARY_TYPE, False),
        models.ChildType('parameters', _PARAMETERS_TYPE, False),
    ])