Hello community,

here is the log from the commit of package python-configparser for 
openSUSE:Factory checked in at 2019-02-08 13:48:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-configparser (Old)
 and      /work/SRC/openSUSE:Factory/.python-configparser.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-configparser"

Fri Feb  8 13:48:27 2019 rev:7 rq:672130 version:3.7.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-configparser/python-configparser.changes  
2018-12-06 12:14:17.525714823 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-configparser.new.28833/python-configparser.changes
       2019-02-08 13:48:28.390777882 +0100
@@ -1,0 +2,24 @@
+Wed Feb  6 11:20:19 UTC 2019 - Antonio Larrosa <alarr...@suse.com>
+
+- Update to 3.7.1
+  * Fixed issue on Python 2.x when future is present 
(gh#jacaro/configparser#30)
+- Update to 3.7.0
+  * Merge functionality from Python 3.7.2. Now ConfigParser accepts bytes paths
+    as well as any PathLike object, including those found in the pathlib2
+    backport <https://pypi.org/project/pathlib2/>.
+- Update to 3.5.3
+  * Reverted the limit on DeprecationWarning, as it
+    had unintended consequences (gh#jacaro/configparser#27)
+- Update to 3.5.2
+  * Use environment markers to indicate the 'ordereddict' dependency for
+    Python 2.6 (gh#jacaro/configparser#23)
+  * Limit DeprecationWarning when a filename is indicated as a bytestring on
+    Python 2. Now the warning is only emitted when py3kwarning is indicated
+    (gh#jacaro/configparser#24)
+- Update to 3.5.1
+  * jaraco adopts the package.
+  * Moved hosting to GitHub.
+  * Updated backports namespace package to conform with other packages sharing
+    the namespace (gh#jacaro/configparser#21)
+
+-------------------------------------------------------------------

Old:
----
  configparser-3.5.0.tar.gz

New:
----
  configparser-3.7.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-configparser.spec ++++++
--- /var/tmp/diff_new_pack.V7DRdc/_old  2019-02-08 13:48:28.922777715 +0100
+++ /var/tmp/diff_new_pack.V7DRdc/_new  2019-02-08 13:48:28.930777713 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-configparser
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 # Copyright (c) 2016, Martin Hauke <mar...@gmx.de>
 #
 # All modifications and additions to the file contributed by third parties
@@ -19,7 +19,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-configparser
-Version:        3.5.0
+Version:        3.7.1
 Release:        0
 Summary:        Backport of the enhanced config parser introduced in Python 3.x
 License:        MIT
@@ -48,10 +48,14 @@
 %setup -q -n configparser-%{version}
 
 %build
+export LANG=en_US.UTF-8
 %python_build
 
 %install
+export LANG=en_US.UTF-8
 %python_install
+%python_expand rm -f %{buildroot}%{$python_sitelib}/backports/__init__.py*
+%python_expand rm -f 
%{buildroot}%{$python_sitelib}/backports/__pycache__/__init__*
 %python_expand %fdupes %{buildroot}%{$python_sitelib}/backports/configparser/
 
 %files %{python_files}
@@ -60,6 +64,5 @@
 %python2_only %{python_sitelib}/configparser.py*
 %{python_sitelib}/backports/configparser/
 %{python_sitelib}/configparser-%{version}-py*.egg-info
-%{python_sitelib}/configparser-%{version}-py*-nspkg.pth
 
 %changelog

++++++ configparser-3.5.0.tar.gz -> configparser-3.7.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/configparser-3.5.0/MANIFEST.in 
new/configparser-3.7.1/MANIFEST.in
--- old/configparser-3.5.0/MANIFEST.in  2016-05-21 08:55:42.000000000 +0200
+++ new/configparser-3.7.1/MANIFEST.in  2019-01-25 12:09:29.000000000 +0100
@@ -1,3 +1,4 @@
 include configparser.rst
 include README.rst
 include setup.py
+include pyproject.toml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/configparser-3.5.0/PKG-INFO 
new/configparser-3.7.1/PKG-INFO
--- old/configparser-3.5.0/PKG-INFO     2016-05-21 10:15:06.000000000 +0200
+++ new/configparser-3.7.1/PKG-INFO     2019-01-25 17:35:46.000000000 +0100
@@ -1,11 +1,13 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: configparser
-Version: 3.5.0
-Summary: This library brings the updated configparser from Python 3.5 to 
Python 2.6-3.5.
-Home-page: http://docs.python.org/3/library/configparser.html
+Version: 3.7.1
+Summary: Updated configparser from Python 3.7 for Python 2.6+.
+Home-page: https://github.com/jaraco/configparser/
 Author: Łukasz Langa
 Author-email: luk...@langa.pl
-License: MIT
+Maintainer: Jason R. Coombs
+Maintainer-email: jar...@jaraco.com
+License: UNKNOWN
 Description: ============
         configparser
         ============
@@ -140,16 +142,57 @@
         Maintenance
         -----------
         
-        This backport is maintained on BitBucket by Łukasz Langa, the current 
vanilla
-        ``configparser`` maintainer for CPython:
+        This backport was originally authored by Łukasz Langa, the current 
vanilla
+        ``configparser`` maintainer for CPython and is currently maintained by
+        Jason R. Coombs:
         
-        * `configparser Mercurial repository 
<https://bitbucket.org/ambv/configparser>`_
+        * `configparser repository <https://github.com/jaraco/configparser>`_
         
-        * `configparser issue tracker 
<https://bitbucket.org/ambv/configparser/issues>`_
+        * `configparser issue tracker 
<https://github.com/jaraco/configparser/issues>`_
         
         Change Log
         ----------
         
+        3.7.1
+        ~~~~~
+        
+        * Issue #30: Fixed issue on Python 2.x when future is present.
+        
+        3.7.0
+        ~~~~~
+        
+        * Merge functionality from Python 3.7.2. Now ConfigParser accepts bytes
+          paths as well as any
+          `PathLike <https://docs.python.org/3/library/os.html#os.PathLike>`_
+          object, including those found in the `pathlib2 backport
+          <https://pypi.org/project/pathlib2/>`.
+        
+        3.5.3
+        ~~~~~
+        
+        * Issue #27: Reverted the limit on DeprecationWarning, as it had 
unintended
+          consequences.
+        
+        3.5.2
+        ~~~~~
+        
+        * Issue #23: Use environment markers to indicate the 'ordereddict' 
dependency
+          for Python 2.6.
+        
+        * Issue #24: Limit DeprecationWarning when a filename is indicated as a
+          bytestring on Python 2. Now the warning is only emitted when 
py3kwarning
+          is indicated.
+        
+        3.5.1
+        ~~~~~
+        
+        * jaraco adopts the package.
+        
+        * Moved hosting to GitHub.
+        
+        * Issue #21: Updated ``backports`` namespace package to conform with 
other
+          packages sharing the namespace.
+        
         3.5.0
         ~~~~~
         
@@ -256,7 +299,7 @@
           CPython repository. The synchronization is currently done by 
manually copying
           the required files and stating from which CPython changeset they 
come from.
         
-        * the ``default`` branch holds a version of the ``3.x`` code with some 
tweaks
+        * the ``master`` branch holds a version of the ``3.x`` code with some 
tweaks
           that make it independent from libraries and constructions 
unavailable on 2.x.
           Code on this branch still *must* work on the corresponding Python 
3.x but
           will also work on Python 2.6 and 2.7 (including PyPy).  You can 
check this
@@ -264,16 +307,17 @@
         
         The process works like this:
         
-        1. I update the ``3.x`` branch with new versions of files.  Note that 
the
-           actual ``configparser.py`` file is now just a proxy for sources 
held in
-           ``backports/configparser/__init__.py``.
+        1. In the ``3.x`` branch, run ``pip-run -- sync-upstream.py``, which
+           downloads the latest stable release of Python and copies the 
relevant
+           files from there into their new locations here and then commits 
those
+           changes with a nice reference to the relevant upstream commit hash.
         
         2. I check for new names in ``__all__`` and update imports in
            ``configparser.py`` accordingly. I run the tests on Python 3. 
Commit.
         
-        3. I merge the new commit to ``default``. I run ``tox``. Commit.
+        3. I merge the new commit to ``master``. I run ``tox``. Commit.
         
-        4. If there are necessary changes, I do them now (on ``default``). 
Note that
+        4. If there are necessary changes, I do them now (on ``master``). Note 
that
            the changes should be written in the syntax subset supported by 
Python
            2.6.
         
@@ -324,5 +368,8 @@
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
 Classifier: Topic :: Software Development :: Libraries
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Requires-Python: >=2.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/configparser-3.5.0/README.rst 
new/configparser-3.7.1/README.rst
--- old/configparser-3.5.0/README.rst   2016-05-21 10:13:37.000000000 +0200
+++ new/configparser-3.7.1/README.rst   2019-01-25 17:24:35.000000000 +0100
@@ -132,16 +132,57 @@
 Maintenance
 -----------
 
-This backport is maintained on BitBucket by Łukasz Langa, the current vanilla
-``configparser`` maintainer for CPython:
+This backport was originally authored by Łukasz Langa, the current vanilla
+``configparser`` maintainer for CPython and is currently maintained by
+Jason R. Coombs:
 
-* `configparser Mercurial repository 
<https://bitbucket.org/ambv/configparser>`_
+* `configparser repository <https://github.com/jaraco/configparser>`_
 
-* `configparser issue tracker 
<https://bitbucket.org/ambv/configparser/issues>`_
+* `configparser issue tracker <https://github.com/jaraco/configparser/issues>`_
 
 Change Log
 ----------
 
+3.7.1
+~~~~~
+
+* Issue #30: Fixed issue on Python 2.x when future is present.
+
+3.7.0
+~~~~~
+
+* Merge functionality from Python 3.7.2. Now ConfigParser accepts bytes
+  paths as well as any
+  `PathLike <https://docs.python.org/3/library/os.html#os.PathLike>`_
+  object, including those found in the `pathlib2 backport
+  <https://pypi.org/project/pathlib2/>`.
+
+3.5.3
+~~~~~
+
+* Issue #27: Reverted the limit on DeprecationWarning, as it had unintended
+  consequences.
+
+3.5.2
+~~~~~
+
+* Issue #23: Use environment markers to indicate the 'ordereddict' dependency
+  for Python 2.6.
+
+* Issue #24: Limit DeprecationWarning when a filename is indicated as a
+  bytestring on Python 2. Now the warning is only emitted when py3kwarning
+  is indicated.
+
+3.5.1
+~~~~~
+
+* jaraco adopts the package.
+
+* Moved hosting to GitHub.
+
+* Issue #21: Updated ``backports`` namespace package to conform with other
+  packages sharing the namespace.
+
 3.5.0
 ~~~~~
 
@@ -248,7 +289,7 @@
   CPython repository. The synchronization is currently done by manually copying
   the required files and stating from which CPython changeset they come from.
 
-* the ``default`` branch holds a version of the ``3.x`` code with some tweaks
+* the ``master`` branch holds a version of the ``3.x`` code with some tweaks
   that make it independent from libraries and constructions unavailable on 2.x.
   Code on this branch still *must* work on the corresponding Python 3.x but
   will also work on Python 2.6 and 2.7 (including PyPy).  You can check this
@@ -256,16 +297,17 @@
 
 The process works like this:
 
-1. I update the ``3.x`` branch with new versions of files.  Note that the
-   actual ``configparser.py`` file is now just a proxy for sources held in
-   ``backports/configparser/__init__.py``.
+1. In the ``3.x`` branch, run ``pip-run -- sync-upstream.py``, which
+   downloads the latest stable release of Python and copies the relevant
+   files from there into their new locations here and then commits those
+   changes with a nice reference to the relevant upstream commit hash.
 
 2. I check for new names in ``__all__`` and update imports in
    ``configparser.py`` accordingly. I run the tests on Python 3. Commit.
 
-3. I merge the new commit to ``default``. I run ``tox``. Commit.
+3. I merge the new commit to ``master``. I run ``tox``. Commit.
 
-4. If there are necessary changes, I do them now (on ``default``). Note that
+4. If there are necessary changes, I do them now (on ``master``). Note that
    the changes should be written in the syntax subset supported by Python
    2.6.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/configparser-3.5.0/configparser.rst 
new/configparser-3.7.1/configparser.rst
--- old/configparser-3.5.0/configparser.rst     2014-09-05 02:12:46.000000000 
+0200
+++ new/configparser-3.7.1/configparser.rst     2019-01-25 15:17:29.000000000 
+0100
@@ -19,6 +19,8 @@
    single: ini file
    single: Windows ini file
 
+--------------
+
 This module provides the :class:`ConfigParser` class which implements a basic
 configuration language which provides a structure similar to what's found in
 Microsoft Windows INI files.  You can use this to write Python programs which
@@ -32,14 +34,19 @@
 .. seealso::
 
    Module :mod:`shlex`
-      Support for a creating Unix shell-like mini-languages which can be used
-      as an alternate format for application configuration files.
+      Support for creating Unix shell-like mini-languages which can be used as
+      an alternate format for application configuration files.
 
    Module :mod:`json`
       The json module implements a subset of JavaScript syntax which can also
       be used for this purpose.
 
 
+.. testsetup::
+
+   import configparser
+
+
 Quick Start
 -----------
 
@@ -64,7 +71,7 @@
 <#supported-ini-file-structure>`_.  Essentially, the file
 consists of sections, each of which contains keys with values.
 :mod:`configparser` classes can read and write such files.  Let's start by
-creating the above configuration file programatically.
+creating the above configuration file programmatically.
 
 .. doctest::
 
@@ -93,7 +100,6 @@
 
 .. doctest::
 
-   >>> import configparser
    >>> config = configparser.ConfigParser()
    >>> config.sections()
    []
@@ -114,8 +120,8 @@
    'no'
    >>> topsecret['Port']
    '50022'
-   >>> for key in config['bitbucket.org']: print(key)
-   ...
+   >>> for key in config['bitbucket.org']:  # doctest: +SKIP
+   ...     print(key)
    user
    compressionlevel
    serveraliveinterval
@@ -144,12 +150,13 @@
    >>> float(topsecret['CompressionLevel'])
    9.0
 
-Extracting Boolean values is not that simple, though.  Passing the value
-to ``bool()`` would do no good since ``bool('False')`` is still
-``True``.  This is why config parsers also provide :meth:`getboolean`.
-This method is case-insensitive and recognizes Boolean values from
-``'yes'``/``'no'``, ``'on'``/``'off'`` and ``'1'``/``'0'`` [1]_.
-For example:
+Since this task is so common, config parsers provide a range of handy getter
+methods to handle integers, floats and booleans.  The last one is the most
+interesting because simply passing the value to ``bool()`` would do no good
+since ``bool('False')`` is still ``True``.  This is why config parsers also
+provide :meth:`~ConfigParser.getboolean`.  This method is case-insensitive and
+recognizes Boolean values from ``'yes'``/``'no'``, ``'on'``/``'off'``,
+``'true'``/``'false'`` and ``'1'``/``'0'`` [1]_.  For example:
 
 .. doctest::
 
@@ -160,11 +167,10 @@
    >>> config.getboolean('bitbucket.org', 'Compression')
    True
 
-Apart from :meth:`getboolean`, config parsers also provide equivalent
-:meth:`getint` and :meth:`getfloat` methods, but these are far less
-useful since conversion using :func:`int` and :func:`float` is
-sufficient for these types.
-
+Apart from :meth:`~ConfigParser.getboolean`, config parsers also
+provide equivalent :meth:`~ConfigParser.getint` and
+:meth:`~ConfigParser.getfloat` methods.  You can register your own
+converters and customize the provided ones. [1]_
 
 Fallback Values
 ---------------
@@ -204,8 +210,9 @@
    ...            fallback='No such things as monsters')
    'No such things as monsters'
 
-The same ``fallback`` argument can be used with the :meth:`getint`,
-:meth:`getfloat` and :meth:`getboolean` methods, for example:
+The same ``fallback`` argument can be used with the
+:meth:`~ConfigParser.getint`, :meth:`~ConfigParser.getfloat` and
+:meth:`~ConfigParser.getboolean` methods, for example:
 
 .. doctest::
 
@@ -288,6 +295,8 @@
 interpolation.  This means values can be preprocessed before returning them
 from ``get()`` calls.
 
+.. index:: single: % (percent); interpolation in configuration files
+
 .. class:: BasicInterpolation()
 
    The default implementation used by :class:`ConfigParser`.  It enables
@@ -316,14 +325,16 @@
    ``%(my_dir)s/Pictures`` as the value of ``my_pictures`` and
    ``%(home_dir)s/lumberjack`` as the value of ``my_dir``.
 
+.. index:: single: $ (dollar); interpolation in configuration files
+
 .. class:: ExtendedInterpolation()
 
    An alternative handler for interpolation which implements a more advanced
-   syntax, used for instance in ``zc.buildout``. Extended interpolation is
+   syntax, used for instance in ``zc.buildout``.  Extended interpolation is
    using ``${section:option}`` to denote a value from a foreign section.
-   Interpolation can span multiple levels. For convenience, if the ``section:``
-   part is omitted, interpolation defaults to the current section (and possibly
-   the default values from the special section).
+   Interpolation can span multiple levels.  For convenience, if the
+   ``section:`` part is omitted, interpolation defaults to the current section
+   (and possibly the default values from the special section).
 
    For example, the configuration specified above with basic interpolation,
    would look like this with extended interpolation:
@@ -390,24 +401,24 @@
   because default values cannot be deleted from the section (because 
technically
   they are not there).  If they are overridden in the section, deleting causes
   the default value to be visible again.  Trying to delete a default value
-  causes a ``KeyError``.
+  causes a :exc:`KeyError`.
 
 * ``DEFAULTSECT`` cannot be removed from the parser:
 
-  * trying to delete it raises ``ValueError``,
+  * trying to delete it raises :exc:`ValueError`,
 
   * ``parser.clear()`` leaves it intact,
 
   * ``parser.popitem()`` never returns it.
 
 * ``parser.get(section, option, **kwargs)`` - the second argument is **not**
-  a fallback value. Note however that the section-level ``get()`` methods are
+  a fallback value.  Note however that the section-level ``get()`` methods are
   compatible both with the mapping protocol and the classic configparser API.
 
 * ``parser.items()`` is compatible with the mapping protocol (returns a list of
   *section_name*, *section_proxy* pairs including the DEFAULTSECT).  However,
   this method can also be invoked with arguments: ``parser.items(section, raw,
-  vars)``. The latter call returns a list of *option*, *value* pairs for
+  vars)``.  The latter call returns a list of *option*, *value* pairs for
   a specified ``section``, with all interpolations expanded (unless
   ``raw=True`` is provided).
 
@@ -466,9 +477,9 @@
      ...                                'bar': 'y',
      ...                                'baz': 'z'}
      ... })
-     >>> parser.sections()
+     >>> parser.sections()  # doctest: +SKIP
      ['section3', 'section2', 'section1']
-     >>> [option for option in parser['section3']]
+     >>> [option for option in parser['section3']] # doctest: +SKIP
      ['baz', 'foo', 'bar']
 
   In these operations you need to use an ordered dictionary as well:
@@ -495,11 +506,11 @@
      ...     ),
      ...   ))
      ... )
-     >>> parser.sections()
+     >>> parser.sections()  # doctest: +SKIP
      ['s1', 's2']
-     >>> [option for option in parser['s1']]
+     >>> [option for option in parser['s1']]  # doctest: +SKIP
      ['1', '3', '5']
-     >>> [option for option in parser['s2'].values()]
+     >>> [option for option in parser['s2'].values()]  # doctest: +SKIP
      ['b', 'd', 'f']
 
 * *allow_no_value*, default value: ``False``
@@ -541,9 +552,9 @@
 
 * *delimiters*, default value: ``('=', ':')``
 
-  Delimiters are substrings that delimit keys from values within a section. The
-  first occurrence of a delimiting substring on a line is considered a 
delimiter.
-  This means values (but not keys) can contain the delimiters.
+  Delimiters are substrings that delimit keys from values within a section.
+  The first occurrence of a delimiting substring on a line is considered
+  a delimiter.  This means values (but not keys) can contain the delimiters.
 
   See also the *space_around_delimiters* argument to
   :meth:`ConfigParser.write`.
@@ -555,7 +566,7 @@
   Comment prefixes are strings that indicate the start of a valid comment 
within
   a config file. *comment_prefixes* are used only on otherwise empty lines
   (optionally indented) whereas *inline_comment_prefixes* can be used after
-  every valid value (e.g.  section names, options and empty lines as well). By
+  every valid value (e.g. section names, options and empty lines as well).  By
   default inline comments are disabled and ``'#'`` and ``';'`` are used as
   prefixes for whole line comments.
 
@@ -565,10 +576,10 @@
 
   Please note that config parsers don't support escaping of comment prefixes so
   using *inline_comment_prefixes* may prevent users from specifying option
-  values with characters used as comment prefixes. When in doubt, avoid setting
-  *inline_comment_prefixes*. In any circumstances, the only way of storing
-  comment prefix characters at the beginning of a line in multiline values is 
to
-  interpolate the prefix, for example::
+  values with characters used as comment prefixes.  When in doubt, avoid
+  setting *inline_comment_prefixes*.  In any circumstances, the only way of
+  storing comment prefix characters at the beginning of a line in multiline
+  values is to interpolate the prefix, for example::
 
     >>> from configparser import ConfigParser, ExtendedInterpolation
     >>> parser = ConfigParser(interpolation=ExtendedInterpolation())
@@ -594,11 +605,11 @@
     ...   line #3
     ... """)
     >>> print(parser['hashes']['shebang'])
-
+    <BLANKLINE>
     #!/usr/bin/env python
     # -*- coding: utf-8 -*-
     >>> print(parser['hashes']['extensions'])
-
+    <BLANKLINE>
     enabled_extension
     another_extension
     yet_another_extension
@@ -613,7 +624,7 @@
 
   When set to ``True``, the parser will not allow for any section or option
   duplicates while reading from a single source (using :meth:`read_file`,
-  :meth:`read_string` or :meth:`read_dict`). It is recommended to use strict
+  :meth:`read_string` or :meth:`read_dict`).  It is recommended to use strict
   parsers in new applications.
 
   .. versionchanged:: 3.2
@@ -648,12 +659,12 @@
 
   The convention of allowing a special section of default values for other
   sections or interpolation purposes is a powerful concept of this library,
-  letting users create complex declarative configurations. This section is
+  letting users create complex declarative configurations.  This section is
   normally called ``"DEFAULT"`` but this can be customized to point to any
-  other valid section name. Some typical values include: ``"general"`` or
-  ``"common"``. The name provided is used for recognizing default sections when
-  reading from any source and is used when writing configuration back to
-  a file. Its current value can be retrieved using the
+  other valid section name.  Some typical values include: ``"general"`` or
+  ``"common"``.  The name provided is used for recognizing default sections
+  when reading from any source and is used when writing configuration back to
+  a file.  Its current value can be retrieved using the
   ``parser_instance.default_section`` attribute and may be modified at runtime
   (i.e. to convert files from one format to another).
 
@@ -662,22 +673,39 @@
   Interpolation behaviour may be customized by providing a custom handler
   through the *interpolation* argument. ``None`` can be used to turn off
   interpolation completely, ``ExtendedInterpolation()`` provides a more
-  advanced variant inspired by ``zc.buildout``. More on the subject in the
+  advanced variant inspired by ``zc.buildout``.  More on the subject in the
   `dedicated documentation section <#interpolation-of-values>`_.
   :class:`RawConfigParser` has a default value of ``None``.
 
+* *converters*, default value: not set
+
+  Config parsers provide option value getters that perform type conversion.  By
+  default :meth:`~ConfigParser.getint`, :meth:`~ConfigParser.getfloat`, and
+  :meth:`~ConfigParser.getboolean` are implemented.  Should other getters be
+  desirable, users may define them in a subclass or pass a dictionary where 
each
+  key is a name of the converter and each value is a callable implementing said
+  conversion.  For instance, passing ``{'decimal': decimal.Decimal}`` would add
+  :meth:`getdecimal` on both the parser object and all section proxies.  In
+  other words, it will be possible to write both
+  ``parser_instance.getdecimal('section', 'key', fallback=0)`` and
+  ``parser_instance['section'].getdecimal('key', 0)``.
+
+  If the converter needs to access the state of the parser, it can be
+  implemented as a method on a config parser subclass.  If the name of this
+  method starts with ``get``, it will be available on all section proxies, in
+  the dict-compatible form (see the ``getdecimal()`` example above).
 
 More advanced customization may be achieved by overriding default values of
-these parser attributes.  The defaults are defined on the classes, so they
-may be overridden by subclasses or by attribute assignment.
+these parser attributes.  The defaults are defined on the classes, so they may
+be overridden by subclasses or by attribute assignment.
 
-.. attribute:: BOOLEAN_STATES
+.. attribute:: ConfigParser.BOOLEAN_STATES
 
-  By default when using :meth:`getboolean`, config parsers consider the
-  following values ``True``: ``'1'``, ``'yes'``, ``'true'``, ``'on'`` and the
-  following values ``False``: ``'0'``, ``'no'``, ``'false'``, ``'off'``.  You
-  can override this by specifying a custom dictionary of strings and their
-  Boolean outcomes. For example:
+  By default when using :meth:`~ConfigParser.getboolean`, config parsers
+  consider the following values ``True``: ``'1'``, ``'yes'``, ``'true'``,
+  ``'on'`` and the following values ``False``: ``'0'``, ``'no'``, ``'false'``,
+  ``'off'``.  You can override this by specifying a custom dictionary of 
strings
+  and their Boolean outcomes. For example:
 
   .. doctest::
 
@@ -694,7 +722,7 @@
   Other typical Boolean pairs include ``accept``/``reject`` or
   ``enabled``/``disabled``.
 
-.. method:: optionxform(option)
+.. method:: ConfigParser.optionxform(option)
 
   This method transforms option names on every read, get, or set
   operation.  The default converts the name to lowercase.  This also
@@ -725,15 +753,17 @@
      >>> list(custom['Section2'].keys())
      ['AnotherKey']
 
-.. attribute:: SECTCRE
+.. attribute:: ConfigParser.SECTCRE
 
-  A compiled regular expression used to parse section headers. The default
-  matches ``[section]`` to the name ``"section"``. Whitespace is considered 
part
-  of the section name, thus ``[  larch  ]`` will be read as a section of name
-  ``"  larch  "``. Override this attribute if that's unsuitable.  For example:
+  A compiled regular expression used to parse section headers.  The default
+  matches ``[section]`` to the name ``"section"``.  Whitespace is considered
+  part of the section name, thus ``[  larch  ]`` will be read as a section of
+  name ``"  larch  "``.  Override this attribute if that's unsuitable.  For
+  example:
 
   .. doctest::
 
+     >>> import re
      >>> config = """
      ... [Section 1]
      ... option = value
@@ -741,11 +771,11 @@
      ... [  Section 2  ]
      ... another = val
      ... """
-     >>> typical = ConfigParser()
+     >>> typical = configparser.ConfigParser()
      >>> typical.read_string(config)
      >>> typical.sections()
      ['Section 1', '  Section 2  ']
-     >>> custom = ConfigParser()
+     >>> custom = configparser.ConfigParser()
      >>> custom.SECTCRE = re.compile(r"\[ *(?P<header>[^]]+?) *\]")
      >>> custom.read_string(config)
      >>> custom.sections()
@@ -817,13 +847,13 @@
 
    # Set the optional *raw* argument of get() to True if you wish to disable
    # interpolation in a single get operation.
-   print(cfg.get('Section1', 'foo', raw=False)) # -> "Python is fun!"
-   print(cfg.get('Section1', 'foo', raw=True))  # -> "%(bar)s is %(baz)s!"
+   print(cfg.get('Section1', 'foo', raw=False))  # -> "Python is fun!"
+   print(cfg.get('Section1', 'foo', raw=True))   # -> "%(bar)s is %(baz)s!"
 
    # The optional *vars* argument is a dict with members that will take
    # precedence in interpolation.
    print(cfg.get('Section1', 'foo', vars={'bar': 'Documentation',
-                                             'baz': 'evil'}))
+                                          'baz': 'evil'}))
 
    # The optional *fallback* argument can be used to provide a fallback value
    print(cfg.get('Section1', 'foo'))
@@ -850,10 +880,10 @@
    config = configparser.ConfigParser({'bar': 'Life', 'baz': 'hard'})
    config.read('example.cfg')
 
-   print(config.get('Section1', 'foo')) # -> "Python is fun!"
+   print(config.get('Section1', 'foo'))     # -> "Python is fun!"
    config.remove_option('Section1', 'bar')
    config.remove_option('Section1', 'baz')
-   print(config.get('Section1', 'foo')) # -> "Life is hard!"
+   print(config.get('Section1', 'foo'))     # -> "Life is hard!"
 
 
 .. _configparser-objects:
@@ -861,7 +891,7 @@
 ConfigParser Objects
 --------------------
 
-.. class:: ConfigParser(defaults=None, dict_type=collections.OrderedDict, 
allow_no_value=False, delimiters=('=', ':'), comment_prefixes=('#', ';'), 
inline_comment_prefixes=None, strict=True, empty_lines_in_values=True, 
default_section=configparser.DEFAULTSECT, interpolation=BasicInterpolation())
+.. class:: ConfigParser(defaults=None, dict_type=dict, allow_no_value=False, 
delimiters=('=', ':'), comment_prefixes=('#', ';'), 
inline_comment_prefixes=None, strict=True, empty_lines_in_values=True, 
default_section=configparser.DEFAULTSECT, interpolation=BasicInterpolation(), 
converters={})
 
    The main configuration parser.  When *defaults* is given, it is initialized
    into the dictionary of intrinsic defaults.  When *dict_type* is given, it
@@ -871,8 +901,8 @@
    When *delimiters* is given, it is used as the set of substrings that
    divide keys from values.  When *comment_prefixes* is given, it will be used
    as the set of substrings that prefix comments in otherwise empty lines.
-   Comments can be indented. When *inline_comment_prefixes* is given, it will 
be
-   used as the set of substrings that prefix comments in non-empty lines.
+   Comments can be indented.  When *inline_comment_prefixes* is given, it will
+   be used as the set of substrings that prefix comments in non-empty lines.
 
    When *strict* is ``True`` (the default), the parser won't allow for
    any section or option duplicates while reading from a single source (file,
@@ -886,13 +916,13 @@
 
    When *default_section* is given, it specifies the name for the special
    section holding default values for other sections and interpolation purposes
-   (normally named ``"DEFAULT"``). This value can be retrieved and changed on
+   (normally named ``"DEFAULT"``).  This value can be retrieved and changed on
    runtime using the ``default_section`` instance attribute.
 
    Interpolation behaviour may be customized by providing a custom handler
    through the *interpolation* argument. ``None`` can be used to turn off
    interpolation completely, ``ExtendedInterpolation()`` provides a more
-   advanced variant inspired by ``zc.buildout``. More on the subject in the
+   advanced variant inspired by ``zc.buildout``.  More on the subject in the
    `dedicated documentation section <#interpolation-of-values>`_.
 
    All option names used in interpolation will be passed through the
@@ -901,6 +931,12 @@
    converts option names to lower case), the values ``foo %(bar)s`` and ``foo
    %(BAR)s`` are equivalent.
 
+   When *converters* is given, it should be a dictionary where each key
+   represents the name of a type converter and each value is a callable
+   implementing the conversion from string to the desired datatype.  Every
+   converter gets its own corresponding :meth:`get*()` method on the parser
+   object and section proxies.
+
    .. versionchanged:: 3.1
       The default *dict_type* is :class:`collections.OrderedDict`.
 
@@ -909,6 +945,17 @@
       *empty_lines_in_values*, *default_section* and *interpolation* were
       added.
 
+   .. versionchanged:: 3.5
+      The *converters* argument was added.
+
+   .. versionchanged:: 3.7
+      The *defaults* argument is read with :meth:`read_dict()`,
+      providing consistent behavior across the parser: non-string
+      keys and values are implicitly converted to strings.
+
+   .. versionchanged:: 3.7
+      The default *dict_type* is :class:`dict`, since it now preserves
+      insertion order.
 
    .. method:: defaults()
 
@@ -946,20 +993,25 @@
    .. method:: has_option(section, option)
 
       If the given *section* exists, and contains the given *option*, return
-      :const:`True`; otherwise return :const:`False`. If the specified
+      :const:`True`; otherwise return :const:`False`.  If the specified
       *section* is :const:`None` or an empty string, DEFAULT is assumed.
 
 
    .. method:: read(filenames, encoding=None)
 
-      Attempt to read and parse a list of filenames, returning a list of
-      filenames which were successfully parsed.  If *filenames* is a string, it
-      is treated as a single filename.  If a file named in *filenames* cannot
-      be opened, that file will be ignored.  This is designed so that you can
-      specify a list of potential configuration file locations (for example,
-      the current directory, the user's home directory, and some system-wide
-      directory), and all existing configuration files in the list will be
-      read.  If none of the named files exist, the :class:`ConfigParser`
+      Attempt to read and parse an iterable of filenames, returning a list of
+      filenames which were successfully parsed.
+
+      If *filenames* is a string, a :class:`bytes` object or a
+      :term:`path-like object`, it is treated as
+      a single filename.  If a file named in *filenames* cannot be opened, that
+      file will be ignored.  This is designed so that you can specify an
+      iterable of potential configuration file locations (for example, the
+      current directory, the user's home directory, and some system-wide
+      directory), and all existing configuration files in the iterable will be
+      read.
+
+      If none of the named files exist, the :class:`ConfigParser`
       instance will contain an empty dataset.  An application which requires
       initial values to be loaded from a file should load the required file or
       files using :meth:`read_file` before calling :meth:`read` for any
@@ -976,6 +1028,12 @@
          The *encoding* parameter.  Previously, all files were read using the
          default encoding for :func:`open`.
 
+      .. versionadded:: 3.6.1
+         The *filenames* parameter accepts a :term:`path-like object`.
+
+      .. versionadded:: 3.7
+         The *filenames* parameter accepts a :class:`bytes` object.
+
 
    .. method:: read_file(f, source=None)
 
@@ -1070,10 +1128,6 @@
       given *section*.  Optional arguments have the same meaning as for the
       :meth:`get` method.
 
-      .. versionchanged:: 3.2
-         Items present in *vars* no longer appear in the result. The previous
-         behaviour mixed actual parser options with variables provided for
-         interpolation.
 
    .. method:: set(section, option, value)
 
@@ -1131,20 +1185,20 @@
          Use :meth:`read_file` instead.
 
       .. versionchanged:: 3.2
-         :meth:`readfp` now iterates on *f* instead of calling 
``f.readline()``.
+         :meth:`readfp` now iterates on *fp* instead of calling 
``fp.readline()``.
 
       For existing code calling :meth:`readfp` with arguments which don't
       support iteration, the following generator may be used as a wrapper
       around the file-like object::
 
-         def readline_generator(f):
-             line = f.readline()
+         def readline_generator(fp):
+             line = fp.readline()
              while line:
                  yield line
-                 line = f.readline()
+                 line = fp.readline()
 
-      Instead of ``parser.readfp(f)`` use
-      ``parser.read_file(readline_generator(f))``.
+      Instead of ``parser.readfp(fp)`` use
+      ``parser.read_file(readline_generator(fp))``.
 
 
 .. data:: MAX_INTERPOLATION_DEPTH
@@ -1159,7 +1213,7 @@
 RawConfigParser Objects
 -----------------------
 
-.. class:: RawConfigParser(defaults=None, dict_type=collections.OrderedDict, \
+.. class:: RawConfigParser(defaults=None, dict_type=dict, \
                            allow_no_value=False, *, delimiters=('=', ':'), \
                            comment_prefixes=('#', ';'), \
                            inline_comment_prefixes=None, strict=True, \
@@ -1167,12 +1221,18 @@
                            default_section=configparser.DEFAULTSECT[, \
                            interpolation])
 
-   Legacy variant of the :class:`ConfigParser` with interpolation disabled
-   by default and unsafe ``add_section`` and ``set`` methods.
+   Legacy variant of the :class:`ConfigParser`.  It has interpolation
+   disabled by default and allows for non-string section names, option
+   names, and values via its unsafe ``add_section`` and ``set`` methods,
+   as well as the legacy ``defaults=`` keyword argument handling.
+
+   .. versionchanged:: 3.7
+      The default *dict_type* is :class:`dict`, since it now preserves
+      insertion order.
 
    .. note::
       Consider using :class:`ConfigParser` instead which checks types of
-      the values to be stored internally. If you don't want interpolation, you
+      the values to be stored internally.  If you don't want interpolation, you
       can use ``ConfigParser(interpolation=None)``.
 
 
@@ -1183,7 +1243,7 @@
       *default section* name is passed, :exc:`ValueError` is raised.
 
       Type of *section* is not checked which lets users create non-string named
-      sections. This behaviour is unsupported and may cause internal errors.
+      sections.  This behaviour is unsupported and may cause internal errors.
 
 
    .. method:: set(section, option, value)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/configparser-3.5.0/pyproject.toml 
new/configparser-3.7.1/pyproject.toml
--- old/configparser-3.5.0/pyproject.toml       1970-01-01 01:00:00.000000000 
+0100
+++ new/configparser-3.7.1/pyproject.toml       2019-01-25 12:09:29.000000000 
+0100
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools>=34.4", "wheel"]
+build-backend = "setuptools.build_meta"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/configparser-3.5.0/setup.cfg 
new/configparser-3.7.1/setup.cfg
--- old/configparser-3.5.0/setup.cfg    2016-05-21 10:15:06.000000000 +0200
+++ new/configparser-3.7.1/setup.cfg    2019-01-25 17:35:46.000000000 +0100
@@ -1,5 +1,40 @@
+[metadata]
+name = configparser
+version = 3.7.1
+long_description = file:README.rst
+description = Updated configparser from Python 3.7 for Python 2.6+.
+author = Łukasz Langa
+author_email = luk...@langa.pl
+maintainer = Jason R. Coombs
+maintainer_email = jar...@jaraco.com
+url = https://github.com/jaraco/configparser/
+keywords = configparser ini parsing conf cfg configuration file
+platforms = any
+classifiers = 
+       Development Status :: 5 - Production/Stable
+       Intended Audience :: Developers
+       License :: OSI Approved :: MIT License
+       Natural Language :: English
+       Operating System :: OS Independent
+       Programming Language :: Python
+       Programming Language :: Python :: 2
+       Programming Language :: Python :: 2.6
+       Programming Language :: Python :: 2.7
+       Programming Language :: Python :: 3
+       Programming Language :: Python :: 3.4
+       Programming Language :: Python :: 3.5
+       Programming Language :: Python :: 3.6
+       Programming Language :: Python :: 3.7
+       Topic :: Software Development :: Libraries
+       Topic :: Software Development :: Libraries :: Python Modules
+
+[options]
+install_requires = 
+       ordereddict; python_version=="2.6"
+include_package_data = True
+python_requires = >=2.6
+
 [egg_info]
 tag_build = 
 tag_date = 0
-tag_svn_revision = 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/configparser-3.5.0/setup.py 
new/configparser-3.7.1/setup.py
--- old/configparser-3.5.0/setup.py     2016-05-21 10:14:22.000000000 +0200
+++ new/configparser-3.7.1/setup.py     2019-01-25 15:17:29.000000000 +0100
@@ -1,65 +1,9 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-"""This library brings the updated configparser from Python 3.5 to Python 
2.6-3.5."""
-
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-
-import codecs
-import os
 import sys
-from setuptools import setup, find_packages
-
-readme_filename = os.path.join(os.path.dirname(__file__), 'README.rst')
-with codecs.open(readme_filename, encoding='utf8') as ld_file:
-    long_description = ld_file.read()
-
-requirements = []
-
-if sys.version_info[0] == 2:
-    # bail on UTF-8 and enable `import configparser` for Python 2
-    author = 'Lukasz Langa'
-    modules = ['configparser']
-    if sys.version_info[1] < 7:
-        requirements.append('ordereddict')
-else:
-    author = 'Łukasz Langa'
-    modules = []
+import setuptools
 
-setup(
-    name='configparser',
-    version='3.5.0',
-    author=author,
-    author_email='luk...@langa.pl',
-    description=__doc__,
-    long_description=long_description,
-    url='http://docs.python.org/3/library/configparser.html',
-    keywords='configparser ini parsing conf cfg configuration file',
-    platforms=['any'],
-    license='MIT',
-    py_modules=modules,
+setuptools.setup(
+    # enable `import configparser` for Python 2
+    py_modules=['configparser'] if sys.version_info < (3,) else [],
+    packages=setuptools.find_packages(where='src'),
     package_dir={'': 'src'},
-    packages=find_packages('src'),
-    namespace_packages=['backports'],
-    include_package_data=True,
-    zip_safe=False,
-    install_requires=requirements,
-    classifiers=[
-        'Development Status :: 5 - Production/Stable',
-        'Intended Audience :: Developers',
-        'License :: OSI Approved :: MIT License',
-        'Natural Language :: English',
-        'Operating System :: OS Independent',
-        'Programming Language :: Python',
-        'Programming Language :: Python :: 2',
-        'Programming Language :: Python :: 2.6',
-        'Programming Language :: Python :: 2.7',
-        'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.4',
-        'Programming Language :: Python :: 3.5',
-        'Topic :: Software Development :: Libraries',
-        'Topic :: Software Development :: Libraries :: Python Modules',
-    ],
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/configparser-3.5.0/src/backports/__init__.py 
new/configparser-3.7.1/src/backports/__init__.py
--- old/configparser-3.5.0/src/backports/__init__.py    2014-09-05 
01:12:07.000000000 +0200
+++ new/configparser-3.7.1/src/backports/__init__.py    2019-01-25 
12:09:29.000000000 +0100
@@ -3,9 +3,3 @@
 
 from pkgutil import extend_path
 __path__ = extend_path(__path__, __name__)
-
-try:
-    import pkg_resources
-    pkg_resources.declare_namespace(__name__)
-except ImportError:
-    pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/configparser-3.5.0/src/backports/configparser/__init__.py 
new/configparser-3.7.1/src/backports/configparser/__init__.py
--- old/configparser-3.5.0/src/backports/configparser/__init__.py       
2016-05-21 10:12:11.000000000 +0200
+++ new/configparser-3.7.1/src/backports/configparser/__init__.py       
2019-01-25 15:17:29.000000000 +0100
@@ -64,7 +64,7 @@
         Return list of configuration options for the named section.
 
     read(filenames, encoding=None)
-        Read and parse the list of named configuration files, given by
+        Read and parse the iterable of named configuration files, given by
         name.  A single filename is also allowed.  Non-existing files
         are ignored.  Return list of successfully read files.
 
@@ -131,6 +131,7 @@
 import functools
 import io
 import itertools
+import os
 import re
 import sys
 import warnings
@@ -138,6 +139,7 @@
 from backports.configparser.helpers import OrderedDict as _default_dict
 from backports.configparser.helpers import ChainMap as _ChainMap
 from backports.configparser.helpers import from_none, open, str, PY2
+from backports.configparser.helpers import PathLike, fspath
 
 __all__ = ["NoSectionError", "DuplicateOptionError", "DuplicateSectionError",
            "NoOptionError", "InterpolationError", "InterpolationDepthError",
@@ -606,9 +608,6 @@
         self._converters = ConverterMapping(self)
         self._proxies = self._dict()
         self._proxies[default_section] = SectionProxy(self, default_section)
-        if defaults:
-            for key, value in defaults.items():
-                self._defaults[self.optionxform(key)] = value
         self._delimiters = tuple(delimiters)
         if delimiters == ('=', ':'):
             self._optcre = self.OPTCRE_NV if allow_no_value else self.OPTCRE
@@ -633,6 +632,8 @@
             self._interpolation = Interpolation()
         if converters is not _UNSET:
             self._converters.update(converters)
+        if defaults:
+            self._read_defaults(defaults)
 
     def defaults(self):
         return self._defaults
@@ -673,33 +674,23 @@
         return list(opts.keys())
 
     def read(self, filenames, encoding=None):
-        """Read and parse a filename or a list of filenames.
+        """Read and parse a filename or an iterable of filenames.
 
         Files that cannot be opened are silently ignored; this is
-        designed so that you can specify a list of potential
+        designed so that you can specify an iterable of potential
         configuration file locations (e.g. current directory, user's
         home directory, systemwide directory), and all existing
-        configuration files in the list will be read.  A single
+        configuration files in the iterable will be read.  A single
         filename may also be given.
 
         Return list of successfully read files.
         """
-        if PY2 and isinstance(filenames, bytes):
-            # we allow for a little unholy magic for Python 2 so that
-            # people not using unicode_literals can still use the library
-            # conveniently
-            warnings.warn(
-                "You passed a bytestring as `filenames`. This will not work"
-                " on Python 3. Use `cp.read_file()` or switch to using Unicode"
-                " strings across the board.",
-                DeprecationWarning,
-                stacklevel=2,
-            )
-            filenames = [filenames]
-        elif isinstance(filenames, str):
+        if isinstance(filenames, (str, bytes, PathLike)):
             filenames = [filenames]
         read_ok = []
         for filename in filenames:
+            if isinstance(filename, PathLike):
+                filename = fspath(filename)
             try:
                 with open(filename, encoding=encoding) as fp:
                     self._read(fp, filename)
@@ -1126,10 +1117,10 @@
                         # raised at the end of the file and will contain a
                         # list of all bogus lines
                         e = self._handle_error(e, fpname, lineno, line)
+        self._join_multiline_values()
         # if any parsing errors occurred, raise an exception
         if e:
             raise e
-        self._join_multiline_values()
 
     def _join_multiline_values(self):
         defaults = self.default_section, self._defaults
@@ -1143,6 +1134,12 @@
                                                                 section,
                                                                 name, val)
 
+    def _read_defaults(self, defaults):
+        """Read the defaults passed in the initializer.
+        Note: values can be non-string."""
+        for key, value in defaults.items():
+            self._defaults[self.optionxform(key)] = value
+
     def _handle_error(self, exc, fpname, lineno, line):
         if not exc:
             exc = ParsingError(fpname)
@@ -1245,6 +1242,19 @@
         section, _, _ = self._validate_value_types(section=section)
         super(ConfigParser, self).add_section(section)
 
+    def _read_defaults(self, defaults):
+        """Reads the defaults passed in the initializer, implicitly converting
+        values to strings like the rest of the API.
+
+        Does not perform interpolation for backwards compatibility.
+        """
+        try:
+            hold_interpolation = self._interpolation
+            self._interpolation = Interpolation()
+            self.read_dict({self.default_section: defaults})
+        finally:
+            self._interpolation = hold_interpolation
+
 
 class SafeConfigParser(ConfigParser):
     """ConfigParser alias for backwards compatibility purposes."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/configparser-3.5.0/src/backports/configparser/helpers.py 
new/configparser-3.7.1/src/backports/configparser/helpers.py
--- old/configparser-3.5.0/src/backports/configparser/helpers.py        
2016-05-21 08:55:42.000000000 +0200
+++ new/configparser-3.7.1/src/backports/configparser/helpers.py        
2019-01-25 17:27:28.000000000 +0100
@@ -6,6 +6,9 @@
 from __future__ import print_function
 from __future__ import unicode_literals
 
+import abc
+import os
+
 from collections import MutableMapping
 try:
     from collections import UserDict
@@ -17,6 +20,11 @@
 except ImportError:
     from ordereddict import OrderedDict
 
+try:
+    import pathlib
+except ImportError:
+    pathlib = None
+
 from io import open
 import sys
 try:
@@ -31,6 +39,7 @@
 PY2 = sys.version_info[0] == 2
 PY3 = sys.version_info[0] == 3
 
+native_str = str
 str = type('str')
 
 
@@ -169,3 +178,73 @@
     from collections import ChainMap
 except ImportError:
     ChainMap = _ChainMap
+
+
+_ABC = getattr(
+    abc, 'ABC',
+    # Python 3.3 compatibility
+    abc.ABCMeta(
+        native_str('__ABC'),
+        (object,),
+        dict(__metaclass__=abc.ABCMeta),
+    ),
+)
+
+
+class _PathLike(_ABC):
+
+    """Abstract base class for implementing the file system path protocol."""
+
+    @abc.abstractmethod
+    def __fspath__(self):
+        """Return the file system path representation of the object."""
+        raise NotImplementedError
+
+    @classmethod
+    def __subclasshook__(cls, subclass):
+        return bool(
+            hasattr(subclass, '__fspath__')
+            # workaround for Python 3.5
+            or pathlib and issubclass(subclass, pathlib.Path)
+        )
+
+
+PathLike = getattr(os, 'PathLike', _PathLike)
+
+
+def _fspath(path):
+    """Return the path representation of a path-like object.
+
+    If str or bytes is passed in, it is returned unchanged. Otherwise the
+    os.PathLike interface is used to get the path representation. If the
+    path representation is not str or bytes, TypeError is raised. If the
+    provided path is not str, bytes, or os.PathLike, TypeError is raised.
+    """
+    if isinstance(path, (str, bytes)):
+        return path
+
+    if not hasattr(path, '__fspath__') and isinstance(path, pathlib.Path):
+        # workaround for Python 3.5
+        return str(path)
+
+    # Work from the object's type to match method resolution of other magic
+    # methods.
+    path_type = type(path)
+    try:
+        path_repr = path_type.__fspath__(path)
+    except AttributeError:
+
+        if hasattr(path_type, '__fspath__'):
+            raise
+        else:
+            raise TypeError("expected str, bytes or os.PathLike object, "
+                            "not " + path_type.__name__)
+    if isinstance(path_repr, (str, bytes)):
+        return path_repr
+    else:
+        raise TypeError("expected {}.__fspath__() to return str or bytes, "
+                        "not {}".format(path_type.__name__,
+                                        type(path_repr).__name__))
+
+
+fspath = getattr(os, 'fspath', _fspath)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/configparser-3.5.0/src/configparser.egg-info/PKG-INFO 
new/configparser-3.7.1/src/configparser.egg-info/PKG-INFO
--- old/configparser-3.5.0/src/configparser.egg-info/PKG-INFO   2016-05-21 
10:15:06.000000000 +0200
+++ new/configparser-3.7.1/src/configparser.egg-info/PKG-INFO   2019-01-25 
17:35:45.000000000 +0100
@@ -1,11 +1,13 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: configparser
-Version: 3.5.0
-Summary: This library brings the updated configparser from Python 3.5 to 
Python 2.6-3.5.
-Home-page: http://docs.python.org/3/library/configparser.html
+Version: 3.7.1
+Summary: Updated configparser from Python 3.7 for Python 2.6+.
+Home-page: https://github.com/jaraco/configparser/
 Author: Łukasz Langa
 Author-email: luk...@langa.pl
-License: MIT
+Maintainer: Jason R. Coombs
+Maintainer-email: jar...@jaraco.com
+License: UNKNOWN
 Description: ============
         configparser
         ============
@@ -140,16 +142,57 @@
         Maintenance
         -----------
         
-        This backport is maintained on BitBucket by Łukasz Langa, the current 
vanilla
-        ``configparser`` maintainer for CPython:
+        This backport was originally authored by Łukasz Langa, the current 
vanilla
+        ``configparser`` maintainer for CPython and is currently maintained by
+        Jason R. Coombs:
         
-        * `configparser Mercurial repository 
<https://bitbucket.org/ambv/configparser>`_
+        * `configparser repository <https://github.com/jaraco/configparser>`_
         
-        * `configparser issue tracker 
<https://bitbucket.org/ambv/configparser/issues>`_
+        * `configparser issue tracker 
<https://github.com/jaraco/configparser/issues>`_
         
         Change Log
         ----------
         
+        3.7.1
+        ~~~~~
+        
+        * Issue #30: Fixed issue on Python 2.x when future is present.
+        
+        3.7.0
+        ~~~~~
+        
+        * Merge functionality from Python 3.7.2. Now ConfigParser accepts bytes
+          paths as well as any
+          `PathLike <https://docs.python.org/3/library/os.html#os.PathLike>`_
+          object, including those found in the `pathlib2 backport
+          <https://pypi.org/project/pathlib2/>`.
+        
+        3.5.3
+        ~~~~~
+        
+        * Issue #27: Reverted the limit on DeprecationWarning, as it had 
unintended
+          consequences.
+        
+        3.5.2
+        ~~~~~
+        
+        * Issue #23: Use environment markers to indicate the 'ordereddict' 
dependency
+          for Python 2.6.
+        
+        * Issue #24: Limit DeprecationWarning when a filename is indicated as a
+          bytestring on Python 2. Now the warning is only emitted when 
py3kwarning
+          is indicated.
+        
+        3.5.1
+        ~~~~~
+        
+        * jaraco adopts the package.
+        
+        * Moved hosting to GitHub.
+        
+        * Issue #21: Updated ``backports`` namespace package to conform with 
other
+          packages sharing the namespace.
+        
         3.5.0
         ~~~~~
         
@@ -256,7 +299,7 @@
           CPython repository. The synchronization is currently done by 
manually copying
           the required files and stating from which CPython changeset they 
come from.
         
-        * the ``default`` branch holds a version of the ``3.x`` code with some 
tweaks
+        * the ``master`` branch holds a version of the ``3.x`` code with some 
tweaks
           that make it independent from libraries and constructions 
unavailable on 2.x.
           Code on this branch still *must* work on the corresponding Python 
3.x but
           will also work on Python 2.6 and 2.7 (including PyPy).  You can 
check this
@@ -264,16 +307,17 @@
         
         The process works like this:
         
-        1. I update the ``3.x`` branch with new versions of files.  Note that 
the
-           actual ``configparser.py`` file is now just a proxy for sources 
held in
-           ``backports/configparser/__init__.py``.
+        1. In the ``3.x`` branch, run ``pip-run -- sync-upstream.py``, which
+           downloads the latest stable release of Python and copies the 
relevant
+           files from there into their new locations here and then commits 
those
+           changes with a nice reference to the relevant upstream commit hash.
         
         2. I check for new names in ``__all__`` and update imports in
            ``configparser.py`` accordingly. I run the tests on Python 3. 
Commit.
         
-        3. I merge the new commit to ``default``. I run ``tox``. Commit.
+        3. I merge the new commit to ``master``. I run ``tox``. Commit.
         
-        4. If there are necessary changes, I do them now (on ``default``). 
Note that
+        4. If there are necessary changes, I do them now (on ``master``). Note 
that
            the changes should be written in the syntax subset supported by 
Python
            2.6.
         
@@ -324,5 +368,8 @@
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
 Classifier: Topic :: Software Development :: Libraries
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Requires-Python: >=2.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/configparser-3.5.0/src/configparser.egg-info/SOURCES.txt 
new/configparser-3.7.1/src/configparser.egg-info/SOURCES.txt
--- old/configparser-3.5.0/src/configparser.egg-info/SOURCES.txt        
2016-05-21 10:15:06.000000000 +0200
+++ new/configparser-3.7.1/src/configparser.egg-info/SOURCES.txt        
2019-01-25 17:35:46.000000000 +0100
@@ -1,6 +1,8 @@
 MANIFEST.in
 README.rst
 configparser.rst
+pyproject.toml
+setup.cfg
 setup.py
 src/configparser.py
 src/backports/__init__.py
@@ -9,6 +11,5 @@
 src/configparser.egg-info/PKG-INFO
 src/configparser.egg-info/SOURCES.txt
 src/configparser.egg-info/dependency_links.txt
-src/configparser.egg-info/namespace_packages.txt
-src/configparser.egg-info/not-zip-safe
+src/configparser.egg-info/requires.txt
 src/configparser.egg-info/top_level.txt
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/configparser-3.5.0/src/configparser.egg-info/namespace_packages.txt 
new/configparser-3.7.1/src/configparser.egg-info/namespace_packages.txt
--- old/configparser-3.5.0/src/configparser.egg-info/namespace_packages.txt     
2016-05-21 10:15:06.000000000 +0200
+++ new/configparser-3.7.1/src/configparser.egg-info/namespace_packages.txt     
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-backports
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/configparser-3.5.0/src/configparser.egg-info/not-zip-safe 
new/configparser-3.7.1/src/configparser.egg-info/not-zip-safe
--- old/configparser-3.5.0/src/configparser.egg-info/not-zip-safe       
2014-09-05 01:29:46.000000000 +0200
+++ new/configparser-3.7.1/src/configparser.egg-info/not-zip-safe       
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/configparser-3.5.0/src/configparser.egg-info/requires.txt 
new/configparser-3.7.1/src/configparser.egg-info/requires.txt
--- old/configparser-3.5.0/src/configparser.egg-info/requires.txt       
1970-01-01 01:00:00.000000000 +0100
+++ new/configparser-3.7.1/src/configparser.egg-info/requires.txt       
2019-01-25 17:35:45.000000000 +0100
@@ -0,0 +1,3 @@
+
+[:python_version == "2.6"]
+ordereddict


Reply via email to