跳转到主要内容

Python的交易管理

项目描述

交易

https://github.com/zopefoundation/transaction/actions/workflows/tests.yml/badge.svg Documentation Status PyPI Python versions

此包包含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,例如例如 SystemExitKeyboardInterupt 异常。

  • 支持中止钩子(与提交钩子对称)(#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)

2.2.0 (2018-02-27)

  • 添加对 Python 3.6 的支持。

  • 停止支持 Python 3.3。

  • isRetryableError 添加到 transaction.interfaces.ITransaction 接口,以允许外部系统查询异常是否可重试(暂态)的任何附加数据管理器。任何 transaction.interfaces.TransientError 都被认为是可重试的,但数据管理器也可以根据每个实例考虑其他异常。

    请参阅 https://github.com/zopefoundation/transaction/pull/38

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)

  • 事务的 userdescription 属性现在被定义为文本(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() 方法,而不是依赖于 WeakSetWeakValueDictionary 的实现细节。

  • 添加对 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 类顾问。

  • 添加了对使用 toxjenkins 的持续集成支持。

  • 添加 setup.py docs 别名(安装 Sphinx 和依赖项)。

  • 添加了 setup.py dev 别名(运行 setup.py develop 并安装 nosecoverage)。

  • 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。

修复的错误

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 (87.1 kB 查看哈希值

上传于 源代码

构建分发版

transaction-5.0-py3-none-any.whl (46.3 kB 查看哈希)

上传于 Python 3

支持者

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面