Beispiel #1
0
def add_metadata(target, key, metadata):
    if not is_interesting(metadata):
        return

    for part in key:
        if part not in target:
            target[part] = {}
        target = target[part]

    for prop in simple_props:
        if metadata.has_key(prop):
            target[prop] = get_condition_value_list(metadata, prop)

    if metadata.has_key("expected"):
        values = metadata.get("expected")
        by_status = defaultdict(list)
        for item in values:
            if isinstance(item, tuple):
                condition, status = item
            else:
                condition = None
                status = item
            by_status[status].append(condition)
        for status in statuses:
            if status in by_status:
                target["expected_%s" % status] = [
                    serialize(item) if item else None
                    for item in by_status[status]
                ]
Beispiel #2
0
def get_condition_value_list(metadata, key):
    conditions = []
    for item in metadata.get(key):
        if isinstance(item, tuple):
            assert len(item) == 2
            conditions.append((serialize(item[0]), item[1]))
        else:
            conditions.append((None, item))
    return conditions
Beispiel #3
0
def add_metadata(target, key, metadata):
    if not is_interesting(metadata):
        return

    for part in key:
        if part not in target:
            target[part] = {}
        target = target[part]

    for prop in simple_props:
        if metadata.has_key(prop):  # noqa W601
            target[prop] = get_condition_value_list(metadata, prop)

    if metadata.has_key("expected"):  # noqa W601
        intermittent = []
        values = metadata.get("expected")
        by_status = defaultdict(list)
        for item in values:
            if isinstance(item, tuple):
                condition, status = item
            else:
                condition = None
                status = item
            if isinstance(status, list):
                intermittent.append((condition, status))
                expected_status = status[0]
            else:
                expected_status = status
            by_status[expected_status].append(condition)
        for status in statuses:
            if status in by_status:
                target["expected_%s" % status] = [
                    serialize(item) if item else None for item in by_status[status]
                ]
        if intermittent:
            target["intermittent"] = [
                [serialize(cond) if cond else None, intermittent_statuses]
                for cond, intermittent_statuses in intermittent
            ]
Beispiel #4
0
def make_changes(ancestor_manifest, current_manifest, new_manifest):
    changes = record_changes(ancestor_manifest, new_manifest)
    apply_changes(current_manifest, changes)

    return serialize(current_manifest.node)
Beispiel #5
0
 def visit_ConditionalNode(self, node):
     assert len(node.children) == 2
     # For conditional nodes, just return the subtree
     return serialize(node.children[0]), self.visit(node.children[1])