Hello community, here is the log from the commit of package python-py for openSUSE:Factory checked in at 2018-06-05 12:49:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-py (Old) and /work/SRC/openSUSE:Factory/.python-py.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-py" Tue Jun 5 12:49:41 2018 rev:28 rq:613462 version:1.5.3 Changes: -------- --- /work/SRC/openSUSE:Factory/python-py/python-py-doc.changes 2017-11-21 15:28:11.570298081 +0100 +++ /work/SRC/openSUSE:Factory/.python-py.new/python-py-doc.changes 2018-06-05 12:49:42.612674119 +0200 @@ -1,0 +2,6 @@ +Thu May 31 04:37:00 UTC 2018 - [email protected] + +- update to version 1.5.3 + * - fix #179: ensure we can support 'from py.error import ...' + +------------------------------------------------------------------- python-py.changes: same change Old: ---- py-1.5.2.tar.gz New: ---- py-1.5.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-py-doc.spec ++++++ --- /var/tmp/diff_new_pack.Z8hbdN/_old 2018-06-05 12:49:43.148654479 +0200 +++ /var/tmp/diff_new_pack.Z8hbdN/_new 2018-06-05 12:49:43.152654332 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-py-doc # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 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 @@ -18,17 +18,20 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-py-doc -Version: 1.5.2 +Version: 1.5.3 Release: 0 Summary: Library with cross-python path, ini-parsing, io, code, log facilities License: MIT Group: Development/Languages/Python -Url: https://py.readthedocs.io/en/latest/ +Url: https://github.com/pytest-dev/py Source: https://files.pythonhosted.org/packages/source/p/py/py-%{version}.tar.gz +BuildRequires: %{python_module py} +BuildRequires: %{python_module pytest} +BuildRequires: %{python_module pytest-xdist} +BuildRequires: python-rpm-macros # Documentation requirements: BuildRequires: dos2unix BuildRequires: python3-Sphinx -BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildArch: noarch Provides: %{python_module py-doc = %{version}} @@ -57,6 +60,7 @@ %files %defattr(-,root,root,-) -%doc LICENSE doc/_build/html +%doc doc/_build/html +%license LICENSE %changelog ++++++ python-py.spec ++++++ --- /var/tmp/diff_new_pack.Z8hbdN/_old 2018-06-05 12:49:43.172653599 +0200 +++ /var/tmp/diff_new_pack.Z8hbdN/_new 2018-06-05 12:49:43.172653599 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-py # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 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 @@ -18,17 +18,17 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-py -Version: 1.5.2 +Version: 1.5.3 Release: 0 Summary: Library with cross-python path, ini-parsing, io, code, log facilities License: MIT Group: Development/Languages/Python -Url: https://pylib.readthedocs.io +Url: https://github.com/pytest-dev/py Source: https://files.pythonhosted.org/packages/source/p/py/py-%{version}.tar.gz BuildRequires: %{python_module devel} BuildRequires: %{python_module setuptools} +BuildRequires: fdupes BuildRequires: python-rpm-macros -BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildArch: noarch %python_subpackages @@ -53,10 +53,12 @@ %install %python_install +%python_exec %fdupes %{buildroot}%{$python_sitelib} %files %{python_files} %defattr(-,root,root,-) -%doc LICENSE README.rst +%doc README.rst +%license LICENSE %{python_sitelib}/* %changelog ++++++ py-1.5.2.tar.gz -> py-1.5.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/.gitattributes new/py-1.5.3/.gitattributes --- old/py-1.5.2/.gitattributes 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/.gitattributes 2017-05-05 16:12:31.000000000 +0200 @@ -0,0 +1 @@ +*.dump eol=lf diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/.gitignore new/py-1.5.3/.gitignore --- old/py-1.5.2/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/.gitignore 2017-05-05 16:12:31.000000000 +0200 @@ -0,0 +1,12 @@ + +.cache/ +.tox/ +__pycache__/ + +*.pyc +*.pyo + +*.egg-info +.eggs/ + +dist/* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/.hgignore new/py-1.5.3/.hgignore --- old/py-1.5.2/.hgignore 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/.hgignore 2016-09-17 09:18:18.000000000 +0200 @@ -0,0 +1,29 @@ + +# Automatically generated by `hgimportsvn` +syntax:glob +.svn +.hgsvn + +# These lines are suggested according to the svn:ignore property +# Feel free to enable them by uncommenting them +syntax:glob +*.pyc +*.pyo +*.swp +*.html +*.class +*.orig +*~ + +doc/_build +build/ +dist/ +*.egg-info +issue/ +env/ +3rdparty/ +.tox +lib/ +bin/ +include/ +src/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/.hgtags new/py-1.5.3/.hgtags --- old/py-1.5.2/.hgtags 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/.hgtags 2016-09-17 09:18:18.000000000 +0200 @@ -0,0 +1,68 @@ +52c6d9e78777a5a34e813123997dfc614a1a4767 1.0.0b3 +1c7aaa8c61f3b0945921a9acc7beb184201aed4b 1.0.0b4 +1c7aaa8c61f3b0945921a9acc7beb184201aed4b 1.0.0b4 +0000000000000000000000000000000000000000 1.0.0b4 +0000000000000000000000000000000000000000 1.0.0b4 +8cd6eb91eba313b012d6e568f37d844dc0751f2e 1.0.0b4 +8cd6eb91eba313b012d6e568f37d844dc0751f2e 1.0.0b4 +0000000000000000000000000000000000000000 1.0.0b4 +2cc0507f117ffe721dff7ee026648cfce00ec92f 1.0.0b6 +86f1e1b6e49bf5882a809f11edd1dbb08162cdad 1.0.0b8 +86f1e1b6e49bf5882a809f11edd1dbb08162cdad 1.0.0b8 +c63f35c266cbb26dad6b87b5e115d65685adf448 1.0.0b8 +c63f35c266cbb26dad6b87b5e115d65685adf448 1.0.0b8 +0eaa0fdf2ba0163cf534dc2eff4ba2e5fc66c261 1.0.0b8 +e2a60653cb490aeed81bbbd83c070b99401c211c 1.0.0b9 +5ea0cdf7854c3d4278d36eda94a2b68483a0e211 1.0.0 +5ea0cdf7854c3d4278d36eda94a2b68483a0e211 1.0.0 +7acde360d94b6a2690ce3d03ff39301da84c0a2b 1.0.0 +6bd221981ac99103002c1cb94fede400d23a96a1 1.0.1 +4816e8b80602a3fd3a0a120333ad85fbe7d8bab4 1.0.2 +60c44bdbf093285dc69d5462d4dbb4acad325ca6 1.1.0 +319187fcda66714c5eb1353492babeec3d3c826f 1.1.1 +4fc5212f7626a56b9eb6437b5c673f56dd7eb942 1.2.0 +c143a8c8840a1c68570890c8ac6165bbf92fd3c6 1.2.1 +eafd3c256e8732dfb0a4d49d051b5b4339858926 1.3.0 +d5eacf390af74553227122b85e20345d47b2f9e6 1.3.1 +d5eacf390af74553227122b85e20345d47b2f9e6 1.3.1 +8b8e7c25a13cf863f01b2dd955978285ae9daf6a 1.3.1 +3bff44b188a7ec1af328d977b9d39b6757bb38df 1.3.2 +c59d3fa8681a5b5966b8375b16fccd64a3a8dbeb 1.3.3 +79ef6377705184c55633d456832eea318fedcf61 1.3.4 +79ef6377705184c55633d456832eea318fedcf61 1.3.4 +90fffd35373e9f125af233f78b19416f0938d841 1.3.4 +5346ab41b059c95a48cbe1e8a7bae96ce6e0da27 1.4.0 +1f3125cba7976538952be268f107c1d0c36c5ce8 1.4.1 +04ab22db4ff737cf31e91d75a0f5d7077f324167 1.4.2 +9950bf9d684a984d511795013421c89c5cf88bef 1.4.3 +d9951e3bdbc765e73835ae13012f6a074d13d8bf 1.4.4 +b827dd156a36753e32c7f3f15ce82d6fe9e356c8 1.4.6 +f15726f9e5a67cc6221c499affa4840e9d591763 1.4.7 +abfabd07a1d328f13c730e8a50d80d2e470afd3b 1.4.9 +7f37ee0aff9be4b839d6759cfee336f60e8393a4 1.4.10 +fe4593263efa10ea7ba014db6e3379e0b82368a2 1.4.11 +f07af25a26786e4825b5170e17ad693245cb3426 1.4.12 +d3730d84ba7eda92fd3469a3f63fd6d8cb22c975 1.4.13 +12c1ae8e7c5345721e9ec9f8e27b1e36c07f74dc 1.4.14 +12c1ae8e7c5345721e9ec9f8e27b1e36c07f74dc 1.4.14 +0000000000000000000000000000000000000000 1.4.14 +0000000000000000000000000000000000000000 1.4.14 +1497e2efd0f8c73a0e3d529debf0c489e4cd6cab 1.4.14 +e065014c1ce8ad110a381e9baaaa5d647ba7ac6b 1.4.15 +e9e5b38f53dc35b35aa1f9ee9a9be9bbd2d2c3b1 1.4.16 +c603503945f52b78522d96a423605cbc953236d3 1.4.17 +c59201105a29801cc858eb9160b7a19791b91a35 1.4.18 +284cc172e294d48edc840012e1451c32c3963d92 1.4.19 +a3e0626aa0c5aecf271367dc77e476ab216ea3c8 1.4.20 +5e48016c4a3af8e7358a1267d33d021e71765bed 1.4.21 +01ae2cfcc61c4fcb3aa5031349adb5b467c31018 1.4.23 +5ffd982f4dff60b588f309cd9bdc61036547282a 1.4.24 +dc9ffbcaf1f7d72e96be3f68c11deebb7e7193c5 1.4.25 +6de1a44bf75de7af4fcae947c235e9072bbdbb9a 1.4.26 +7d650ba2657890a2253c8c4a83f170febebd90fa 1.4.27 +7d650ba2657890a2253c8c4a83f170febebd90fa 1.4.27 +1810003dec63dd1b506a23849861fffa5bc3ba13 1.4.27 +ba08706f08ddea1b77a426f00dfe2bdc244345e8 1.4.28 +4e8054ada63f3327bcf759ae7cd36c7c8652bc9b 1.4.29 +366ab346610c6de8aaa7617e24011794b40236c6 1.4.30 +657380e439f9b7e04918cb162cb2e46388244b42 1.4.31 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/.travis.yml new/py-1.5.3/.travis.yml --- old/py-1.5.2/.travis.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/.travis.yml 2018-02-21 15:54:55.000000000 +0100 @@ -0,0 +1,27 @@ +sudo: false +language: python +python: +- '2.7' +- '3.4' +- '3.5' +- '3.6' +- 'pypy-5.4' +env: +- DEPS="pytest~=2.9.0" +- DEPS="pytest~=3.0.0" +#- DEPS="pytest~=3.1.0" + +matrix: + + include: + - python: '2.7' + # using a different option due to pytest-addopts pytester issues + env: PYTEST_XADDOPTS="-n 3 --runslowtests" DEPS="pytest~=3.0.0 pytest-xdist" + allow_failures: + - python: 'pypy-5.4' +install: +- pip install -U setuptools setuptools_scm +- pip install $DEPS +- pip install -U . --force-reinstall +script: +- py.test --lsof $PYTEST_XADDOPTS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/CHANGELOG new/py-1.5.3/CHANGELOG --- old/py-1.5.2/CHANGELOG 2017-11-16 00:45:42.000000000 +0100 +++ new/py-1.5.3/CHANGELOG 2018-03-14 16:08:44.000000000 +0100 @@ -1,3 +1,8 @@ +1.5.3 (unreleased) +================== + +- fix #179: ensure we can support 'from py.error import ...' + 1.5.2 ===== @@ -11,6 +16,10 @@ 1.5.0 ===== +NOTE: **this release has been removed from PyPI** due to missing package +metadata which caused a number of problems to py26 and py33 users. +This issue was fixed in the 1.5.1 release. + - python 2.6 and 3.3 are no longer supported - deprecate py.std and remove all internal uses - fix #73 turn py.error into an actual module diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/PKG-INFO new/py-1.5.3/PKG-INFO --- old/py-1.5.2/PKG-INFO 2017-11-16 00:46:09.000000000 +0100 +++ new/py-1.5.3/PKG-INFO 2018-03-22 11:06:12.000000000 +0100 @@ -1,12 +1,11 @@ Metadata-Version: 1.2 Name: py -Version: 1.5.2 +Version: 1.5.3 Summary: library with cross-python path, ini-parsing, io, code, log facilities Home-page: http://py.readthedocs.io/ Author: holger krekel, Ronny Pfannschmidt, Benjamin Peterson and others Author-email: [email protected] License: MIT license -Description-Content-Type: UNKNOWN Description: .. image:: https://img.shields.io/pypi/v/py.svg :target: https://pypi.org/project/py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/bench/localpath.py new/py-1.5.3/bench/localpath.py --- old/py-1.5.2/bench/localpath.py 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/bench/localpath.py 2016-09-17 09:18:18.000000000 +0200 @@ -0,0 +1,75 @@ + +import py +import timeit + +class Listdir: + numiter = 100000 + numentries = 100 + + def setup(self): + tmpdir = py.path.local.make_numbered_dir(self.__class__.__name__) + for i in range(self.numentries): + tmpdir.join(str(i)) + self.tmpdir = tmpdir + + def run(self): + return self.tmpdir.listdir() + +class Listdir_arg(Listdir): + numiter = 100000 + numentries = 100 + + def run(self): + return self.tmpdir.listdir("47") + +class Join_onearg(Listdir): + def run(self): + self.tmpdir.join("17") + self.tmpdir.join("18") + self.tmpdir.join("19") + +class Join_multi(Listdir): + def run(self): + self.tmpdir.join("a", "b") + self.tmpdir.join("a", "b", "c") + self.tmpdir.join("a", "b", "c", "d") + +class Check(Listdir): + def run(self): + self.tmpdir.check() + self.tmpdir.check() + self.tmpdir.check() + +class CheckDir(Listdir): + def run(self): + self.tmpdir.check(dir=1) + self.tmpdir.check(dir=1) + assert not self.tmpdir.check(dir=0) + +class CheckDir2(Listdir): + def run(self): + self.tmpdir.stat().isdir() + self.tmpdir.stat().isdir() + assert self.tmpdir.stat().isdir() + +class CheckFile(Listdir): + def run(self): + self.tmpdir.check(file=1) + assert not self.tmpdir.check(file=1) + assert self.tmpdir.check(file=0) + +if __name__ == "__main__": + import time + for cls in [Listdir, Listdir_arg, + Join_onearg, Join_multi, + Check, CheckDir, CheckDir2, CheckFile,]: + + inst = cls() + inst.setup() + now = time.time() + for i in xrange(cls.numiter): + inst.run() + elapsed = time.time() - now + print "%s: %d loops took %.2f seconds, per call %.6f" %( + cls.__name__, + cls.numiter, elapsed, elapsed / cls.numiter) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/__init__.py new/py-1.5.3/py/__init__.py --- old/py-1.5.2/py/__init__.py 2017-11-16 00:45:42.000000000 +0100 +++ new/py-1.5.3/py/__init__.py 2018-03-22 09:59:58.000000000 +0100 @@ -8,7 +8,7 @@ (c) Holger Krekel and others, 2004-2014 """ -__version__ = '1.5.2' +from py._error import error try: from py._vendored_packages import apipkg @@ -18,15 +18,12 @@ import apipkg lib_not_mangled_by_packagers = False vendor_prefix = '' +__version__ = '1.5.3' -# so that py.error.* instances are picklable -import sys -apipkg.initpkg(__name__, attr={'_apipkg': apipkg}, exportdefs={ +apipkg.initpkg(__name__, attr={'_apipkg': apipkg, 'error': error}, exportdefs={ # access to all standard lib modules 'std': '._std:std', - # access to all posix errno's as classes - 'error': '._error:error', '_pydir' : '.__metainfo:pydir', 'version': 'py:__version__', # backward compatibility diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_path/local.py new/py-1.5.3/py/_path/local.py --- old/py-1.5.2/py/_path/local.py 2017-11-14 23:02:21.000000000 +0100 +++ new/py-1.5.3/py/_path/local.py 2018-02-21 15:54:55.000000000 +0100 @@ -669,7 +669,7 @@ mod = sys.modules[modname] if self.basename == "__init__.py": return mod # we don't check anything as we might - # we in a namespace package ... too icky to check + # be in a namespace package ... too icky to check modfile = mod.__file__ if modfile[-4:] in ('.pyc', '.pyo'): modfile = modfile[:-1] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/DESCRIPTION.rst new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/DESCRIPTION.rst --- old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/DESCRIPTION.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/DESCRIPTION.rst 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1,87 @@ +Welcome to apipkg! +------------------------ + +With apipkg you can control the exported namespace of a +python package and greatly reduce the number of imports for your users. +It is a `small pure python module`_ that works on virtually all Python +versions, including CPython2.3 to Python3.1, Jython and PyPy. It co-operates +well with Python's ``help()`` system, custom importers (PEP302) and common +command line completion tools. + +Usage is very simple: you can require 'apipkg' as a dependency or you +can copy paste the <200 Lines of code into your project. + + +Tutorial example +------------------- + +Here is a simple ``mypkg`` package that specifies one namespace +and exports two objects imported from different modules:: + + # mypkg/__init__.py + import apipkg + apipkg.initpkg(__name__, { + 'path': { + 'Class1': "_mypkg.somemodule:Class1", + 'clsattr': "_mypkg.othermodule:Class2.attr", + } + } + +The package is initialized with a dictionary as namespace. + +You need to create a ``_mypkg`` package with a ``somemodule.py`` +and ``othermodule.py`` containing the respective classes. +The ``_mypkg`` is not special - it's a completely +regular python package. + +Namespace dictionaries contain ``name: value`` mappings +where the value may be another namespace dictionary or +a string specifying an import location. On accessing +an namespace attribute an import will be performed:: + + >>> import mypkg + >>> mypkg.path + <ApiModule 'mypkg.path'> + >>> mypkg.path.Class1 # '_mypkg.somemodule' gets imported now + <class _mypkg.somemodule.Class1 at 0xb7d428fc> + >>> mypkg.path.clsattr # '_mypkg.othermodule' gets imported now + 4 # the value of _mypkg.othermodule.Class2.attr + +The ``mypkg.path`` namespace and its two entries are +loaded when they are accessed. This means: + +* lazy loading - only what is actually needed is ever loaded + +* only the root "mypkg" ever needs to be imported to get + access to the complete functionality. + +* the underlying modules are also accessible, for example:: + + from mypkg.sub import Class1 + + +Including apipkg in your package +-------------------------------------- + +If you don't want to add an ``apipkg`` dependency to your package you +can copy the `apipkg.py`_ file somewhere to your own package, +for example ``_mypkg/apipkg.py`` in the above example. You +then import the ``initpkg`` function from that new place and +are good to go. + +.. _`small pure python module`: +.. _`apipkg.py`: http://bitbucket.org/hpk42/apipkg/src/tip/apipkg.py + +Feedback? +----------------------- + +If you have questions you are welcome to + +* join the #pylib channel on irc.freenode.net +* subscribe to the http://codespeak.net/mailman/listinfo/py-dev list. +* create an issue on http://bitbucket.org/hpk42/apipkg/issues + +have fun, +holger krekel + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/INSTALLER new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/INSTALLER --- old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/INSTALLER 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/INSTALLER 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1 @@ +pip diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/METADATA new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/METADATA --- old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/METADATA 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/METADATA 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1,109 @@ +Metadata-Version: 2.0 +Name: apipkg +Version: 1.4 +Summary: apipkg: namespace control and lazy-import mechanism +Home-page: http://bitbucket.org/hpk42/apipkg +Author: holger krekel +Author-email: holger at merlinux.eu +License: MIT License +Platform: unix +Platform: linux +Platform: osx +Platform: cygwin +Platform: win32 +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: POSIX +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Topic :: Software Development :: Libraries +Classifier: Programming Language :: Python + +Welcome to apipkg! +------------------------ + +With apipkg you can control the exported namespace of a +python package and greatly reduce the number of imports for your users. +It is a `small pure python module`_ that works on virtually all Python +versions, including CPython2.3 to Python3.1, Jython and PyPy. It co-operates +well with Python's ``help()`` system, custom importers (PEP302) and common +command line completion tools. + +Usage is very simple: you can require 'apipkg' as a dependency or you +can copy paste the <200 Lines of code into your project. + + +Tutorial example +------------------- + +Here is a simple ``mypkg`` package that specifies one namespace +and exports two objects imported from different modules:: + + # mypkg/__init__.py + import apipkg + apipkg.initpkg(__name__, { + 'path': { + 'Class1': "_mypkg.somemodule:Class1", + 'clsattr': "_mypkg.othermodule:Class2.attr", + } + } + +The package is initialized with a dictionary as namespace. + +You need to create a ``_mypkg`` package with a ``somemodule.py`` +and ``othermodule.py`` containing the respective classes. +The ``_mypkg`` is not special - it's a completely +regular python package. + +Namespace dictionaries contain ``name: value`` mappings +where the value may be another namespace dictionary or +a string specifying an import location. On accessing +an namespace attribute an import will be performed:: + + >>> import mypkg + >>> mypkg.path + <ApiModule 'mypkg.path'> + >>> mypkg.path.Class1 # '_mypkg.somemodule' gets imported now + <class _mypkg.somemodule.Class1 at 0xb7d428fc> + >>> mypkg.path.clsattr # '_mypkg.othermodule' gets imported now + 4 # the value of _mypkg.othermodule.Class2.attr + +The ``mypkg.path`` namespace and its two entries are +loaded when they are accessed. This means: + +* lazy loading - only what is actually needed is ever loaded + +* only the root "mypkg" ever needs to be imported to get + access to the complete functionality. + +* the underlying modules are also accessible, for example:: + + from mypkg.sub import Class1 + + +Including apipkg in your package +-------------------------------------- + +If you don't want to add an ``apipkg`` dependency to your package you +can copy the `apipkg.py`_ file somewhere to your own package, +for example ``_mypkg/apipkg.py`` in the above example. You +then import the ``initpkg`` function from that new place and +are good to go. + +.. _`small pure python module`: +.. _`apipkg.py`: http://bitbucket.org/hpk42/apipkg/src/tip/apipkg.py + +Feedback? +----------------------- + +If you have questions you are welcome to + +* join the #pylib channel on irc.freenode.net +* subscribe to the http://codespeak.net/mailman/listinfo/py-dev list. +* create an issue on http://bitbucket.org/hpk42/apipkg/issues + +have fun, +holger krekel + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/RECORD new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/RECORD --- old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/RECORD 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/RECORD 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1,9 @@ +apipkg.py,sha256=BNnv_qvq8zZvku-uudoqgp3XTNFbwsNUmtzOKrVI7X0,6420 +apipkg-1.4.dist-info/top_level.txt,sha256=3TGS6nmN7kjxhUK4LpPCB3QkQI34QYGrT0ZQGWajoZ8,7 +apipkg-1.4.dist-info/METADATA,sha256=Fk_8BrHyXE--kvB3_ZBKgwvPaKusAZUjchH-kpB63Hs,3491 +apipkg-1.4.dist-info/DESCRIPTION.rst,sha256=RkMQqk5ljhGy0DiZkR_nbpjqvwCIhuIEHsyvkn3O96k,2803 +apipkg-1.4.dist-info/metadata.json,sha256=GdshYrA_7gAII3E3EQMH-31BHzU-klTZ6bPQzlDmuy4,779 +apipkg-1.4.dist-info/WHEEL,sha256=AvR0WeTpDaxT645bl5FQxUK6NPsTls2ttpcGJg3j1Xg,110 +apipkg-1.4.dist-info/RECORD,, +apipkg-1.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +__pycache__/apipkg.cpython-35.pyc,, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/WHEEL new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/WHEEL --- old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/WHEEL 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/WHEEL 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1,6 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.24.0) +Root-Is-Purelib: true +Tag: py2-none-any +Tag: py3-none-any + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/metadata.json new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/metadata.json --- old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/metadata.json 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/metadata.json 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1 @@ +{"license": "MIT License", "name": "apipkg", "metadata_version": "2.0", "generator": "bdist_wheel (0.24.0)", "summary": "apipkg: namespace control and lazy-import mechanism", "platform": "unix", "version": "1.4", "extensions": {"python.details": {"project_urls": {"Home": "http://bitbucket.org/hpk42/apipkg"}, "document_names": {"description": "DESCRIPTION.rst"}, "contacts": [{"role": "author", "email": "holger at merlinux.eu", "name": "holger krekel"}]}}, "classifiers": ["Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Operating System :: Microsoft :: Windows", "Operating System :: MacOS :: MacOS X", "Topic :: Software Development :: Libraries", "Programming Language :: Python"]} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/top_level.txt new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/top_level.txt --- old/py-1.5.2/py/_vendored_packages/apipkg-1.4.dist-info/top_level.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/apipkg-1.4.dist-info/top_level.txt 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1 @@ +apipkg diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/DESCRIPTION.rst new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/DESCRIPTION.rst --- old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/DESCRIPTION.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/DESCRIPTION.rst 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1,53 @@ +iniconfig: brain-dead simple parsing of ini files +======================================================= + +iniconfig is a small and simple INI-file parser module +having a unique set of features: + +* tested against Python2.4 across to Python3.2, Jython, PyPy +* maintains order of sections and entries +* supports multi-line values with or without line-continuations +* supports "#" comments everywhere +* raises errors with proper line-numbers +* no bells and whistles like automatic substitutions +* iniconfig raises an Error if two sections have the same name. + +If you encounter issues or have feature wishes please report them to: + + http://github.org/RonnyPfannschmidt/iniconfig/issues + +Basic Example +=================================== + +If you have an ini file like this:: + + # content of example.ini + [section1] # comment + name1=value1 # comment + name1b=value1,value2 # comment + + [section2] + name2= + line1 + line2 + +then you can do:: + + >>> import iniconfig + >>> ini = iniconfig.IniConfig("example.ini") + >>> ini['section1']['name1'] # raises KeyError if not exists + 'value1' + >>> ini.get('section1', 'name1b', [], lambda x: x.split(",")) + ['value1', 'value2'] + >>> ini.get('section1', 'notexist', [], lambda x: x.split(",")) + [] + >>> [x.name for x in list(ini)] + ['section1', 'section2'] + >>> list(list(ini)[0].items()) + [('name1', 'value1'), ('name1b', 'value1,value2')] + >>> 'section1' in ini + True + >>> 'inexistendsection' in ini + False + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/INSTALLER new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/INSTALLER --- old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/INSTALLER 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/INSTALLER 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1 @@ +pip diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/METADATA new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/METADATA --- old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/METADATA 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/METADATA 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1,78 @@ +Metadata-Version: 2.0 +Name: iniconfig +Version: 1.0.0 +Summary: iniconfig: brain-dead simple config-ini parsing +Home-page: http://github.com/RonnyPfannschmidt/iniconfig +Author: Ronny Pfannschmidt, Holger Krekel +Author-email: [email protected], [email protected] +License: MIT License +Platform: unix +Platform: linux +Platform: osx +Platform: cygwin +Platform: win32 +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: POSIX +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Topic :: Software Development :: Libraries +Classifier: Topic :: Utilities +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 3 + +iniconfig: brain-dead simple parsing of ini files +======================================================= + +iniconfig is a small and simple INI-file parser module +having a unique set of features: + +* tested against Python2.4 across to Python3.2, Jython, PyPy +* maintains order of sections and entries +* supports multi-line values with or without line-continuations +* supports "#" comments everywhere +* raises errors with proper line-numbers +* no bells and whistles like automatic substitutions +* iniconfig raises an Error if two sections have the same name. + +If you encounter issues or have feature wishes please report them to: + + http://github.org/RonnyPfannschmidt/iniconfig/issues + +Basic Example +=================================== + +If you have an ini file like this:: + + # content of example.ini + [section1] # comment + name1=value1 # comment + name1b=value1,value2 # comment + + [section2] + name2= + line1 + line2 + +then you can do:: + + >>> import iniconfig + >>> ini = iniconfig.IniConfig("example.ini") + >>> ini['section1']['name1'] # raises KeyError if not exists + 'value1' + >>> ini.get('section1', 'name1b', [], lambda x: x.split(",")) + ['value1', 'value2'] + >>> ini.get('section1', 'notexist', [], lambda x: x.split(",")) + [] + >>> [x.name for x in list(ini)] + ['section1', 'section2'] + >>> list(list(ini)[0].items()) + [('name1', 'value1'), ('name1b', 'value1,value2')] + >>> 'section1' in ini + True + >>> 'inexistendsection' in ini + False + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/RECORD new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/RECORD --- old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/RECORD 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/RECORD 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1,9 @@ +iniconfig.py,sha256=-pBe5AF_6aAwo1CxJQ8i_zJq6ejc6IxHta7qk2tNJhY,5208 +iniconfig-1.0.0.dist-info/DESCRIPTION.rst,sha256=BDLMwWqfjpwZ5yqXRvz1x6bf8Dnt_pZhElekAwtL19o,1522 +iniconfig-1.0.0.dist-info/METADATA,sha256=bb2T8WUSDXXiUVxZ4WXhbffq6stikMTlB1jyrPbLfyU,2405 +iniconfig-1.0.0.dist-info/RECORD,, +iniconfig-1.0.0.dist-info/WHEEL,sha256=3XK1Z4AI42GuJXciCpiHMOkbehxRV8QDBW8IU41k3ZU,96 +iniconfig-1.0.0.dist-info/metadata.json,sha256=UYYwW0p815nU4qz8Iq1gGqIYaAcsCyGju3jXvTOyXSI,950 +iniconfig-1.0.0.dist-info/top_level.txt,sha256=7KfM0fugdlToj9UW7enKXk2HYALQD8qHiyKtjhSzgN8,10 +iniconfig-1.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +__pycache__/iniconfig.cpython-35.pyc,, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/WHEEL new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/WHEEL --- old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/WHEEL 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/WHEEL 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: bdist_wheel (0.30.0.a0) +Root-Is-Purelib: true +Tag: cp35-none-any + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/metadata.json new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/metadata.json --- old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/metadata.json 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/metadata.json 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1 @@ +{"classifiers": ["Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Operating System :: Microsoft :: Windows", "Operating System :: MacOS :: MacOS X", "Topic :: Software Development :: Libraries", "Topic :: Utilities", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3"], "extensions": {"python.details": {"contacts": [{"email": "[email protected], [email protected]", "name": "Ronny Pfannschmidt, Holger Krekel", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "http://github.com/RonnyPfannschmidt/iniconfig"}}}, "generator": "bdist_wheel (0.30.0.a0)", "license": "MIT License", "metadata_version": "2.0", "name": "iniconfig", "platform": "unix", "summary": "iniconfig: brain-dead simple config-ini parsing", "version": "1.0.0"} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/top_level.txt new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/top_level.txt --- old/py-1.5.2/py/_vendored_packages/iniconfig-1.0.0.dist-info/top_level.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/py/_vendored_packages/iniconfig-1.0.0.dist-info/top_level.txt 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1 @@ +iniconfig diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py.egg-info/PKG-INFO new/py-1.5.3/py.egg-info/PKG-INFO --- old/py-1.5.2/py.egg-info/PKG-INFO 2017-11-16 00:46:09.000000000 +0100 +++ new/py-1.5.3/py.egg-info/PKG-INFO 2018-03-22 11:06:12.000000000 +0100 @@ -1,12 +1,11 @@ Metadata-Version: 1.2 Name: py -Version: 1.5.2 +Version: 1.5.3 Summary: library with cross-python path, ini-parsing, io, code, log facilities Home-page: http://py.readthedocs.io/ Author: holger krekel, Ronny Pfannschmidt, Benjamin Peterson and others Author-email: [email protected] License: MIT license -Description-Content-Type: UNKNOWN Description: .. image:: https://img.shields.io/pypi/v/py.svg :target: https://pypi.org/project/py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/py.egg-info/SOURCES.txt new/py-1.5.3/py.egg-info/SOURCES.txt --- old/py-1.5.2/py.egg-info/SOURCES.txt 2017-11-16 00:46:09.000000000 +0100 +++ new/py-1.5.3/py.egg-info/SOURCES.txt 2018-03-22 11:06:12.000000000 +0100 @@ -1,3 +1,8 @@ +.gitattributes +.gitignore +.hgignore +.hgtags +.travis.yml AUTHORS CHANGELOG LICENSE @@ -7,6 +12,7 @@ setup.cfg setup.py tox.ini +bench/localpath.py doc/Makefile doc/changelog.txt doc/code.txt @@ -83,6 +89,22 @@ py/_vendored_packages/__init__.py py/_vendored_packages/apipkg.py py/_vendored_packages/iniconfig.py +py/_vendored_packages/apipkg-1.4.dist-info/DESCRIPTION.rst +py/_vendored_packages/apipkg-1.4.dist-info/INSTALLER +py/_vendored_packages/apipkg-1.4.dist-info/METADATA +py/_vendored_packages/apipkg-1.4.dist-info/RECORD +py/_vendored_packages/apipkg-1.4.dist-info/WHEEL +py/_vendored_packages/apipkg-1.4.dist-info/metadata.json +py/_vendored_packages/apipkg-1.4.dist-info/top_level.txt +py/_vendored_packages/iniconfig-1.0.0.dist-info/DESCRIPTION.rst +py/_vendored_packages/iniconfig-1.0.0.dist-info/INSTALLER +py/_vendored_packages/iniconfig-1.0.0.dist-info/METADATA +py/_vendored_packages/iniconfig-1.0.0.dist-info/RECORD +py/_vendored_packages/iniconfig-1.0.0.dist-info/WHEEL +py/_vendored_packages/iniconfig-1.0.0.dist-info/metadata.json +py/_vendored_packages/iniconfig-1.0.0.dist-info/top_level.txt +tasks/__init__.py +tasks/vendoring.py testing/conftest.py testing/code/test_assertion.py testing/code/test_code.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/tasks/__init__.py new/py-1.5.3/tasks/__init__.py --- old/py-1.5.2/tasks/__init__.py 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/tasks/__init__.py 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1,12 @@ +""" +Invoke tasks to help with pytest development and release process. +""" + +import invoke + +from . import vendoring + + +ns = invoke.Collection( + vendoring +) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/tasks/vendoring.py new/py-1.5.3/tasks/vendoring.py --- old/py-1.5.2/tasks/vendoring.py 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.5.3/tasks/vendoring.py 2017-07-03 10:42:09.000000000 +0200 @@ -0,0 +1,23 @@ +from __future__ import absolute_import, print_function +import py +import invoke + +VENDOR_TARGET = py.path.local("py/_vendored_packages") +GOOD_FILES = 'README.md', '__init__.py' + [email protected]() +def remove_libs(ctx): + print("removing vendored libs") + for path in VENDOR_TARGET.listdir(): + if path.basename not in GOOD_FILES: + print(" ", path) + path.remove() + [email protected](pre=[remove_libs]) +def update_libs(ctx): + print("installing libs") + ctx.run("pip install -t {target} apipkg iniconfig".format(target=VENDOR_TARGET)) + ctx.run("git add {target}".format(target=VENDOR_TARGET)) + print("Please commit to finish the update after running the tests:") + print() + print(' git commit -am "Updated vendored libs"') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/testing/root/test_error.py new/py-1.5.3/testing/root/test_error.py --- old/py-1.5.2/testing/root/test_error.py 2017-11-14 23:02:21.000000000 +0100 +++ new/py-1.5.3/testing/root/test_error.py 2018-03-14 16:07:45.000000000 +0100 @@ -2,6 +2,8 @@ import py import errno +import sys +import subprocess def test_error_classes(): @@ -33,7 +35,7 @@ assert cls is cls2 -def test_error_conversion_ENOTDIR(testdir): +def test_error_conversion_enotdir(testdir): p = testdir.makepyfile("") excinfo = py.test.raises(py.error.Error, py.error.checked_call, p.listdir) assert isinstance(excinfo.value, EnvironmentError) @@ -46,6 +48,12 @@ py.error.checked_call(tempfile.mkdtemp, dir=str(tmpdir)) +def test_error_importable(): + """Regression test for #179""" + subprocess.check_call( + [sys.executable, '-c', 'from py.error import ENOENT']) + + try: import unittest unittest.TestCase.assertWarns @@ -56,13 +64,13 @@ import warnings class Case(unittest.TestCase): - def test_assertWarns(self): + def test_assert_warns(self): # Clear everything "py.*" from sys.modules and re-import py # as a fresh start for mod in tuple(sys.modules.keys()): if mod and (mod == 'py' or mod.startswith('py.')): del sys.modules[mod] - import py + __import__('py') with self.assertWarns(UserWarning): warnings.warn('this should work') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.5.2/tox.ini new/py-1.5.3/tox.ini --- old/py-1.5.2/tox.ini 2017-11-14 23:02:21.000000000 +0100 +++ new/py-1.5.3/tox.ini 2018-03-14 16:07:45.000000000 +0100 @@ -4,13 +4,13 @@ [testenv] changedir=testing commands= - pip install -U .. # hande the install order fallout since pytest depends on pip - - py.test --confcutdir=.. -rfsxX --junitxml={envlogdir}/junit-{envname}.xml [] + pip install -U .. # hande the install order fallout since pytest depends on pip + py.test --confcutdir=.. -rfsxX --junitxml={envlogdir}/junit-{envname}.xml [] deps= - pytest29: pytest~=2.9.0 - pytest30: pytest~=3.0.0 - pytest31: pytest~=3.1.0 + attrs + pytest29: pytest~=2.9.0 + pytest30: pytest~=3.0.0 + pytest31: pytest~=3.1.0 [testenv:py27-xdist] basepython=python2.7
