API Reference¶
Merge¶
- class ocdsmerge.merge.Merger(schema=None, merge_rules=None, rule_overrides=None)[source]¶
- Parameters:
schema (Schema)
merge_rules (MergeRules | None)
rule_overrides (RuleOverrides | None)
- __init__(schema=None, merge_rules=None, rule_overrides=None)[source]¶
Initialize a reusable
Mergerinstance for creating merged releases.- Parameters:
schema (dict or str) – the release schema (if not provided, will default to the latest version of OCDS)
merge_rules (dict[tuple[str, ...], str] | None) – the merge rules (if not provided, will determine the rules from the
schema)rule_overrides (dict[tuple[str, ...], MergeStrategy] | None) – any rule overrides, in which keys are field paths as tuples, and values are either
ocdsmerge.APPENDorocdsmerge.MERGE_BY_POSITION
- __annotate_func__ = None¶
- __annotations_cache__ = {}¶
- __firstlineno__ = 10¶
- __static_attributes__ = ('merge_rules', 'rule_overrides')¶
- class ocdsmerge.merge.MergedRelease(data=None, schema=None, merge_rules=None, rule_overrides=None)[source]¶
Whether the class is for merging versioned releases.
- Parameters:
- __init__(data=None, schema=None, merge_rules=None, rule_overrides=None)[source]¶
Initialize a merged release.
- Parameters:
data (dict[str, Any] | None) – the latest copy of the merged release, if any
schema (dict or str) – the release schema (if not provided, will default to the latest version of OCDS)
merge_rules (dict[tuple[str, ...], str] | None) – the merge rules (if not provided, will determine the rules from the
schema)rule_overrides (dict[tuple[str, ...], MergeStrategy] | None) – any rule overrides, in which keys are field paths as tuples, and values are either
ocdsmerge.APPENDorocdsmerge.MERGE_BY_POSITION
- __annotations__ = {'versioned': 'bool | None'}¶
- __firstlineno__ = 48¶
- __static_attributes__ = ('data', 'merge_rules', 'rule_overrides')¶
- class ocdsmerge.merge.CompiledRelease(data=None, **kwargs)[source]¶
-
- __init__(data=None, **kwargs)[source]¶
Initialize a merged release.
- Parameters:
data (dict[str, Any] | None) – the latest copy of the merged release, if any
schema (dict or str) – the release schema (if not provided, will default to the latest version of OCDS)
merge_rules – the merge rules (if not provided, will determine the rules from the
schema)rule_overrides – any rule overrides, in which keys are field paths as tuples, and values are either
ocdsmerge.APPENDorocdsmerge.MERGE_BY_POSITION
- __annotate_func__ = None¶
- __annotations_cache__ = {}¶
- __firstlineno__ = 117¶
- __static_attributes__ = ()¶
Rules¶
Flatten¶
- class ocdsmerge.flatten.IdValue(identifier)[source]¶
A string with
identifierandoriginal_valueproperties.- Parameters:
identifier (Identifier)
- identifier¶
- ocdsmerge.flatten.flatten(obj, merge_rules, rule_overrides, flattened, path=(), rule_path=(), *, versioned=False)[source]¶
Flatten a JSON object into key-value pairs, in which the key is the JSON path as a tuple.
It replaces numbers in JSON paths (representing positions in arrays) with special objects. This ensures objects in arrays with different
idvalues have different JSON paths - and makes it easy to identify such arrays.{ "a": "I am a", "b": ["A", "list"], "c": [ {"id": 1, "cb": "I am ca"}, {"id": 2, "ca": "I am cb"} ] }
flattens to:
{ ('a',): 'I am a', ('b',): ['A', 'list'], ('a', '1', 'cb'): 'I am ca', ('a', '1', 'id'): 1, ('a', '2', 'ca'): 'I am cb', ('a', '2', 'id'): 2, }
Utilities¶
Exceptions¶
- exception ocdsmerge.exceptions.OCDSMergeError[source]¶
Base class for exceptions from within this package.
- exception ocdsmerge.exceptions.MissingDateKeyError(key, message)[source]¶
Raised when a release is missing a ‘date’ key.
- exception ocdsmerge.exceptions.NonObjectReleaseError[source]¶
Raised when a release is not an object.
- exception ocdsmerge.exceptions.NullDateValueError[source]¶
Raised when a release has a null ‘date’ value.
- exception ocdsmerge.exceptions.NonStringDateValueError[source]¶
Raised when a release has a non-string ‘date’ value.
- exception ocdsmerge.exceptions.InconsistentTypeError[source]¶
Raised when a path is a literal, an object, and/or an array in different releases.