Skip to main content

iCalendar 解析器/生成器

项目描述

icalendar包是一个兼容RFC 5545的 iCalendar 文件解析器/生成器。


主页

https://icalendar.readthedocs.io

代码

https://github.com/collective/icalendar

邮寄名单

https://github.com/collective/icalendar/issues

依赖项

python-dateutilpytz

兼容

Python 2.7 和 3.4+

执照

BSD


https://travis-ci.org/collective/icalendar.svg?branch=master

您想提供帮助和贡献吗?完美的!

这些是一些贡献示例

对于拉取请求,请记住这一点

  • 添加一个测试来证明您的修复并使其通过。

  • 在 CHANGES.rst 中描述您的更改

  • 将自己添加到 docs/credits.rst

变更日志

4.1.0 (2022-07-11)

新的功能:

  • 不再在 Python 3.4、3.5 和 PyPy2 上进行测试,因为我们无法让它工作。从技术上讲,它应该仍然可以工作,只是不再经过测试。不要期望分支 4.x 有太多的发展。主分支将用于我们支持的其余 Python 版本。[毛里求斯]

Bug修复:

  • 使用 GitHub 操作进行测试。[毛里求斯]

4.0.9 (2021-10-16)

Bug修复:

  • 修复 vCategories 以正确编码/解码。[主题]

  • vDuration 属性值:修复在多次to_ical调用后更改持续时间符号。参考:#320 修复:#319 [barlik]

4.0.8 (2021-10-07)

Bug修复:

  • 添加了对 Python 3.9 和 3.10 的支持(无需更改代码)。

  • 将裸露的 'except:' 替换为 'except Exception:' (#281)

4.0.7 (2020-09-07)

Bug修复:

  • 修复 rrule 处理,重新启用 test_create_america_new_york()

4.0.6 (2020-05-06)

Bug修复:

  • 将重复定义转换为 ical 字符串时,使用vText作为默认类型。[kam193]

4.0.5 (2020-03-21)

Bug修复:

  • 修复了与构建阅读文档相关的文档问题 [davidfischer]

4.0.4 (2019-11-25)

Bug修复:

  • 减少 Hypothesis 迭代以加快测试速度,让 PRs 通过 [UniversalSuperBox]

4.0.3 (2018-10-10)

Bug修复:

  • 类别以逗号分隔,不是每行 1 #265。[克莱德]

  • 将具有混合时区感知和幼稚日期时间的测试标记为预期失败。[克莱德]

4.0.2 (2018-06-20)

Bug修复:

  • 将所有 pypi.python.org URL 更新到 pypi.org [jon.dufresne]

4.0.1 (2018-02-11)

  • 添加了基本的命令行界面。[jfjlaros]

  • 自述文件、设置和 travis 更新。[jdufresne,巴勃罗卡斯特拉诺]

4.0.0 (2017-11-08)

重大变化:

  • 放弃对 Python 2.6 和 3.3 的支持。

3.12 (2017-11-07)

新的功能:

  • 接受 Windows 时区标识符为有效。第242章 【哥儿】

Bug修复:

  • 在启用 Python 警告时修复 setup.py 中的 ResourceWarnings。第244章 【绝地求生】

  • 修复字符串和字节文字中的无效转义序列。第245章【绝地求生】

  • 在生成的 Wheel 包中包含许可证文件。第243章【绝地求生】

  • 修复非 ASCII TZID 和 TZNAME 参数处理。第238章 【克莱夫斯特】

  • 文档:更新安装说明。第240章【伊克兰】

3.11.7 (2017-08-27)

新的功能:

  • 添加了 vUTCOffset.ignore_exceptions 以允许抑制失败的 TZOFFSET 解析(现在这忽略了对偏移量 > 24h 的检查)[geier]

3.11.6 (2017-08-04)

Bug修复:

  • 修复 VTIMEZONE,包括 RDATE #234。[盖尔]

3.11.5 (2017-07-03)

Bug修复:

  • 添加了一个断言,即 VTIMEZONE 子组件的 DTSTART 必须是 DATETIME [geier] 类型

  • 修复对具有相同 DTSTART 和 OFFSET 但类型不同的子组件的 VTIMEZONE 处理 [geier]

3.11.4 (2017-05-10)

Bug修复:

  • 不要破坏包含等号的参数值,例如 base64 编码的二进制数据 [geier]

  • 修复了对具有相同 DTSTART 的子组件的 VTIMEZONE 处理。[盖尔]

3.11.3 (2017-02-15)

Bug修复:

  • 删除了setuptools作为依赖项,因为它只需要 setup.py 而不是包。

  • 不要在 unicode LINE SEPARATOR字符 \u2028上拆分内容行,而只能在CRLFLF上拆分内容行。

3.11.2 (2017-01-12)

Bug修复:

  • 使用 python 3.5 和 3.6 运行测试。[盖尔]

  • 允许在 travis.ci 上使用 pypy3 失败的测试。[盖尔]

3.11.1 (2016-12-19)

Bug修复:

  • 在将错误消息添加到收集的错误消息堆栈之前对其进行编码。

3.11 (2016-11-18)

修复:

  • 使用 pypy 和 pypy3 成功测试。[gforcada]

  • 较小的文档更新。[tpltnt]

3.10 (2016-05-26)

新的:

  • 更新了组件描述以更好地符合 RFC 5545。参考文献 #183。[stlaz]

  • 将 PERIOD 值类型添加到日期类型。还修复了 #184 中描述的不兼容性。参考文献#189。[stlaz]

修复:

  • 修复与dateutil>=2.5一起使用的测试套件。参考文献#195。[解谜者]

  • 重新引入 3.9.2 中删除的 cal.Component.is_broken。参考文献#185。[盖尔]

3.9.2 (2016-02-05)

新的:

  • 在 setup.py 中定义了test_suite 。现在可以通过python setup.py test运行测试。[盖尔]

修复:

  • 修复了 cal.Component.from_ical() 将未知组件表示为已知组件之一的问题。[stlaz]

  • 修复了解析 ical 字符串期间可能出现的 IndexError 异常。[stlaz]

  • icalendar.cal.Component上进行布尔测试时,始终返回True。在由于 CaselessDict 而返回False之前,如果它不包含任何项目。[stlaz]

  • 固定日期时间在解析期间被识别为日期或时间。为从 ical 字符串解析添加了更好的错误处理。[stlaz]

  • 在 init.py 中添加了 __version__ 属性。[汤姆尝试]

  • 文档修复。[汤姆尝试]

  • Pep 8、UTF 8 标头、dict/list 对文字的调用。[主题]

3.9.1 (2015-09-08)

  • 修复vPeriod.__repr__。[空间]

  • 提高 foldline() 性能。这提高了折叠线的性能,尤其是对于像 base64 编码的内联附件这样的大字符串。在某些情况下(1MB 字符串),对于 ASCII 数据,从 7 分钟到少于 20 毫秒,对于非 ASCII 数据,从 500 毫秒。参考:#163。[emfree]

3.9.0 (2015-03-24)

  • 从 VTIMEZONE 组件创建时区对象。[盖尔]

  • 使python-dateutil成为依赖项。[盖尔]

  • 使 RRULE 容忍尾随分号。[轨枕]

  • 文档修复。[t-8ch,那个]

3.8.4 (2014-11-01)

  • 将缺少的 BYWEEKNO 添加到重复规则。[鲁斯克尔]

3.8.3 (2014-08-26)

  • 根据 RFC5545,VTODO 中的 PERCENT 属性重命名为 PERCENT-COMPLETE。[魔方]

3.8.2 (2014-07-22)

  • 从 egg 发行版中排除编辑器备份文件。修复 #144。[主题]

3.8.1 (2014-07-17)

  • 3.8 中 CaselessDicts 的表示改变了 Components 的 name 属性,因此破坏了外部 API。这已得到修复。[解谜者]

3.8 (2014-07-17)

  • 允许属性名称中的点(需要 vCard 兼容性)。参考文献#143。[解谜者]

  • 更改 CaselessDict 对象的类表示以始终包含类名或类的名称属性(如果可用)。还显示 Component 对象的子组件。[主题]

  • 不要将 data_encode 用于 CaselessDict 类表示,而是使用 dict 的 __repr__ 方法。[t-8ch]

  • 处理具有多个值的参数,这是 vCard 3.0 所需要的。参考文献#142。[t-8ch]

3.7 (2014-06-02)

  • 对于将ignore_exceptions设置为True的组件,将不可解析的行标记为已损坏,而不是上升ValueErrorVEVENT组件默认将 ignore_exceptions设置为True。参考文献#131。修复 #104。[jkiang13]

  • 使python-dateutil成为软依赖项。[博尔特涅夫]

  • 将可选的sorted参数添加到Component.to_ical。将其设置为 false 允许用户保留原始属性和参数顺序。参考文献#136。修复 #133。[解谜者]

  • 修复最新pytz的测试。不要直接在 datetime 对象上设置tzinfo,而是使用 pytz 的localize函数。参考文献#138。[untitaker, thet]

  • 删除 __all__ 的错误使用。我们不鼓励使用from package import * imports。修复 #129。[埃里克-威瑟]

3.6.2 (2014-04-05)

  • Pep8 和清理。[拉苏德]

3.6.1 (2014-01-13)

  • 无论语言环境设置如何,打开 setup.py 引用的文本文件为 utf-8。修复 #122。[索霍特尼克]

  • 将 tox.ini 添加到源 tarball,这简化了对 in 发行版的测试。[索霍特尼克]

3.6 (2014-01-06)

  • Python3 (3.3+) + Python 2 (2.6+) 支持 [geier]

  • 确保 to_ical() 总是返回字节 [geier]

  • 支持将列表添加到组件属性中,该属性的值已经是列表,并删除了仅由 add 方法使用的 Component.set 方法。[主题]

  • 删除通过 cal.add 添加时通过值的 params 属性添加属性参数的能力(这仅适用于自定义值对象并构成一个奇怪的 API),但支持 cal.add 的方法签名上的参数属性以传递字典属性参数键/值对。修复 #116。[主题]

  • 从他的 regebro-refactor 分支向后移植一些 Regebro 的更改。[主题]

  • 在另一个格式错误的内容行案例上引发显式错误。[hajdbo]

  • 从 ical 字符串解析时,使用时区信息正确解析 datetime 组件属性值。[解谜者]

3.5 (2013-07-03)

  • 让 to_unicode 对于非 unicode 字符串更优雅,就像 CMFPlone 的 safe_unicode 一样。[主题]

3.4 (2013-04-24)

  • 在内部切换到 unicode。这应该可以修复所有编码/解码错误。[主题]

  • 支持非 ascii 参数值。修复 #88。[战争]

  • 添加了将字符串中的 '' + any of r',;:' 字符转换为 '%{:02X}' 形式的函数,以避免拆分用 '' 转义的字符。[战争]

  • 在 vUTCOffset 属性中允许秒数。修复 #55。[主题]

  • Component.decode更好地处理 vRecur 和 vDDDLists 属性。修复 #70。[主题]

  • 不要让Component.add重新编码已经编码的值。这简化了 API,因为不需要显式传递encode=False。修复 #82。[主题]

  • 将 tzinfo_from_dt 重命名为 tzid_from_dt,这就是它的作用。[主题]

  • 更多支持 dateutil 解析的 tzinfo 对象。修复 #89。[leo-naeka]

  • 完全删除 python-dateutil 版本修复。当前的 python-dateutil 具有 Py3 和 Py2 兼容性。[主题]

  • 在 setup.py 中声明所需的 python-dateutil 依赖项。修复 #90。[克莱克]

  • 提高测试覆盖率。[主题]

  • 删除接口模块,因为它未使用。[主题]

  • 删除test_doctests.py,测试套件已经在 test_icalendar.py中正确创建。[rnix]

  • 将文档测试转换为单元测试、测试修复和清理。[战争]

3.3 (2013-02-08)

  • 放弃对 Python < 2.6 的支持。[主题]

  • 允许使用列表实例化 vGeo,而不仅仅是地理坐标的元组。修复 #83。[主题]

  • 不要强制将列表传递给 vDDDLists 并允许设置单独的 RDATE 和 EXDATE 值,而不必将它们包装在列表中。[主题]

  • 修复编码功能以允许设置 RDATE 和 EXDATE 值,并且不使用 icalendar 属性绕过编码。[主题]

  • 允许为 vDDDLists 设置时区,并支持 RDATE 和 EXDATE 组件属性的时区属性。[主题]

  • 将 TZID 属性的设置移至其所属的 vDDDTypes。[主题]

  • 使用 @staticmethod 装饰器而不是包装器函数。[warvariuc,那个]

  • 将参数值的引用扩展到所有这些字符:“,;: ’'”。这修复了 Outlook 与某些字符的不兼容问题。修复:#79,修复:#81。[战争]

  • 定义 VTIMETZONE 子组件 STANDARD 和 DAYLIGHT 以符合 RFC5545。[主题]

3.2 (2012-11-27)

  • 文档文件布局重组。[主题]

  • 修复时间支持。vTime 事件可以用 datetime.time 对象实例化,并且不从 datetime.time 本身继承。[顿克劳]

  • 正确处理使用 dateutil 解析的 tzinfo 对象。修复 #77。[warvariuc,那个]

  • 文本值被正确转义。修复 #74。[战争]

  • 返回旧的折叠算法,因为当前实现在某些情况下失败。修复 #72,修复 #73。[战争]

  • 在 1900 年之前的日期/时间属性上支持 to_ical()。 [cdevienne]

3.1 (2012-09-05)

  • 确保某些属性的参数传播到 ical 输出。[卡那利普]

  • 重新包含文档测试。[rnix]

  • 在prop.vCalAddressprop.vText中确保在实例创建时正确的数据类型。[rnix]

  • 将 TZID 参数应用于从 RECURRENCE-ID [dbstovall] 解析的日期时间

  • 本地化时区的日期时间以避免 DST 转换错误。[数据库]

  • 允许以秒为单位的 UTC-OFFSET 属性值数据类型,这遵循 RFC5545 规范。[尼古拉耶夫]

  • 删除 utctz 和 normalized_timezone 方法以简化代码库。这些方法太小而无法使用,只能在一个地方使用。[主题]

  • 使用 Component.add() 添加 icalendar 属性时,强制将 CREATED、DTSTART 和 LAST-MODIFIED 的值转换为 UTC。RFC 要求这些属性使用 UTC。[主题]

  • 删除了最后一次出现的旧 API (from_string)。[伦巴内]

  • 将“递归”参数添加到 property_items() 以切换递归列表。例如,在解析包含多个组件的文本/日历文本时(例如,具有 5 个 VEVENT 的 VCALENDAR),以前的情况要求我们查看 VEVENT 中的所有属性,即使我们只想要 VCALENDAR 组件下的属性(VERSION、PRODID、CALSCALE , 方法)。[dmikurube]

  • 所有单元测试已修复。[米凯弗瑞克霍尔姆]

3.0.1b2 (2012-03-01)

  • 对于 DATE-TIME 属性中的所有 TZID 参数,按照 RFC5545 的要求,使用时区标识符(例如 Europe/Vienna)而不是时区名称(例如 CET)。时区名称与时区组件中的时区标识符一起使用。[主题]

  • 时区解析、问题和测试修复。[mikaelfrykholm, garbas, tgecho]

  • 由于我们使用 pytz 作为时区,因此也使用 pytz 库中的 UTC tzinfo 对象而不是自己的实现。[主题]

3.0.1b1 (2012-02-24)

  • 更新发布信息。[主题]

3.0

  • 添加 API 以获得适当的时区支持。允许使用基于 pytz 的时区信息的 Python 日期时间创建具有时区信息的 ical DATE-TIME 字符串,反之亦然。[主题]

  • 统一 API 以仅使用 to_ical 和 from_ical 并删除字符串转换作为 Python 3 兼容性的要求:新:to_ical。旧:ical、string、as_string 和通过 __str__ 和 str 进行的字符串转换。新:from_ical。旧:from_string。[主题]

2.2 (2011-08-24)

2.1 (2009-12-14)

  • 修复关于object.__init__不带参数的弃用警告。

  • 为日期值正确设置 VALUE 参数。

  • 长二进制数据将使用换行符进行 base64 编码,这使得 iCalendar 文件不正确。(这仍然需要测试)。

  • 正确处理包含换行符的内容行。

2.0.1 (2008-07-11)

  • 使测试在 Python 2.5+ 下运行

  • 将 UTC 类重命名为 Utc,因此它不会与 UTC 对象发生冲突,因为这会使 UTC 对象变得不可拾取。

2.0 (2008-07-11)

  • EXDATE 和 RDATE 现在返回一个 vDDDLists 对象,其中包含一个 vDDDTypes 对象列表。根据 RFC,EXDATE 和 RDATE 可以包含日期列表。

    *注意!*:此更改与之前的行为不兼容,因此如果您处理 EXDATE 和 RDATE,您将需要更新您的代码。

  • 当创建 -5 小时的 vDuration(这本身就是无意义的)时,它的 ical 输出是 -P1DT19H,这是正确的,但很难看。现在是'-PT5H',更漂亮。

1.2 (2006-11-25)

  • 修复了新折叠代码中的字符串索引超出范围错误。

1.1 (2006-11-23)

1.0 (2006-08-03)

  • 使 get_inline 和 set_inline 支持非 ascii 代码。

  • 添加了对创建 python egg 发行版的支持。

0.11 (2005-11-08)

  • 将组件 .from_string 更改为使用 types_factory 而不是将条目硬编码为“内联”

  • 将 UTC tzinfo 更改为单例,因此在任何地方都使用相同的

  • 根据 RFC,通过对键名、参数名和带引号/不带引号的安全字符使用正则表达式,使解析器更加严格

  • 添加了来自 schooltool icalendar 解析器的一些测试,以获得更好的覆盖率

  • 对折叠线的正则表达式更加宽容

  • 允许在 .from_string 上使用多个顶级组件

  • 修复 vWeekdays,不接受相关参数(例如:-3SA 与 -SA)

  • vDDDTypes 不接受负数(例如:-P30M)

  • 根据 RFC,“N”也可以作为内容行的换行符

0.10 (2005-04-28)

  • 将代码移至codespeak.net subversion。

  • 重新组织包结构,使源代码位于“src”目录下。非包文件保留在分发根目录中。

  • 使用更现代的 doctest 将 doc/.py 文件重编为 doc/.txt。在它们是带有大文档字符串的 .py 文件之前。

  • 添加了 test.py testrunner 和 tests/test_icalendar.py,它在源代码和 doc 目录中提取所有 doctests,并在键入时运行它们:

    python2.3 test.py
  • 将 iCalendar 重命名为小写包名称、小写、去复数和缩短的模块名称,主要是实现细节。

  • 更改了测试,因此它们在临时目录中生成 .ics 文件,而不是在结构本身中。

执照

版权所有 (c) 2012-2013,Plone Foundation 保留所有权利。

如果满足以下条件,则允许以源代码和二进制形式重新分发和使用,无论是否经过修改:

  • 源代码的再分发必须保留上述版权声明、此条件列表和以下免责声明。

  • 二进制形式的再分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。

本软件由版权所有者和贡献者“按原样”提供,并且不提供任何明示或暗示的保证,包括但不限于对适销性和特定用途适用性的暗示保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于采购替代商品或服务;使用、数据或利润损失;或业务中断),无论是由何种责任理论引起的,无论是在合同、严格责任或侵权行为(包括疏忽或其他方式)中以任何方式使用本软件引起的,即使已被告知存在此类损害的可能性。