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 - aloi...@gmx.com
+
+- 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 icalendar-...@codespeak.net to take over maintaining of
+        After some thoughts we (Plone developers involved with 
`plone.app.event`_) sent
+        a suggestion to icalendar-...@codespeak.net 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 icalendar-...@codespeak.net to take over maintaining of
+After some thoughts we (Plone developers involved with `plone.app.event`_) sent
+a suggestion to icalendar-...@codespeak.net 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 icalendar-...@codespeak.net to take over maintaining of
+        After some thoughts we (Plone developers involved with 
`plone.app.event`_) sent
+        a suggestion to icalendar-...@codespeak.net 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


Reply via email to