iCalendar 解析器/生成器
项目描述
icalendar包是一个兼容RFC 5545的 iCalendar 文件解析器/生成器。
- 主页:
- 代码:
- 邮寄名单:
- 依赖项:
- 兼容:
Python 2.7 和 3.4+
- 执照:
您想提供帮助和贡献吗?完美的!
这些是一些贡献示例
向 bugtracker 报告问题。
从分叉的 icalendar 存储库提交拉取请求。
扩展文档。
赞助 Sprint ( http://plone.org/events/sprints/whatis )。
对于拉取请求,请记住这一点
添加一个测试来证明您的修复并使其通过。
在 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上拆分内容行,而只能在CRLF或LF上拆分内容行。
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的组件,将不可解析的行标记为已损坏,而不是上升ValueError。VEVENT组件默认将 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.vCalAddress 和prop.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)
使用 svn2git迁移到https://github.com/collective/icalendar保留标签、分支和作者。[加巴斯]
使用 tox 在 python 2.4、2.5、2.6、2.6 上进行测试。[加巴斯]
修复了测试,因此它们也在 python 2.7 下通过。[加巴斯]
在https://jenkins.plone.org/job/icalendar上运行测试(目前只有 2.6)以及其他一些指标(pylint、clonedigger、coverage)。[加巴斯]
查看并合并来自https://github.com/cozi/icalendar fork 的更改。[加巴斯]
创建 sphinx 文档并开始记录开发和目标。[加巴斯]
将 github 存储库连接到http://readthedocs.org服务,以便在每次提交时生成 sphinx 文档(对于 master)。可以在以下位置查看文档:http: //readthedocs.org/docs/icalendar/en/latest/ [garbas]
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)
修复了 caselessdicts popitem 中的错误。(感谢迈克尔·史密斯< msmith@fluendo.com >)
RFC 2445 有点不清楚当它恰好位于 UTF-8 字符中间时如何处理行折叠。这已在以下讨论中得到澄清:http: //lists.osafoundation.org/pipermail/ietf-calsify/2006-August/001126.html 现在已在 iCalendar 中实现。它不会在 UTF-8 字符的中间折叠,但可以在 UTF-8 组成字符序列的中间折叠。
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 保留所有权利。
如果满足以下条件,则允许以源代码和二进制形式重新分发和使用,无论是否经过修改:
源代码的再分发必须保留上述版权声明、此条件列表和以下免责声明。
二进制形式的再分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。
本软件由版权所有者和贡献者“按原样”提供,并且不提供任何明示或暗示的保证,包括但不限于对适销性和特定用途适用性的暗示保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于采购替代商品或服务;使用、数据或利润损失;或业务中断),无论是由何种责任理论引起的,无论是在合同、严格责任或侵权行为(包括疏忽或其他方式)中以任何方式使用本软件引起的,即使已被告知存在此类损害的可能性。