Hello community, here is the log from the commit of package python-icalendar for openSUSE:Factory checked in at 2017-08-10 14:02:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-icalendar (Old) and /work/SRC/openSUSE:Factory/.python-icalendar.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-icalendar" Thu Aug 10 14:02:38 2017 rev:20 rq:508117 version:3.11.5 Changes: -------- --- /work/SRC/openSUSE:Factory/python-icalendar/python-icalendar.changes 2017-01-25 23:26:21.411443813 +0100 +++ /work/SRC/openSUSE:Factory/.python-icalendar.new/python-icalendar.changes 2017-08-10 14:11:29.985550901 +0200 @@ -1,0 +2,21 @@ +Tue Jul 4 06:59:44 UTC 2017 - [email protected] + +- Update to version 3.11.5 + * added an assertion that VTIMEZONE sub-components' DTSTART must + be of type DATETIME [geier] + * Fix handling of VTIMEZONEs with subcomponents with the same + DTSTARTs and OFFSETs but which are of different types [geier] + 3.11.4: + * Don't break on parameter values which contain equal signs, + e.g. base64 encoded binary data [geier] + * Fix handling of VTIMEZONEs with subcomponents with the same + DTSTARTs. [geier] + 3.11.3: + * Removed ``setuptools`` as a dependency as it was only required + by setup.py and not by the package. + * Don't split content lines on the unicode ``LINE SEPARATOR`` + character ``\u2028`` but only on ``CRLF`` or ``LF``. + +- Converted to single-spec + +------------------------------------------------------------------- Old: ---- icalendar-3.11.2.tar.gz New: ---- icalendar-3.11.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-icalendar.spec ++++++ --- /var/tmp/diff_new_pack.Sbuzcw/_old 2017-08-10 14:11:30.553470941 +0200 +++ /var/tmp/diff_new_pack.Sbuzcw/_new 2017-08-10 14:11:30.553470941 +0200 @@ -18,36 +18,31 @@ # +%{?!python_module:%define python_module() python-%{**} python3-%{**}} %define modname icalendar Name: python-%{modname} -Version: 3.11.2 +Version: 3.11.5 Release: 0 Summary: Python parser/generator of iCalendar files package # please see https://github.com/collective/icalendar/issues/2 for re-licensing discussion License: BSD-2-Clause Group: Development/Languages/Python Url: http://icalendar.readthedocs.org -Source0: https://pypi.io/packages/source/i/icalendar/%{modname}-%{version}.tar.gz +Source0: https://files.pythonhosted.org/packages/source/i/icalendar/%{modname}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-build +BuildRequires: %{python_module base} +BuildRequires: %{python_module pytest} +BuildRequires: %{python_module python-dateutil} +BuildRequires: %{python_module pytz} +BuildRequires: %{python_module setuptools} BuildRequires: fdupes -BuildRequires: python-devel -BuildRequires: python-pytest -BuildRequires: python-python-dateutil -BuildRequires: python-pytz -BuildRequires: python-setuptools +BuildRequires: python-rpm-macros Requires: python-python-dateutil Requires: python-pytz -%{py_requires} -%if 0%{?suse_version} <= 1110 -BuildRequires: python-ordereddict -Requires: python-ordereddict -BuildRequires: python-unittest2 -%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} -%else -BuildArch: noarch -%endif Provides: %{name}-doc = %{version} Obsoletes: %{name}-doc < %{version} +BuildArch: noarch +%python_subpackages %description The iCalendar package is a parser/generator of iCalendar files for use @@ -55,21 +50,22 @@ %prep %setup -q -n %{modname}-%{version} +rm -rf icalendar.egg-info %build -python setup.py build +%python_build %install -python setup.py install --prefix=%{_prefix} --root=%{buildroot} -%fdupes -s %{buildroot} +%python_install +%python_expand %fdupes -s %{buildroot}%{$python_sitelib} %check -py.test src +%python_exec %{_bindir}/py.test src -%files +%files %{python_files} %defattr(-,root,root) %doc README.rst LICENSE.rst CHANGES.rst %{python_sitelib}/%{modname}/ -%{python_sitelib}/%{modname}-%{version}-py%{py_ver}.egg-info/ +%{python_sitelib}/%{modname}-%{version}-py%{python_version}.egg-info/ %changelog ++++++ icalendar-3.11.2.tar.gz -> icalendar-3.11.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/.gitignore new/icalendar-3.11.5/.gitignore --- old/icalendar-3.11.2/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/icalendar-3.11.5/.gitignore 2017-07-03 13:45:57.000000000 +0200 @@ -0,0 +1,21 @@ +*.mo +*.py? +*.sw? +*~ +.* +bin/ +build/ +coverage-* +develop-eggs/ +dist/ +docs/_build/ +eggs/ +htmlcov/ +include/ +lib/ +lib64 +parts/ +pip-selfcheck.json +src/icalendar.egg-info/ +!.gitattributes +!.gitignore diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/.travis.yml new/icalendar-3.11.5/.travis.yml --- old/icalendar-3.11.2/.travis.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/icalendar-3.11.5/.travis.yml 2017-07-03 13:45:57.000000000 +0200 @@ -0,0 +1,17 @@ +language: python +python: + - "2.6" + - "2.7" + - "3.3" + - "3.4" + - "3.5" + - "3.6" + - "pypy" + - "pypy3" +matrix: + allow_failures: + - python: "pypy3" +install: + - pip install tox +script: + - tox -e $(echo py$TRAVIS_PYTHON_VERSION | tr -d . | sed -e 's/pypypy/pypy/') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/CHANGES.rst new/icalendar-3.11.5/CHANGES.rst --- old/icalendar-3.11.2/CHANGES.rst 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/CHANGES.rst 2017-07-03 13:45:57.000000000 +0200 @@ -1,6 +1,41 @@ Changelog ========= +3.11.5 (2017-07-03) +------------------- + +Bug fixes: + +- added an assertion that VTIMEZONE sub-components' DTSTART must be of type + DATETIME [geier] + +- Fix handling of VTIMEZONEs with subcomponents with the same DTSTARTs and + OFFSETs but which are of different types [geier] + + +3.11.4 (2017-05-10) +------------------- + +Bug fixes: + +- Don't break on parameter values which contain equal signs, e.g. base64 encoded + binary data [geier] + +- Fix handling of VTIMEZONEs with subcomponents with the same DTSTARTs. + [geier] + + +3.11.3 (2017-02-15) +------------------- + +Bug fixes: + +- Removed ``setuptools`` as a dependency as it was only required by setup.py + and not by the package. + +- Don't split content lines on the unicode ``LINE SEPARATOR`` character + ``\u2028`` but only on ``CRLF`` or ``LF``. + 3.11.2 (2017-01-12) ------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/PKG-INFO new/icalendar-3.11.5/PKG-INFO --- old/icalendar-3.11.2/PKG-INFO 2017-01-12 17:33:29.000000000 +0100 +++ new/icalendar-3.11.5/PKG-INFO 2017-07-03 13:45:58.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: icalendar -Version: 3.11.2 +Version: 3.11.5 Summary: iCalendar parser/generator Home-page: https://github.com/collective/icalendar Author: Plone Foundation @@ -15,12 +15,12 @@ ---- - :Homepage: http://icalendar.readthedocs.org - :Code: http://github.com/collective/icalendar - :Mailing list: http://github.com/collective/icalendar/issues - :Dependencies: `setuptools`_ and since version 3.0 we depend on `pytz`_. - :Compatible with: Python 2.6, 2.7 and 3.3+ - :License: `BSD`_ + :Homepage: https://icalendar.readthedocs.io + :Code: https://github.com/collective/icalendar + :Mailing list: https://github.com/collective/icalendar/issues + :Dependencies: `python-dateutil`_ and `pytz`_. + :Compatible with: Python 2.6, 2.7 and 3.3+ + :License: `BSD`_ ---- @@ -35,7 +35,6 @@ - 4.0: API refactoring - Changes in version 3.0 ====================== @@ -63,26 +62,26 @@ database timezone identifiers. This can be a problem for 'GMT' identifiers, which are not defined in the Olson database. - Instead of our own UTC tzinfo implementation we use pytz UTC tzinfo object now. + Instead of our own UTC tzinfo implementation, we use pytz UTC tzinfo object now. About this fork which is not a fork anymore =========================================== The aim of this fork (not fork anymore, read further) was to bring this package - up to date with latest icalendar `RFC`_ specification as part of - `plone.app.event`_ project which goal is to bring recurrent events to `Plone`_. + up to date with latest icalendar `RFC`_ specification, as part of the + `plone.app.event`_ project whose goal is to bring recurrent events to `Plone`_. - After some thoughts we (Plone developers involved with `plone.app.event`_) send - a suggestion to [email protected] to take over maintaining of + After some thoughts we (Plone developers involved with `plone.app.event`_) sent + a suggestion to [email protected] to take over maintenance of `icalendar`_. Nobody objected and since version 2.2 we are back to development. - .. _`icalendar`: http://pypi.python.org/pypi/icalendar - .. _`plone.app.event`: http://github.com/plone/plone.app.event - .. _`Plone`: http://plone.org - .. _`pytz`: http://pypi.python.org/pypi/pytz - .. _`setuptools`: http://pypi.python.org/pypi/setuptools - .. _`RFC`: http://www.ietf.org/rfc/rfc5545.txt + .. _`icalendar`: https://pypi.python.org/pypi/icalendar + .. _`plone.app.event`: https://github.com/plone/plone.app.event + .. _`Plone`: https://plone.org + .. _`python-dateutil`: https://github.com/dateutil/dateutil/ + .. _`pytz`: https://pypi.python.org/pypi/pytz + .. _`RFC`: https://www.ietf.org/rfc/rfc5545.txt .. _`BSD`: https://github.com/collective/icalendar/issues/2 @@ -108,6 +107,41 @@ Changelog ========= + 3.11.5 (2017-07-03) + ------------------- + + Bug fixes: + + - added an assertion that VTIMEZONE sub-components' DTSTART must be of type + DATETIME [geier] + + - Fix handling of VTIMEZONEs with subcomponents with the same DTSTARTs and + OFFSETs but which are of different types [geier] + + + 3.11.4 (2017-05-10) + ------------------- + + Bug fixes: + + - Don't break on parameter values which contain equal signs, e.g. base64 encoded + binary data [geier] + + - Fix handling of VTIMEZONEs with subcomponents with the same DTSTARTs. + [geier] + + + 3.11.3 (2017-02-15) + ------------------- + + Bug fixes: + + - Removed ``setuptools`` as a dependency as it was only required by setup.py + and not by the package. + + - Don't split content lines on the unicode ``LINE SEPARATOR`` character + ``\u2028`` but only on ``CRLF`` or ``LF``. + 3.11.2 (2017-01-12) ------------------- @@ -694,6 +728,7 @@ - changed tests so they generate .ics files in a temp directory, not in the structure itself. + License ======= @@ -728,10 +763,13 @@ Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: OS Independent diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/README.rst new/icalendar-3.11.5/README.rst --- old/icalendar-3.11.2/README.rst 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/README.rst 2017-07-03 13:45:57.000000000 +0200 @@ -7,12 +7,12 @@ ---- - :Homepage: http://icalendar.readthedocs.org - :Code: http://github.com/collective/icalendar - :Mailing list: http://github.com/collective/icalendar/issues - :Dependencies: `setuptools`_ and since version 3.0 we depend on `pytz`_. - :Compatible with: Python 2.6, 2.7 and 3.3+ - :License: `BSD`_ +:Homepage: https://icalendar.readthedocs.io +:Code: https://github.com/collective/icalendar +:Mailing list: https://github.com/collective/icalendar/issues +:Dependencies: `python-dateutil`_ and `pytz`_. +:Compatible with: Python 2.6, 2.7 and 3.3+ +:License: `BSD`_ ---- @@ -27,7 +27,6 @@ - 4.0: API refactoring - Changes in version 3.0 ====================== @@ -55,26 +54,26 @@ database timezone identifiers. This can be a problem for 'GMT' identifiers, which are not defined in the Olson database. -Instead of our own UTC tzinfo implementation we use pytz UTC tzinfo object now. +Instead of our own UTC tzinfo implementation, we use pytz UTC tzinfo object now. About this fork which is not a fork anymore =========================================== The aim of this fork (not fork anymore, read further) was to bring this package -up to date with latest icalendar `RFC`_ specification as part of -`plone.app.event`_ project which goal is to bring recurrent events to `Plone`_. +up to date with latest icalendar `RFC`_ specification, as part of the +`plone.app.event`_ project whose goal is to bring recurrent events to `Plone`_. -After some thoughts we (Plone developers involved with `plone.app.event`_) send -a suggestion to [email protected] to take over maintaining of +After some thoughts we (Plone developers involved with `plone.app.event`_) sent +a suggestion to [email protected] to take over maintenance of `icalendar`_. Nobody objected and since version 2.2 we are back to development. -.. _`icalendar`: http://pypi.python.org/pypi/icalendar -.. _`plone.app.event`: http://github.com/plone/plone.app.event -.. _`Plone`: http://plone.org -.. _`pytz`: http://pypi.python.org/pypi/pytz -.. _`setuptools`: http://pypi.python.org/pypi/setuptools -.. _`RFC`: http://www.ietf.org/rfc/rfc5545.txt +.. _`icalendar`: https://pypi.python.org/pypi/icalendar +.. _`plone.app.event`: https://github.com/plone/plone.app.event +.. _`Plone`: https://plone.org +.. _`python-dateutil`: https://github.com/dateutil/dateutil/ +.. _`pytz`: https://pypi.python.org/pypi/pytz +.. _`RFC`: https://www.ietf.org/rfc/rfc5545.txt .. _`BSD`: https://github.com/collective/icalendar/issues/2 @@ -96,4 +95,3 @@ src/icalendar/tools 16 0 100% -------------------------------------------------- TOTAL 1152 81 93% - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/bootstrap.py new/icalendar-3.11.5/bootstrap.py --- old/icalendar-3.11.2/bootstrap.py 1970-01-01 01:00:00.000000000 +0100 +++ new/icalendar-3.11.5/bootstrap.py 2017-07-03 13:45:57.000000000 +0200 @@ -0,0 +1,178 @@ +############################################################################## +# +# Copyright (c) 2006 Zope Foundation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## +"""Bootstrap a buildout-based project + +Simply run this script in a directory containing a buildout.cfg. +The script accepts buildout command-line options, so you can +use the -c option to specify an alternate configuration file. +""" + +import os +import shutil +import sys +import tempfile + +from optparse import OptionParser + +tmpeggs = tempfile.mkdtemp() + +usage = '''\ +[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options] + +Bootstraps a buildout-based project. + +Simply run this script in a directory containing a buildout.cfg, using the +Python that you want bin/buildout to use. + +Note that by using --find-links to point to local resources, you can keep +this script from going over the network. +''' + +parser = OptionParser(usage=usage) +parser.add_option("-v", "--version", help="use a specific zc.buildout version") + +parser.add_option("-t", "--accept-buildout-test-releases", + dest='accept_buildout_test_releases', + action="store_true", default=False, + help=("Normally, if you do not specify a --version, the " + "bootstrap script and buildout gets the newest " + "*final* versions of zc.buildout and its recipes and " + "extensions for you. If you use this flag, " + "bootstrap and buildout will get the newest releases " + "even if they are alphas or betas.")) +parser.add_option("-c", "--config-file", + help=("Specify the path to the buildout configuration " + "file to be used.")) +parser.add_option("-f", "--find-links", + help=("Specify a URL to search for buildout releases")) +parser.add_option("--allow-site-packages", + action="store_true", default=False, + help=("Let bootstrap.py use existing site packages")) + + +options, args = parser.parse_args() + +###################################################################### +# load/install setuptools + +try: + if options.allow_site_packages: + import setuptools + import pkg_resources + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen + +ez = {} +exec(urlopen('https://bootstrap.pypa.io/ez_setup.py').read(), ez) + +if not options.allow_site_packages: + # ez_setup imports site, which adds site packages + # this will remove them from the path to ensure that incompatible versions + # of setuptools are not in the path + import site + # inside a virtualenv, there is no 'getsitepackages'. + # We can't remove these reliably + if hasattr(site, 'getsitepackages'): + for sitepackage_path in site.getsitepackages(): + sys.path[:] = [x for x in sys.path if sitepackage_path not in x] + +setup_args = dict(to_dir=tmpeggs, download_delay=0) +ez['use_setuptools'](**setup_args) +import setuptools +import pkg_resources + +# This does not (always?) update the default working set. We will +# do it. +for path in sys.path: + if path not in pkg_resources.working_set.entries: + pkg_resources.working_set.add_entry(path) + +###################################################################### +# Install buildout + +ws = pkg_resources.working_set + +cmd = [sys.executable, '-c', + 'from setuptools.command.easy_install import main; main()', + '-mZqNxd', tmpeggs] + +find_links = os.environ.get( + 'bootstrap-testing-find-links', + options.find_links or + ('http://downloads.buildout.org/' + if options.accept_buildout_test_releases else None) + ) +if find_links: + cmd.extend(['-f', find_links]) + +setuptools_path = ws.find( + pkg_resources.Requirement.parse('setuptools')).location + +requirement = 'zc.buildout' +version = options.version +if version is None and not options.accept_buildout_test_releases: + # Figure out the most recent final version of zc.buildout. + import setuptools.package_index + _final_parts = '*final-', '*final' + + def _final_version(parsed_version): + for part in parsed_version: + if (part[:1] == '*') and (part not in _final_parts): + return False + return True + index = setuptools.package_index.PackageIndex( + search_path=[setuptools_path]) + if find_links: + index.add_find_links((find_links,)) + req = pkg_resources.Requirement.parse(requirement) + if index.obtain(req) is not None: + best = [] + bestv = None + for dist in index[req.project_name]: + distv = dist.parsed_version + if _final_version(distv): + if bestv is None or distv > bestv: + best = [dist] + bestv = distv + elif distv == bestv: + best.append(dist) + if best: + best.sort() + version = best[-1].version +if version: + requirement = '=='.join((requirement, version)) +cmd.append(requirement) + +import subprocess +if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=setuptools_path)) != 0: + raise Exception( + "Failed to execute command:\n%s" % repr(cmd)[1:-1]) + +###################################################################### +# Import and run buildout + +ws.add_entry(tmpeggs) +ws.require(requirement) +import zc.buildout.buildout + +if not [a for a in args if '=' not in a]: + args.append('bootstrap') + +# if -c was provided, we push it back into args for buildout' main function +if options.config_file is not None: + args[0:0] = ['-c', options.config_file] + +zc.buildout.buildout.main(args) +shutil.rmtree(tmpeggs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/buildout.cfg new/icalendar-3.11.5/buildout.cfg --- old/icalendar-3.11.2/buildout.cfg 1970-01-01 01:00:00.000000000 +0100 +++ new/icalendar-3.11.5/buildout.cfg 2017-07-03 13:45:57.000000000 +0200 @@ -0,0 +1,25 @@ +[buildout] +develop = . +parts = + test + py + coverage + +[test] +recipe = zc.recipe.testrunner +eggs = + icalendar[test] +defaults = ['--auto-color', '--auto-progress'] + +[py] +recipe = zc.recipe.egg +interpreter = py +eggs = ${test:eggs} + +[coverage] +recipe = collective.recipe.template +input = inline: + #!/bin/sh + ./bin/test --coverage ../../coverage -v --auto-progress "$@" +output = ${buildout:directory}/bin/coverage +mode = 755 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/requirements_docs.txt new/icalendar-3.11.5/requirements_docs.txt --- old/icalendar-3.11.2/requirements_docs.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/icalendar-3.11.5/requirements_docs.txt 2017-07-03 13:45:57.000000000 +0200 @@ -0,0 +1,3 @@ +Sphinx>=1.2.3 +sphinx_rtd_theme +. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/setup.cfg new/icalendar-3.11.5/setup.cfg --- old/icalendar-3.11.2/setup.cfg 2017-01-12 17:33:29.000000000 +0100 +++ new/icalendar-3.11.5/setup.cfg 2017-07-03 13:45:58.000000000 +0200 @@ -6,9 +6,15 @@ [zest.releaser] python-file-with-version = src/icalendar/__init__.py +create-wheel = yes + +[bdist_wheel] +universal = 1 + +[tool:pytest] +norecursedirs = .* env* docs *.egg src/icalendar/tests/hypothesis [egg_info] tag_build = tag_date = 0 -tag_svn_revision = 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/setup.py new/icalendar-3.11.5/setup.py --- old/icalendar-3.11.2/setup.py 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/setup.py 2017-07-03 13:45:57.000000000 +0200 @@ -13,8 +13,8 @@ shortdesc = 'iCalendar parser/generator' -longdesc = codecs.open('README.rst', encoding='utf-8').read() -longdesc += codecs.open('CHANGES.rst', encoding='utf-8').read() +longdesc = codecs.open('README.rst', encoding='utf-8').read() + '\n' +longdesc += codecs.open('CHANGES.rst', encoding='utf-8').read() + '\n' longdesc += codecs.open('LICENSE.rst', encoding='utf-8').read() @@ -22,7 +22,6 @@ install_requires = [ 'python-dateutil', 'pytz', - 'setuptools', ] if sys.version_info[:2] == (2, 6): @@ -43,11 +42,14 @@ "Programming Language :: Python", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", 'License :: OSI Approved :: BSD License', 'Operating System :: OS Independent', ], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/__init__.py new/icalendar-3.11.5/src/icalendar/__init__.py --- old/icalendar-3.11.2/src/icalendar/__init__.py 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/__init__.py 2017-07-03 13:45:57.000000000 +0200 @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -__version__ = '3.11.2' +__version__ = '3.11.5' from icalendar.cal import ( Calendar, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/cal.py new/icalendar-3.11.5/src/icalendar/cal.py --- old/icalendar-3.11.2/src/icalendar/cal.py 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/cal.py 2017-07-03 13:45:57.000000000 +0200 @@ -517,19 +517,11 @@ singletons = ('TZID', 'LAST-MODIFIED', 'TZURL',) @staticmethod - def _extract_offsets(component, zone): + def _extract_offsets(component, tzname): """extract offsets and transition times from a VTIMEZONE component :param component: a STANDARD or DAYLIGHT component - :param zone: the name of the zone, used for constructing a TZNAME if - this component has none + :param tzname: the name of the zone """ - try: - tzname = str(component['TZNAME']) - except KeyError: - tzname = '{0}_{1}'.format( - zone, - component['DTSTART'].to_ical().decode('utf-8') - ) offsetfrom = component['TZOFFSETFROM'].td offsetto = component['TZOFFSETTO'].td dtstart = component['DTSTART'].dt @@ -580,18 +572,29 @@ zone = str(self['TZID']) transitions = [] dst = {} + tznames = set() for component in self.walk(): if type(component) == Timezone: continue + assert isinstance(component['DTSTART'].dt, datetime), ( + "VTIMEZONEs sub-components' DTSTART must be of type datetime, not date" + ) try: tzname = str(component['TZNAME']) except KeyError: - tzname = '{0}_{1}'.format( + tzname = '{0}_{1}_{2}_{3}'.format( zone, - component['DTSTART'].to_ical().decode('utf-8') + component['DTSTART'].to_ical().decode('utf-8'), + component['TZOFFSETFROM'].to_ical(), # for whatever reason this is str/unicode + component['TZOFFSETTO'].to_ical(), # for whatever reason this is str/unicode ) + # TODO better way of making sure tznames are unique + while tzname in tznames: + tzname += '_1' + tznames.add(tzname) + dst[tzname], component_transitions = self._extract_offsets( - component, zone + component, tzname ) transitions.extend(component_transitions) @@ -622,6 +625,7 @@ if not dst[transitions[index][3]]: # [3] is the name dst_offset = osto - transitions[index][2] # [2] is osto # noqa break + assert dst_offset is not False transition_info.append((osto, dst_offset, name)) cls = type(zone, (DstTzInfo,), { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/parser.py new/icalendar-3.11.5/src/icalendar/parser.py --- old/icalendar-3.11.2/src/icalendar/parser.py 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/parser.py 2017-07-03 13:45:57.000000000 +0200 @@ -149,13 +149,17 @@ # parsing helper -def q_split(st, sep=','): +def q_split(st, sep=',', maxsplit=-1): """Splits a string on char, taking double (q)uotes into considderation. """ + if maxsplit == 0: + return [st] + result = [] cursor = 0 length = len(st) inquote = 0 + splits = 0 for i in range(length): ch = st[i] if ch == '"': @@ -163,8 +167,10 @@ if not inquote and ch == sep: result.append(st[cursor:i]) cursor = i + 1 - if i + 1 == length: + splits += 1 + if i + 1 == length or splits == maxsplit: result.append(st[cursor:]) + break return result @@ -227,7 +233,7 @@ result = cls() for param in q_split(st, ';'): try: - key, val = q_split(param, '=') + key, val = q_split(param, '=', maxsplit=1) validate_token(key) # Property parameter values that are not in quoted # strings are case insensitive. @@ -380,7 +386,7 @@ # a fold is carriage return followed by either a space or a tab unfolded = uFOLD.sub('', st) lines = cls(Contentline(line) for - line in unfolded.splitlines() if line) + line in NEWLINE.split(unfolded) if line) lines.append('') # '\r\n' at the end of every content line return lines except: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/tests/apple_xlocation_test.py new/icalendar-3.11.5/src/icalendar/tests/apple_xlocation_test.py --- old/icalendar-3.11.2/src/icalendar/tests/apple_xlocation_test.py 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/tests/apple_xlocation_test.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -from icalendar.tests import unittest - -import datetime -import icalendar -import os -import pytz - -class TestEncoding(unittest.TestCase): - - def test_apple_xlocation(self): - """ - Test if error messages are encode properly. - """ - try: - directory = os.path.dirname(__file__) - data = open(os.path.join(directory, 'x_location.ics'), 'rb').read() - cal = icalendar.Calendar.from_ical(data) - for event in cal.walk('vevent'): - self.assertEqual(len(event.errors), 1, 'Got too many errors') - error = event.errors[0][1] - self.assertTrue(error.startswith(u'Content line could not be parsed into parts')) - - except UnicodeEncodeError as e: - self.fail("There is something wrong with encoding in the collected error messages") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/tests/hypothesis/test_fuzzing.py new/icalendar-3.11.5/src/icalendar/tests/hypothesis/test_fuzzing.py --- old/icalendar-3.11.2/src/icalendar/tests/hypothesis/test_fuzzing.py 1970-01-01 01:00:00.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/tests/hypothesis/test_fuzzing.py 2017-07-03 13:45:57.000000000 +0200 @@ -0,0 +1,35 @@ +import string + +from hypothesis import given, settings +import hypothesis.strategies as st + +from icalendar.parser import Contentline, Contentlines, Parameters +from icalendar.tests import unittest + + +def printable_characters(**kw): + return st.text( + st.characters(blacklist_categories=( + 'Cc', 'Cs' + ), **kw) + ) + +key = st.text(string.ascii_letters + string.digits, min_size=1) +value = printable_characters(blacklist_characters=u'\\;:\"') + + +class TestFuzzing(unittest.TestCase): + + @given(lines=st.lists( + st.tuples(key, st.dictionaries(key, value), value), + min_size=1 + )) + @settings(max_examples=10**9) + def test_main(self, lines): + cl = Contentlines() + for key, params, value in lines: + params = Parameters(**params) + cl.append(Contentline.from_parts(key, params, value)) + cl.append('') + + assert Contentlines.from_ical(cl.to_ical()) == cl diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/tests/test_encoding.py new/icalendar-3.11.5/src/icalendar/tests/test_encoding.py --- old/icalendar-3.11.2/src/icalendar/tests/test_encoding.py 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/tests/test_encoding.py 2017-07-03 13:45:57.000000000 +0200 @@ -11,7 +11,8 @@ def test_create_from_ical(self): directory = os.path.dirname(__file__) - data = open(os.path.join(directory, 'encoding.ics'), 'rb').read() + with open(os.path.join(directory, 'encoding.ics'), 'rb') as fp: + data = fp.read() cal = icalendar.Calendar.from_ical(data) self.assertEqual(cal['prodid'].to_ical().decode('utf-8'), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/tests/test_icalendar.py new/icalendar-3.11.5/src/icalendar/tests/test_icalendar.py --- old/icalendar-3.11.2/src/icalendar/tests/test_icalendar.py 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/tests/test_icalendar.py 2017-07-03 13:45:57.000000000 +0200 @@ -1,4 +1,8 @@ # -*- coding: utf-8 -*- +import icalendar +import os +import textwrap + from icalendar.tests import unittest @@ -207,6 +211,30 @@ ('key', Parameters({'PARAM': 'pValue'}), 'value') ) + contains_base64 = ( + 'X-APPLE-STRUCTURED-LOCATION;' + 'VALUE=URI;X-ADDRESS="Kaiserliche Hofburg, 1010 Wien";' + 'X-APPLE-MAPKIT-HANDLE=CAESxQEZgr3QZXJyZWljaA==;' + 'X-APPLE-RADIUS=328.7978217977285;X-APPLE-REFERENCEFRAME=1;' + 'X-TITLE=Heldenplatz:geo:48.206686,16.363235' + ).encode('utf-8') + + self.assertEqual( + Contentline(contains_base64, strict=True).parts(), + ('X-APPLE-STRUCTURED-LOCATION', + Parameters({ + 'X-APPLE-RADIUS': '328.7978217977285', + 'X-ADDRESS': 'Kaiserliche Hofburg, 1010 Wien', + 'X-APPLE-REFERENCEFRAME': '1', + 'X-TITLE': u'HELDENPLATZ', + 'X-APPLE-MAPKIT-HANDLE': + 'CAESXQEZGR3QZXJYZWLJAA==', + 'VALUE': 'URI', + }), + 'geo:48.206686,16.363235' + ) + ) + def test_fold_line(self): from ..parser import foldline @@ -247,7 +275,47 @@ self.assertEqual(q_split('Max,Moller,"Rasmussen, Max"'), ['Max', 'Moller', '"Rasmussen, Max"']) + def test_q_split_bin(self): + from ..parser import q_split + for s in ('X-SOMETHING=ABCDE==', ',,,'): + for maxsplit in range(-1, 3): + self.assertEqual(q_split(s, '=', maxsplit=maxsplit), + s.split('=', maxsplit)) + def test_q_join(self): from ..parser import q_join self.assertEqual(q_join(['Max', 'Moller', 'Rasmussen, Max']), 'Max,Moller,"Rasmussen, Max"') + + +class TestEncoding(unittest.TestCase): + + def test_broken_property(self): + """ + Test if error messages are encode properly. + """ + broken_ical = textwrap.dedent(""" + BEGIN:VCALENDAR + BEGIN:VEVENT + SUMMARY:An Event with too many semicolons + DTSTART;;VALUE=DATE-TIME:20140409T093000 + UID:abc + END:VEVENT + END:VCALENDAR + """) + cal = icalendar.Calendar.from_ical(broken_ical) + for event in cal.walk('vevent'): + self.assertEqual(len(event.errors), 1, 'Not the right amount of errors.') + error = event.errors[0][1] + self.assertTrue(error.startswith(u'Content line could not be parsed into parts')) + + def test_apple_xlocation(self): + """ + Test if we support base64 encoded binary data in parameter values. + """ + directory = os.path.dirname(__file__) + with open(os.path.join(directory, 'x_location.ics'), 'rb') as fp: + data = fp.read() + cal = icalendar.Calendar.from_ical(data) + for event in cal.walk('vevent'): + self.assertEqual(len(event.errors), 0, 'Got too many errors') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/tests/test_multiple.py new/icalendar-3.11.5/src/icalendar/tests/test_multiple.py --- old/icalendar-3.11.2/src/icalendar/tests/test_multiple.py 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/tests/test_multiple.py 2017-07-03 13:45:57.000000000 +0200 @@ -12,10 +12,9 @@ def test_multiple(self): directory = os.path.dirname(__file__) - cals = Calendar.from_ical( - open(os.path.join(directory, 'multiple.ics'), 'rb').read(), - multiple=True - ) + with open(os.path.join(directory, 'multiple.ics'), 'rb') as fp: + data = fp.read() + cals = Calendar.from_ical(data, multiple=True) self.assertEqual(len(cals), 2) self.assertSequenceEqual([comp.name for comp in cals[0].walk()], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/tests/test_recurrence.py new/icalendar-3.11.5/src/icalendar/tests/test_recurrence.py --- old/icalendar-3.11.2/src/icalendar/tests/test_recurrence.py 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/tests/test_recurrence.py 2017-07-03 13:45:57.000000000 +0200 @@ -12,9 +12,9 @@ def setUp(self): directory = os.path.dirname(__file__) - self.cal = icalendar.Calendar.from_ical( - open(os.path.join(directory, 'recurrence.ics'), 'rb').read() - ) + with open(os.path.join(directory, 'recurrence.ics'), 'rb') as fp: + data = fp.read() + self.cal = icalendar.Calendar.from_ical(data) def test_recurrence_exdates_one_line(self): first_event = self.cal.walk('vevent')[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/tests/test_timezoned.py new/icalendar-3.11.5/src/icalendar/tests/test_timezoned.py --- old/icalendar-3.11.2/src/icalendar/tests/test_timezoned.py 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/tests/test_timezoned.py 2017-07-03 13:45:57.000000000 +0200 @@ -12,9 +12,9 @@ def test_create_from_ical(self): directory = os.path.dirname(__file__) - cal = icalendar.Calendar.from_ical( - open(os.path.join(directory, 'timezoned.ics'), 'rb').read() - ) + with open(os.path.join(directory, 'timezoned.ics'), 'rb') as fp: + data = fp.read() + cal = icalendar.Calendar.from_ical(data) self.assertEqual( cal['prodid'].to_ical(), @@ -151,9 +151,9 @@ RFC""" directory = os.path.dirname(__file__) - cal = icalendar.Calendar.from_ical( - open(os.path.join(directory, 'america_new_york.ics'), 'rb').read() - ) + with open(os.path.join(directory, 'america_new_york.ics'), 'rb') as fp: + data = fp.read() + cal = icalendar.Calendar.from_ical(data) tz = cal.walk('VEVENT')[0]['DTSTART'][0].dt.tzinfo self.assertEqual(str(tz), 'custom_America/New_York') @@ -188,9 +188,9 @@ self.maxDiff = None directory = os.path.dirname(__file__) - cal = icalendar.Calendar.from_ical( - open(os.path.join(directory, 'pacific_fiji.ics'), 'rb').read() - ) + with open(os.path.join(directory, 'pacific_fiji.ics'), 'rb') as fp: + data = fp.read() + cal = icalendar.Calendar.from_ical(data) tz = cal.walk('VEVENT')[0]['DTSTART'][0].dt.tzinfo self.assertEqual(str(tz), 'custom_Pacific/Fiji') @@ -266,39 +266,39 @@ [( datetime.timedelta(0, 43200), datetime.timedelta(0), - 'custom_Pacific/Fiji_19151026T000000' + 'custom_Pacific/Fiji_19151026T000000_+115544_+1200' )] + 3 * [( datetime.timedelta(0, 46800), datetime.timedelta(0, 3600), - 'custom_Pacific/Fiji_19981101T020000' + 'custom_Pacific/Fiji_19981101T020000_+1200_+1300' ), ( datetime.timedelta(0, 43200), datetime.timedelta(0), - 'custom_Pacific/Fiji_19990228T030000') + 'custom_Pacific/Fiji_19990228T030000_+1300_+1200') ] + 3 * [( datetime.timedelta(0, 46800), datetime.timedelta(0, 3600), - 'custom_Pacific/Fiji_20101024T020000' + 'custom_Pacific/Fiji_20101024T020000_+1200_+1300' ), ( datetime.timedelta(0, 43200), datetime.timedelta(0), - 'custom_Pacific/Fiji_19990228T030000' + 'custom_Pacific/Fiji_19990228T030000_+1300_+1200' )] + 25 * [( datetime.timedelta(0, 46800), datetime.timedelta(0, 3600), - 'custom_Pacific/Fiji_20101024T020000' + 'custom_Pacific/Fiji_20101024T020000_+1200_+1300' ), ( datetime.timedelta(0, 43200), datetime.timedelta(0), - 'custom_Pacific/Fiji_20140119T020000' + 'custom_Pacific/Fiji_20140119T020000_+1300_+1200' )] + [( datetime.timedelta(0, 46800), datetime.timedelta(0, 3600), - 'custom_Pacific/Fiji_20101024T020000' + 'custom_Pacific/Fiji_20101024T020000_+1200_+1300' )] ) @@ -306,7 +306,7 @@ ( datetime.timedelta(0, 46800), datetime.timedelta(0, 3600), - 'custom_Pacific/Fiji_19981101T020000' + 'custom_Pacific/Fiji_19981101T020000_+1200_+1300' ), tz._tzinfos.keys() ) @@ -314,7 +314,27 @@ ( datetime.timedelta(0, 43200), datetime.timedelta(0), - 'custom_Pacific/Fiji_19990228T030000' + 'custom_Pacific/Fiji_19990228T030000_+1300_+1200' ), tz._tzinfos.keys() ) + + def test_same_start_date(self): + """testing if we can handle VTIMEZONEs whose different components + have the same start DTIMEs.""" + directory = os.path.dirname(__file__) + with open(os.path.join(directory, 'timezone_same_start.ics'), 'rb') as fp: + data = fp.read() + cal = icalendar.Calendar.from_ical(data) + d = cal.subcomponents[1]['DTSTART'].dt + self.assertEqual(d.strftime('%c'), 'Fri Feb 24 12:00:00 2017') + + def test_same_start_date_and_offset(self): + """testing if we can handle VTIMEZONEs whose different components + have the same DTSTARTs, TZOFFSETFROM, and TZOFFSETTO.""" + directory = os.path.dirname(__file__) + with open(os.path.join(directory, 'timezone_same_start_and_offset.ics'), 'rb') as fp: + data = fp.read() + cal = icalendar.Calendar.from_ical(data) + d = cal.subcomponents[1]['DTSTART'].dt + self.assertEqual(d.strftime('%c'), 'Fri Feb 24 12:00:00 2017') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/tests/test_unit_cal.py new/icalendar-3.11.5/src/icalendar/tests/test_unit_cal.py --- old/icalendar-3.11.2/src/icalendar/tests/test_unit_cal.py 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/tests/test_unit_cal.py 2017-07-03 13:45:57.000000000 +0200 @@ -393,7 +393,8 @@ import tempfile import os directory = tempfile.mkdtemp() - open(os.path.join(directory, 'test.ics'), 'wb').write(cal.to_ical()) + with open(os.path.join(directory, 'test.ics'), 'wb') as fp: + fp.write(cal.to_ical()) # Parsing a complete calendar from a string will silently ignore wrong # events but adding the error information to the component's 'errors' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/tests/timezone_same_start.ics new/icalendar-3.11.5/src/icalendar/tests/timezone_same_start.ics --- old/icalendar-3.11.2/src/icalendar/tests/timezone_same_start.ics 1970-01-01 01:00:00.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/tests/timezone_same_start.ics 2017-07-03 13:45:57.000000000 +0200 @@ -0,0 +1,27 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:Microsoft Exchange Server 2010 +METHOD:REQUEST +BEGIN:VTIMEZONE +TZID:Pacific Standard Time +BEGIN:STANDARD +DTSTART:16010101T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11 +TZOFFSETFROM:-0700 +TZOFFSETTO:-0800 +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:16010101T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3 +TZOFFSETFROM:-0800 +TZOFFSETTO:-0700 +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +SUMMARY;LANGUAGE=en-US:Test 4 +DTSTART;TZID="Pacific Standard Time":20170224T120000 +DTEND;TZID="Pacific Standard Time":20170224T123000 +DTSTAMP:20170224T180431Z +UID:040000008200E00074C5B7101A82E0080000000090E19664858ED20100000000000000 +END:VEVENT +END:VCALENDAR diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar/tests/timezone_same_start_and_offset.ics new/icalendar-3.11.5/src/icalendar/tests/timezone_same_start_and_offset.ics --- old/icalendar-3.11.2/src/icalendar/tests/timezone_same_start_and_offset.ics 1970-01-01 01:00:00.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar/tests/timezone_same_start_and_offset.ics 2017-07-03 13:45:57.000000000 +0200 @@ -0,0 +1,23 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:Microsoft Exchange Server 2010 +BEGIN:VTIMEZONE +TZID:Tokyo Standard Time +BEGIN:STANDARD +DTSTART:16010101T000000 +TZOFFSETFROM:+0900 +TZOFFSETTO:+0900 +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:16010101T000000 +TZOFFSETFROM:+0900 +TZOFFSETTO:+0900 +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +DTSTART;TZID="Tokyo Standard Time":20170224T120000 +DTEND;TZID="Tokyo Standard Time":20170224T123000 +UID:blafoobar +SUMMARY:this is an event +END:VEVENT +END:VCALENDARD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar.egg-info/PKG-INFO new/icalendar-3.11.5/src/icalendar.egg-info/PKG-INFO --- old/icalendar-3.11.2/src/icalendar.egg-info/PKG-INFO 2017-01-12 17:33:29.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar.egg-info/PKG-INFO 2017-07-03 13:45:58.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: icalendar -Version: 3.11.2 +Version: 3.11.5 Summary: iCalendar parser/generator Home-page: https://github.com/collective/icalendar Author: Plone Foundation @@ -15,12 +15,12 @@ ---- - :Homepage: http://icalendar.readthedocs.org - :Code: http://github.com/collective/icalendar - :Mailing list: http://github.com/collective/icalendar/issues - :Dependencies: `setuptools`_ and since version 3.0 we depend on `pytz`_. - :Compatible with: Python 2.6, 2.7 and 3.3+ - :License: `BSD`_ + :Homepage: https://icalendar.readthedocs.io + :Code: https://github.com/collective/icalendar + :Mailing list: https://github.com/collective/icalendar/issues + :Dependencies: `python-dateutil`_ and `pytz`_. + :Compatible with: Python 2.6, 2.7 and 3.3+ + :License: `BSD`_ ---- @@ -35,7 +35,6 @@ - 4.0: API refactoring - Changes in version 3.0 ====================== @@ -63,26 +62,26 @@ database timezone identifiers. This can be a problem for 'GMT' identifiers, which are not defined in the Olson database. - Instead of our own UTC tzinfo implementation we use pytz UTC tzinfo object now. + Instead of our own UTC tzinfo implementation, we use pytz UTC tzinfo object now. About this fork which is not a fork anymore =========================================== The aim of this fork (not fork anymore, read further) was to bring this package - up to date with latest icalendar `RFC`_ specification as part of - `plone.app.event`_ project which goal is to bring recurrent events to `Plone`_. + up to date with latest icalendar `RFC`_ specification, as part of the + `plone.app.event`_ project whose goal is to bring recurrent events to `Plone`_. - After some thoughts we (Plone developers involved with `plone.app.event`_) send - a suggestion to [email protected] to take over maintaining of + After some thoughts we (Plone developers involved with `plone.app.event`_) sent + a suggestion to [email protected] to take over maintenance of `icalendar`_. Nobody objected and since version 2.2 we are back to development. - .. _`icalendar`: http://pypi.python.org/pypi/icalendar - .. _`plone.app.event`: http://github.com/plone/plone.app.event - .. _`Plone`: http://plone.org - .. _`pytz`: http://pypi.python.org/pypi/pytz - .. _`setuptools`: http://pypi.python.org/pypi/setuptools - .. _`RFC`: http://www.ietf.org/rfc/rfc5545.txt + .. _`icalendar`: https://pypi.python.org/pypi/icalendar + .. _`plone.app.event`: https://github.com/plone/plone.app.event + .. _`Plone`: https://plone.org + .. _`python-dateutil`: https://github.com/dateutil/dateutil/ + .. _`pytz`: https://pypi.python.org/pypi/pytz + .. _`RFC`: https://www.ietf.org/rfc/rfc5545.txt .. _`BSD`: https://github.com/collective/icalendar/issues/2 @@ -108,6 +107,41 @@ Changelog ========= + 3.11.5 (2017-07-03) + ------------------- + + Bug fixes: + + - added an assertion that VTIMEZONE sub-components' DTSTART must be of type + DATETIME [geier] + + - Fix handling of VTIMEZONEs with subcomponents with the same DTSTARTs and + OFFSETs but which are of different types [geier] + + + 3.11.4 (2017-05-10) + ------------------- + + Bug fixes: + + - Don't break on parameter values which contain equal signs, e.g. base64 encoded + binary data [geier] + + - Fix handling of VTIMEZONEs with subcomponents with the same DTSTARTs. + [geier] + + + 3.11.3 (2017-02-15) + ------------------- + + Bug fixes: + + - Removed ``setuptools`` as a dependency as it was only required by setup.py + and not by the package. + + - Don't split content lines on the unicode ``LINE SEPARATOR`` character + ``\u2028`` but only on ``CRLF`` or ``LF``. + 3.11.2 (2017-01-12) ------------------- @@ -694,6 +728,7 @@ - changed tests so they generate .ics files in a temp directory, not in the structure itself. + License ======= @@ -728,10 +763,13 @@ Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: OS Independent diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar.egg-info/SOURCES.txt new/icalendar-3.11.5/src/icalendar.egg-info/SOURCES.txt --- old/icalendar-3.11.2/src/icalendar.egg-info/SOURCES.txt 2017-01-12 17:33:29.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar.egg-info/SOURCES.txt 2017-07-03 13:45:58.000000000 +0200 @@ -1,9 +1,14 @@ +.gitignore +.travis.yml CHANGES.rst CONTRIBUTING.rst LICENSE.rst MANIFEST.in README.rst TODO.rst +bootstrap.py +buildout.cfg +requirements_docs.txt setup.cfg setup.py tox.ini @@ -33,7 +38,6 @@ src/icalendar.egg-info/top_level.txt src/icalendar/tests/__init__.py src/icalendar/tests/america_new_york.ics -src/icalendar/tests/apple_xlocation_test.py src/icalendar/tests/encoding.ics src/icalendar/tests/issue_112_missing_tzinfo_on_exdate.ics src/icalendar/tests/issue_53_parsing_failure.ics @@ -54,5 +58,8 @@ src/icalendar/tests/test_unit_prop.py src/icalendar/tests/test_unit_tools.py src/icalendar/tests/time.ics +src/icalendar/tests/timezone_same_start.ics +src/icalendar/tests/timezone_same_start_and_offset.ics src/icalendar/tests/timezoned.ics -src/icalendar/tests/x_location.ics \ No newline at end of file +src/icalendar/tests/x_location.ics +src/icalendar/tests/hypothesis/test_fuzzing.py \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/src/icalendar.egg-info/requires.txt new/icalendar-3.11.5/src/icalendar.egg-info/requires.txt --- old/icalendar-3.11.2/src/icalendar.egg-info/requires.txt 2017-01-12 17:33:29.000000000 +0100 +++ new/icalendar-3.11.5/src/icalendar.egg-info/requires.txt 2017-07-03 13:45:58.000000000 +0200 @@ -1,5 +1,4 @@ python-dateutil pytz -setuptools [test] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/icalendar-3.11.2/tox.ini new/icalendar-3.11.5/tox.ini --- old/icalendar-3.11.2/tox.ini 2017-01-12 17:33:28.000000000 +0100 +++ new/icalendar-3.11.5/tox.ini 2017-07-03 13:45:57.000000000 +0200 @@ -6,8 +6,10 @@ deps = pytest coverage - icalendar [test] + py{27,33,34,35,36}: hypothesis>=3.0 + .[test] commands = - coverage run --source=src/icalendar --omit=*/tests/* --module pytest src/icalendar + coverage run --source=src/icalendar --omit=*/tests/* --module pytest [] + py{27,33,34,35,36}: coverage run --append --source=src/icalendar --omit=*/tests/* --module pytest [] src/icalendar/tests/hypothesis/ coverage report coverage html
