Skip to content

Commit

Permalink
feat: Extract get_ocds_patch_tag from combine
Browse files Browse the repository at this point in the history
  • Loading branch information
jpmckinney committed Jan 28, 2022
1 parent dd10411 commit 4a25055
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 23 deletions.
5 changes: 5 additions & 0 deletions docs/changelog.rst
Expand Up @@ -4,6 +4,11 @@ Changelog
1.0.3 (Unreleased)
------------------

Added
~~~~~

- :meth:`ocdskit.util.get_ocds_patch_tag`

Changed
~~~~~~~

Expand Down
11 changes: 4 additions & 7 deletions ocdskit/combine.py
Expand Up @@ -159,16 +159,13 @@ def merge(data, uri='', publisher=None, published_date='', version=DEFAULT_VERSI
packager.add(data)

if not schema and packager.version:
prefix = packager.version.replace('.', '__') + '__'
try:
tag = next(tag for tag in reversed(get_tags()) if tag.startswith(prefix))
except StopIteration:
raise UnknownVersionError(packager.version)
schema = get_release_schema_url(tag)

tag = get_ocds_patch_tag(packager.version)
if packager.package['extensions']:
# `extensions` is an insertion-ordered dict at this point.
builder = ProfileBuilder(tag, list(packager.package['extensions']))
schema = builder.patched_release_schema()
else:
schema = get_release_schema_url(tag)

merger = Merger(schema)

Expand Down
47 changes: 31 additions & 16 deletions ocdskit/util.py
Expand Up @@ -3,7 +3,9 @@
import platform
from decimal import Decimal

from ocdskit.exceptions import UnknownFormatError
from ocdsmerge.util import get_tags

from ocdskit.exceptions import UnknownFormatError, UnknownVersionError

if platform.python_implementation() == 'PyPy':
import importlib
Expand Down Expand Up @@ -123,6 +125,19 @@ def get_ocds_minor_version(data):
return '1.0'


def get_ocds_patch_tag(version):
"""
Returns the OCDS patch version as a git tag (like ``1__1__4``) for a given minor version (like ``1.1``).
:raises UnknownVersionError: if the OCDS version is not recognized
"""
prefix = version.replace('.', '__') + '__'
try:
return next(tag for tag in reversed(get_tags()) if tag.startswith(prefix))
except StopIteration:
raise UnknownVersionError(packager.version)


def is_package(data):
"""
Returns whether the data is a record package or release package.
Expand Down Expand Up @@ -185,21 +200,6 @@ def is_linked_release(data):
return 'url' in data and len(data) <= 3


def _empty_package(uri, publisher, published_date, version):
if publisher is None:
publisher = {}

return {
'uri': uri,
'publisher': publisher,
'publishedDate': published_date,
'license': None,
'publicationPolicy': None,
'version': version,
'extensions': {},
}


def detect_format(path, root_path='', reader=open):
"""
Returns the format of OCDS data, and whether the OCDS data is concatenated or in an array.
Expand Down Expand Up @@ -293,6 +293,21 @@ def _empty_release_package(uri='', publisher=None, published_date='', version=No
return package


def _empty_package(uri, publisher, published_date, version):
if publisher is None:
publisher = {}

return {
'uri': uri,
'publisher': publisher,
'publishedDate': published_date,
'license': None,
'publicationPolicy': None,
'version': version,
'extensions': {},
}


def _update_package_metadata(output, package):
for field in ('publisher', 'license', 'publicationPolicy'):
if field in package:
Expand Down

0 comments on commit 4a25055

Please sign in to comment.