数据包版本化元数据存储的库
项目描述
metastore-lib: 数据包的元数据存储库
一个用于抽象datapackage.json包的元数据存储的Python库。
完整文档
虽然这个README提供了一些基本信息,但有关mestastore-lib
的最新和最全面的文档可以在metastore-lib.readthedocs.io找到。
安装
将最新稳定版本的metastore-lib安装到Python环境中的最简单方法是使用pip
pip install metastore-lib
快速入门
实例化后端
在安装库后使用库,首先实例化一个存储实例
config = {"token": "...",
"more_options": "..."}
# Using the provided factory method
metastore = create_metastore('github', **config)
# Or by directly instantiating one of the MetaStoreBackend classes:
metastore = GitHubStorage(**config)
存储数据集(创建新的包)
然后使用存储实例存储数据集
import json
with open("datapackage.json") as f:
metadata = json.loads(f)
package_info = metastore.create(package_id, metadata)
这将使用特定的存储后端存储包元数据。例如,在GitHub后端的情况下,将创建一个新的存储库,并带有相应的datapackage.json
文件和LFS指针文件。
返回的package_info
将是一个包含有关存储包修订版本信息的对象
class PackageRevisionInfo:
package_id: str = "..."
revision: str = "..."
package: Dict = {"name": "mypackage",
"version": "1.0.0",
"resources": [
# ...
]}
更新数据集
要更新相同的包
base_rev = package_info.revision
metadata['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> ]
列表中的每个返回对象代表单个修订版本
class PackageRevisionInfo:
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.0
package_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>
结构相关的ID。
其他后端可能期望您使用UUID类型标识符。
使用metastore
库的代码能够组合正确的标识符。
使用文件系统后端进行测试
为了测试和快速原型设计,这个库提供了一个特殊的filesystem
后端,可以用于在文件系统、内存或虚拟文件系统中保存版本化的数据包信息。
此后端基于PyFilesystem库,可以使用其支持的任何文件系统作为存储。
在测试中,建议使用基于内存的存储
from metastore.backend.filesystem import FilesystemStorage
def test_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是免费/开源软件,并按照MIT许可条款分发。有关详细信息,请参阅LICENSE。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
metastore_lib-0.2.0-py2.py3-none-any.whl 的哈希值
算法 | 散列摘要 | |
---|---|---|
SHA256 | a3c692b962b71f5fa1278ece28175be08b395c1c92d774ace2ca61f276bda572 |
|
MD5 | 79c7540462efa7734a42a86d8a958aa9 |
|
BLAKE2b-256 | d017b2947e8d6a48d0341611c9106428339aef59c463cd7c78c5bc3639476f32 |