probe_scraper/parsers/scalars.py (29 lines of code) (raw):
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from .third_party import parse_scalars
from .utils import get_major_version
def extract_scalar_data(s):
# External scalars.yaml files have release/prerelease, not opt-in/opt-out
try:
optout = s.dataset.endswith("_OPTOUT")
except KeyError:
optout = s._definition.get("collect_on_channels", "prerelease") == "release"
return {
"description": s.description,
"expiry_version": get_major_version(s.expires),
"cpp_guard": s.cpp_guard,
"optout": optout,
"bug_numbers": s.bug_numbers,
"notification_emails": s.notification_emails,
"details": {
"keyed": s.keyed,
"kind": s.kind,
"record_in_processes": s.record_in_processes,
"record_into_store": s.record_into_store,
},
}
def transform_scalar_info(probes):
return dict((probe.label, extract_scalar_data(probe)) for probe in probes)
class ScalarsParser:
def parse(self, filenames, version=None, channel=None):
if len(filenames) > 1:
raise Exception("We don't support loading from more than one file.")
scalars = parse_scalars.load_scalars(filenames[0], strict_type_checks=False)
# Get the probe information in a standard format.
return transform_scalar_info(scalars)