为数据包抽象版本化元数据存储的库
metastore-lib的Python项目详细描述
metastore lib:用于数据包的元数据存储库
为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。在
- 项目
标签: