一个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第三方库


热门话题
java有没有一种方法可以使用DesiredCapabilities在SeleniumWebDriver中获得非远程浏览器?   java逻辑和算术移位的输出   java如何以编程方式在Selenium中打开Safari>preferences?   java应用程序可以在javaws中更改自己的名称吗?   Java 7下的linux JAXB问题它说找不到RI 2.1.0   java解析来自Domino代理的JSON   java如何引用在不同类的main方法中声明的对象属性   java如何扩展apache FTPFile的功能?   java如何优化G1的暂停时间   java使用单个“更新”按钮将测试表的自动增量值插入分数表   针对UTF的regex Java电子邮件验证   java字节流问题   java 安卓将arraylist转换为自定义格式的一个字符串   java SQL语句到JTable   Java:带selfcontain计数器的while循环