跳转到主要内容

数据包版本化元数据存储的库

项目描述

metastore-lib: 数据包的元数据存储库

Build Status Maintainability Test Coverage PyPI version Documentation Status

一个用于抽象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.tar.gz (19.1 kB 查看散列)

上传时间

构建分发

metastore_lib-0.2.0-py2.py3-none-any.whl (23.1 kB 查看散列)

上传时间 Python 2 Python 3

支持者