probe_scraper/parsers/events.py (53 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_events from .utils import get_major_version, set_in_nested_dict def extract_events_data(e): props = { # source_field: target_field # TODO: extract description. "description": "description", "expiry_version": "expiry_version", "expiry_day": "expiry_day", "cpp_guard": "cpp_guard", "bug_numbers": "bug_numbers", "methods": "details/methods", "objects": "details/objects", "record_in_processes": "details/record_in_processes", # TODO: extract key descriptions too. "extra_keys": "details/extra_keys", } defaults = { "expiry_version": "never", "expiry_day": "never", "name": e.methods[0], "description": e.description, "cpp_guard": None, "bug_numbers": [], } data = {"details": {}} for source_field, target_field in props.items(): value = getattr(e, source_field, e._definition.get(source_field, None)) if value is None and source_field in defaults: value = defaults[source_field] set_in_nested_dict(data, target_field, value) # We only care about opt-out or opt-in really. optout = getattr(e, "dataset", "").endswith("_OPTOUT") data["optout"] = optout # Normalize some field values. data["expiry_version"] = get_major_version(data["expiry_version"]) if data["expiry_version"] == "default": data["expiry_version"] = "never" return data class EventsParser: def parse(self, filenames, version=None, channel=None): # Events.yaml had a format change in 53, see bug 1329620. # We don't have important event usage yet, so lets skip # backwards compatibility for now. if (version and channel) and ( ( (channel != "nightly" and version < 53) or (channel == "nightly" and version < 54) ) ): return {} if len(filenames) > 1: raise Exception("We don't support loading from more than one file.") events = parse_events.load_events(filenames[0], strict_type_checks=False) # Get the probe information in a standard format. out = {} for e in events: full_name = e.category + "." + e.methods[0] if getattr(e, "name", None): full_name += "#" + e.name out[full_name] = extract_events_data(e) return out