跳转到主要内容

未知

项目描述

一个用于Python的分布式、版本化数据存储

python-gitmodel是一个使用Git进行版本控制和远程同步来持久化对象的框架。

为什么?

根据Git的README,Git是一个“愚蠢的内容跟踪器”。这意味着您不仅限于在git中存储源代码。本项目旨在提供一个对象级接口,以将git用作无模式的数据存储,并提供利用git强大版本控制功能的工具。

python-gitmodel允许您使用Python建模您的数据,并提供一个易于使用的接口来将数据存储为git对象。

python-gitmodel基于libgit2,Git核心方法的纯C实现。这意味着我们不是通过shell调用git命令,而是以git的本地速度使用git。

它的优点是什么?

  • 无模式数据存储

  • 永不丢失数据。历史永远保留,并可以使用git工具恢复。

  • 分支和合并您的生产数据

    • python-gitmodel可以与不同的分支一起工作

    • 对您的数据进行分支或标签快照

    • 使用分支在生产数据上进行实验,例如,测试迁移

  • 非常适合内容驱动型应用程序

示例用法

下面我们将介绍一个基本平面页CMS的使用场景。

基本模型创建

from gitmodel.workspace import Workspace
from gitmodel import fields

ws = Workspace('path/to/my-repo/.git')

class Page(ws.GitModel):
    slug = fields.SlugField()
    title = fields.CharField()
    content = fields.CharField()
    published = fields.BooleanField(default=True)

工作区可以看作是你的git工作目录。它还充当pygit2“管道”的“陶瓷”层。与工作目录不同,Workspace类不使用仓库的INDEX和HEAD文件,而是将这些文件在内存中跟踪。

保存对象

page = Page(slug='example-page', title='Example Page')
page.content = '<h2>Here is an Example</h2><p>Lorem Ipsum</p>'
page.save()

print(page.id)
# abc99c394ab546dd9d6e3381f9c0fb4b

默认情况下,对象会获得一个自动ID字段,保存为Python UUID十六进制(不要将这些与git哈希混淆)。您可以轻松地自定义模型中哪个字段作为ID字段,例如

class Page(ws.GitModel):
    slug = fields.SlugField(id=True)

# OR

class Page(ws.GitModel):
    slug = fields.SlugField()

    class Meta:
        id_field = 'slug'

对象默认不会提交到仓库。但是,它们将被写入对象数据库作为树和blob。Workspace.index对象是一个pygit2.Tree,它包含未提交的数据。它与Git的索引类似,但指针存储在内存中。

创建提交很简单

oid = page.save(commit=True, message='Added an example page')
commit = ws.repo[oid] # a pygit2.Commit object
print(commit.message)

您可以使用pygit2访问之前的提交,甚至查看对象两个版本之间的差异。

# walking commits
for commit in ws.walk():
    print("{}: {}".format(commit.hex, commit.message))

# get a diff between two commits
head_commit = ws.branch.commit
prev_commit_oid = head_commit.parents[0]
print(prev_commit.diff(head_commit))

可以通过id轻松检索对象

page = Page.get('example-page')
print(page.content)

买者注意

Git本身性能并不出色。如果您需要您的基于git的数据在生产环境中表现良好,您需要给它一个“伙伴”。由于python-gitmodel可以以多种方式使用,因此如何优化它取决于您。

状态

该项目正在进行大量开发,API在1.0版本发布前可能会发生巨大变化。目前,只能使用基本模型创建和保存实例。

待办事项

  • 缓存?

  • 索引?

  • 查询API?

  • 完整文档


python-gitmodel受到了Rick Olson的演讲“Git,一个愚蠢的NoSQL数据库”和Paul Downman的GitModel(用于Ruby)的启发。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

praekelt-python-gitmodel-0.1.3.tar.gz (23.2 kB 查看哈希)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面