Commit d8fda18a authored by Jason R. Coombs's avatar Jason R. Coombs

Bump packaging version to 15.1

parent df9500ac
...@@ -2,6 +2,12 @@ ...@@ -2,6 +2,12 @@
CHANGES CHANGES
======= =======
----
15.1
----
* Updated Packaging to 15.1 to address Packaging #28.
---- ----
15.0 15.0
---- ----
......
...@@ -242,6 +242,10 @@ link_files = { ...@@ -242,6 +242,10 @@ link_files = {
pattern=r"Pip #(?P<pip>\d+)", pattern=r"Pip #(?P<pip>\d+)",
url='{GH}/pypa/pip/issues/{pip}', url='{GH}/pypa/pip/issues/{pip}',
), ),
dict(
pattern=r"Packaging #(?P<packaging>\d+)",
url='{GH}/pypa/packaging/issues/{packaging}',
),
], ],
), ),
} }
...@@ -22,7 +22,7 @@ __title__ = "packaging" ...@@ -22,7 +22,7 @@ __title__ = "packaging"
__summary__ = "Core utilities for Python packages" __summary__ = "Core utilities for Python packages"
__uri__ = "https://github.com/pypa/packaging" __uri__ = "https://github.com/pypa/packaging"
__version__ = "15.0" __version__ = "15.1"
__author__ = "Donald Stufft" __author__ = "Donald Stufft"
__email__ = "donald@stufft.io" __email__ = "donald@stufft.io"
......
...@@ -502,7 +502,7 @@ class Specifier(_IndividualSpecifier): ...@@ -502,7 +502,7 @@ class Specifier(_IndividualSpecifier):
return False return False
# Ensure that we do not allow a local version of the version mentioned # Ensure that we do not allow a local version of the version mentioned
# in the specifier, which is technically greater than, to match. # in the specifier, which is techincally greater than, to match.
if prospective.local is not None: if prospective.local is not None:
if Version(prospective.base_version) == Version(spec.base_version): if Version(prospective.base_version) == Version(spec.base_version):
return False return False
...@@ -673,10 +673,14 @@ class SpecifierSet(BaseSpecifier): ...@@ -673,10 +673,14 @@ class SpecifierSet(BaseSpecifier):
if self._prereleases is not None: if self._prereleases is not None:
return self._prereleases return self._prereleases
# If we don't have any specifiers, and we don't have a forced value,
# then we'll just return None since we don't know if this should have
# pre-releases or not.
if not self._specs:
return None
# Otherwise we'll see if any of the given specifiers accept # Otherwise we'll see if any of the given specifiers accept
# prereleases, if any of them do we'll return True, otherwise False. # prereleases, if any of them do we'll return True, otherwise False.
# Note: The use of any() here means that an empty set of specifiers
# will always return False, this is an explicit design decision.
return any(s.prereleases for s in self._specs) return any(s.prereleases for s in self._specs)
@prereleases.setter @prereleases.setter
...@@ -688,27 +692,21 @@ class SpecifierSet(BaseSpecifier): ...@@ -688,27 +692,21 @@ class SpecifierSet(BaseSpecifier):
if not isinstance(item, (LegacyVersion, Version)): if not isinstance(item, (LegacyVersion, Version)):
item = parse(item) item = parse(item)
# Determine if we're forcing a prerelease or not, if we're not forcing
# one for this particular filter call, then we'll use whatever the
# SpecifierSet thinks for whether or not we should support prereleases.
if prereleases is None:
prereleases = self.prereleases
# We can determine if we're going to allow pre-releases by looking to # We can determine if we're going to allow pre-releases by looking to
# see if any of the underlying items supports them. If none of them do # see if any of the underlying items supports them. If none of them do
# and this item is a pre-release then we do not allow it and we can # and this item is a pre-release then we do not allow it and we can
# short circuit that here. # short circuit that here.
# Note: This means that 1.0.dev1 would not be contained in something # Note: This means that 1.0.dev1 would not be contained in something
# like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0 # like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0
if (not (self.prereleases or prereleases)) and item.is_prerelease: if not prereleases and item.is_prerelease:
return False return False
# Determine if we're forcing a prerelease or not, we bypass
# self.prereleases here and use self._prereleases because we want to
# only take into consideration actual *forced* values. The underlying
# specifiers will handle the other logic.
# The logic here is: If prereleases is anything but None, we'll just
# go aheand and continue to use that. However if
# prereleases is None, then we'll use whatever the
# value of self._prereleases is as long as it is not
# None itself.
if prereleases is None and self._prereleases is not None:
prereleases = self._prereleases
# We simply dispatch to the underlying specs here to make sure that the # We simply dispatch to the underlying specs here to make sure that the
# given version is contained within all of them. # given version is contained within all of them.
# Note: This use of all() here means that an empty set of specifiers # Note: This use of all() here means that an empty set of specifiers
...@@ -719,24 +717,18 @@ class SpecifierSet(BaseSpecifier): ...@@ -719,24 +717,18 @@ class SpecifierSet(BaseSpecifier):
) )
def filter(self, iterable, prereleases=None): def filter(self, iterable, prereleases=None):
# Determine if we're forcing a prerelease or not, we bypass # Determine if we're forcing a prerelease or not, if we're not forcing
# self.prereleases here and use self._prereleases because we want to # one for this particular filter call, then we'll use whatever the
# only take into consideration actual *forced* values. The underlying # SpecifierSet thinks for whether or not we should support prereleases.
# specifiers will handle the other logic. if prereleases is None:
# The logic here is: If prereleases is anything but None, we'll just prereleases = self.prereleases
# go aheand and continue to use that. However if
# prereleases is None, then we'll use whatever the
# value of self._prereleases is as long as it is not
# None itself.
if prereleases is None and self._prereleases is not None:
prereleases = self._prereleases
# If we have any specifiers, then we want to wrap our iterable in the # If we have any specifiers, then we want to wrap our iterable in the
# filter method for each one, this will act as a logical AND amongst # filter method for each one, this will act as a logical AND amongst
# each specifier. # each specifier.
if self._specs: if self._specs:
for spec in self._specs: for spec in self._specs:
iterable = spec.filter(iterable, prereleases=prereleases) iterable = spec.filter(iterable, prereleases=bool(prereleases))
return iterable return iterable
# If we do not have any specifiers, then we need to have a rough filter # If we do not have any specifiers, then we need to have a rough filter
# which will filter out any pre-releases, unless there are no final # which will filter out any pre-releases, unless there are no final
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment