一个python模块,通过rrule、rdate和exdate重复iCalendar事件。

recurring-ical-events的Python项目详细描述


Travis Build and Tests StatusPython Package Version on PypiDownloads from Pypi 它有一些复杂性: 事件可以重复,从源中删除,以后再编辑。 这个工具可以处理这些情况。

让我们把我们的专业知识放在一起,建立一个可以解决这个问题的工具!

  • 日间节约时间(完成)
  • 重复事件(完成)
  • 具有编辑功能的重复事件(完成)
  • 省略事件的重复事件(完成)
  • 以后编辑发生的重复事件(完成)
  • 正常事件(完成)
  • 日期的重复,但不是小时、分钟和更小的(完成)
  • 无休止重复(完成)
  • 结束重复(完成)
  • 具有开始日期和无结束日期的事件(完成)
  • 开始为日期和开始为日期时间的事件(完成)
  • RRULE(完成)
  • RDATE(完成)
  • DURATION(完成)
  • EXDATE(完成)

不包括:

安装

pip install python-recurring-ical-events

示例

importicalendarimportrecurring_ical_eventsimporturllib.requeststart_date=(2019,3,5)end_date=(2019,4,1)url="http://tinyurl.com/y24m3r8f"ical_string=urllib.request.urlopen(url).read()calendar=icalendar.Calendar.from_ical(ical_string)events=recurring_ical_events.of(calendar).between(start_date,end_date)foreventinevents:start=event["DTSTART"].dtduration=event["DTEND"].dt-event["DTSTART"].dtprint("start {} duration {}".format(start,duration))

输出:

start 2019-03-18 04:00:00+01:00 duration 1:00:00
start 2019-03-20 04:00:00+01:00 duration 1:00:00
start 2019-03-19 04:00:00+01:00 duration 1:00:00
start 2019-03-07 02:00:00+01:00 duration 1:00:00
start 2019-03-08 01:00:00+01:00 duration 2:00:00
start 2019-03-09 03:00:00+01:00 duration 0:30:00
start 2019-03-10 duration 1 day, 0:00:00

用法

icalendar模块负责解析和转换日历。 recurring_ical_events模块使用这样的日历,并在一个时间范围内创建其事件的所有重复。

要导入此模块,请编写

importrecurring_ical_events

有几种方法可用于展开重复事件,例如at(a_time)between(a_start, an_end)

at(a_date)

您可以获取在a_date发生的所有事件。 日期可以是一年,例如2023,一年中的一个月,例如2023年的1月(2023, 1),某个月的一天,例如(2023, 1, 1),一小时,例如(2023, 1, 1, 0),一分钟,例如(2023, 1, 1, 0, 0),或者秒,也可以是datetime.date对象和datetime.datetime

开始和结束都包含在内。举个例子:如果一个事件超过一天,如果它发生在a_date,那么它仍然包括在内。

a_date=2023# a yeara_date=(2023,1)# January in 2023a_date=(2023,1,1)# the 1st of January in 2023a_date=(2023,1,1,0)# the first hour of the year 2023a_date=(2023,1,1,0,0)# the first minute in 2023a_date=datetime.date(2023)# the first day in 2023a_date=datetime.date(2023,1,1)# the first day in 2023events=recurring_ical_events.of(an_icalendar_object).at(a_date)

生成的events是iCalendar事件的列表,请参见下文。

between(start, end)

between(start, end)返回开始时间和结束时间之间发生的所有事件。这两个参数都可以是datetime.datetimedatetime.date、作为参数传递给datetime.datetime的数字元组或以下形式的字符串 %Y%m%dyyyymmdd)和%Y%m%dT%H%M%SZyyyymmddThhmmssZ)。 例如,请参见上面的at(a_date)

events=recurring_ical_events.of(an_icalendar_object).between(start,end)

结果events在一个列表中,请参见下文。

eventsas列表

between(start, end)at(a_date)的结果是icalendar事件的列表。 默认情况下,会复制具有重复的事件的所有属性,如uid和summary。 但是,这些属性可能与源事件不同:

  • dtstart,它是事件实例的开始。
  • 事件实例的结尾。
  • rdate、exdate、rrule是创建事件重复的规则。如果包含它们,则未定义。未来的需求可能会消除它们。如果您想包含它们,请编写一个测试或open an issue

开发

  1. 可选:安装virtualenv和python3并创建一个虚拟环境。
    virtualenv -p python3 ENV
    source ENV/bin/activate
    
  2. 安装软件包。
    pip install -r requirements.txt -r test-requirements.txt
    
  3. 运行测试
    pytest
    

要发布新版本,请编辑setup.py,__version__变量并运行

python3 setup.py tag_and_deploy

测试

这个项目的开发是由测试驱动的。 您可以在test folder中查看测试 如果您有一个日历ICS文件,而此库没有 生成所需的输出,可以将其添加到test/calendars 为您所期望的内容进行文件夹和编写测试。 如果你喜欢,open an issue首先,例如讨论更改和 怎么做。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用多个参数的枚举   从Oracle到Redis的java复制表   java如何保护tomcat服务器中的db用户名和密码。xml   java如何使用注册密钥保护移动应用程序?   java在什么情况下超类不应该是抽象的?   java Backspace键在macOS上的Scala REPL中不起作用   arduino Java+Uno+RFID:调用方法读取Java中的RFID   带有where语句中集合的java JPA查询   java如何向基于Tyrus注释的客户端添加请求头   java对我的二进制搜索算法的反馈   java重新访问数据库时文件的内容不正确   用户在字符串中输入值后退出While循环(Java)   java如何在Maven中的多个项目之间共享项目依赖关系?   java Close从未在数据库上被明确调用   在java中从文件读入布尔矩阵   Java:如何使用父节点将XML流拆分为小型XML文档。VTDXML