跳转到主要内容

NTI Transactions Utility

项目描述

nti.transactions

https://coveralls.io/repos/github/NextThought/nti.transactions/badge.svg?branch=master https://github.com/NextThought/nti.transactions/workflows/tests/badge.svg Documentation Status

transaction包的扩展。

事务管理

nti.transactions.loop.TransactionsLoop 是一个可重试的事务管理器。从概念上讲,它类似于事务包本身提供的attempts上下文管理器,但功能更强大,并且可以通过子类进行扩展。功能包括

  • 可配置的提交否决。

  • 可扩展的测试以确定哪些异常应该重试。

  • 当预期没有副作用时,能够中止事务并跳过可能昂贵的提交。

  • 在重试之间进行睡眠。

  • 详细的日志记录和时间跟踪。

TransactionLoop可以直接使用,也可以继承以进行定制。例如,用于Pyramid tween的最小子类可能如下所示(有关功能齐全的tween,请参阅 nti.transactions.pyramid_tween

>>> class PyramidTransactionLoop(TransactionLoop):
...    def prep_for_retry(self, number, request):
...        request.make_body_seekable()
...    def describe_transaction(self, request):
...        return request.url

数据管理器

提供了一些数据管理器以方便使用。

第一个数据管理器在事务成功时将对象放入一个队列(具有 fullput_nowait 方法的某个东西)。如果队列已满,则不允许事务提交

>>> from nti.transactions.queue import put_nowait
>>> put_nowait(queue, object)

这是 ObjectDataManager 的一个特例,它将在事务提交时调用一个方法,并传递任何参数。它可以配置为对事务是否应允许提交进行投票。这对于在事务成功时将项目放入Redis队列非常有用。可以直接构建它,但 do 函数是一个简化的方式,可以将它与当前事务连接起来

>>> from nti.transactions.manager import do
>>> do(print, args=("Committed"))

更改

5.0.0 (2024-06-11)

  • 添加对Python 3.12和3.13的支持。

  • 取消对Python 2及低于Python 3.8的版本的支持。

  • 添加指定循环应使用的非默认事务管理器的功能。

4.3.0 (2023-05-05)

  • 添加对Python 3.10和3.11的支持。

4.2.1 (2021-05-25)

  • 在由于异常而中止事务时,记录异常而不是仅记录异常类型(两次)。异常信息在理解错误的具体原因以及如何修复瞬态错误(例如,ZODB.POSException.ConflictError 包含对象ID和类,这可以用来减少冲突)时非常有帮助。这会使日志记录稍微昂贵一些(当启用时)。请参阅 PR 58

4.2.0 (2021-02-11)

  • 添加对Python 3.9的支持。

  • 将CI从Travis CI迁移到Github Actions。

  • 当Pyramid tween重试时,请求字典中的任何易失性属性(以 _v_ 开头的属性)将被删除。这受到 persistent 的启发,旨在方便安全缓存。与事务循环发送的事件相比,没有指定顺序。请参阅 问题 54

  • 修复了各种事件类未正确指定它们实现的接口的问题。例如,WillFirstAttempt 现在正确实现了 IWillFirstAttempt,而 WilLRetryAttempt 现在正确实现了 IWillRetryAttempt。请参阅 问题 52

  • IWillLastAttempt 添加为 IWillRetryAttempt 的子类,并作为最后一个事件发出。

  • Pyramid tween现在发出 IWillRetryAttemptWithRequest 等,以提供对请求对象的简单访问。

4.1.0 (2020-07-22)

  • 向pyramid tween事务工厂添加日志记录,以显示正在使用的设置。

  • 添加 TransactionLoop.side_effect_free_log_level,并将默认值更改为DEBUG。在测试中将此值设置为ERROR或更高很有用。

  • 添加 TransactionLoop.side_effect_free_resource_limit

4.0.1 (2020-07-18)

  • 添加对zope.event的缺失依赖。

  • 当事务同步器在第一次调用时引发错误时,在循环的第二次和随后的调用中引发 AlreadyInTransaction 错误。请参阅 问题 49

4.0.0 (2019-12-13)

  • 至少需要 transaction 包的3.0版本。

  • 取消对dm.transaction.aborthook包的依赖。该功能现在在3.0事务中已经原生动成。

3.1.1 (2019-12-10)

  • 修复了长时间提交的日志记录问题。请参见问题44

  • 为声称为无副作用的交易添加日志和指标(transaction.side_effect_free_violation),但实际上会导致资源管理器合并。这可能表明不必要的丢弃工作。请参见问题45

3.1.0 (2019-11-29)

  • 添加对Python 3.8的支持。

  • 重构内部实现细节。不再从nti.transactions.transactions导入所有内容,而是使用更具体的模块按功能分组对象。旧的导入仍然有效。在4.0中它们将生成弃用警告,在5.0中将被删除。

  • 添加Pyramid tween来管理事务和事务重试。可以配置各种设置作为Pyramid部署设置(例如,在ini文件中)。

  • 使事务循环在重试之间增加睡眠时间,遵循以太网使用的随机二进制指数退避算法

  • 将默认尝试次数减少到4(一次尝试和3次重试)。请参见问题35

  • 使事务循环发出更多指标。请参见问题31

  • 使提交日志现在至少以调试级别发生,对于长时间提交升级为警告。它还包括重试次数和睡眠时间。请参见问题32

  • 使事务循环在事务生命周期的特定部分发出事件(使用zope.event)。请参见问题33

3.0.0 (2019-09-06)

  • 使TransactionLoop以显式模式放置其事务管理器。这可能更快,更容易推理,但禁止调用方处理程序手动调用begin()abort()commit()。请参见问题20

  • transaction.begin()从重试的代码块中移出。之前,那里的错误可能会被抛出,而不是重试,除非子类进行了自定义。

  • 为TransactionLoop添加setUptearDown方法,以便子类可以在事务循环内部钩入。如果它们需要在将事务管理器置于显式模式之后进行某些操作,这特别有用。请参见问题22

2.0.1 (2019-09-03)

  • 修复与perfmetrics 3.0的兼容性:删除from __future__ import unicode_literals

2.0.0 (2018-07-20)

  • 在事务2.2中使用新的公共isRetryableError。此包的接口没有改变,但依赖项的重大版本升级需要在此处进行重大升级。请参见问题12

  • 测试对Python 3.7的支持;删除对Python 3.4的支持。

  • TransactionLoop更注意不要保留traceback对象,特别是在Python 2中。

1.1.1 (2018-07-19)

  • TransactionLoopTypeError引发CommitFailedError时,它保留原始消息。

  • 测试对Python 3.6的支持。

1.1.0 (2017-04-17)

  • 添加一个新的ObjectDataManager,它将尝试在其他ObjectDataManagers之后执行。

1.0.0 (2016-07-28)

  • 添加对Python 3的支持。

  • 消除ZODB依赖。在提交期间,对于意外的TypeErrors不再引发ZODB.POSException.StorageError,而是引发新的类nti.transactions.interfaces.CommitFailedError

  • 引入一个新的子类 TransactionError,即 AbortFailedError,在由于系统错误导致中止失败时抛出。

项目详情


下载文件

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

源代码发行版

nti.transactions-5.0.0.tar.gz (50.5 kB 查看哈希值)

上传时间 源代码

构建发行版

nti.transactions-5.0.0-py2.py3-none-any.whl (42.0 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者