Python的交易管理
项目描述
交易
此包包含Python的通用交易实现。它主要用于ZODB。
有关其使用的叙述性文档,请参阅http://transaction.readthedocs.org/en/latest。
变更
5.0 (2024-09-18)
添加对Python 3.13的最终支持。
移除对Python 3.7的支持。
4.0 (2023-11-13)
移除对Python 2.7, 3.5, 3.6的支持。
移除对已弃用的python setup.py test.的支持。
添加对Python 3.12的支持。
添加对Python 3.13a2的初步支持。
3.1.0 (2023-03-17)
添加对Python 3.9, 3.10, 3.11的支持。
3.0.1 (2020-12-11)
由before commit钩子引发的异常不再被隐藏。不再调用进一步的commit钩子,并将异常传播到commit()的调用者。请参阅#95。
3.0.0 (2019-12-11)
移除对Python 3.4的支持。
添加对Python 3.8的支持。
移除包括Transaction.register()和旧的ZODB3风格的数据管理器在内的旧版交易API。请参阅问题89。
TransactionManager.run 现在在执行 func 之后提交/中止事务“active”,而不是初始事务(该事务可能已经被 func 提交或中止)。(#58)。
现在它将中止由 func 引发的所有异常——即使它只是一个 BaseException 的实例,而不是 Exception,例如例如 SystemExit 或 KeyboardInterupt 异常。
支持中止钩子(与提交钩子对称)(#77)。
在成功调用 commit() 以及在 任何 abort() 之后,Transaction 将放弃对其钩子、管理器、同步器和数据的引用。这有助于避免潜在的循环引用。请参阅 问题 82。
允许同步器在调用 Transaction.data() 时访问其 afterCompletion 方法,同时中止事务。
现在安全地多次调用 Transaction.abort()。第二次及以后的调用是无效操作。之前会引发 ValueError(Foreign transaction)。
2.4.0 (2018-10-23)
将 ThreadTransactionManager 的实现改为线程本地,该线程本地包装 TransactionManager 而不是继承自 TransactionManager 的线程本地。现在它公开了一个 manager 属性,允许访问包装的交易管理器以允许跨线程调用。请参阅 问题 68。
2.3.0 (2018-10-19)
添加对 Python 3.7 的支持。
达到 100% 的测试覆盖率。
修复当给定的混合字节和文本字符串时,如 Python 2 中的 unicode_literals,格式化 transaction.manager.run 事务注释时的问题。
2.2.1 (2018-03-27)
使文档索引更具用户友好性;将旧文档移至开发者部分。
在 Python 2 中,当在 IPython 中打印堆栈跟踪时不要崩溃。(这解决了 https://github.com/zopefoundation/transaction/issues/5。)
2.2.0 (2018-02-27)
添加对 Python 3.6 的支持。
停止支持 Python 3.3。
将 isRetryableError 添加到 transaction.interfaces.ITransaction 接口,以允许外部系统查询异常是否可重试(暂态)的任何附加数据管理器。任何 transaction.interfaces.TransientError 都被认为是可重试的,但数据管理器也可以根据每个实例考虑其他异常。
2.1.2 (2017-03-11)
为了避免内存泄漏,不要在关于非文本事务元数据的警告中包含意外的值。
2.1.1 (2017-03-11)
为了向后兼容,放宽了事务元数据(用户或描述)必须是文本的要求。
如果分配了 None,则忽略分配。
如果分配了非文本值,则发出警告并将值转换为文本。如果值是二进制字符串,则使用 replace 错误策略将其解码为 UTF-8 编码。
2.1.0 (2017-02-08)
添加了事务管理器的显式模式。显式模式使得某些类型的应用程序错误更容易检测,并且可能允许数据管理器更有效地管理资源。
(这解决了 https://github.com/zopefoundation/transaction/issues/35。)
2.0.3 (2016-11-17)
用户和描述字段现在必须使用文本(unicode)数据设置。以前,如果提供了字节,则将它们解码为 ASCII。已决定这会导致难以测试的漏洞。
此外,事务元数据字段 extended_info 已重命名为 extension。
2.0.2 (2016-11-13)
修复:一些遗留应用程序期望事务 _extension 属性是可变的,但实际上它不是。
2.0.1 (2016-11-11)
事务的 user 和 description 属性现在被定义为文本(unicode),而不是 Python 中的 str 类型。
添加了 extended_info 事务属性,它包含事务元数据。(为了向后兼容,保留了 _extension 属性作为别名。)
事务接口 ITransaction 现在要求 extended_info 键必须是文本(unicode),值必须是可 JSON 序列化的。
从 ITransaction 中移除了 setUser。我们将无限期保留此方法,但在 ITransaction 中使用它是不恰当的。 :)
这些更改的主要目的是使用户、描述和 extended_info 键的文本规范更加严格,并为我们未来序列化扩展信息提供更大的灵活性。这些更改可能是破坏性的,因此我们也增加了主版本号。
1.7.0 (2016-11-08)
添加了一个事务管理器 run 方法,用于将函数作为事务运行,并在必要时对短暂错误进行重试。
修复了事务管理器 attempts 方法。在没有错误时,它没有停止重复。
通过移除不再实现的 beforeCommitHook 以及从两个方法中移除 'self' 来修复 ITransaction。
1.6.1 (2016-06-10)
修复:在事务进行时注册到事务管理器中的同步器没有调用其 newTransaction 方法来通知它们正在进行的交易。
1.6.0 (2016-05-21)
为存储数据而添加了新的交易 API,例如数据管理器。
当事务提交或中止时,取消对已加入事务的数据管理器的引用。
1.5.0 (2016-05-05)
放弃对 Python 2.6 和 3.2 的支持。
添加对 Python 3.5 的支持。
添加了用于查询和清除内部状态的 API,以支持客户端测试。
1.4.4 (2015-05-19)
使用标准的 valuerefs() 方法,而不是依赖于 WeakSet 中 WeakValueDictionary 的实现细节。
添加对 PyPy3 的支持。
需要 100% 的分支覆盖率(除了 100% 的语句覆盖率)。
1.4.3 (2014-03-20)
添加对 Python 3.4 的支持。
1.4.2(跳过)
错误地发布为 1.4.3。
1.4.1 (2013-02-20)
文档说明 sortKey 返回的值必须是字符串,以确保完全排序。
修复了在 Python 3 中 transaction.weakset 上偶尔发生的 RuntimeError:在迭代过程中字典大小发生变化错误。
1.4.0 (2013-01-03)
更新了 Trove 分类器。
1.4.0b1(2012-12-18)
将现有的 doctests 转换为 Sphinx 文档(片段通过 'tox' 进行测试)。
100% 单元测试覆盖率。
向后不兼容:对于运行时错误,引发 ValueError 而不是 AssertionError
在 Transaction.doom 中,如果事务处于不可毁灭状态。
在 TransactionManager.attempts 中,如果传递了非正值。
在 TransactionManager.free 中,如果传递了外部的交易。
在 setup.py 中声明了对 Python 3.3 的支持,并添加了 tox 测试。
当在 "attempts" 机制中调用 transaction.manager.commit 时引发非可重试异常,该异常没有被正确地重新抛出。症状:诸如 Unsupported: Storing blobs in <somestorage> is not supported. 的不可恢复异常会被不恰当地吞没。
1.3.0 (2012-05-16)
添加了 Sphinx API 文档。
添加了对 PyPy 的显式支持。
为了支持 zope.interface.implementer 类装饰器,放弃使用兼容 Python 3 的 zope.interface.implements 类顾问。
添加了对使用 tox 和 jenkins 的持续集成支持。
添加 setup.py docs 别名(安装 Sphinx 和依赖项)。
添加了 setup.py dev 别名(运行 setup.py develop 并安装 nose 和 coverage)。
Python 3.3 兼容性。
修复了“for attempt in transaction.attempts(x)”机制,如果其隐式调用 .commit() 时引发暂时性错误,则不会重试事务。症状:即使你认为通过“attempts”机制重试了多次,也会看到冲突错误(在提交时第一次尝试生成异常将导致该异常被抛出)。
1.2.0 (2011-12-05)
新功能
Python 3.2 兼容性。
取消了 Python 2.4 和 2.5 的兼容性(如果需要在这些 Python 版本下使用“transaction”,请使用 1.1.1)。
1.1.1 (2010-09-16)
错误修复
_transaction.py 中的代码在调用 sys.exc_info() 获取 traceback 对象后仍然保留对本地引用,导致潜在的引用泄漏。
修复了 transaction._transaction.oid_repr 中的 hexlify NameError 并添加了测试。
1.1.0 (1010-05-12)
新功能
事务管理器和事务模块可以用 with 语句定义事务边界,如下所示
with transaction: ... do some things ...
有关更多详细信息,请参阅 transaction/tests/convenience.txt。
有一个新的迭代函数,它可以自动处理暂时性错误(例如 ZODB 冲突错误)。例如,在
for attempt in transaction.attempts(5): with attempt: ... do some things ..
如果正在执行的工作引发了暂时性错误,事务将重试最多 5 次。
有关更多详细信息,请参阅 transaction/tests/convenience.txt。
修复的错误
修复了一个错误,在某些特殊情况下会导致数据管理器上的额外提交调用。
https://mail.zope.org/pipermail/zodb-dev/2010-May/013329.html
当重用线程时,事务数据可能会跨线程泄漏,导致微妙的应用程序错误。
1.0.1 (2010-05-07)
LP #142464:删除日志条目之间的双空行:这使进行更智能的格式化变得更困难。
更新测试以删除对已弃用的 zope.testing.doctest 的使用。
1.0.0 (2009-07-24)
修复了一个错误,该错误不正确地依赖于从字典生成的列表的顺序。
删除了 zpkg 留下的冗余 DEPENDENCIES.cfg。
1.0a1(2007-12-18)
初始版本,于 2007-11-08 从 ZODB trunk 分支(即“3.9.0dev”)。
删除(已弃用)对 beforeCommitHook 别名到 addBeforeCommitHook 的支持。
添加了 weakset 测试。
从 test_transaction 中删除了依赖于 ZODB.tests.utils 的单元测试(这些实际上是集成测试)。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。
源代码发行版
构建分发版
transaction-5.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 106e7bd782bcc0cb5119fc9225b0c9a71dfc53adb938be905223adaef22b1174 |
|
MD5 | 1b1bd8082be375f43a855eb8dd0357d7 |
|
BLAKE2b-256 | effe37ef03bdecfb078053421dc7ba2ed974c57e22548f2bd235a9ec5cd8efbb |
transaction-5.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b4c0b2d49a042d86235fa76531c3356b66d7635bb0e9f29ba2512915fc7b7a42 |
|
MD5 | a3a7e2c02ebab3731a0cebdb3cd863dd |
|
BLAKE2b-256 | ae2ab531f79737312fedf0af878e38bfd42be3a31a7cc74bc89c5f22173ce2ad |