Hello community,

here is the log from the commit of package python-path.py for openSUSE:Factory 
checked in at 2017-07-11 08:25:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-path.py (Old)
 and      /work/SRC/openSUSE:Factory/.python-path.py.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-path.py"

Tue Jul 11 08:25:13 2017 rev:2 rq:508338 version:10.3.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-path.py/python-path.py.changes    
2015-09-30 05:50:46.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-path.py.new/python-path.py.changes       
2017-07-11 08:25:13.940635533 +0200
@@ -1,0 +2,54 @@
+Tue Jul  4 09:45:39 UTC 2017 - [email protected]
+
+- Update to version 10.3.1
+  * #124: Fixed ``rmdir_p`` raising ``FileNotFoundError`` when
+    directory does not exist on Windows.
+  10.3:
+  * #115: Added a new performance-optimized implementation
+    for listdir operations, optimizing ``listdir``, ``walk``,
+    ``walkfiles``, ``walkdirs``, and ``fnmatch``, presented
+    as the ``FastPath`` class.
+    Please direct feedback on this implementation to the ticket,
+    especially if the performance benefits justify it replacing
+    the default ``Path`` class.
+  10.2:
+  * Symlink no longer requires the ``newlink`` parameter
+    and will default to the basename of the target in the
+    current working directory.
+  10.1:
+  * #123: Implement ``Path.__fspath__`` per PEP 519.
+  10.0:
+  * Once again as in 8.0 remove deprecated ``path.path``.
+  9.1:
+  * #121: Removed workaround for #61 added in 5.2. ``path.py``
+    now only supports file system paths that can be effectively
+    decoded to text. It is the responsibility of the system
+    implementer to ensure that filenames on the system are
+    decodeable by ``sys.getfilesystemencoding()``.
+  9.0:
+  * Drop support for Python 2.6 and 3.2 as integration
+    dependencies (pip) no longer support these versions.
+  8.3:
+  * Merge with latest skeleton, adding badges and test runs by
+    default under tox instead of pytest-runner.
+  * Documentation is no longer hosted with PyPI.
+  8.2.1:
+  * #112: Update Travis CI usage to only deploy on Python 3.5.
+  8.2:
+  * Refreshed project metadata based on `jaraco's project
+    skeleton <https://github.com/jaraco/skeleton/tree/spaces>_.
+  * Releases are now automatically published via Travis-CI.
+  * #111: More aggressively trap errors when importing
+    ``pkg_resources``.
+  8.1.2:
+  * #105: By using unicode literals, avoid errors rendering the
+    backslash in __get_owner_windows.
+
+- Converted to single-spec
+
+-------------------------------------------------------------------
+Tue Jul  4 09:40:55 UTC 2017 - [email protected]
+
+- Update to version 10.3.1 (see CHANGES.rst)
+
+-------------------------------------------------------------------

Old:
----
  path.py-8.1.1.tar.gz

New:
----
  path.py-10.3.1.tar.gz

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

Other differences:
------------------
++++++ python-path.py.spec ++++++
--- /var/tmp/diff_new_pack.YYAPLj/_old  2017-07-11 08:25:14.496557124 +0200
+++ /var/tmp/diff_new_pack.YYAPLj/_new  2017-07-11 08:25:14.500556560 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-path.py
 #
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,28 +16,24 @@
 #
 
 
+%{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-path.py
-Version:        8.1.1
+Version:        10.3.1
 Release:        0
 Summary:        A module wrapper for os.path
 License:        MIT
 Group:          Development/Languages/Python
-Url:            http://github.com/jaraco/path.py
-Source:         
http://pypi.python.org/packages/source/p/path.py/path.py-%{version}.tar.gz
-BuildRequires:  python-devel
-BuildRequires:  python-pytest
-BuildRequires:  python-pytest-runner >= 2.6
-BuildRequires:  python-setuptools
-BuildRequires:  python-setuptools_scm
-BuildRequires:  python-appdirs
-Requires:       python-appdirs
+Url:            https://github.com/jaraco/path.py
+Source:         
https://files.pythonhosted.org/packages/source/p/path.py/path.py-%{version}.tar.gz
+BuildRequires:  %{python_module base}
+BuildRequires:  %{python_module pytest-runner >= 2.6}
+BuildRequires:  %{python_module pytest}
+BuildRequires:  %{python_module setuptools_scm}
+BuildRequires:  %{python_module setuptools}
+BuildRequires:  python-rpm-macros
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
-%if 0%{?suse_version} && 0%{?suse_version} <= 1110
-BuildRequires:  python-importlib
-%{!?python_sitelib: %global python_sitelib %(python -c "from 
distutils.sysconfig import get_python_lib; print get_python_lib()")}
-%else
 BuildArch:      noarch
-%endif
+%python_subpackages
 
 %description
 The path.py package implements a path objects as first-class
@@ -46,19 +42,20 @@
 
 %prep
 %setup -q -n path.py-%{version}
+rm -rf path.py.egg-info
 
 %build
-python setup.py build
+%python_build
 
 %install
-python setup.py install --prefix=%{_prefix} --root=%{buildroot}
+%python_install
 
 %check
 # need to set locale to avoid UnicodeEncodeError
 export LANG=en_US.UTF-8
-python setup.py test
+%python_exec %{_bindir}/py.test build/lib
 
-%files
+%files %{python_files}
 %defattr(-,root,root,-)
 %doc CHANGES.rst README.rst
 %{python_sitelib}/*

++++++ path.py-8.1.1.tar.gz -> path.py-10.3.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/.hgtags new/path.py-10.3.1/.hgtags
--- old/path.py-8.1.1/.hgtags   2015-09-10 09:59:51.000000000 +0200
+++ new/path.py-10.3.1/.hgtags  1970-01-01 01:00:00.000000000 +0100
@@ -1,35 +0,0 @@
-9401857d62dd5d4784dc06656ab13992847b5e76 2.4
-69851aaf75f1c6ff63c72daf8d1a82692e04b301 2.4.1
-6ba869f2260f54ac6d66ffc08b9ce546846c6c9c 2.5
-5a008a763604cd3237ce83bb402fca41e4456001 2.6
-be871d26bce9185c8a4b2c20314f541508e99c1f 2.6.1
-5b78897bb40297548a7a01b35ce842eaa30d19de 3.0
-a5539b0050d4377bd1bdeb74eed06e0e4a775a99 3.0.1
-137d1b8b6d4ca80382efeda217d9236d1570ab70 3.1
-13f2731fa9d98314aedb2fdd55cce97b381b564f 3.2
-97899c3ef1421a247b0864f5486dd480ad31b41f 4.0
-9652fb4e2b486d2ce32f7ed3806304d1c0d653f7 4.1
-f922c0423dbf87f11643724ce3b7c2bc78303a8d 4.2
-38282c28271f66ed07d3c9b52bfa55e26280833d 4.3
-2ed42cef0b080079ad26de6f082fa6d722813087 4.4
-47206e8c59c858e074f6ea1ba80cefb3a37045fd 5.0
-0382bd2f0348cfd73e4e09cd55799a428e75a131 5.1
-7bf7fe39edc888b2f14faf76a70c75b5b17502e6 5.2
-83dcd6b47278aedcbf52f1a6798bd333c515b818 5.3
-2d5f08983462a86cdd41963fca6626ff87dc3ba1 6.0
-55c924ecc419dbf1038254436be512c5cb18bd15 6.1
-be72beb60a11f64344cd9e4c6029b330d49cd830 6.2
-698ac3acb84034fb17487b5009153c8956c5d596 7.0
-793192a17ea0e78640a6d6b133a2948f6cecf43f 7.1
-abeebd8675eaa4626619cb3083c8e1af48a2f2ce 7.2
-581040c32e0c2154cb7aa455734edf1c41021607 7.3
-b96177b0522706277881ddc3f1fce41077eb9993 7.4
-76fab4bb56d10e83f2af64ce7a7e39d56e88eb70 7.5
-a96c4d592397e79e2fa16b632fcc89b48ed63d04 7.6
-06d6fdfddc0a69a56d4b378816d7e5b59ae4a018 7.6.1
-cf0bb158f8d370f5195b95c917201f51aa53c0a9 7.6.2
-cfc54169af8f0fdc98fff6f06b98d325a81dfaeb 7.7
-baa58fde6e3b8820bbd77d5721760ec3f8f08716 7.7.1
-936d47e8d38319be37b06f0e05b1356eeaf7390e 8.0
-06219e4168be20471a7ceedf617f7464c0e63f6b 8.1
-095ad9f1f5db19d1dfc69f67d66e63b38f50270b 8.1.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/.travis.yml 
new/path.py-10.3.1/.travis.yml
--- old/path.py-8.1.1/.travis.yml       2015-08-09 21:47:58.000000000 +0200
+++ new/path.py-10.3.1/.travis.yml      2017-04-18 05:00:17.000000000 +0200
@@ -1,13 +1,27 @@
 sudo: false
 language: python
-
 python:
-  - 2.6
-  - 2.7
-  - 3.2
-  - 3.3
-  - 3.4
-  - pypy
-
+- 2.7
+- 3.3
+- 3.4
+- 3.5
+- 3.6
+install:
+- pip install tox "setuptools>=28.2"
 script:
-  - python setup.py test
+- tox
+branches:
+  except:
+  - skeleton
+deploy:
+  provider: pypi
+  server: https://upload.pypi.org/legacy/
+  on:
+    tags: true
+    all_branches: true
+    python: 3.6
+  user: jaraco
+  distributions: dists
+  password:
+    secure: 
fggUs33qP6DB+j/q7KGScfohgGq7OwsW5BMW6ZZvSlq+9pnNDZxSVrfCw0wb9vdq/Hb9nH4Of+wDoyh+Ul6GN28GRX7qj1HTjbc65nhRp9aA1Ib9Y3KJwGR8k5gPJZmx/zKP0r7COSXsOdXDkVSJ/UjCfuKhcsSHpi0lAYG6BSA=
+  skip_upload_docs: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/CHANGES.rst 
new/path.py-10.3.1/CHANGES.rst
--- old/path.py-8.1.1/CHANGES.rst       2015-08-27 18:26:36.000000000 +0200
+++ new/path.py-10.3.1/CHANGES.rst      2017-04-18 05:00:17.000000000 +0200
@@ -1,7 +1,89 @@
+10.3.1
+------
+
+- #124: Fixed ``rmdir_p`` raising ``FileNotFoundError`` when
+  directory does not exist on Windows.
+
+10.3
+----
+
+- #115: Added a new performance-optimized implementation
+  for listdir operations, optimizing ``listdir``, ``walk``,
+  ``walkfiles``, ``walkdirs``, and ``fnmatch``, presented
+  as the ``FastPath`` class.
+
+  Please direct feedback on this implementation to the ticket,
+  especially if the performance benefits justify it replacing
+  the default ``Path`` class.
+
+10.2
+----
+
+- Symlink no longer requires the ``newlink`` parameter
+  and will default to the basename of the target in the
+  current working directory.
+
+10.1
+----
+
+- #123: Implement ``Path.__fspath__`` per PEP 519.
+
+10.0
+----
+
+- Once again as in 8.0 remove deprecated ``path.path``.
+
+9.1
+---
+
+- #121: Removed workaround for #61 added in 5.2. ``path.py``
+  now only supports file system paths that can be effectively
+  decoded to text. It is the responsibility of the system
+  implementer to ensure that filenames on the system are
+  decodeable by ``sys.getfilesystemencoding()``.
+
+9.0
+---
+
+- Drop support for Python 2.6 and 3.2 as integration
+  dependencies (pip) no longer support these versions.
+
+8.3
+---
+
+- Merge with latest skeleton, adding badges and test runs by
+  default under tox instead of pytest-runner.
+- Documentation is no longer hosted with PyPI.
+
+8.2.1
+-----
+
+- #112: Update Travis CI usage to only deploy on Python 3.5.
+
+8.2
+---
+
+- Refreshed project metadata based on `jaraco's project
+  skeleton <https://github.com/jaraco/skeleton/tree/spaces>_.
+- Releases are now automatically published via Travis-CI.
+- #111: More aggressively trap errors when importing
+  ``pkg_resources``.
+
+8.1.2
+-----
+
+- #105: By using unicode literals, avoid errors rendering the
+  backslash in __get_owner_windows.
+
+8.1.1
+-----
+
+- #102: Reluctantly restored reference to path.path in ``__all__``.
+
 8.1
 ---
 
-Restored ``path.path`` with a DeprecationWarning.
+- #102: Restored ``path.path`` with a DeprecationWarning.
 
 8.0
 ---
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/PKG-INFO new/path.py-10.3.1/PKG-INFO
--- old/path.py-8.1.1/PKG-INFO  2015-09-10 10:00:02.000000000 +0200
+++ new/path.py-10.3.1/PKG-INFO 2017-04-18 05:00:48.000000000 +0200
@@ -1,12 +1,30 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: path.py
-Version: 8.1.1
+Version: 10.3.1
 Summary: A module wrapper for os.path
-Home-page: http://github.com/jaraco/path.py
+Home-page: https://github.com/jaraco/path.py
 Author: Jason R. Coombs
 Author-email: [email protected]
-License: MIT License
-Description: path.py
+License: UNKNOWN
+Description: .. image:: https://img.shields.io/pypi/v/path.py.svg
+           :target: https://pypi.org/project/path.py
+        
+        .. image:: https://img.shields.io/pypi/pyversions/path.py.svg
+        
+        .. image:: https://img.shields.io/pypi/dm/path.py.svg
+        
+        .. image:: https://img.shields.io/travis/jaraco/path.py/master.svg
+           :target: http://travis-ci.org/jaraco/path.py
+        
+        
+        License
+        =======
+        
+        License is indicated in the project metadata (typically one or more
+        of the Trove classifiers). For more details, see `this explanation
+        <https://github.com/jaraco/skeleton/issues/1>`_.
+        
+        path.py
         =======
         
         ``path.py`` implements a path objects as first-class entities, allowing
@@ -22,7 +40,7 @@
         
         ``path.py`` is `hosted at Github <https://github.com/jaraco/path.py>`_.
         
-        Documentation is `hosted with PyPI 
<https://pythonhosted.org/path.py/>`_.
+        Find `the documentatation here <https://pathpy.readthedocs.io>`_.
         
         Guides and Testimonials
         =======================
@@ -65,13 +83,22 @@
         To run the tests, refer to the ``.travis.yml`` file for the steps run 
on the
         Travis-CI hosts.
         
+        Releasing
+        =========
+        
+        Tagged releases are automatically published to PyPI by Travis-CI, 
assuming
+        the Python 3 build passes.
+        
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
-Classifier: License :: OSI Approved :: MIT License
 Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
 Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
-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: Topic :: Software Development :: Libraries :: Python Modules
+Requires-Python: >=2.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/README.rst 
new/path.py-10.3.1/README.rst
--- old/path.py-8.1.1/README.rst        2015-08-09 17:32:32.000000000 +0200
+++ new/path.py-10.3.1/README.rst       2017-04-18 05:00:17.000000000 +0200
@@ -1,3 +1,21 @@
+.. image:: https://img.shields.io/pypi/v/path.py.svg
+   :target: https://pypi.org/project/path.py
+
+.. image:: https://img.shields.io/pypi/pyversions/path.py.svg
+
+.. image:: https://img.shields.io/pypi/dm/path.py.svg
+
+.. image:: https://img.shields.io/travis/jaraco/path.py/master.svg
+   :target: http://travis-ci.org/jaraco/path.py
+
+
+License
+=======
+
+License is indicated in the project metadata (typically one or more
+of the Trove classifiers). For more details, see `this explanation
+<https://github.com/jaraco/skeleton/issues/1>`_.
+
 path.py
 =======
 
@@ -14,7 +32,7 @@
 
 ``path.py`` is `hosted at Github <https://github.com/jaraco/path.py>`_.
 
-Documentation is `hosted with PyPI <https://pythonhosted.org/path.py/>`_.
+Find `the documentatation here <https://pathpy.readthedocs.io>`_.
 
 Guides and Testimonials
 =======================
@@ -56,3 +74,9 @@
 
 To run the tests, refer to the ``.travis.yml`` file for the steps run on the
 Travis-CI hosts.
+
+Releasing
+=========
+
+Tagged releases are automatically published to PyPI by Travis-CI, assuming
+the Python 3 build passes.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/appveyor.yml 
new/path.py-10.3.1/appveyor.yml
--- old/path.py-8.1.1/appveyor.yml      1970-01-01 01:00:00.000000000 +0100
+++ new/path.py-10.3.1/appveyor.yml     2017-04-18 05:00:17.000000000 +0200
@@ -0,0 +1,19 @@
+environment:
+
+  APPVEYOR: true
+
+  matrix:
+    - PYTHON: "C:\\Python35-x64"
+    - PYTHON: "C:\\Python27-x64"
+
+install:
+  # symlink python from a directory with a space
+  - "mklink /d \"C:\\Program Files\\Python\" %PYTHON%"
+  - "SET PYTHON=\"C:\\Program Files\\Python\""
+  - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
+
+build: off
+
+test_script:
+  - "python -m pip install tox"
+  - "tox"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/docs/api.rst 
new/path.py-10.3.1/docs/api.rst
--- old/path.py-8.1.1/docs/api.rst      2013-10-27 19:03:16.000000000 +0100
+++ new/path.py-10.3.1/docs/api.rst     2017-04-18 05:00:17.000000000 +0200
@@ -2,6 +2,10 @@
 API
 ===
 
+.. important::
+    The documented methods' signatures are not always correct.
+    See :class:`path.Path`.
+
 .. automodule:: path
    :members:
    :undoc-members:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/docs/conf.py 
new/path.py-10.3.1/docs/conf.py
--- old/path.py-8.1.1/docs/conf.py      2015-08-09 21:47:58.000000000 +0200
+++ new/path.py-10.3.1/docs/conf.py     2017-04-18 05:00:17.000000000 +0200
@@ -1,16 +1,15 @@
-# encoding: utf-8
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
 
-project = 'path.py'
-copyright = '2013, Mikhail Gusarov, Jason R. Coombs'
-
-import path
-import re
-
-release = path.__version__
-version = re.match('[^.]+[.][^.]+', release).group(0)
+extensions = [
+    'sphinx.ext.autodoc',
+    'jaraco.packaging.sphinx',
+    'rst.linker',
+    'sphinx.ext.intersphinx',
+]
 
 pygments_style = 'sphinx'
-html_theme = 'default'
+html_theme = 'alabaster'
 html_static_path = ['_static']
 htmlhelp_basename = 'pathpydoc'
 templates_path = ['_templates']
@@ -18,24 +17,30 @@
 source_suffix = '.rst'
 master_doc = 'index'
 
-extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'rst.linker']
-
 intersphinx_mapping = {'python': ('http://docs.python.org/', None)}
 
 link_files = {
-       'CHANGES.rst': dict(
-               using=dict(
-                       GH='https://github.com',
-               ),
-               replace=[
-                       dict(
-                               pattern=r"(Issue )?#(?P<issue>\d+)",
-                               url='{GH}/jaraco/path.py/issues/{issue}',
-                       ),
-                       dict(
-                               pattern=r"Pull Request ?#(?P<pull_request>\d+)",
-                               url='{GH}/jaraco/path.py/pull/{pull_request}',
-                       ),
-               ],
-       ),
+    '../CHANGES.rst': dict(
+        using=dict(
+            GH='https://github.com',
+        ),
+        replace=[
+            dict(
+                pattern=r'(Issue )?#(?P<issue>\d+)',
+                url='{package_url}/issues/{issue}',
+            ),
+            dict(
+                pattern=r"Pull Request ?#(?P<pull_request>\d+)",
+                url='{package_url}/pull/{pull_request}',
+            ),
+            dict(
+                pattern=r'^(?m)((?P<scm_version>v?\d+(\.\d+){1,2}))\n[-=]+\n',
+                with_scm='{text}\n{rev[timestamp]:%d %b %Y}\n',
+            ),
+            dict(
+                pattern=r'PEP[- ](?P<pep_number>\d+)',
+                url='https://www.python.org/dev/peps/pep-{pep_number:0>4}/',
+            ),
+        ],
+    ),
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/docs/index.rst 
new/path.py-10.3.1/docs/index.rst
--- old/path.py-8.1.1/docs/index.rst    2015-08-09 21:47:58.000000000 +0200
+++ new/path.py-10.3.1/docs/index.rst   2017-04-18 05:00:17.000000000 +0200
@@ -1,15 +1,10 @@
-.. path.py documentation master file, created by
-   sphinx-quickstart on Tue Apr  9 10:25:52 2013.
-   You can adapt this file completely to your liking, but it should at least
-   contain the root `toctree` directive.
-
 Welcome to path.py's documentation!
 ===================================
 
-Contents:
+Contents: 
 
 .. toctree::
-   :maxdepth: 2
+   :maxdepth: 1
 
    api
    history
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/docs/requirements.txt 
new/path.py-10.3.1/docs/requirements.txt
--- old/path.py-8.1.1/docs/requirements.txt     1970-01-01 01:00:00.000000000 
+0100
+++ new/path.py-10.3.1/docs/requirements.txt    2017-04-18 05:00:17.000000000 
+0200
@@ -0,0 +1,4 @@
+.
+sphinx
+jaraco.packaging>=3.2
+rst.linker>=1.9
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/path.py new/path.py-10.3.1/path.py
--- old/path.py-8.1.1/path.py   2015-09-10 09:57:54.000000000 +0200
+++ new/path.py-10.3.1/path.py  2017-04-18 05:00:17.000000000 +0200
@@ -33,6 +33,8 @@
         f.chmod(0o755)
 """
 
+from __future__ import unicode_literals
+
 import sys
 import warnings
 import os
@@ -48,8 +50,9 @@
 import re
 import contextlib
 import io
-from distutils import dir_util
+import distutils.dir_util
 import importlib
+import itertools
 
 try:
     import win32security
@@ -74,7 +77,6 @@
 string_types = str,
 text_type = str
 getcwdu = os.getcwd
-u = lambda x: x
 
 def surrogate_escape(error):
     """
@@ -91,8 +93,8 @@
     string_types = __builtin__.basestring,
     text_type = __builtin__.unicode
     getcwdu = os.getcwdu
-    u = lambda x: codecs.unicode_escape_decode(x)[0]
     codecs.register_error('surrogateescape', surrogate_escape)
+    map = itertools.imap
 
 @contextlib.contextmanager
 def io_error_compat():
@@ -110,20 +112,18 @@
 __all__ = ['Path', 'CaseInsensitivePattern']
 
 
-LINESEPS = [u('\r\n'), u('\r'), u('\n')]
-U_LINESEPS = LINESEPS + [u('\u0085'), u('\u2028'), u('\u2029')]
+LINESEPS = ['\r\n', '\r', '\n']
+U_LINESEPS = LINESEPS + ['\u0085', '\u2028', '\u2029']
 NEWLINE = re.compile('|'.join(LINESEPS))
 U_NEWLINE = re.compile('|'.join(U_LINESEPS))
-NL_END = re.compile(u(r'(?:{0})$').format(NEWLINE.pattern))
-U_NL_END = re.compile(u(r'(?:{0})$').format(U_NEWLINE.pattern))
+NL_END = re.compile(r'(?:{0})$'.format(NEWLINE.pattern))
+U_NL_END = re.compile(r'(?:{0})$'.format(U_NEWLINE.pattern))
 
 
 try:
     import pkg_resources
     __version__ = pkg_resources.require('path.py')[0].version
-except ImportError:
-    __version__ = 'unknown'
-except pkg_resources.DistributionNotFound:
+except Exception:
     __version__ = 'unknown'
 
 
@@ -202,6 +202,8 @@
     @simple_cache
     def using_module(cls, module):
         subclass_name = cls.__name__ + '_' + module.__name__
+        if PY2:
+            subclass_name = str(subclass_name)
         bases = (cls,)
         ns = {'module': module}
         return type(subclass_name, bases, ns)
@@ -214,16 +216,6 @@
         """
         return cls
 
-    @classmethod
-    def _always_unicode(cls, path):
-        """
-        Ensure the path as retrieved from a Python API, such as 
:func:`os.listdir`,
-        is a proper Unicode string.
-        """
-        if PY3 or isinstance(path, text_type):
-            return path
-        return path.decode(sys.getfilesystemencoding(), 'surrogateescape')
-
     # --- Special Python methods.
 
     def __repr__(self):
@@ -277,6 +269,9 @@
     def __exit__(self, *_):
         os.chdir(self._old_dir)
 
+    def __fspath__(self):
+        return self
+
     @classmethod
     def getcwd(cls):
         """ Return the current working directory as a path object.
@@ -533,7 +528,7 @@
             pattern = '*'
         return [
             self / child
-            for child in map(self._always_unicode, os.listdir(self))
+            for child in os.listdir(self)
             if self._next_class(child).fnmatch(pattern)
         ]
 
@@ -1086,11 +1081,11 @@
         return os.lstat(self)
 
     def __get_owner_windows(self):
-        r"""
+        """
         Return the name of the owner of this file or directory. Follow
         symbolic links.
 
-        Return a name of the form ``ur'DOMAIN\User Name'``; may be a group.
+        Return a name of the form ``r'DOMAIN\\User Name'``; may be a group.
 
         .. seealso:: :attr:`owner`
         """
@@ -1098,7 +1093,7 @@
             self, win32security.OWNER_SECURITY_INFORMATION)
         sid = desc.GetSecurityDescriptorOwner()
         account, domain, typecode = win32security.LookupAccountSid(None, sid)
-        return domain + u('\\') + account
+        return domain + '\\' + account
 
     def __get_owner_unix(self):
         """
@@ -1236,7 +1231,8 @@
             self.rmdir()
         except OSError:
             _, e, _ = sys.exc_info()
-            if e.errno != errno.ENOTEMPTY and e.errno != errno.EEXIST:
+            bypass_codes = errno.ENOTEMPTY, errno.EEXIST, errno.ENOENT
+            if e.errno not in bypass_codes:
                 raise
         return self
 
@@ -1306,11 +1302,16 @@
             return self._next_class(newpath)
 
     if hasattr(os, 'symlink'):
-        def symlink(self, newlink):
+        def symlink(self, newlink=None):
             """ Create a symbolic link at `newlink`, pointing here.
 
+            If newlink is not supplied, the symbolic link will assume
+            the name self.basename(), creating the link in the cwd.
+
             .. seealso:: :func:`os.symlink`
             """
+            if newlink is None:
+                newlink = self.basename()
             os.symlink(self, newlink)
             return self._next_class(newlink)
 
@@ -1390,8 +1391,12 @@
             self.copytree(stage, symlinks, *args, **kwargs)
             # now copy everything from the stage directory using
             #  the semantics of dir_util.copy_tree
-            dir_util.copy_tree(stage, dst, preserve_symlinks=symlinks,
-                update=update)
+            distutils.dir_util.copy_tree(
+                stage,
+                dst,
+                preserve_symlinks=symlinks,
+                update=update,
+            )
 
     #
     # --- Special stuff from os
@@ -1558,6 +1563,8 @@
     @classmethod
     def for_class(cls, path_cls):
         name = 'Multi' + path_cls.__name__
+        if PY2:
+            name = str(name)
         return type(name, (cls, path_cls), {})
 
     @classmethod
@@ -1707,14 +1714,188 @@
     def normcase(self):
         return __import__('ntpath').normcase
 
-########################
-# Backward-compatibility
-class path(Path):
-    def __new__(cls, *args, **kwargs):
-        msg = "path is deprecated. Use Path instead."
-        warnings.warn(msg, DeprecationWarning)
-        return Path.__new__(cls, *args, **kwargs)
 
+class FastPath(Path):
+    """
+    Performance optimized version of Path for use
+    on embedded platforms and other systems with limited
+    CPU. See #115 and #116 for background.
+    """
+
+    def listdir(self, pattern=None):
+        children = os.listdir(self)
+        if pattern is None:
+            return [self / child for child in children]
+
+        pattern, normcase = self.__prepare(pattern)
+        return [
+            self / child
+            for child in children
+            if self._next_class(child).__fnmatch(pattern, normcase)
+        ]
+
+    def walk(self, pattern=None, errors='strict'):
+        class Handlers:
+            def strict(msg):
+                raise
+
+            def warn(msg):
+                warnings.warn(msg, TreeWalkWarning)
+
+            def ignore(msg):
+                pass
+
+        if not callable(errors) and errors not in vars(Handlers):
+            raise ValueError("invalid errors parameter")
+        errors = vars(Handlers).get(errors, errors)
+
+        if pattern:
+            pattern, normcase = self.__prepare(pattern)
+        else:
+            normcase = None
+
+        return self.__walk(pattern, normcase, errors)
+
+    def __walk(self, pattern, normcase, errors):
+        """ Prepared version of walk """
+        try:
+            childList = self.listdir()
+        except Exception:
+            exc = sys.exc_info()[1]
+            tmpl = "Unable to list directory '%(self)s': %(exc)s"
+            msg = tmpl % locals()
+            errors(msg)
+            return
+
+        for child in childList:
+            if pattern is None or child.__fnmatch(pattern, normcase):
+                yield child
+            try:
+                isdir = child.isdir()
+            except Exception:
+                exc = sys.exc_info()[1]
+                tmpl = "Unable to access '%(child)s': %(exc)s"
+                msg = tmpl % locals()
+                errors(msg)
+                isdir = False
+
+            if isdir:
+                for item in child.__walk(pattern, normcase, errors):
+                    yield item
+
+    def walkdirs(self, pattern=None, errors='strict'):
+        if errors not in ('strict', 'warn', 'ignore'):
+            raise ValueError("invalid errors parameter")
+
+        if pattern:
+            pattern, normcase = self.__prepare(pattern)
+        else:
+            normcase = None
+
+        return self.__walkdirs(pattern, normcase, errors)
+
+    def __walkdirs(self, pattern, normcase, errors):
+        """ Prepared version of walkdirs """
+        try:
+            dirs = self.dirs()
+        except Exception:
+            if errors == 'ignore':
+                return
+            elif errors == 'warn':
+                warnings.warn(
+                    "Unable to list directory '%s': %s"
+                    % (self, sys.exc_info()[1]),
+                    TreeWalkWarning)
+                return
+            else:
+                raise
+
+        for child in dirs:
+            if pattern is None or child.__fnmatch(pattern, normcase):
+                yield child
+            for subsubdir in child.__walkdirs(pattern, normcase, errors):
+                yield subsubdir
+
+    def walkfiles(self, pattern=None, errors='strict'):
+        if errors not in ('strict', 'warn', 'ignore'):
+            raise ValueError("invalid errors parameter")
+
+        if pattern:
+            pattern, normcase = self.__prepare(pattern)
+        else:
+            normcase = None
+
+        return self.__walkfiles(pattern, normcase, errors)
+
+    def __walkfiles(self, pattern, normcase, errors):
+        """ Prepared version of walkfiles """
+        try:
+            childList = self.listdir()
+        except Exception:
+            if errors == 'ignore':
+                return
+            elif errors == 'warn':
+                warnings.warn(
+                    "Unable to list directory '%s': %s"
+                    % (self, sys.exc_info()[1]),
+                    TreeWalkWarning)
+                return
+            else:
+                raise
+
+        for child in childList:
+            try:
+                isfile = child.isfile()
+                isdir = not isfile and child.isdir()
+            except:
+                if errors == 'ignore':
+                    continue
+                elif errors == 'warn':
+                    warnings.warn(
+                        "Unable to access '%s': %s"
+                        % (self, sys.exc_info()[1]),
+                        TreeWalkWarning)
+                    continue
+                else:
+                    raise
+
+            if isfile:
+                if pattern is None or child.__fnmatch(pattern, normcase):
+                    yield child
+            elif isdir:
+                for f in child.__walkfiles(pattern, normcase, errors):
+                    yield f
+
+    def __fnmatch(self, pattern, normcase):
+        """ Return ``True`` if `self.name` matches the given `pattern`,
+        prepared version.
+        `pattern` - A filename pattern with wildcards,
+            for example ``'*.py'``. The pattern is expected to be normcase'd
+            already.
+        `normcase` - A function used to normalize the pattern and
+            filename before matching.
+        .. seealso:: :func:`Path.fnmatch`
+        """
+        return fnmatch.fnmatchcase(normcase(self.name), pattern)
+
+    def __prepare(self, pattern, normcase=None):
+        """ Prepares a fmatch_pattern for use with ``FastPath.__fnmatch`.
+        `pattern` - A filename pattern with wildcards,
+            for example ``'*.py'``. If the pattern contains a `normcase`
+            attribute, it is applied to the name and path prior to comparison.
+        `normcase` - (optional) A function used to normalize the pattern and
+            filename before matching. Defaults to :meth:`self.module`, which 
defaults
+            to :meth:`os.path.normcase`.
+        .. seealso:: :func:`FastPath.__fnmatch`
+        """
+        if not normcase:
+            normcase = getattr(pattern, 'normcase', self.module.normcase)
+        pattern = normcase(pattern)
+        return pattern, normcase
+
+    def fnmatch(self, pattern, normcase=None):
+        if not pattern:
+            raise ValueError("No pattern provided")
 
-__all__ += ['path']
-########################
+        pattern, normcase = self.__prepare(pattern, normcase)
+        return self.__fnmatch(pattern, normcase)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/path.py.egg-info/PKG-INFO 
new/path.py-10.3.1/path.py.egg-info/PKG-INFO
--- old/path.py-8.1.1/path.py.egg-info/PKG-INFO 2015-09-10 10:00:02.000000000 
+0200
+++ new/path.py-10.3.1/path.py.egg-info/PKG-INFO        2017-04-18 
05:00:48.000000000 +0200
@@ -1,12 +1,30 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: path.py
-Version: 8.1.1
+Version: 10.3.1
 Summary: A module wrapper for os.path
-Home-page: http://github.com/jaraco/path.py
+Home-page: https://github.com/jaraco/path.py
 Author: Jason R. Coombs
 Author-email: [email protected]
-License: MIT License
-Description: path.py
+License: UNKNOWN
+Description: .. image:: https://img.shields.io/pypi/v/path.py.svg
+           :target: https://pypi.org/project/path.py
+        
+        .. image:: https://img.shields.io/pypi/pyversions/path.py.svg
+        
+        .. image:: https://img.shields.io/pypi/dm/path.py.svg
+        
+        .. image:: https://img.shields.io/travis/jaraco/path.py/master.svg
+           :target: http://travis-ci.org/jaraco/path.py
+        
+        
+        License
+        =======
+        
+        License is indicated in the project metadata (typically one or more
+        of the Trove classifiers). For more details, see `this explanation
+        <https://github.com/jaraco/skeleton/issues/1>`_.
+        
+        path.py
         =======
         
         ``path.py`` implements a path objects as first-class entities, allowing
@@ -22,7 +40,7 @@
         
         ``path.py`` is `hosted at Github <https://github.com/jaraco/path.py>`_.
         
-        Documentation is `hosted with PyPI 
<https://pythonhosted.org/path.py/>`_.
+        Find `the documentatation here <https://pathpy.readthedocs.io>`_.
         
         Guides and Testimonials
         =======================
@@ -65,13 +83,22 @@
         To run the tests, refer to the ``.travis.yml`` file for the steps run 
on the
         Travis-CI hosts.
         
+        Releasing
+        =========
+        
+        Tagged releases are automatically published to PyPI by Travis-CI, 
assuming
+        the Python 3 build passes.
+        
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
-Classifier: License :: OSI Approved :: MIT License
 Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
 Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
-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: Topic :: Software Development :: Libraries :: Python Modules
+Requires-Python: >=2.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/path.py.egg-info/SOURCES.txt 
new/path.py-10.3.1/path.py.egg-info/SOURCES.txt
--- old/path.py-8.1.1/path.py.egg-info/SOURCES.txt      2015-09-10 
10:00:02.000000000 +0200
+++ new/path.py-10.3.1/path.py.egg-info/SOURCES.txt     2017-04-18 
05:00:48.000000000 +0200
@@ -1,9 +1,9 @@
 .gitignore
-.hgtags
 .travis.yml
 CHANGES.rst
 MANIFEST.in
 README.rst
+appveyor.yml
 path.py
 pytest.ini
 setup.cfg
@@ -15,8 +15,9 @@
 docs/conf.py
 docs/history.rst
 docs/index.rst
+docs/requirements.txt
 path.py.egg-info/PKG-INFO
 path.py.egg-info/SOURCES.txt
 path.py.egg-info/dependency_links.txt
-path.py.egg-info/requires.txt
-path.py.egg-info/top_level.txt
\ No newline at end of file
+path.py.egg-info/top_level.txt
+tests/requirements.txt
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/path.py.egg-info/requires.txt 
new/path.py-10.3.1/path.py.egg-info/requires.txt
--- old/path.py-8.1.1/path.py.egg-info/requires.txt     2015-09-10 
10:00:02.000000000 +0200
+++ new/path.py-10.3.1/path.py.egg-info/requires.txt    1970-01-01 
01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-
-[:python_version=="2.6"]
-importlib
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/pytest.ini 
new/path.py-10.3.1/pytest.ini
--- old/path.py-8.1.1/pytest.ini        2015-04-14 13:36:09.000000000 +0200
+++ new/path.py-10.3.1/pytest.ini       2017-04-18 05:00:17.000000000 +0200
@@ -1,2 +1,4 @@
 [pytest]
-addopts=--doctest-modules --ignore=build
+norecursedirs=dist build .tox
+addopts=--doctest-modules
+doctest_optionflags=ALLOW_UNICODE ELLIPSIS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/setup.cfg new/path.py-10.3.1/setup.cfg
--- old/path.py-8.1.1/setup.cfg 2015-09-10 10:00:02.000000000 +0200
+++ new/path.py-10.3.1/setup.cfg        2017-04-18 05:00:48.000000000 +0200
@@ -1,6 +1,6 @@
 [aliases]
-test = pytest
-release = sdist bdist_wheel upload upload_docs
+release = dists upload
+dists = clean --all sdist bdist_wheel
 
 [wheel]
 universal = 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/setup.py new/path.py-10.3.1/setup.py
--- old/path.py-8.1.1/setup.py  2015-08-23 15:04:35.000000000 +0200
+++ new/path.py-10.3.1/setup.py 2017-04-18 05:00:17.000000000 +0200
@@ -1,49 +1,51 @@
 #!/usr/bin/env python
 
-import sys
+# Project skeleton maintained at https://github.com/jaraco/skeleton
+
+import io
 
 import setuptools
 
-with open('README.rst') as ld_file:
-    long_description = ld_file.read()
+with io.open('README.rst', encoding='utf-8') as readme:
+    long_description = readme.read()
 
-needs_sphinx = set(['build_sphinx', 'upload_docs', 
'release']).intersection(sys.argv)
-sphinx_req = ['sphinx', 'rst.linker'] if needs_sphinx else []
-needs_pytest = set(['pytest', 'test']).intersection(sys.argv)
-pytest_runner = ['pytest-runner>=2.6'] if needs_pytest else []
+name = 'path.py'
+description = 'A module wrapper for os.path'
 
-setup_params = dict(
-    name="path.py",
+params = dict(
+    name=name,
     use_scm_version=True,
-    description="A module wrapper for os.path",
-    long_description=long_description,
     author="Jason Orendorff",
     author_email="[email protected]",
     maintainer="Jason R. Coombs",
     maintainer_email="[email protected]",
-    url="http://github.com/jaraco/path.py";,
-    license="MIT License",
+    description=description or name,
+    long_description=long_description,
+    url="https://github.com/jaraco/"; + name,
     py_modules=['path', 'test_path'],
-    classifiers=[
-        'Development Status :: 5 - Production/Stable',
-        'License :: OSI Approved :: MIT License',
-        'Intended Audience :: Developers',
-        'Operating System :: OS Independent',
-        'Programming Language :: Python',
-        'Programming Language :: Python :: 2.6',
-        'Programming Language :: Python :: 2.7',
-        'Programming Language :: Python :: 3',
-        'Topic :: Software Development :: Libraries :: Python Modules'
+    python_requires='>=2.7',
+    install_requires=[
     ],
-    setup_requires=[
-        'setuptools_scm',
-    ] + sphinx_req + pytest_runner,
-    tests_require=['pytest', 'appdirs'],
     extras_require={
-        ':python_version=="2.6"': ['importlib'],
+    },
+    setup_requires=[
+        'setuptools_scm>=1.15.0',
+    ],
+    classifiers=[
+        "Development Status :: 5 - Production/Stable",
+        "Intended Audience :: Developers",
+        "License :: OSI Approved :: MIT License",
+        "Operating System :: OS Independent",
+        "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",
+        "Topic :: Software Development :: Libraries :: Python Modules",
+    ],
+    entry_points={
     },
 )
-
-
 if __name__ == '__main__':
-    setuptools.setup(**setup_params)
+       setuptools.setup(**params)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/test_path.py 
new/path.py-10.3.1/test_path.py
--- old/path.py-8.1.1/test_path.py      2015-08-23 15:04:35.000000000 +0200
+++ new/path.py-10.3.1/test_path.py     2017-04-18 05:00:17.000000000 +0200
@@ -30,17 +30,28 @@
 
 import pytest
 
-from path import Path, tempdir
+import path
+from path import tempdir
 from path import CaseInsensitivePattern as ci
 from path import SpecialResolver
 from path import Multi
 
+Path = None
+
 
 def p(**choices):
     """ Choose a value from several possible values, based on os.name """
     return choices[os.name]
 
 
[email protected](autouse=True, params=[path.Path, path.FastPath])
+def path_class(request, monkeypatch):
+    """
+    Invoke tests on any number of Path classes.
+    """
+    monkeypatch.setitem(globals(), 'Path', request.param)
+
+
 class TestBasics:
     def test_relpath(self):
         root = Path(p(nt='C:\\', posix='/'))
@@ -351,6 +362,8 @@
                 except:
                     pass
 
+    @pytest.mark.xfail(platform.system() == 'Linux' and path.PY2,
+        reason="Can't decode bytes in FS. See #121")
     def test_listdir_other_encoding(self, tmpdir):
         """
         Some filesystems allow non-character sequences in path names.
@@ -680,6 +693,26 @@
             self.fail("Calling `rmtree_p` on non-existent directory "
                       "should not raise an exception.")
 
+    def test_rmdir_p_exists(self, tmpdir):
+        """
+        Invocation of rmdir_p on an existant directory should
+        remove the directory.
+        """
+        d = Path(tmpdir)
+        sub = d / 'subfolder'
+        sub.mkdir()
+        sub.rmdir_p()
+        assert not sub.exists()
+       
+    def test_rmdir_p_nonexistent(self, tmpdir):
+        """
+        A non-existent file should not raise an exception.
+        """
+        d = Path(tmpdir)
+        sub = d / 'subfolder'
+        assert not sub.exists()
+        sub.rmdir_p()
+                  
 
 class TestMergeTree:
     @pytest.fixture(autouse=True)
@@ -701,6 +734,11 @@
         else:
             self.test_file.copy(self.test_link)
 
+    def check_link(self):
+        target = Path(self.subdir_b / self.test_link.name)
+        check = target.islink if hasattr(os, 'symlink') else target.isfile
+        assert check()
+
     def test_with_nonexisting_dst_kwargs(self):
         self.subdir_a.merge_tree(self.subdir_b, symlinks=True)
         assert self.subdir_b.isdir()
@@ -709,7 +747,7 @@
             self.subdir_b / self.test_link.name,
         ))
         assert set(self.subdir_b.listdir()) == expected
-        assert Path(self.subdir_b / self.test_link.name).islink()
+        self.check_link()
 
     def test_with_nonexisting_dst_args(self):
         self.subdir_a.merge_tree(self.subdir_b, True)
@@ -719,7 +757,7 @@
             self.subdir_b / self.test_link.name,
         ))
         assert set(self.subdir_b.listdir()) == expected
-        assert Path(self.subdir_b / self.test_link.name).islink()
+        self.check_link()
 
     def test_with_existing_dst(self):
         self.subdir_b.rmtree()
@@ -740,7 +778,7 @@
             self.subdir_b / test_new.name,
         ))
         assert set(self.subdir_b.listdir()) == expected
-        assert Path(self.subdir_b / self.test_link.name).islink()
+        self.check_link()
         assert len(Path(self.subdir_b / self.test_file.name).bytes()) == 5000
 
     def test_copytree_parameters(self):
@@ -781,17 +819,17 @@
 
 
 class TestSubclass:
-    class PathSubclass(Path):
-        pass
 
     def test_subclass_produces_same_class(self):
         """
         When operations are invoked on a subclass, they should produce another
         instance of that subclass.
         """
-        p = self.PathSubclass('/foo')
+        class PathSubclass(Path):
+            pass
+        p = PathSubclass('/foo')
         subdir = p / 'bar'
-        assert isinstance(subdir, self.PathSubclass)
+        assert isinstance(subdir, PathSubclass)
 
 
 class TestTempDir:
@@ -801,7 +839,7 @@
         One should be able to readily construct a temporary directory
         """
         d = tempdir()
-        assert isinstance(d, Path)
+        assert isinstance(d, path.Path)
         assert d.exists()
         assert d.isdir()
         d.rmdir()
@@ -814,7 +852,7 @@
         """
         d = tempdir()
         sub = d / 'subdir'
-        assert isinstance(sub, Path)
+        assert isinstance(sub, path.Path)
         d.rmdir()
 
     def test_context_manager(self):
@@ -1023,8 +1061,9 @@
     def test_unix_paths_fallback(self, tmpdir, monkeypatch, feign_linux):
         "Without XDG_CONFIG_HOME set, ~/.config should be used."
         fake_home = tmpdir / '_home'
+        monkeypatch.delitem(os.environ, 'XDG_CONFIG_HOME', raising=False)
         monkeypatch.setitem(os.environ, 'HOME', str(fake_home))
-        expected = str(tmpdir / '_home' / '.config')
+        expected = Path('~/.config').expanduser()
         assert SpecialResolver(Path).user.config == expected
 
     def test_property(self):
@@ -1075,7 +1114,8 @@
         cls = Multi.for_class(Path)
         assert issubclass(cls, Path)
         assert issubclass(cls, Multi)
-        assert cls.__name__ == 'MultiPath'
+        expected_name = 'Multi' + Path.__name__
+        assert cls.__name__ == expected_name
 
     def test_detect_no_pathsep(self):
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/tests/requirements.txt 
new/path.py-10.3.1/tests/requirements.txt
--- old/path.py-8.1.1/tests/requirements.txt    1970-01-01 01:00:00.000000000 
+0100
+++ new/path.py-10.3.1/tests/requirements.txt   2017-04-18 05:00:17.000000000 
+0200
@@ -0,0 +1,3 @@
+pytest >= 2.8
+pytest-sugar
+appdirs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/path.py-8.1.1/tox.ini new/path.py-10.3.1/tox.ini
--- old/path.py-8.1.1/tox.ini   2015-03-13 01:42:37.000000000 +0100
+++ new/path.py-10.3.1/tox.ini  2017-04-18 05:00:17.000000000 +0200
@@ -1,11 +1,6 @@
-# Tox (http://tox.testrun.org/) is a tool for running tests
-# in multiple virtualenvs. This configuration file will run the
-# test suite on all supported python versions. To use it, "pip install tox"
-# and then run "tox" from this directory.
-
-[tox]
-envlist = py26, py27, pypy, py32, py33, py34
-
 [testenv]
+deps =
+       -rtests/requirements.txt
+
 commands = py.test {posargs}
-deps = pytest
+usedevelop = True


Reply via email to