跳转到主要内容

版本管理系统,用于接收Python对象(可能来自像SQLAlchemy这样的ORM)并将这些对象保存在具有同步功能的存储库中。

项目描述

Pyjon.Versionning 是一个小的助手,用于使用mercurial对应用程序中的对象进行版本控制。

这些对象可以存储在数据库中,例如,允许从文件系统到数据库的更改同步,反之亦然(同时保留历史记录)。

版本控制管理器是类,它们接收存储库文件夹并在不存在的情况下初始化它。

可用的基本管理器有

  • pyjon.versionning.Repository:基本存储库。

  • pyjon.versionning.SARepository:用于版本化sqlalchemy对象的基存储库。

基本上,默认类假设您的对象中有一个有效载荷或payload_xml字段,并且该字段将被写入文件。

如果您想要其他字段(或将整个对象序列化为例),您必须创建自己的基于基本存储库的存储库类。

使用简单的json序列化器示例

import simplejson
from myapp import get_vehicles, get_people, get_adresses
from pyjon.versionning import Repository

# for an sqlalchemy repository :
# class MyRepository(SARepository):
# for a normal one (or manual fetching) :
class MyRepository(Repository):
     def get_file_content(self, item):
        # we will assume your objects have an "serializable_fields" attribute
        # this is to support multiple object types (each object type will be stored in a separate folder)

        output_dict = dict()
        for field in item.serializable_fields:
            output_dict[field] = getattr(item, field)

        return simplejson.dumps(output_dict)



    def update_content(self, item, value):

        input_dict = simplejson.loads(value)
        for field in item.serializable_fields:
            setattr(item, field, input_dict[field])

        return simplejson.dumps(my_output_dict)

    # this is used to init the repository with all existing data
    # not necessary with SARepository as it will do it himself with the given classes and dbsession
    def get_all_objects(self):
        for item in get_vehicle():
            yield item

        for item in get_people():
            yield item

        for item in get_adresses():
            yield item

要调用它,以下是方法

# it's thread safe, so you can define it as a global var (imported like "from my_app.versionning import repository")
repository = MyRepository('./repository',
                          default_user="our_great_app <system@ourgreatapp.com>")

# if you have an SARepository, here is how to call it:
from my_app.model import session, vehicles, people, adresses
repository = MyRepository('./repository', session,
                          [vehicles, people, adresses],
                          default_user="our_great_app <system@ourgreatapp.com>")

# now, before using an item in your app (to check changes in the repo), just do that:
repository.check_item(item)

# after saving or creating an item:
repository.store_item(item) # you can define user= to specify the user who did that

# after deleting an item:
repository.delete_item(item) # you can define user= to specify the user who did that

项目详情


下载文件

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

源分布

pyjon.versionning-0.4.2.tar.gz (3.2 kB 查看哈希值)

上传时间 源码

构建版本

pyjon.versionning-0.4.2-py2.6.egg (9.0 kB 查看哈希值)

上传时间 源码

由以下支持