From f4148a17d7e2f7ac913e873d04cc1bf401c32457 Mon Sep 17 00:00:00 2001 From: Yaroslav Shalenyk Date: Wed, 7 Nov 2018 16:04:49 +0200 Subject: [PATCH 1/4] Add merge_rules as call argument --- ocdsmerge/__init__.py | 3 ++- ocdsmerge/merge.py | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ocdsmerge/__init__.py b/ocdsmerge/__init__.py index e56a1de..0a068cb 100644 --- a/ocdsmerge/__init__.py +++ b/ocdsmerge/__init__.py @@ -1 +1,2 @@ -from .merge import merge, merge_versioned # noqa +from .merge import merge, merge_versioned,\ + process_schema # noqa diff --git a/ocdsmerge/merge.py b/ocdsmerge/merge.py index 06e7593..56856ee 100644 --- a/ocdsmerge/merge.py +++ b/ocdsmerge/merge.py @@ -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 = process_schema(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 = process_schema(schema) merged = collections.OrderedDict() for release in sorted(releases, key=lambda rel: rel["date"]): release = release.copy() From 1f80d09552b702668a5c1dcf7710e3b614d3b3f7 Mon Sep 17 00:00:00 2001 From: Yaroslav Shalenyk Date: Wed, 7 Nov 2018 16:11:04 +0200 Subject: [PATCH 2/4] Update readme --- README.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.rst b/README.rst index 547c182..c1937de 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 processed schema +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code:: python + + # process schema + rules = ocdsmerge.process_schema('release-schema.json') + # merge releases + ocdsmerge.merge(releases, merge_rules=rules) From 2e6e5ca6e94c0e06b3f1342cf5e45a645e90a44d Mon Sep 17 00:00:00 2001 From: James McKinney Date: Mon, 26 Nov 2018 15:30:56 -0500 Subject: [PATCH 3/4] Rename process_schema to get_merge_rules --- README.rst | 12 ++++++------ ocdsmerge/__init__.py | 3 +-- ocdsmerge/merge.py | 6 +++--- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/README.rst b/README.rst index c1937de..03678f6 100644 --- a/README.rst +++ b/README.rst @@ -102,12 +102,12 @@ 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 processed schema -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Using pre-processed release schema +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code:: python - # process schema - rules = ocdsmerge.process_schema('release-schema.json') - # merge releases - ocdsmerge.merge(releases, merge_rules=rules) + # 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 0a068cb..ae53f99 100644 --- a/ocdsmerge/__init__.py +++ b/ocdsmerge/__init__.py @@ -1,2 +1 @@ -from .merge import merge, merge_versioned,\ - process_schema # noqa +from .merge import merge, merge_versioned, get_merge_rules # noqa diff --git a/ocdsmerge/merge.py b/ocdsmerge/merge.py index 56856ee..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) @@ -160,7 +160,7 @@ def merge(releases, schema=None, merge_rules=None): ''' Takes a list of releases and merge them making a compiledRelease suitible for an OCDS Record ''' if not merge_rules: - merge_rules = process_schema(schema) + merge_rules = get_merge_rules(schema) merged = collections.OrderedDict({("tag",): ['compiled']}) for release in sorted(releases, key=lambda rel: rel["date"]): release = release.copy() @@ -189,7 +189,7 @@ 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 ''' if not merge_rules: - merge_rules = process_schema(schema) + merge_rules = get_merge_rules(schema) merged = collections.OrderedDict() for release in sorted(releases, key=lambda rel: rel["date"]): release = release.copy() From dbd85af3c3266af9bb849a4baa6080b69940147e Mon Sep 17 00:00:00 2001 From: James McKinney Date: Mon, 26 Nov 2018 15:42:12 -0500 Subject: [PATCH 4/4] Add changelog --- CHANGELOG.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 CHANGELOG.md 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.