用于合并ocds版本的库和引用实现

ocdsmerge的Python项目详细描述


PyPI VersionBuild StatusCoverage StatusPython Version

这个python包有助于创建符合Open Contracting Data Standard的记录。具体来说,它提供了将具有相同ocid的ocds版本合并到编译版本或版本发行版中的功能。

pip install ocdsmerge

用法

两个主要函数是mergemerge_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)

然后可以使用compiledReleaseversionedRelease创建ocds记录。

重要注意事项

  • 您必须确保作为输入提供的ocd版本具有相同的ocid。
  • 如果使用的是旧版本的ocds发布模式,则必须将旧模式指定为url、文件路径或python字典(请参见下文)。
  • 如果您使用的是ocds扩展,则应该修补ocds发布架构(例如,使用json-merge-patch),并将修补架构指定为url、文件路径或python字典。

使用不同的发布模式

默认情况下,mergemerge_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)

使用缓存合并规则

mergemerge_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.01.1目录包含像simple.json这样的文件,这些文件包含作为json的ocd版本列表;后缀为simple-compiled.jsonsimple-versioned.json的文件分别包含预期的编译版本和版本版本。要测试实现,请提供一个类似simple.json的文件以及相应版本的ocds发布架构作为输入,并将输出与类似simple-compiled.jsonsimple-versioned.json的文件进行比较。

要为将来的版本和第三方扩展准备实现,可以使用schema目录下的文件和schema.json文件中的架构来测试实现。

在将来,我们可以考虑提供一个更正式的测试套件,比如那些针对CSV on the Web的测试套件。如果有兴趣,请联系data@open-contracting.org

版权所有(c)2015根据BSD许可证发布的公开承包合作伙伴关系

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java算法:如何对实体进行分组   C语言中的Java X509EncodedKeySpec#   如何修复java lambda筛选器(缺少返回语句)与future   java有没有办法在Swing中以亚像素精度绘制线条?   HV000030:找不到约束“javax”的验证器。验证。限制。大小为“验证类型”的java。util。可选<java。lang.String>'   CQL中语句的java分页状态   在开发时使用applet查看器的java对象相关applet   java如何从Oracle获取时区ID而不是时区偏移量   java递增变量   java JavaFX InvalizationListener或ChangeListener   java使用多个数据包将大量XMP数据插入jpg?   java允许删除请求   java为什么与类同名的方法不需要返回类型?   java数据转换错误转换   java一旦布尔值为真,如何关闭JFrame?   如何将数据写入两个java。木卫一。一次输出流对象?   mysql如何使用java在SQL中划分两列?   java使用Saxon/XQuery设置URI或目录解析器   mysql java。sql。SQLException:无法将值“20200816 17:33:21.690”从第18列转换为时间戳