为数据包抽象版本化元数据存储的库

metastore-lib的Python项目详细描述


metastore lib:用于数据包的元数据存储库

Build StatusMaintainabilityTest CoveragePyPI versionDocumentation Status

datapackage.json抽象元数据存储的Python库 包装。在

完整的文档

虽然本自述提供了一些关于如何开始的基本信息,但是 mestastore-lib的最新综合文档是 available at metastore-lib.readthedocs.io。在

安装

将最新稳定版本的metastore lib安装到 您的Python环境是通过pip

pip install metastore-lib

快速入门

实例化后端

要在安装库之后使用它,请首先实例化一个存储 实例:

^{pr2}$

存储数据集(创建新包)

然后使用存储实例存储数据集:

importjsonwithopen("datapackage.json")asf:metadata=json.loads(f)package_info=metastore.create(package_id,metadata)

这将使用特定的存储后端存储包元数据。为 例如,对于GitHub后端,将创建一个新的存储库 使用相应的datapackage.json文件和LFS指针文件 资源。在

返回的package_info将是一个包含以下信息的对象 存储包版本:

classPackageRevisionInfo:package_id:str="..."revision:str="..."package:Dict={"name":"mypackage","version":"1.0.0","resources":[# ...]}

更新数据集

要更新同一个包:

base_rev=package_info.revisionmetadata['version']='1.0.1'package_info=metastore.update(package_id,metadata,base_revision=base_rev)

这将更新包,创建元数据的新修订版。请注意 base_revision不是必需的,但建议这样做,以确保不进行更改 冲突;指定base_revision将确保根据 包的最新版本,如果不是ConflictException,则 提高。在

列出数据集修订版

现在您可以获得包的所有修订的列表(应该正好有两个):

revisions=metastore.revision_list(package_id)# Returns: [ <RevisionInfo rev2>, <RevisionInfo rev1> ]

列表中每个返回的对象代表一个修订:

classPackageRevisionInfo:package_id:str="..."revision:str="..."created:datetime=...# the revision creation timestamp

获取数据集修订版

现在我们有了两个不同的数据集版本,我们可以获取 元数据的具体修订:

package_info=metastore.fetch(package_id,revision=revisions[0].revision)print(f"{package_info.package['name']}{package_info.package['version']}")# will output: mypackage 1.0.0package_info=metastore.fetch(package_id,revision=revisions[1].revision)print(f"{package_info.package['name']}{package_info.package['version']}")# will output: mypackage 1.0.1

这将为请求的包/修订返回一个RevisionInfo对象。在

注意,revision参数是可选的,如果省略了最新的 将获取修订。在

创建标记

创建修订后,可以标记该修订,使其 有意义的名称:

tag_info=metastore.tag_create(package_id,revision=revisions[1].revision,name='ver-1.0.1')

这将返回一个新的TagInfo对象,其中name属性设置为 'ver-1.0.1'。在

列出标签

要获取包的所有标记的列表:

tags=metastore.tag_list(package_id)

这将返回一个TagInfo对象的列表,每个对象都指向一个特定的 标记修订。在

关于包标识符

包标识符(例如上例中的package_id)是字符串 就metastore而言,是不透明的。然而,他们可能仍然 对后端或客户端来说都是有意义的。在

例如,对于基于GitHub的后端,您将使用与 <org name>/<repo name>结构。在

其他后端可能希望您使用UUID类型标识符。在

由使用metastore库的代码来编写 正确的标识符。在

使用文件系统后端进行测试

为了测试和快速原型化,这个库提供了一个特殊的 filesystem后端,可用于保存版本化的数据包 有关文件系统、内存或虚拟文件系统的信息。在

此后端基于PyFilesystem 库,并且可以使用它支持的任何文件系统作为存储。在

在测试中,建议使用基于内存的存储器:

frommetastore.backend.filesystemimportFilesystemStoragedeftest_my_code():"""Test for code that relies on a metastore-lib backend    """backend=FilesystemStorage('mem://')r1=backend.create('some-package',datapackage,'Initial revision')# ... continue with testing ...

FilesystemStorage构造函数接受一个参数,即 PyFilesystem根文件系统URL。在

除此之外,所有API与其他后端完全相同。在

许可证

版权所有(C)2020,Viderum,Inc

metastore lib是免费/开源软件,根据 麻省理工学院的执照。有关详细信息,请参见LICENSE。在

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

推荐PyPI第三方库


热门话题
Docker&SeleniumJava:无法在Docker容器上运行的chrome浏览器中上载图像/文件   在python中运行java命令   Java垃圾收集器异常行为   java java是否根据底层操作系统执行字节码级优化?   java是否可以休眠自定义查询返回映射而不是列表?   java Spring引导RabbitMQ接收器Jackson反序列化到POJO   apache flex在ActionScript3中创建对象相等“HashMap”作为java HashMap   java如何在Eclipse集成中切换JProfiler启动器   缓存JSP页面结果的java最佳实践?   java集成jaxb绑定文件,使用CXF生成基于WSDL的客户端   java为什么在上传操作结束之前,客户端没有检测到HttpServletResponse的PrintWriter内容?   java在接口内创建类和在类内创建接口有什么用   java向文件写入错误Android Studio   java合并多个RealmList并对结果列表排序?   谷歌API视觉java。lang.NoSuchMethodError   java如何使用逗号分别存储每个值,然后将它们存储到单独的数组中?