调度库,它提供了一种通用的方法来组合和查询经常性连续事件的调度,如组织、会议、电影放映等的工作时间。
python-tempo的Python项目详细描述
此项目提供了一种通用的方法来组合和查询 经常性的连续事件,如组织的工作时间、会议, 电影节目等。
它包含一个python实现和postgresql的绑定, django和django rest框架。
链接
功能
- 灵活的调度模型,可以表示ScCuffes,和其他库 不行。
- 查询:包含单个时间戳、将来发生的事件。
- 绑定:
- PostgreSQL
- 用于存储计划的域类型
- 对其进行测试的程序 (时间戳包含,未来发生的事件)。
- django
- 模型字段
- 自定义查找 (时间戳包含, 与两个时间戳之间的间隔相交, 测试预定事件是否在给定时间间隔内发生 两个时间戳之间)。
- django rest框架
- 用于序列化和反序列化计划的序列化程序字段。
- PostgreSQL
快速示例
只是一个简短的例子,它展示了如何构造和查询一个调度。
>>> import datetime as dt >>> from itertools import islice >>> from tempo.recurrenteventset import RecurrentEventSet >>> recurrenteventset = RecurrentEventSet.from_json( ... ('OR', ... ('AND', [1, 5, 'day', 'week'], [10, 19, 'hour', 'day']), ... ('AND', [5, 6, 'day', 'week'], [10, 16, 'hour', 'day'])) ... ) # 10-19 from Monday to Thursday and 10-16 in Friday >>> d1 = dt.datetime(year=2000, month=10, day=5, hour=18) >>> d1.weekday() # Thursday 3 >>> d1 in recurrenteventset True >>> d2 = dt.datetime(year=2000, month=10, day=6, hour=18) >>> d2.weekday() # Friday 4 >>> d2 in recurrenteventset False >>> d = dt.datetime(year=2000, month=1, day=1) >>> list(islice(recurrenteventset.forward(start=d), 3)) [(datetime.datetime(2000, 1, 3, 10, 0), datetime.datetime(2000, 1, 3, 19, 0)), (datetime.datetime(2000, 1, 4, 10, 0), datetime.datetime(2000, 1, 4, 19, 0)), (datetime.datetime(2000, 1, 5, 10, 0), datetime.datetime(2000, 1, 5, 19, 0))]
调度模型
示例
下面是一个节奏如何表示时间表的示例:
('OR', ('AND', [1, 5, 'day', 'week'], [10, 19, 'hour', 'day']), ('AND', [5, 6, 'day', 'week'], [10, 16, 'hour', 'day'])))
意思是“从周一到周四上午10点到晚上7点 在星期五上午10点到下午4点之间”。
非正式定义
时间表的基本组成部分是一个经常性的事件, 定义如下:
[<start time>, <end time>, <time unit>, <recurrence unit>]
<;开始时间>;和<;结束时间>;是数字,定义 哪一个事件会发生。<;时间单位>;定义 间隔值的时间。并且<;重复单位>;定义多长时间 间隔重复。<;时间单位>;和<;重复单位>;值是时间 测量单位,如“秒”、“小时”、“日”、“周”、“年”等。 <;重复单位>;也可以为“空”,这意味着间隔不 在时间上重复,它只是定义了两个时间点,对应于 事件的起点和终点。
可使用运算符组合重复事件:union-或, 交叉点-和和否定-不是。
待办事项
- 有关RecurrentEventSet的更多测试。
- 为日程表实现负索引:从一天结束开始索引 或月等。它将使库能够模拟 “本月最后一个星期五”。