用于合并ocds版本的库和引用实现
ocdsmerge的Python项目详细描述
这个python包有助于创建符合Open Contracting Data Standard的记录。具体来说,它提供了将具有相同ocid的ocds版本合并到编译版本或版本发行版中的功能。
pip install ocdsmerge
用法
两个主要函数是merge
和merge_versioned
。它们将ocds版本作为输入,并分别返回编译版本或版本化版本作为输出。例如:
importocdsmerge# In a real-world example, the OCDS releases might be loaded from JSON files.releases=[{"ocid":"ocds-213czf-A","id":"1","date":"2014-01-01","tag":["tender"],"initiationType":"tender","tender":{"id":"A","procurementMethod":"selective"}},{"ocid":"ocds-213czf-A","id":"2","date":"2014-01-02","tag":["tender"],"initiationType":"tender","tender":{"id":"A","procurementMethod":"open"}}]compiledRelease=ocdsmerge.merge(releases)versionedRelease=ocdsmerge.merge_versioned(releases)
然后可以使用compiledRelease
和versionedRelease
创建ocds记录。
重要注意事项
- 您必须确保作为输入提供的ocd版本具有相同的ocid。
- 如果使用的是旧版本的ocds发布模式,则必须将旧模式指定为url、文件路径或python字典(请参见下文)。
- 如果您使用的是ocds扩展,则应该修补ocds发布架构(例如,使用json-merge-patch),并将修补架构指定为url、文件路径或python字典。
使用不同的发布模式
默认情况下,merge
和merge_versioned
函数使用最新版本的ocds发布架构,它们只下载一次。但是,您可能希望使用旧版本、扩展架构或本地架构来避免远程请求。为此,请使用可选的schema
参数,可以是:
- 发布架构的URL,以http 开头的字符串
- 发布架构的文件路径,作为字符串
- 发布模式,如python字典
# URLocdsmerge.merge(releases,schema='https://standard.open-contracting.org/schema/1__0__3/release-schema.json')# Relative file pathocdsmerge.merge(releases,schema='release-schema.json')# Absolute file pathocdsmerge.merge(releases,schema='/absolute/path/to/release-schema.json')# A Python dictionary, stored in a `release_schema` variableocdsmerge.merge(releases,schema=release_schema)
使用缓存合并规则
merge
和merge_versioned
函数从发布架构中提取合并规则。如果发布模式是作为字符串(即作为url或文件路径)提供的,那么这些合并规则将在函数调用之间自动缓存。但是,如果它是作为python字典提供的,那么它们就不会被缓存。要手动缓存合并规则,请使用get_merge_rules
函数:
merge_rules=ocdsmerge.get_merge_rules('release-schema.json')ocdsmerge.merge(releases,merge_rules=merge_rules)
参考实施
这个包可以作为ocds合并的参考实现。您可以在merge.py中读取其注释代码。
测试用例
我们为在tests/fixtures目录下合并ocd的其他实现提供测试用例。1.0和1.1目录包含像simple.json这样的文件,这些文件包含作为json的ocd版本列表;后缀为simple-compiled.json和simple-versioned.json的文件分别包含预期的编译版本和版本版本。要测试实现,请提供一个类似simple.json的文件以及相应版本的ocds发布架构作为输入,并将输出与类似simple-compiled.json和simple-versioned.json的文件进行比较。
要为将来的版本和第三方扩展准备实现,可以使用schema目录下的文件和schema.json文件中的架构来测试实现。
在将来,我们可以考虑提供一个更正式的测试套件,比如那些针对CSV on the Web的测试套件。如果有兴趣,请联系data@open-contracting.org。
版权所有(c)2015根据BSD许可证发布的公开承包合作伙伴关系