def union_metadata(first, second): """ Union two metadata. :param first: The first metadata object to union. :param second: The other metadata object to union. :return: A new metadata object. """ logger.debug("Union of metadata") output = Metadata() if first.version is not None: output.version = union_version(first.version, second.version) if first.description is not None: output.description = union_description(first.description, second.description) output.scopes = set.union(set(first.scopes), set(first.scopes)) output.languages = set.union(set(first.languages), set(second.languages)) output.date = date.today().isoformat() output.validity_start = compare_objects(first.validity_start, second.validity_start, max) output.validity_end = compare_objects(first.validity_end, second.validity_end, min) output.unicode_version = compare_objects(first.unicode_version, second.unicode_version, max) return output
def merge_metadata(lgr_set): """ Merge metadata from LGR set. :param lgr_set: The LGRs in the set :return: The merged metadata object """ logger.debug("Merge metadata") output = Metadata() output.version = merge_version(lgr_set) output.description = merge_description(lgr_set) scopes = OrderedDict() languages = OrderedDict() for metadata in [lgr.metadata for lgr in lgr_set]: scopes.update(OrderedDict.fromkeys(metadata.scopes)) languages.update(OrderedDict.fromkeys(metadata.languages)) output.validity_start = compare_objects(output.validity_start, metadata.validity_start, max) output.validity_end = compare_objects(output.validity_end, metadata.validity_end, min) output.unicode_version = compare_objects(output.unicode_version, metadata.unicode_version, max) output.scopes = list(scopes.keys()) output.languages = list(languages.keys()) output.date = date.today().isoformat() return output
def intersect_metadata(first, second): """ Intersect two metadata. :param first: The first metadata object to intersect with. :param second: The other metadata object to intersect with. :return: A new metadata object. """ output = Metadata() output.version = intersect_version(first.version, second.version) output.description = intersect_description(first.description, second.description) output.scopes = set.intersection(set(first.scopes), set(first.scopes)) output.languages = set.intersection(set(first.languages), set(second.languages)) output.date = date.today().isoformat() output.validity_start = compare_objects(first.validity_start, second.validity_start, max) output.validity_end = compare_objects(first.validity_end, second.validity_end, min) output.unicode_version = compare_objects(first.unicode_version, second.unicode_version, max) return output