Hello community, here is the log from the commit of package python3-setuptools for openSUSE:Factory checked in at 2016-03-26 15:08:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python3-setuptools (Old) and /work/SRC/openSUSE:Factory/.python3-setuptools.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python3-setuptools" Changes: -------- --- /work/SRC/openSUSE:Factory/python3-setuptools/python3-setuptools.changes 2016-03-02 14:19:29.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.python3-setuptools.new/python3-setuptools.changes 2016-03-26 15:08:43.000000000 +0100 @@ -1,0 +2,20 @@ +Fri Mar 18 16:04:50 UTC 2016 - arun@gmx.de + +- update to version 20.3.1: + * Issue #519: Remove import hook when reloading the "pkg_resources" + module. + * Pull Request #184: Update documentation in "pkg_resources" around + new "Requirement" implementation. + +------------------------------------------------------------------- +Thu Mar 17 16:40:21 UTC 2016 - arun@gmx.de + +- update to version 20.3: + * Pull Request #179: "pkg_resources.Requirement" objects are now a + subclass of "packaging.requirements.Requirement", allowing any + environment markers and url (if any) to be affiliated with the + requirement + * Pull Request #179: Restore use of RequirementParseError exception + unintentionally dropped in 20.2. + +------------------------------------------------------------------- Old: ---- setuptools-20.2.2.tar.gz New: ---- setuptools-20.3.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python3-setuptools.spec ++++++ --- /var/tmp/diff_new_pack.8Ug6gP/_old 2016-03-26 15:08:44.000000000 +0100 +++ /var/tmp/diff_new_pack.8Ug6gP/_new 2016-03-26 15:08:44.000000000 +0100 @@ -17,7 +17,7 @@ Name: python3-setuptools -Version: 20.2.2 +Version: 20.3.1 Release: 0 Url: http://pypi.python.org/pypi/setuptools Summary: Easily download, build, install, upgrade, and uninstall Python packages ++++++ setuptools-20.2.2.tar.gz -> setuptools-20.3.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-20.2.2/CHANGES.txt new/setuptools-20.3.1/CHANGES.txt --- old/setuptools-20.2.2/CHANGES.txt 2016-02-27 15:24:10.000000000 +0100 +++ new/setuptools-20.3.1/CHANGES.txt 2016-03-18 15:48:53.000000000 +0100 @@ -2,6 +2,24 @@ CHANGES ======= +20.3.1 +------ + +* Issue #519: Remove import hook when reloading the + ``pkg_resources`` module. +* Pull Request #184: Update documentation in ``pkg_resources`` + around new ``Requirement`` implementation. + +20.3 +---- + +* Pull Request #179: ``pkg_resources.Requirement`` objects are + now a subclass of ``packaging.requirements.Requirement``, + allowing any environment markers and url (if any) to be + affiliated with the requirement +* Pull Request #179: Restore use of RequirementParseError + exception unintentionally dropped in 20.2. + 20.2.2 ------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-20.2.2/PKG-INFO new/setuptools-20.3.1/PKG-INFO --- old/setuptools-20.2.2/PKG-INFO 2016-02-27 15:48:30.000000000 +0100 +++ new/setuptools-20.3.1/PKG-INFO 2016-03-18 16:14:06.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: setuptools -Version: 20.2.2 +Version: 20.3.1 Summary: Easily download, build, install, upgrade, and uninstall Python packages Home-page: https://bitbucket.org/pypa/setuptools Author: Python Packaging Authority diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-20.2.2/docs/pkg_resources.txt new/setuptools-20.3.1/docs/pkg_resources.txt --- old/setuptools-20.2.2/docs/pkg_resources.txt 2016-02-07 15:25:06.000000000 +0100 +++ new/setuptools-20.3.1/docs/pkg_resources.txt 2016-03-18 15:48:22.000000000 +0100 @@ -590,20 +590,7 @@ parse multiple specifiers from a string or iterable of strings, use ``parse_requirements()`` instead.) - The syntax of a requirement specifier can be defined in EBNF as follows:: - - requirement ::= project_name extras? versionspec? - versionspec ::= comparison version (',' comparison version)* - comparison ::= '<' | '<=' | '!=' | '==' | '>=' | '>' | '~=' | '===' - extras ::= '[' extralist? ']' - extralist ::= identifier (',' identifier)* - project_name ::= identifier - identifier ::= [-A-Za-z0-9_]+ - version ::= [-A-Za-z0-9_.]+ - - Tokens can be separated by whitespace, and a requirement can be continued - over multiple lines using a backslash (``\\``). Line-end comments (using - ``#``) are also allowed. + The syntax of a requirement specifier is defined in full in PEP 508. Some examples of valid requirement specifiers:: @@ -611,6 +598,7 @@ Fizzy [foo, bar] PickyThing<1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1 SomethingWhoseVersionIDontCareAbout + SomethingWithMarker[foo]>1.0;python_version<"2.7" The project name is the only required portion of a requirement string, and if it's the only thing supplied, the requirement will accept any version @@ -631,6 +619,11 @@ ``pkg_resources.require('Report-O-Rama[PDF]')`` to add the necessary distributions to sys.path at runtime. + The "markers" in a requirement are used to specify when a requirement + should be installed -- the requirement will be installed if the marker + evaluates as true in the current environment. For example, specifying + ``argparse;python_version<"2.7"`` will not install in an Python 2.7 or 3.3 + environment, but will in a Python 2.6 environment. ``Requirement`` Methods and Attributes -------------------------------------- @@ -680,6 +673,12 @@ order. The `op` in each tuple is a comparison operator, represented as a string. The `version` is the (unparsed) version number. +``marker`` + An instance of ``packaging.markers.Marker`` that allows evaluation + against the current environment. May be None if no marker specified. + +``url`` + The location to download the requirement from if specified. Entry Points ============ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-20.2.2/ez_setup.py new/setuptools-20.3.1/ez_setup.py --- old/setuptools-20.2.2/ez_setup.py 2016-02-07 15:25:06.000000000 +0100 +++ new/setuptools-20.3.1/ez_setup.py 2016-03-18 15:41:57.000000000 +0100 @@ -192,6 +192,8 @@ def _unload_pkg_resources(): + sys.meta_path = [importer for importer in sys.meta_path if + importer.__class__.__module__ != 'pkg_resources.extern'] del_modules = [ name for name in sys.modules if name.startswith('pkg_resources') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-20.2.2/pkg_resources/__init__.py new/setuptools-20.3.1/pkg_resources/__init__.py --- old/setuptools-20.2.2/pkg_resources/__init__.py 2016-02-25 03:42:28.000000000 +0100 +++ new/setuptools-20.3.1/pkg_resources/__init__.py 2016-03-15 22:07:38.000000000 +0100 @@ -2693,15 +2693,11 @@ reqs = [] # Including any condition expressions for req in self._parsed_pkg_info.get_all('Requires-Dist') or []: - current_req = packaging.requirements.Requirement(req) - specs = _parse_requirement_specs(current_req) - parsed = Requirement(current_req.name, specs, current_req.extras) - parsed._marker = current_req.marker - reqs.append(parsed) + reqs.extend(parse_requirements(req)) def reqs_for_extra(extra): for req in reqs: - if not req._marker or req._marker.evaluate({'extra': extra}): + if not req.marker or req.marker.evaluate({'extra': extra}): yield req common = frozenset(reqs_for_extra(None)) @@ -2739,10 +2735,6 @@ return ' '.join(self.args) -def _parse_requirement_specs(req): - return [(spec.operator, spec.version) for spec in req.specifier] - - def parse_requirements(strs): """Yield ``Requirement`` objects for each specification in `strs` @@ -2759,34 +2751,30 @@ if line.endswith('\\'): line = line[:-2].strip() line += next(lines) - req = packaging.requirements.Requirement(line) - specs = _parse_requirement_specs(req) - yield Requirement(req.name, specs, req.extras) + yield Requirement(line) -class Requirement: - def __init__(self, project_name, specs, extras): +class Requirement(packaging.requirements.Requirement): + def __init__(self, requirement_string): """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!""" - self.unsafe_name, project_name = project_name, safe_name(project_name) + try: + super(Requirement, self).__init__(requirement_string) + except packaging.requirements.InvalidRequirement as e: + raise RequirementParseError(str(e)) + self.unsafe_name = self.name + project_name = safe_name(self.name) self.project_name, self.key = project_name, project_name.lower() - self.specifier = packaging.specifiers.SpecifierSet( - ",".join(["".join([x, y]) for x, y in specs]) - ) - self.specs = specs - self.extras = tuple(map(safe_extra, extras)) + self.specs = [ + (spec.operator, spec.version) for spec in self.specifier] + self.extras = tuple(map(safe_extra, self.extras)) self.hashCmp = ( self.key, self.specifier, frozenset(self.extras), + str(self.marker) if self.marker else None, ) self.__hash = hash(self.hashCmp) - def __str__(self): - extras = ','.join(self.extras) - if extras: - extras = '[%s]' % extras - return '%s%s%s' % (self.project_name, extras, self.specifier) - def __eq__(self, other): return ( isinstance(other, Requirement) and diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-20.2.2/pkg_resources/tests/test_resources.py new/setuptools-20.3.1/pkg_resources/tests/test_resources.py --- old/setuptools-20.2.2/pkg_resources/tests/test_resources.py 2016-02-25 14:48:19.000000000 +0100 +++ new/setuptools-20.3.1/pkg_resources/tests/test_resources.py 2016-03-15 22:07:38.000000000 +0100 @@ -353,22 +353,22 @@ r = Requirement.parse("Twisted>=1.2") assert str(r) == "Twisted>=1.2" assert repr(r) == "Requirement.parse('Twisted>=1.2')" - assert r == Requirement("Twisted", [('>=','1.2')], ()) - assert r == Requirement("twisTed", [('>=','1.2')], ()) - assert r != Requirement("Twisted", [('>=','2.0')], ()) - assert r != Requirement("Zope", [('>=','1.2')], ()) - assert r != Requirement("Zope", [('>=','3.0')], ()) - assert r != Requirement.parse("Twisted[extras]>=1.2") + assert r == Requirement("Twisted>=1.2") + assert r == Requirement("twisTed>=1.2") + assert r != Requirement("Twisted>=2.0") + assert r != Requirement("Zope>=1.2") + assert r != Requirement("Zope>=3.0") + assert r != Requirement("Twisted[extras]>=1.2") def testOrdering(self): - r1 = Requirement("Twisted", [('==','1.2c1'),('>=','1.2')], ()) - r2 = Requirement("Twisted", [('>=','1.2'),('==','1.2c1')], ()) + r1 = Requirement("Twisted==1.2c1,>=1.2") + r2 = Requirement("Twisted>=1.2,==1.2c1") assert r1 == r2 assert str(r1) == str(r2) assert str(r2) == "Twisted==1.2c1,>=1.2" def testBasicContains(self): - r = Requirement("Twisted", [('>=','1.2')], ()) + r = Requirement("Twisted>=1.2") foo_dist = Distribution.from_filename("FooPkg-1.3_1.egg") twist11 = Distribution.from_filename("Twisted-1.1.egg") twist12 = Distribution.from_filename("Twisted-1.2.egg") @@ -394,6 +394,7 @@ "twisted", packaging.specifiers.SpecifierSet(">=1.2"), frozenset(["foo","bar"]), + None )) ) @@ -485,17 +486,17 @@ assert ( list(parse_requirements('Twis-Ted>=1.2-1')) == - [Requirement('Twis-Ted',[('>=','1.2-1')], ())] + [Requirement('Twis-Ted>=1.2-1')] ) assert ( list(parse_requirements('Twisted >=1.2, \ # more\n<2.0')) == - [Requirement('Twisted',[('>=','1.2'),('<','2.0')], ())] + [Requirement('Twisted>=1.2,<2.0')] ) assert ( Requirement.parse("FooBar==1.99a3") == - Requirement("FooBar", [('==','1.99a3')], ()) + Requirement("FooBar==1.99a3") ) with pytest.raises(ValueError): Requirement.parse(">=2.3") @@ -508,6 +509,28 @@ with pytest.raises(ValueError): Requirement.parse("#") + def test_requirements_with_markers(self): + assert ( + Requirement.parse("foobar;os_name=='a'") + == + Requirement.parse("foobar;os_name=='a'") + ) + assert ( + Requirement.parse("name==1.1;python_version=='2.7'") + != + Requirement.parse("name==1.1;python_version=='3.3'") + ) + assert ( + Requirement.parse("name==1.0;python_version=='2.7'") + != + Requirement.parse("name==1.2;python_version=='2.7'") + ) + assert ( + Requirement.parse("name[foo]==1.0;python_version=='3.3'") + != + Requirement.parse("name[foo,bar]==1.0;python_version=='3.3'") + ) + def test_local_version(self): req, = parse_requirements('foo==1.0.org1') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-20.2.2/setup.cfg new/setuptools-20.3.1/setup.cfg --- old/setuptools-20.2.2/setup.cfg 2016-02-27 15:48:30.000000000 +0100 +++ new/setuptools-20.3.1/setup.cfg 2016-03-18 16:14:06.000000000 +0100 @@ -1,7 +1,7 @@ [egg_info] tag_build = -tag_svn_revision = 0 tag_date = 0 +tag_svn_revision = 0 [aliases] release = egg_info -RDb '' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-20.2.2/setuptools/command/easy_install.py new/setuptools-20.3.1/setuptools/command/easy_install.py --- old/setuptools-20.2.2/setuptools/command/easy_install.py 2016-02-25 03:42:28.000000000 +0100 +++ new/setuptools-20.3.1/setuptools/command/easy_install.py 2016-03-15 22:07:38.000000000 +0100 @@ -710,10 +710,7 @@ elif requirement is None or dist not in requirement: # if we wound up with a different version, resolve what we've got distreq = dist.as_requirement() - requirement = requirement or distreq - requirement = Requirement( - distreq.project_name, distreq.specs, requirement.extras - ) + requirement = Requirement(str(distreq)) log.info("Processing dependencies for %s", requirement) try: distros = WorkingSet([]).resolve( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-20.2.2/setuptools/tests/test_dist_info.py new/setuptools-20.3.1/setuptools/tests/test_dist_info.py --- old/setuptools-20.2.2/setuptools/tests/test_dist_info.py 2016-02-25 03:42:28.000000000 +0100 +++ new/setuptools-20.3.1/setuptools/tests/test_dist_info.py 2016-03-15 22:07:38.000000000 +0100 @@ -34,7 +34,9 @@ for d in pkg_resources.find_distributions(self.tmpdir): assert d.requires() == requires[:1] - assert d.requires(extras=('baz',)) == requires + assert d.requires(extras=('baz',)) == [ + requires[0], + pkg_resources.Requirement.parse('quux>=1.1;extra=="baz"')] assert d.extras == ['baz'] metadata_template = DALS(""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-20.2.2/setuptools/version.py new/setuptools-20.3.1/setuptools/version.py --- old/setuptools-20.2.2/setuptools/version.py 2016-02-25 04:04:28.000000000 +0100 +++ new/setuptools-20.3.1/setuptools/version.py 2016-03-18 16:13:59.000000000 +0100 @@ -1 +1 @@ -__version__ = '20.2.2' +__version__ = '20.3.1' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/setuptools-20.2.2/setuptools.egg-info/PKG-INFO new/setuptools-20.3.1/setuptools.egg-info/PKG-INFO --- old/setuptools-20.2.2/setuptools.egg-info/PKG-INFO 2016-02-27 15:48:29.000000000 +0100 +++ new/setuptools-20.3.1/setuptools.egg-info/PKG-INFO 2016-03-18 16:14:03.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: setuptools -Version: 20.2.2 +Version: 20.3.1 Summary: Easily download, build, install, upgrade, and uninstall Python packages Home-page: https://bitbucket.org/pypa/setuptools Author: Python Packaging Authority