管理自动更新和演变,这些更新和演变更适合在模式迁移之外使用
项目描述
tgext.evolve是一个用于通用迁移和演变的TurboGears2扩展。
tgext.evolve 在多进程和多线程环境中是安全的,因为它依赖于数据库上的分布式锁来执行演变。
在演变期间,应用程序将以 503 状态码响应,您可以自由配置TurboGears来捕获它并使用ErrorController提供自定义页面。
安装
tgext.evolve可以从pypi安装
pip install tgext.evolve
应该对大多数用户适用。
启用
要启用tgext.evolve,请将以下内容放入您的应用程序 config/app_cfg.py
import tgext.evolve tgext.evolve.plugme(base_config, options={ 'evolutions': [ # ... Your evolutions ... ] })
或者当可用时可以使用 tgext.pluggable
from tgext.pluggable import plug plug(base_config, 'tgext.evolve', evolutions=[ # ... Your evolutions ... ])
您可以使用配置文件中的 tgext.evolve.enabled = false 选项禁用tgext.evolve。这通常在测试套件期间发生。
使用演变
演变是 tgext.evolve.Evolution 的子类,必须提供 evolution_id 属性和 evolve() 方法。
以下是一个示例演变,除了等待10秒之外没有做太多事情
import time from tgext.evolve import Evolution class TestEvolution1(Evolution): evolution_id = 'test_evolution_1' def evolve(self): time.sleep(10)
请注意,如果您通过 model.DBSession 或其他方式修改数据或接触数据库,您必须自己 flush 和 commit 您的 UnitOfWork 和 Transaction,因为演变是在事务管理器外部、在单独的线程中执行的。
然后,您可以使用类似以下方式注册您的演变:
from tgext.pluggable import plug plug(base_config, 'tgext.evolve', evolutions=[ TestEvolution1 ])
如果您的演变需要参数,您可以注册其实例而不是注册类。
变更日志
0.0.5
小的错误修复和弃用清理
0.0.4
小的 Python3 兼容性修复
0.0.3
对 SQLAlchemy 的实验性支持,已在 SQLite 和 MySQL 上测试。
0.0.2
允许在 .ini 文件中通过 tgext.evolve.enabled = False 禁用 tgext.evolve。
0.0.1
首个仅支持 MongoDB/Ming 的版本。
项目详情
tgext.evolve-0.0.5.tar.gz 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | d6dc8f03999df622572a2f617359e87e296de79d6734bc3fcc963a318b6b913b |
|
MD5 | 22803e3b7b9e3cb3032446b2af335b49 |
|
BLAKE2b-256 | 8385d28be8baac973968add302e5ca3379747b8ca74d42ca479c0d8a16d2e3a9 |