一个python库,用于指定重复的时间规则并获取时间戳作为回报。
turoboro的Python项目详细描述
图罗博罗
一个python库,用于指定重复的时间规则并获取时间戳作为回报。
典型的用法是阐明重复规则的行为并得到确切的点 及时执行这些规则
也就是说,这个库回答了以下问题:
给定一个循环规则,
- 下次是什么时候?
- 什么时候会发生这种事?
- 什么时候会发生这种事
例如,你想知道“每周四 每两个月的第三个星期,UTC时间8点。
问图罗博罗!
不过,这项工作正在进行中。所以…基本上还不用这个库。
安装
$ pip install turoboro
用法
turoboro允许您设置三个主要时间的重复规则:
- 带结束日期,或
- 在一定数量的事件之后结束,或者
- 那是无限的
所有定期规则都必须有开始datetime
(默认为现在)。
让我们一次一个地看
每日规则示例
>>> import turoboro
>>> from datetime import datetime
>>> rule = turoboro.DailyRule(start=datetime(2014, 1, 1))
>>> rule.every_nth_day(2).on_hour(8)
DailyRule: Starts on: 2014-01-01T08:00:00, repeats every 2 days at 8 o'clock, forever.
>>> rule.except_weekdays(*turoboro.WEEKEND)
DailyRule: Starts on: 2014-01-01T08:00:00, repeats every 2 days at 8 o'clock, forever. Except days Saturday, Sunday.
>>> rule.end_on(datetime(2014, 1, 31))
DailyRule: Starts on: 2014-01-01T08:00:00, repeats 2 days at 8 o'clock, until 2014-02-01T00:00:00. Except days Saturday, Sunday.
好的,现在我们有一个DailyRule
类的实例
您还可以仅使用构造函数来实例化完全相同的东西:
>>> rule = turoboro.DailyRule(
... datetime(2014, 1, 1), every_nth_day=2, except_weekdays=turoboro.WEEKEND,
... end_on=datetime(2014, 1, 31), on_hour=8
... )
让我们看看这个问题的实际解决时间。
>>> computed = rule.compute()
>>> computed.first
'2014-01-01T08:00:00'
>>> computed.last
'2014-01-31T08:00:00'
>>> computed.count
12
>>> computed.all
['2014-01-01T08:00:00', '2014-01-03T08:00:00', '2014-01-07T08:00:00', '2014-01-09T08:00:00',
'2014-01-13T08:00:00', '2014-01-15T08:00:00', '2014-01-17T08:00:00', '2014-01-21T08:00:00',
'2014-01-23T08:00:00', '2014-01-27T08:00:00', '2014-01-29T08:00:00', '2014-01-31T08:00:00']
为了方便起见,您可以获得一个生成器函数的句柄,该函数将遍历 整套,例如:
>>> result = rule.result()
>>> next(result)
'2014-01-01T08:00:00'
>>> next(result)
'2014-01-03T08:00:00'
>>> [r for r in result]
['2014-01-07T08:00:00', '2014-01-09T08:00:00', '2014-01-13T08:00:00', '2014-01-15T08:00:00',
'2014-01-17T08:00:00', '2014-01-21T08:00:00', '2014-01-23T08:00:00', '2014-01-27T08:00:00',
'2014-01-29T08:00:00', '2014-01-31T08:00:00']
每日规则的变化
您不必提供结束日期-您可以提供许多事件
或者用turoboro
:repeat_n_times
的行话。因此:
>>> rule.repeat_n_times(10)
# ValueError: You may not specify both an end date and a repeat count
哎呀,让我们先终止结束日期(因为让我们明确我们的意图)
>>> rule.end_on(None).repeat_n_times(100)
DailyRule: Starts on: 2014-01-01T08:00:00, repeats 2 days at 8 o'clock, 100 times. Except days Saturday, Sunday.
您还可以通过省略提供结束日期或
事件。computed.first
、computed.last
和computed.all
属性仍将
return的行为类似于结果是一个有界集(默认为100个引用)但是,通过
使用rule.result()
生成器函数,可以在
rule.compute()
会给的但不是无限远,所以在生成器中迭代
最终将停止,其速度取决于使用指定的批处理大小
关键字max_count_if_infinite
一个max_count_if_infinite=2
可能会给你结果
未来几年。
>>> result = rule.result(max_count_if_infinite=2)
>>> [r for r in result] # 1974 results
从本质上说——迭代无限的日期时间集并不是很有用因为,嗯。。。
他们永远不会结束然而,一旦你有了“无限”规则,你总能找到下一个
通过简单地告诉compute
或result
并指定
from_dt
参数,例如:
>>> result = rule.result(from_dt=datetime.utcnow())
>>> next(result)
'2019-06-26T08:00:00'