Changelog#
Unreleased#
Changed#
ocdsmerge.util.get_tags()
raises an error if it encounters an HTTP error.Drop support for Python 3.6 and 3.7.
Added#
Add PyPy support.
0.6.6 (2021-04-10)#
Added#
Add Python wheels distribution.
0.6.5 (2021-02-04)#
Changed#
ocdsmerge.flatten.unflatten()
raisesocdsmerge.exceptions.InconsistentTypeError
instead ofTypeError
if the same path is a literal in one release and an object in another release.
0.6.4 (2020-01-02)#
Fixed#
Restore prior order of
ocid
key in merged releases.
0.6.3 (2020-01-02)#
Changed#
Improve performance of
ocdsmerge.flatten.flatten()
.
Added#
ocdsmerge.merge.MergedRelease
: Extractflat_append()
fromappend()
, to enable custom flattening methods.
0.6.2 (2019-12-31)#
Changed#
Rename
ocdsmerge.errors
module toocdsmerge.exceptions
.
0.6.1 (2019-12-30)#
Changed#
Improve performance.
0.6.0 (2019-12-29)#
Changed#
Backwards-incompatible: Replace
merge
andmerged_versioned
functions withocdsmerge.Merger
class.
Fixed#
rule_overrides
keys omit array indexes.
0.5.12 (2019-12-19)#
Fixed#
MissingDateKeyError
is now initialized correctly.
0.5.11 (2019-11-28)#
Changed#
MissingDateKeyError
inherits fromKeyError
, andNonObjectReleaseError
,NullDateValueError
andNonStringDateValueError
inherit fromTypeError
, to allow exception handling of versions less than 0.5.2 to remain unchanged.
0.5.10.post3 (2019-11-28)#
Changed#
The collision behavior is changed to always warn.
Remove the
collision_behavior
argument. Use a warning filter instead.Add
path
andid
properties toDuplicateIdValueWarning
to store thepath
at which, and theid
on which, the collision occurred.
0.5.10.post2 (2019-11-22)#
Changed#
Add a
rule_overrides
argument tomerge
,merge_versioned
,add_release_to_compiled_release
andadd_release_to_versioned_release
, which can be set on a per-field basis to:ocdsmerge.MERGE_BY_POSITION
: merge objects in the array based on their array index, instead of theirid
value.ocdsmerge.APPEND
: retain all objects in the array.
Remove these flags as possible values of
collision_behavior
.
0.5.10.post1 (2019-11-21)#
Changed#
The collision behavior is changed to silently ignore the collision, by default.
Add these flags as possible values of
collision_behavior
:ocdsmerge.MERGE_BY_POSITION
: merge objects in arrays based on their array index, instead of theirid
value.ocdsmerge.APPEND
: retain all objects in arrays.
Remove the
ocdsmerge.IGNORE
flag.
0.5.10 (2019-11-21)#
Changed#
Warn if multiple objects in an array have the same
id
value.Add a
collision_behavior
argument tomerge
,merge_versioned
,add_release_to_compiled_release
andadd_release_to_versioned_release
, which can be set to:ocdsmerge.WARN
: issue aDuplicateIdValueWarning
warning (default)ocdsmerge.RAISE
: raise aDuplicateIdValueError
exceptionocdsmerge.IGNORE
: silently ignore the collision
0.5.9 (2019-11-20)#
Fixed#
get_tags
no longer returns duplicate tags.
0.5.8 (2019-10-21)#
Changed#
Added exception messages to all exceptions.
Fixed#
If there is more than one release, but a
date
field is neither a string nor null, theNonStringDateValueError
exception is raised, instead ofNullDateValueError
.If a release is not an object, the
NonObjectReleaseError
exception is raised, instead ofNullDateValueError
.If there is a
TypeError
for any other reason, it is raised as-is, instead ofNullDateValueError
.
0.5.7 (2019-08-09)#
Fix package: Rename VCR cassettes for Windows users.
0.5.6 (2019-07-30)#
Fix package: Remove
tests
from build.
0.5.5 (2019-07-29)#
Fix package: Add VCR cassettes to
MANIFEST.in
.
0.5.4 (2019-07-29)#
Fix package: Add
MANIFEST.in
and allow tests to run offline.
0.5.3 (2019-06-26)#
Changed#
Use
https://
instead ofhttp://
forstandard.open-contracting.org
.
Added#
Extract the inner loops of
merge
andmerge_versioned
toadd_release_to_compiled_release
andadd_release_to_versioned_release
, respectively.
0.5.2 (2019-05-24)#
Changed#
If there is more than one release, but a
date
field is either missing or null, theMissingDateKeyError
andNullDateValueError
exceptions are raised, respectively, instead of the genericKeyError
andTypeError
.
Fixed#
If a field’s value is set to
null
, it is omitted from the compiled release.If a field’s value is an empty object or empty array in a release, skip it.
0.5.1 (2019-01-09)#
Changed#
get_tags
andget_release_schema_url
replaceget_latest_version
andget_latest_release_schema_url
.
0.5 (2019-01-04)#
Advisories#
Behavior is undefined and inconsistent if an array is not defined in the schema and contains only objects in some releases but not in others. 0a81a43
For developers using this library as a reference implementation:
versionId
is ignored by this library, as it merely assists in identifying whichid
fields are not on objects in arrays.
The following behaviors were previously undocumented, though they are implied by the merge rules:
Added#
Test cases for other implementations. See README.
You can specify the merge rules with a new
merge_rules
argument. #17 #18You can specify a custom schema by passing parsed JSON to the existing
schema
argument. 4244b3fIf the schema isn’t provided or is a URL or file path, it is parsed once and cached. 5d2f831
Recognizes OCDS 1.0
ocdsOmit
andocdsVersion
merge strategies. e67353d
Changed#
Fixed#
The following conditions occur on structurally correct OCDS data:
If the items in an array were non-objects, the array wouldn’t be treated as a single value. #14
If an array were mixing objects with and without
id
fields, the compiled release would merge objects if an array index matched anid
value. The new behavior is to keep any objects withoutid
values. 0e26402If objects in an array weren’t defined in the schema and had no
id
fields, the objects would be merged based on array index. The new behavior is to keep all objects. 0e26402
The following conditions don’t occur in OCDS schema, but can occur in extensions:
If objects in an array were defined in the schema and had no
id
fields, andwholeListMerge
were not set, the objects would be merged based on array index, instead of using the whole-list-merge strategy. 73dd088If an array were defined in the schema as having objects and non-objects, the identifier-merge strategy would sometimes be used instead of the whole-list-merge strategy. d222e09
The following conditions don’t occur in OCDS schema, or in extensions authored by the Open Contracting Partnership, but can occur in extensions authored by others:
If
omitWhenMerged
orwholeListMerge
werefalse
, they were treated astrue
, instead of being ignored. d115fa2If
omitWhenMerged
were set on an array of non-objects, the array wouldn’t be omitted, instead of being omitted. 2d39a0fIf
wholeListMerge
were set on an object, only the latest version of the object would be retained in the compiled release, instead of merging all versions of the object. b2a0dc6
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.