diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..92fe151 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,22 @@ +# Changelog + +## 0.5 + +* Allow specifying cached or customized merge rules. + +## 0.4 (2018-01-04) + +* Use the schema to determine the merge rules. +* Allow specifying a custom local or remote schema. + +## 0.3 (2015-12-04) + +* Use relative imports. + +## 0.2 (2015-12-01) + +* Move repository to open-contracting organization. + +## 0.1 (2015-11-29) + +First release. diff --git a/README.rst b/README.rst index 547c182..03678f6 100644 --- a/README.rst +++ b/README.rst @@ -101,3 +101,13 @@ path. Full absolute paths can be used too: # Use relese-schema.json using absolute path ocdsmerge.merge(releases, '/some/full/path/release-schema.json') + +Using pre-processed release schema +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code:: python + + # Extract the merging rules from the schema + merge_rules = ocdsmerge.get_merge_rules('release-schema.json') + # Use the merging rules + ocdsmerge.merge(releases, merge_rules=merge_rules) diff --git a/ocdsmerge/__init__.py b/ocdsmerge/__init__.py index e56a1de..ae53f99 100644 --- a/ocdsmerge/__init__.py +++ b/ocdsmerge/__init__.py @@ -1 +1 @@ -from .merge import merge, merge_versioned # noqa +from .merge import merge, merge_versioned, get_merge_rules # noqa diff --git a/ocdsmerge/merge.py b/ocdsmerge/merge.py index 06e7593..b5a79ba 100644 --- a/ocdsmerge/merge.py +++ b/ocdsmerge/merge.py @@ -53,7 +53,7 @@ def remove_number_path(path): return tuple(item for item in path if not isinstance(item, int)) -def process_schema(schema): +def get_merge_rules(schema): schema = schema or get_latest_schema_uri() if schema.startswith('http'): deref_schema = jsonref.load_uri(schema) @@ -156,10 +156,11 @@ def process_flattened(flattened): return processed -def merge(releases, schema=None): +def merge(releases, schema=None, merge_rules=None): ''' Takes a list of releases and merge them making a compiledRelease suitible for an OCDS Record ''' - merge_rules = process_schema(schema) + if not merge_rules: + merge_rules = get_merge_rules(schema) merged = collections.OrderedDict({("tag",): ['compiled']}) for release in sorted(releases, key=lambda rel: rel["date"]): release = release.copy() @@ -184,10 +185,11 @@ def merge(releases, schema=None): return unflatten(merged) -def merge_versioned(releases, schema=None): +def merge_versioned(releases, schema=None, merge_rules=None): ''' Takes a list of releases and merge them making a versionedRelease suitible for an OCDS Record ''' - merge_rules = process_schema(schema) + if not merge_rules: + merge_rules = get_merge_rules(schema) merged = collections.OrderedDict() for release in sorted(releases, key=lambda rel: rel["date"]): release = release.copy()