Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
setuptools
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jérome Perrin
setuptools
Commits
c30aca86
Commit
c30aca86
authored
Jun 04, 2020
by
Omer Ozarslan
Committed by
Jason R. Coombs
Jul 03, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update vendor packaging in pkg_resources to v19.2
parent
74de4e98
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
660 additions
and
186 deletions
+660
-186
pkg_resources/_vendor/packaging/__about__.py
pkg_resources/_vendor/packaging/__about__.py
+10
-4
pkg_resources/_vendor/packaging/__init__.py
pkg_resources/_vendor/packaging/__init__.py
+16
-4
pkg_resources/_vendor/packaging/_compat.py
pkg_resources/_vendor/packaging/_compat.py
+4
-3
pkg_resources/_vendor/packaging/_structures.py
pkg_resources/_vendor/packaging/_structures.py
+2
-2
pkg_resources/_vendor/packaging/markers.py
pkg_resources/_vendor/packaging/markers.py
+43
-48
pkg_resources/_vendor/packaging/requirements.py
pkg_resources/_vendor/packaging/requirements.py
+26
-15
pkg_resources/_vendor/packaging/specifiers.py
pkg_resources/_vendor/packaging/specifiers.py
+23
-48
pkg_resources/_vendor/packaging/tags.py
pkg_resources/_vendor/packaging/tags.py
+404
-0
pkg_resources/_vendor/packaging/utils.py
pkg_resources/_vendor/packaging/utils.py
+43
-0
pkg_resources/_vendor/packaging/version.py
pkg_resources/_vendor/packaging/version.py
+88
-61
pkg_resources/_vendor/vendored.txt
pkg_resources/_vendor/vendored.txt
+1
-1
No files found.
pkg_resources/_vendor/packaging/__about__.py
View file @
c30aca86
...
@@ -4,18 +4,24 @@
...
@@ -4,18 +4,24 @@
from
__future__
import
absolute_import
,
division
,
print_function
from
__future__
import
absolute_import
,
division
,
print_function
__all__
=
[
__all__
=
[
"__title__"
,
"__summary__"
,
"__uri__"
,
"__version__"
,
"__author__"
,
"__title__"
,
"__email__"
,
"__license__"
,
"__copyright__"
,
"__summary__"
,
"__uri__"
,
"__version__"
,
"__author__"
,
"__email__"
,
"__license__"
,
"__copyright__"
,
]
]
__title__
=
"packaging"
__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__
=
"1
6.8
"
__version__
=
"1
9.2
"
__author__
=
"Donald Stufft and individual contributors"
__author__
=
"Donald Stufft and individual contributors"
__email__
=
"donald@stufft.io"
__email__
=
"donald@stufft.io"
__license__
=
"BSD or Apache License, Version 2.0"
__license__
=
"BSD or Apache License, Version 2.0"
__copyright__
=
"Copyright 2014-201
6
%s"
%
__author__
__copyright__
=
"Copyright 2014-201
9
%s"
%
__author__
pkg_resources/_vendor/packaging/__init__.py
View file @
c30aca86
...
@@ -4,11 +4,23 @@
...
@@ -4,11 +4,23 @@
from
__future__
import
absolute_import
,
division
,
print_function
from
__future__
import
absolute_import
,
division
,
print_function
from
.__about__
import
(
from
.__about__
import
(
__author__
,
__copyright__
,
__email__
,
__license__
,
__summary__
,
__title__
,
__author__
,
__uri__
,
__version__
__copyright__
,
__email__
,
__license__
,
__summary__
,
__title__
,
__uri__
,
__version__
,
)
)
__all__
=
[
__all__
=
[
"__title__"
,
"__summary__"
,
"__uri__"
,
"__version__"
,
"__author__"
,
"__title__"
,
"__email__"
,
"__license__"
,
"__copyright__"
,
"__summary__"
,
"__uri__"
,
"__version__"
,
"__author__"
,
"__email__"
,
"__license__"
,
"__copyright__"
,
]
]
pkg_resources/_vendor/packaging/_compat.py
View file @
c30aca86
...
@@ -12,9 +12,9 @@ PY3 = sys.version_info[0] == 3
...
@@ -12,9 +12,9 @@ PY3 = sys.version_info[0] == 3
# flake8: noqa
# flake8: noqa
if
PY3
:
if
PY3
:
string_types
=
str
,
string_types
=
(
str
,)
else
:
else
:
string_types
=
basestring
,
string_types
=
(
basestring
,)
def
with_metaclass
(
meta
,
*
bases
):
def
with_metaclass
(
meta
,
*
bases
):
...
@@ -27,4 +27,5 @@ def with_metaclass(meta, *bases):
...
@@ -27,4 +27,5 @@ def with_metaclass(meta, *bases):
class
metaclass
(
meta
):
class
metaclass
(
meta
):
def
__new__
(
cls
,
name
,
this_bases
,
d
):
def
__new__
(
cls
,
name
,
this_bases
,
d
):
return
meta
(
name
,
bases
,
d
)
return
meta
(
name
,
bases
,
d
)
return
type
.
__new__
(
metaclass
,
'temporary_class'
,
(),
{})
return
type
.
__new__
(
metaclass
,
"temporary_class"
,
(),
{})
pkg_resources/_vendor/packaging/_structures.py
View file @
c30aca86
...
@@ -5,7 +5,6 @@ from __future__ import absolute_import, division, print_function
...
@@ -5,7 +5,6 @@ from __future__ import absolute_import, division, print_function
class
Infinity
(
object
):
class
Infinity
(
object
):
def
__repr__
(
self
):
def
__repr__
(
self
):
return
"Infinity"
return
"Infinity"
...
@@ -33,11 +32,11 @@ class Infinity(object):
...
@@ -33,11 +32,11 @@ class Infinity(object):
def
__neg__
(
self
):
def
__neg__
(
self
):
return
NegativeInfinity
return
NegativeInfinity
Infinity
=
Infinity
()
Infinity
=
Infinity
()
class
NegativeInfinity
(
object
):
class
NegativeInfinity
(
object
):
def
__repr__
(
self
):
def
__repr__
(
self
):
return
"-Infinity"
return
"-Infinity"
...
@@ -65,4 +64,5 @@ class NegativeInfinity(object):
...
@@ -65,4 +64,5 @@ class NegativeInfinity(object):
def
__neg__
(
self
):
def
__neg__
(
self
):
return
Infinity
return
Infinity
NegativeInfinity
=
NegativeInfinity
()
NegativeInfinity
=
NegativeInfinity
()
pkg_resources/_vendor/packaging/markers.py
View file @
c30aca86
...
@@ -17,8 +17,11 @@ from .specifiers import Specifier, InvalidSpecifier
...
@@ -17,8 +17,11 @@ from .specifiers import Specifier, InvalidSpecifier
__all__
=
[
__all__
=
[
"InvalidMarker"
,
"UndefinedComparison"
,
"UndefinedEnvironmentName"
,
"InvalidMarker"
,
"Marker"
,
"default_environment"
,
"UndefinedComparison"
,
"UndefinedEnvironmentName"
,
"Marker"
,
"default_environment"
,
]
]
...
@@ -42,7 +45,6 @@ class UndefinedEnvironmentName(ValueError):
...
@@ -42,7 +45,6 @@ class UndefinedEnvironmentName(ValueError):
class
Node
(
object
):
class
Node
(
object
):
def
__init__
(
self
,
value
):
def
__init__
(
self
,
value
):
self
.
value
=
value
self
.
value
=
value
...
@@ -57,62 +59,52 @@ class Node(object):
...
@@ -57,62 +59,52 @@ class Node(object):
class
Variable
(
Node
):
class
Variable
(
Node
):
def
serialize
(
self
):
def
serialize
(
self
):
return
str
(
self
)
return
str
(
self
)
class
Value
(
Node
):
class
Value
(
Node
):
def
serialize
(
self
):
def
serialize
(
self
):
return
'"{0}"'
.
format
(
self
)
return
'"{0}"'
.
format
(
self
)
class
Op
(
Node
):
class
Op
(
Node
):
def
serialize
(
self
):
def
serialize
(
self
):
return
str
(
self
)
return
str
(
self
)
VARIABLE
=
(
VARIABLE
=
(
L
(
"implementation_version"
)
|
L
(
"implementation_version"
)
L
(
"platform_python_implementation"
)
|
|
L
(
"platform_python_implementation"
)
L
(
"implementation_name"
)
|
|
L
(
"implementation_name"
)
L
(
"python_full_version"
)
|
|
L
(
"python_full_version"
)
L
(
"platform_release"
)
|
|
L
(
"platform_release"
)
L
(
"platform_version"
)
|
|
L
(
"platform_version"
)
L
(
"platform_machine"
)
|
|
L
(
"platform_machine"
)
L
(
"platform_system"
)
|
|
L
(
"platform_system"
)
L
(
"python_version"
)
|
|
L
(
"python_version"
)
L
(
"sys_platform"
)
|
|
L
(
"sys_platform"
)
L
(
"os_name"
)
|
|
L
(
"os_name"
)
L
(
"os.name"
)
|
# PEP-345
|
L
(
"os.name"
)
L
(
"sys.platform"
)
|
# PEP-345
|
L
(
"sys.platform"
)
# PEP-345
L
(
"platform.version"
)
|
# PEP-345
|
L
(
"platform.version"
)
# PEP-345
L
(
"platform.machine"
)
|
# PEP-345
|
L
(
"platform.machine"
)
# PEP-345
L
(
"platform.python_implementation"
)
|
# PEP-345
|
L
(
"platform.python_implementation"
)
# PEP-345
L
(
"python_implementation"
)
|
# undocumented setuptools legacy
|
L
(
"python_implementation"
)
# PEP-345
L
(
"extra"
)
|
L
(
"extra"
)
# undocumented setuptools legacy
)
)
ALIASES
=
{
ALIASES
=
{
'os.name'
:
'os_name'
,
"os.name"
:
"os_name"
,
'sys.platform'
:
'sys_platform'
,
"sys.platform"
:
"sys_platform"
,
'platform.version'
:
'platform_version'
,
"platform.version"
:
"platform_version"
,
'platform.machine'
:
'platform_machine'
,
"platform.machine"
:
"platform_machine"
,
'platform.python_implementation'
:
'platform_python_implementation'
,
"platform.python_implementation"
:
"platform_python_implementation"
,
'python_implementation'
:
'platform_python_implementation'
"python_implementation"
:
"platform_python_implementation"
,
}
}
VARIABLE
.
setParseAction
(
lambda
s
,
l
,
t
:
Variable
(
ALIASES
.
get
(
t
[
0
],
t
[
0
])))
VARIABLE
.
setParseAction
(
lambda
s
,
l
,
t
:
Variable
(
ALIASES
.
get
(
t
[
0
],
t
[
0
])))
VERSION_CMP
=
(
VERSION_CMP
=
(
L
(
"==="
)
|
L
(
"==="
)
|
L
(
"=="
)
|
L
(
">="
)
|
L
(
"<="
)
|
L
(
"!="
)
|
L
(
"~="
)
|
L
(
">"
)
|
L
(
"<"
)
L
(
"=="
)
|
L
(
">="
)
|
L
(
"<="
)
|
L
(
"!="
)
|
L
(
"~="
)
|
L
(
">"
)
|
L
(
"<"
)
)
)
MARKER_OP
=
VERSION_CMP
|
L
(
"not in"
)
|
L
(
"in"
)
MARKER_OP
=
VERSION_CMP
|
L
(
"not in"
)
|
L
(
"in"
)
...
@@ -152,8 +144,11 @@ def _format_marker(marker, first=True):
...
@@ -152,8 +144,11 @@ def _format_marker(marker, first=True):
# where the single item is itself it's own list. In that case we want skip
# where the single item is itself it's own list. In that case we want skip
# the rest of this function so that we don't get extraneous () on the
# the rest of this function so that we don't get extraneous () on the
# outside.
# outside.
if
(
isinstance
(
marker
,
list
)
and
len
(
marker
)
==
1
and
if
(
isinstance
(
marker
[
0
],
(
list
,
tuple
))):
isinstance
(
marker
,
list
)
and
len
(
marker
)
==
1
and
isinstance
(
marker
[
0
],
(
list
,
tuple
))
):
return
_format_marker
(
marker
[
0
])
return
_format_marker
(
marker
[
0
])
if
isinstance
(
marker
,
list
):
if
isinstance
(
marker
,
list
):
...
@@ -239,20 +234,20 @@ def _evaluate_markers(markers, environment):
...
@@ -239,20 +234,20 @@ def _evaluate_markers(markers, environment):
def
format_full_version
(
info
):
def
format_full_version
(
info
):
version
=
'{0.major}.{0.minor}.{0.micro}'
.
format
(
info
)
version
=
"{0.major}.{0.minor}.{0.micro}"
.
format
(
info
)
kind
=
info
.
releaselevel
kind
=
info
.
releaselevel
if
kind
!=
'final'
:
if
kind
!=
"final"
:
version
+=
kind
[
0
]
+
str
(
info
.
serial
)
version
+=
kind
[
0
]
+
str
(
info
.
serial
)
return
version
return
version
def
default_environment
():
def
default_environment
():
if
hasattr
(
sys
,
'implementation'
):
if
hasattr
(
sys
,
"implementation"
):
iver
=
format_full_version
(
sys
.
implementation
.
version
)
iver
=
format_full_version
(
sys
.
implementation
.
version
)
implementation_name
=
sys
.
implementation
.
name
implementation_name
=
sys
.
implementation
.
name
else
:
else
:
iver
=
'0'
iver
=
"0"
implementation_name
=
''
implementation_name
=
""
return
{
return
{
"implementation_name"
:
implementation_name
,
"implementation_name"
:
implementation_name
,
...
@@ -264,19 +259,19 @@ def default_environment():
...
@@ -264,19 +259,19 @@ def default_environment():
"platform_version"
:
platform
.
version
(),
"platform_version"
:
platform
.
version
(),
"python_full_version"
:
platform
.
python_version
(),
"python_full_version"
:
platform
.
python_version
(),
"platform_python_implementation"
:
platform
.
python_implementation
(),
"platform_python_implementation"
:
platform
.
python_implementation
(),
"python_version"
:
platform
.
python_version
()[:
3
]
,
"python_version"
:
"."
.
join
(
platform
.
python_version_tuple
()[:
2
])
,
"sys_platform"
:
sys
.
platform
,
"sys_platform"
:
sys
.
platform
,
}
}
class
Marker
(
object
):
class
Marker
(
object
):
def
__init__
(
self
,
marker
):
def
__init__
(
self
,
marker
):
try
:
try
:
self
.
_markers
=
_coerce_parse_result
(
MARKER
.
parseString
(
marker
))
self
.
_markers
=
_coerce_parse_result
(
MARKER
.
parseString
(
marker
))
except
ParseException
as
e
:
except
ParseException
as
e
:
err_str
=
"Invalid marker: {0!r}, parse error at {1!r}"
.
format
(
err_str
=
"Invalid marker: {0!r}, parse error at {1!r}"
.
format
(
marker
,
marker
[
e
.
loc
:
e
.
loc
+
8
])
marker
,
marker
[
e
.
loc
:
e
.
loc
+
8
]
)
raise
InvalidMarker
(
err_str
)
raise
InvalidMarker
(
err_str
)
def
__str__
(
self
):
def
__str__
(
self
):
...
...
pkg_resources/_vendor/packaging/requirements.py
View file @
c30aca86
...
@@ -38,8 +38,8 @@ IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END))
...
@@ -38,8 +38,8 @@ IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END))
NAME
=
IDENTIFIER
(
"name"
)
NAME
=
IDENTIFIER
(
"name"
)
EXTRA
=
IDENTIFIER
EXTRA
=
IDENTIFIER
URI
=
Regex
(
r
'[^ ]+'
)(
"url"
)
URI
=
Regex
(
r
"[^ ]+"
)(
"url"
)
URL
=
(
AT
+
URI
)
URL
=
AT
+
URI
EXTRAS_LIST
=
EXTRA
+
ZeroOrMore
(
COMMA
+
EXTRA
)
EXTRAS_LIST
=
EXTRA
+
ZeroOrMore
(
COMMA
+
EXTRA
)
EXTRAS
=
(
LBRACKET
+
Optional
(
EXTRAS_LIST
)
+
RBRACKET
)(
"extras"
)
EXTRAS
=
(
LBRACKET
+
Optional
(
EXTRAS_LIST
)
+
RBRACKET
)(
"extras"
)
...
@@ -48,28 +48,31 @@ VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE)
...
@@ -48,28 +48,31 @@ VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE)
VERSION_LEGACY
=
Regex
(
LegacySpecifier
.
_regex_str
,
re
.
VERBOSE
|
re
.
IGNORECASE
)
VERSION_LEGACY
=
Regex
(
LegacySpecifier
.
_regex_str
,
re
.
VERBOSE
|
re
.
IGNORECASE
)
VERSION_ONE
=
VERSION_PEP440
^
VERSION_LEGACY
VERSION_ONE
=
VERSION_PEP440
^
VERSION_LEGACY
VERSION_MANY
=
Combine
(
VERSION_ONE
+
ZeroOrMore
(
COMMA
+
VERSION_ONE
),
VERSION_MANY
=
Combine
(
joinString
=
","
,
adjacent
=
False
)(
"_raw_spec"
)
VERSION_ONE
+
ZeroOrMore
(
COMMA
+
VERSION_ONE
),
joinString
=
","
,
adjacent
=
False
)(
"_raw_spec"
)
_VERSION_SPEC
=
Optional
(((
LPAREN
+
VERSION_MANY
+
RPAREN
)
|
VERSION_MANY
))
_VERSION_SPEC
=
Optional
(((
LPAREN
+
VERSION_MANY
+
RPAREN
)
|
VERSION_MANY
))
_VERSION_SPEC
.
setParseAction
(
lambda
s
,
l
,
t
:
t
.
_raw_spec
or
''
)
_VERSION_SPEC
.
setParseAction
(
lambda
s
,
l
,
t
:
t
.
_raw_spec
or
""
)
VERSION_SPEC
=
originalTextFor
(
_VERSION_SPEC
)(
"specifier"
)
VERSION_SPEC
=
originalTextFor
(
_VERSION_SPEC
)(
"specifier"
)
VERSION_SPEC
.
setParseAction
(
lambda
s
,
l
,
t
:
t
[
1
])
VERSION_SPEC
.
setParseAction
(
lambda
s
,
l
,
t
:
t
[
1
])
MARKER_EXPR
=
originalTextFor
(
MARKER_EXPR
())(
"marker"
)
MARKER_EXPR
=
originalTextFor
(
MARKER_EXPR
())(
"marker"
)
MARKER_EXPR
.
setParseAction
(
MARKER_EXPR
.
setParseAction
(
lambda
s
,
l
,
t
:
Marker
(
s
[
t
.
_original_start
:
t
.
_original_end
])
lambda
s
,
l
,
t
:
Marker
(
s
[
t
.
_original_start
:
t
.
_original_end
])
)
)
MARKER_SEP
E
RATOR
=
SEMICOLON
MARKER_SEP
A
RATOR
=
SEMICOLON
MARKER
=
MARKER_SEP
E
RATOR
+
MARKER_EXPR
MARKER
=
MARKER_SEP
A
RATOR
+
MARKER_EXPR
VERSION_AND_MARKER
=
VERSION_SPEC
+
Optional
(
MARKER
)
VERSION_AND_MARKER
=
VERSION_SPEC
+
Optional
(
MARKER
)
URL_AND_MARKER
=
URL
+
Optional
(
MARKER
)
URL_AND_MARKER
=
URL
+
Optional
(
MARKER
)
NAMED_REQUIREMENT
=
\
NAMED_REQUIREMENT
=
NAME
+
Optional
(
EXTRAS
)
+
(
URL_AND_MARKER
|
VERSION_AND_MARKER
)
NAME
+
Optional
(
EXTRAS
)
+
(
URL_AND_MARKER
|
VERSION_AND_MARKER
)
REQUIREMENT
=
stringStart
+
NAMED_REQUIREMENT
+
stringEnd
REQUIREMENT
=
stringStart
+
NAMED_REQUIREMENT
+
stringEnd
# pkg_resources.extern.pyparsing isn't thread safe during initialization, so we do it eagerly, see
# issue #104
REQUIREMENT
.
parseString
(
"x[]"
)
class
Requirement
(
object
):
class
Requirement
(
object
):
...
@@ -90,15 +93,21 @@ class Requirement(object):
...
@@ -90,15 +93,21 @@ class Requirement(object):
req
=
REQUIREMENT
.
parseString
(
requirement_string
)
req
=
REQUIREMENT
.
parseString
(
requirement_string
)
except
ParseException
as
e
:
except
ParseException
as
e
:
raise
InvalidRequirement
(
raise
InvalidRequirement
(
"Invalid requirement, parse error at
\
"
{0!r}
\
"
"
.
format
(
'Parse error at "{0!r}": {1}'
.
format
(
requirement_string
[
e
.
loc
:
e
.
loc
+
8
]))
requirement_string
[
e
.
loc
:
e
.
loc
+
8
],
e
.
msg
)
)
self
.
name
=
req
.
name
self
.
name
=
req
.
name
if
req
.
url
:
if
req
.
url
:
parsed_url
=
urlparse
.
urlparse
(
req
.
url
)
parsed_url
=
urlparse
.
urlparse
(
req
.
url
)
if
not
(
parsed_url
.
scheme
and
parsed_url
.
netloc
)
or
(
if
parsed_url
.
scheme
==
"file"
:
not
parsed_url
.
scheme
and
not
parsed_url
.
netloc
)
:
if
urlparse
.
urlunparse
(
parsed_url
)
!=
req
.
url
:
raise
InvalidRequirement
(
"Invalid URL given"
)
raise
InvalidRequirement
(
"Invalid URL given"
)
elif
not
(
parsed_url
.
scheme
and
parsed_url
.
netloc
)
or
(
not
parsed_url
.
scheme
and
not
parsed_url
.
netloc
):
raise
InvalidRequirement
(
"Invalid URL: {0}"
.
format
(
req
.
url
))
self
.
url
=
req
.
url
self
.
url
=
req
.
url
else
:
else
:
self
.
url
=
None
self
.
url
=
None
...
@@ -117,6 +126,8 @@ class Requirement(object):
...
@@ -117,6 +126,8 @@ class Requirement(object):
if
self
.
url
:
if
self
.
url
:
parts
.
append
(
"@ {0}"
.
format
(
self
.
url
))
parts
.
append
(
"@ {0}"
.
format
(
self
.
url
))
if
self
.
marker
:
parts
.
append
(
" "
)
if
self
.
marker
:
if
self
.
marker
:
parts
.
append
(
"; {0}"
.
format
(
self
.
marker
))
parts
.
append
(
"; {0}"
.
format
(
self
.
marker
))
...
...
pkg_resources/_vendor/packaging/specifiers.py
View file @
c30aca86
...
@@ -19,7 +19,6 @@ class InvalidSpecifier(ValueError):
...
@@ -19,7 +19,6 @@ class InvalidSpecifier(ValueError):
class
BaseSpecifier
(
with_metaclass
(
abc
.
ABCMeta
,
object
)):
class
BaseSpecifier
(
with_metaclass
(
abc
.
ABCMeta
,
object
)):
@
abc
.
abstractmethod
@
abc
.
abstractmethod
def
__str__
(
self
):
def
__str__
(
self
):
"""
"""
...
@@ -84,10 +83,7 @@ class _IndividualSpecifier(BaseSpecifier):
...
@@ -84,10 +83,7 @@ class _IndividualSpecifier(BaseSpecifier):
if
not
match
:
if
not
match
:
raise
InvalidSpecifier
(
"Invalid specifier: '{0}'"
.
format
(
spec
))
raise
InvalidSpecifier
(
"Invalid specifier: '{0}'"
.
format
(
spec
))
self
.
_spec
=
(
self
.
_spec
=
(
match
.
group
(
"operator"
).
strip
(),
match
.
group
(
"version"
).
strip
())
match
.
group
(
"operator"
).
strip
(),
match
.
group
(
"version"
).
strip
(),
)
# Store whether or not this Specifier should accept prereleases
# Store whether or not this Specifier should accept prereleases
self
.
_prereleases
=
prereleases
self
.
_prereleases
=
prereleases
...
@@ -99,11 +95,7 @@ class _IndividualSpecifier(BaseSpecifier):
...
@@ -99,11 +95,7 @@ class _IndividualSpecifier(BaseSpecifier):
else
""
else
""
)
)
return
"<{0}({1!r}{2})>"
.
format
(
return
"<{0}({1!r}{2})>"
.
format
(
self
.
__class__
.
__name__
,
str
(
self
),
pre
)
self
.
__class__
.
__name__
,
str
(
self
),
pre
,
)
def
__str__
(
self
):
def
__str__
(
self
):
return
"{0}{1}"
.
format
(
*
self
.
_spec
)
return
"{0}{1}"
.
format
(
*
self
.
_spec
)
...
@@ -194,11 +186,12 @@ class _IndividualSpecifier(BaseSpecifier):
...
@@ -194,11 +186,12 @@ class _IndividualSpecifier(BaseSpecifier):
# If our version is a prerelease, and we were not set to allow
# If our version is a prerelease, and we were not set to allow
# prereleases, then we'll store it for later incase nothing
# prereleases, then we'll store it for later incase nothing
# else matches this specifier.
# else matches this specifier.
if
(
parsed_version
.
is_prerelease
and
not
if
parsed_version
.
is_prerelease
and
not
(
(
prereleases
or
self
.
prereleases
)):
prereleases
or
self
.
prereleases
):
found_prereleases
.
append
(
version
)
found_prereleases
.
append
(
version
)
# Either this is not a prerelease, or we should have been
# Either this is not a prerelease, or we should have been
# accepting prereleases from the begining.
# accepting prereleases from the begin
n
ing.
else
:
else
:
yielded
=
True
yielded
=
True
yield
version
yield
version
...
@@ -213,8 +206,7 @@ class _IndividualSpecifier(BaseSpecifier):
...
@@ -213,8 +206,7 @@ class _IndividualSpecifier(BaseSpecifier):
class
LegacySpecifier
(
_IndividualSpecifier
):
class
LegacySpecifier
(
_IndividualSpecifier
):
_regex_str
=
(
_regex_str
=
r"""
r"""
(?P<operator>(==|!=|<=|>=|<|>))
(?P<operator>(==|!=|<=|>=|<|>))
\
s*
\
s*
(?P<version>
(?P<version>
...
@@ -225,10 +217,8 @@ class LegacySpecifier(_IndividualSpecifier):
...
@@ -225,10 +217,8 @@ class LegacySpecifier(_IndividualSpecifier):
# them, and a comma since it's a version separator.
# them, and a comma since it's a version separator.
)
)
"""
"""
)
_regex
=
re
.
compile
(
_regex
=
re
.
compile
(
r"^\
s*
" + _regex_str + r"
\
s
*
$
", re.VERBOSE | re.IGNORECASE)
r"^\
s*
" + _regex_str + r"
\
s
*
$
", re.VERBOSE | re.IGNORECASE)
_operators = {
_operators = {
"
==
": "
equal
",
"
==
": "
equal
",
...
@@ -269,13 +259,13 @@ def _require_version_compare(fn):
...
@@ -269,13 +259,13 @@ def _require_version_compare(fn):
if not isinstance(prospective, Version):
if not isinstance(prospective, Version):
return False
return False
return fn(self, prospective, spec)
return fn(self, prospective, spec)
return wrapped
return wrapped
class Specifier(_IndividualSpecifier):
class Specifier(_IndividualSpecifier):
_regex_str = (
_regex_str = r"""
r"""
(?P<operator>(~=|==|!=|<=|>=|<|>|===))
(?P<operator>(~=|==|!=|<=|>=|<|>|===))
(?P<version>
(?P<version>
(?:
(?:
...
@@ -367,10 +357,8 @@ class Specifier(_IndividualSpecifier):
...
@@ -367,10 +357,8 @@ class Specifier(_IndividualSpecifier):
)
)
)
)
"""
"""
)
_regex = re.compile(
_regex = re.compile(r"
^
\
s
*
" + _regex_str + r"
\
s
*
$
", re.VERBOSE | re.IGNORECASE)
r"
^
\
s
*
" + _regex_str + r"
\
s
*
$
", re.VERBOSE | re.IGNORECASE)
_operators = {
_operators = {
"
~=
": "
compatible
",
"
~=
": "
compatible
",
...
@@ -397,8 +385,7 @@ class Specifier(_IndividualSpecifier):
...
@@ -397,8 +385,7 @@ class Specifier(_IndividualSpecifier):
prefix = "
.
".join(
prefix = "
.
".join(
list(
list(
itertools.takewhile(
itertools.takewhile(
lambda x: (not x.startswith("
post
") and not
lambda x: (not x.startswith("
post
") and not x.startswith("
dev
")),
x.startswith("
dev
")),
_version_split(spec),
_version_split(spec),
)
)
)[:-1]
)[:-1]
...
@@ -407,8 +394,9 @@ class Specifier(_IndividualSpecifier):
...
@@ -407,8 +394,9 @@ class Specifier(_IndividualSpecifier):
# Add the prefix notation to the end of our string
# Add the prefix notation to the end of our string
prefix += "
.
*
"
prefix += "
.
*
"
return (self._get_operator("
>=
")(prospective, spec) and
return self._get_operator("
>=
")(prospective, spec) and self._get_operator("
==
")(
self._get_operator("
==
")(prospective, prefix))
prospective, prefix
)
@_require_version_compare
@_require_version_compare
def _compare_equal(self, prospective, spec):
def _compare_equal(self, prospective, spec):
...
@@ -428,7 +416,7 @@ class Specifier(_IndividualSpecifier):
...
@@ -428,7 +416,7 @@ class Specifier(_IndividualSpecifier):
# Shorten the prospective version to be the same length as the spec
# Shorten the prospective version to be the same length as the spec
# so that we can determine if the specifier is a prefix of the
# so that we can determine if the specifier is a prefix of the
# prospective version or not.
# prospective version or not.
prospective = prospective[:len(spec)]
prospective = prospective[:
len(spec)]
# Pad out our two sides with zeros so that they both equal the same
# Pad out our two sides with zeros so that they both equal the same
# length.
# length.
...
@@ -503,7 +491,7 @@ class Specifier(_IndividualSpecifier):
...
@@ -503,7 +491,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 tech
in
cally greater than, to match.
# in the specifier, which is tech
ni
cally 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
...
@@ -567,27 +555,17 @@ def _pad_version(left, right):
...
@@ -567,27 +555,17 @@ def _pad_version(left, right):
right_split.append(list(itertools.takewhile(lambda x: x.isdigit(), right)))
right_split.append(list(itertools.takewhile(lambda x: x.isdigit(), right)))
# Get the rest of our versions
# Get the rest of our versions
left_split.append(left[len(left_split[0]):])
left_split.append(left[len(left_split[0])
:])
right_split.append(right[len(right_split[0]):])
right_split.append(right[len(right_split[0])
:])
# Insert our padding
# Insert our padding
left_split.insert(
left_split.insert(1, ["
0
"] * max(0, len(right_split[0]) - len(left_split[0])))
1,
right_split.insert(1, ["
0
"] * max(0, len(left_split[0]) - len(right_split[0])))
["
0
"] * max(0, len(right_split[0]) - len(left_split[0])),
)
right_split.insert(
1,
["
0
"] * max(0, len(left_split[0]) - len(right_split[0])),
)
return (
return (list(itertools.chain(*left_split)), list(itertools.chain(*right_split)))
list(itertools.chain(*left_split)),
list(itertools.chain(*right_split)),
)
class SpecifierSet(BaseSpecifier):
class SpecifierSet(BaseSpecifier):
def __init__(self, specifiers="", prereleases=None):
def __init__(self, specifiers="", prereleases=None):
# Split on , to break each indidivual specifier into it's own item, and
# Split on , to break each indidivual specifier into it's own item, and
# strip each item to remove leading/trailing whitespace.
# strip each item to remove leading/trailing whitespace.
...
@@ -721,10 +699,7 @@ class SpecifierSet(BaseSpecifier):
...
@@ -721,10 +699,7 @@ class SpecifierSet(BaseSpecifier):
# 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
# will always return True, this is an explicit design decision.
# will always return True, this is an explicit design decision.
return all(
return all(s.contains(item, prereleases=prereleases) for s in self._specs)
s.contains(item, prereleases=prereleases)
for s in self._specs
)
def filter(self, iterable, prereleases=None):
def filter(self, iterable, prereleases=None):
# Determine if we're forcing a prerelease or not, if we're not forcing
# Determine if we're forcing a prerelease or not, if we're not forcing
...
...
pkg_resources/_vendor/packaging/tags.py
0 → 100644
View file @
c30aca86
# This file is dual licensed under the terms of the Apache License, Version
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.
from
__future__
import
absolute_import
import
distutils.util
try
:
from
importlib.machinery
import
EXTENSION_SUFFIXES
except
ImportError
:
# pragma: no cover
import
imp
EXTENSION_SUFFIXES
=
[
x
[
0
]
for
x
in
imp
.
get_suffixes
()]
del
imp
import
platform
import
re
import
sys
import
sysconfig
import
warnings
INTERPRETER_SHORT_NAMES
=
{
"python"
:
"py"
,
# Generic.
"cpython"
:
"cp"
,
"pypy"
:
"pp"
,
"ironpython"
:
"ip"
,
"jython"
:
"jy"
,
}
_32_BIT_INTERPRETER
=
sys
.
maxsize
<=
2
**
32
class
Tag
(
object
):
__slots__
=
[
"_interpreter"
,
"_abi"
,
"_platform"
]
def
__init__
(
self
,
interpreter
,
abi
,
platform
):
self
.
_interpreter
=
interpreter
.
lower
()
self
.
_abi
=
abi
.
lower
()
self
.
_platform
=
platform
.
lower
()
@
property
def
interpreter
(
self
):
return
self
.
_interpreter
@
property
def
abi
(
self
):
return
self
.
_abi
@
property
def
platform
(
self
):
return
self
.
_platform
def
__eq__
(
self
,
other
):
return
(
(
self
.
platform
==
other
.
platform
)
and
(
self
.
abi
==
other
.
abi
)
and
(
self
.
interpreter
==
other
.
interpreter
)
)
def
__hash__
(
self
):
return
hash
((
self
.
_interpreter
,
self
.
_abi
,
self
.
_platform
))
def
__str__
(
self
):
return
"{}-{}-{}"
.
format
(
self
.
_interpreter
,
self
.
_abi
,
self
.
_platform
)
def
__repr__
(
self
):
return
"<{self} @ {self_id}>"
.
format
(
self
=
self
,
self_id
=
id
(
self
))
def
parse_tag
(
tag
):
tags
=
set
()
interpreters
,
abis
,
platforms
=
tag
.
split
(
"-"
)
for
interpreter
in
interpreters
.
split
(
"."
):
for
abi
in
abis
.
split
(
"."
):
for
platform_
in
platforms
.
split
(
"."
):
tags
.
add
(
Tag
(
interpreter
,
abi
,
platform_
))
return
frozenset
(
tags
)
def
_normalize_string
(
string
):
return
string
.
replace
(
"."
,
"_"
).
replace
(
"-"
,
"_"
)
def
_cpython_interpreter
(
py_version
):
# TODO: Is using py_version_nodot for interpreter version critical?
return
"cp{major}{minor}"
.
format
(
major
=
py_version
[
0
],
minor
=
py_version
[
1
])
def
_cpython_abis
(
py_version
):
abis
=
[]
version
=
"{}{}"
.
format
(
*
py_version
[:
2
])
debug
=
pymalloc
=
ucs4
=
""
with_debug
=
sysconfig
.
get_config_var
(
"Py_DEBUG"
)
has_refcount
=
hasattr
(
sys
,
"gettotalrefcount"
)
# Windows doesn't set Py_DEBUG, so checking for support of debug-compiled
# extension modules is the best option.
# https://github.com/pypa/pip/issues/3383#issuecomment-173267692
has_ext
=
"_d.pyd"
in
EXTENSION_SUFFIXES
if
with_debug
or
(
with_debug
is
None
and
(
has_refcount
or
has_ext
)):
debug
=
"d"
if
py_version
<
(
3
,
8
):
with_pymalloc
=
sysconfig
.
get_config_var
(
"WITH_PYMALLOC"
)
if
with_pymalloc
or
with_pymalloc
is
None
:
pymalloc
=
"m"
if
py_version
<
(
3
,
3
):
unicode_size
=
sysconfig
.
get_config_var
(
"Py_UNICODE_SIZE"
)
if
unicode_size
==
4
or
(
unicode_size
is
None
and
sys
.
maxunicode
==
0x10FFFF
):
ucs4
=
"u"
elif
debug
:
# Debug builds can also load "normal" extension modules.
# We can also assume no UCS-4 or pymalloc requirement.
abis
.
append
(
"cp{version}"
.
format
(
version
=
version
))
abis
.
insert
(
0
,
"cp{version}{debug}{pymalloc}{ucs4}"
.
format
(
version
=
version
,
debug
=
debug
,
pymalloc
=
pymalloc
,
ucs4
=
ucs4
),
)
return
abis
def
_cpython_tags
(
py_version
,
interpreter
,
abis
,
platforms
):
for
abi
in
abis
:
for
platform_
in
platforms
:
yield
Tag
(
interpreter
,
abi
,
platform_
)
for
tag
in
(
Tag
(
interpreter
,
"abi3"
,
platform_
)
for
platform_
in
platforms
):
yield
tag
for
tag
in
(
Tag
(
interpreter
,
"none"
,
platform_
)
for
platform_
in
platforms
):
yield
tag
# PEP 384 was first implemented in Python 3.2.
for
minor_version
in
range
(
py_version
[
1
]
-
1
,
1
,
-
1
):
for
platform_
in
platforms
:
interpreter
=
"cp{major}{minor}"
.
format
(
major
=
py_version
[
0
],
minor
=
minor_version
)
yield
Tag
(
interpreter
,
"abi3"
,
platform_
)
def
_pypy_interpreter
():
return
"pp{py_major}{pypy_major}{pypy_minor}"
.
format
(
py_major
=
sys
.
version_info
[
0
],
pypy_major
=
sys
.
pypy_version_info
.
major
,
pypy_minor
=
sys
.
pypy_version_info
.
minor
,
)
def
_generic_abi
():
abi
=
sysconfig
.
get_config_var
(
"SOABI"
)
if
abi
:
return
_normalize_string
(
abi
)
else
:
return
"none"
def
_pypy_tags
(
py_version
,
interpreter
,
abi
,
platforms
):
for
tag
in
(
Tag
(
interpreter
,
abi
,
platform
)
for
platform
in
platforms
):
yield
tag
for
tag
in
(
Tag
(
interpreter
,
"none"
,
platform
)
for
platform
in
platforms
):
yield
tag
def
_generic_tags
(
interpreter
,
py_version
,
abi
,
platforms
):
for
tag
in
(
Tag
(
interpreter
,
abi
,
platform
)
for
platform
in
platforms
):
yield
tag
if
abi
!=
"none"
:
tags
=
(
Tag
(
interpreter
,
"none"
,
platform_
)
for
platform_
in
platforms
)
for
tag
in
tags
:
yield
tag
def
_py_interpreter_range
(
py_version
):
"""
Yield Python versions in descending order.
After the latest version, the major-only version will be yielded, and then
all following versions up to 'end'.
"""
yield
"py{major}{minor}"
.
format
(
major
=
py_version
[
0
],
minor
=
py_version
[
1
])
yield
"py{major}"
.
format
(
major
=
py_version
[
0
])
for
minor
in
range
(
py_version
[
1
]
-
1
,
-
1
,
-
1
):
yield
"py{major}{minor}"
.
format
(
major
=
py_version
[
0
],
minor
=
minor
)
def
_independent_tags
(
interpreter
,
py_version
,
platforms
):
"""
Return the sequence of tags that are consistent across implementations.
The tags consist of:
- py*-none-<platform>
- <interpreter>-none-any
- py*-none-any
"""
for
version
in
_py_interpreter_range
(
py_version
):
for
platform_
in
platforms
:
yield
Tag
(
version
,
"none"
,
platform_
)
yield
Tag
(
interpreter
,
"none"
,
"any"
)
for
version
in
_py_interpreter_range
(
py_version
):
yield
Tag
(
version
,
"none"
,
"any"
)
def
_mac_arch
(
arch
,
is_32bit
=
_32_BIT_INTERPRETER
):
if
not
is_32bit
:
return
arch
if
arch
.
startswith
(
"ppc"
):
return
"ppc"
return
"i386"
def
_mac_binary_formats
(
version
,
cpu_arch
):
formats
=
[
cpu_arch
]
if
cpu_arch
==
"x86_64"
:
if
version
<
(
10
,
4
):
return
[]
formats
.
extend
([
"intel"
,
"fat64"
,
"fat32"
])
elif
cpu_arch
==
"i386"
:
if
version
<
(
10
,
4
):
return
[]
formats
.
extend
([
"intel"
,
"fat32"
,
"fat"
])
elif
cpu_arch
==
"ppc64"
:
# TODO: Need to care about 32-bit PPC for ppc64 through 10.2?
if
version
>
(
10
,
5
)
or
version
<
(
10
,
4
):
return
[]
formats
.
append
(
"fat64"
)
elif
cpu_arch
==
"ppc"
:
if
version
>
(
10
,
6
):
return
[]
formats
.
extend
([
"fat32"
,
"fat"
])
formats
.
append
(
"universal"
)
return
formats
def
_mac_platforms
(
version
=
None
,
arch
=
None
):
version_str
,
_
,
cpu_arch
=
platform
.
mac_ver
()
if
version
is
None
:
version
=
tuple
(
map
(
int
,
version_str
.
split
(
"."
)[:
2
]))
if
arch
is
None
:
arch
=
_mac_arch
(
cpu_arch
)
platforms
=
[]
for
minor_version
in
range
(
version
[
1
],
-
1
,
-
1
):
compat_version
=
version
[
0
],
minor_version
binary_formats
=
_mac_binary_formats
(
compat_version
,
arch
)
for
binary_format
in
binary_formats
:
platforms
.
append
(
"macosx_{major}_{minor}_{binary_format}"
.
format
(
major
=
compat_version
[
0
],
minor
=
compat_version
[
1
],
binary_format
=
binary_format
,
)
)
return
platforms
# From PEP 513.
def
_is_manylinux_compatible
(
name
,
glibc_version
):
# Check for presence of _manylinux module.
try
:
import
_manylinux
return
bool
(
getattr
(
_manylinux
,
name
+
"_compatible"
))
except
(
ImportError
,
AttributeError
):
# Fall through to heuristic check below.
pass
return
_have_compatible_glibc
(
*
glibc_version
)
def
_glibc_version_string
():
# Returns glibc version string, or None if not using glibc.
import
ctypes
# ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen
# manpage says, "If filename is NULL, then the returned handle is for the
# main program". This way we can let the linker do the work to figure out
# which libc our process is actually using.
process_namespace
=
ctypes
.
CDLL
(
None
)
try
:
gnu_get_libc_version
=
process_namespace
.
gnu_get_libc_version
except
AttributeError
:
# Symbol doesn't exist -> therefore, we are not linked to
# glibc.
return
None
# Call gnu_get_libc_version, which returns a string like "2.5"
gnu_get_libc_version
.
restype
=
ctypes
.
c_char_p
version_str
=
gnu_get_libc_version
()
# py2 / py3 compatibility:
if
not
isinstance
(
version_str
,
str
):
version_str
=
version_str
.
decode
(
"ascii"
)
return
version_str
# Separated out from have_compatible_glibc for easier unit testing.
def
_check_glibc_version
(
version_str
,
required_major
,
minimum_minor
):
# Parse string and check against requested version.
#
# We use a regexp instead of str.split because we want to discard any
# random junk that might come after the minor version -- this might happen
# in patched/forked versions of glibc (e.g. Linaro's version of glibc
# uses version strings like "2.20-2014.11"). See gh-3588.
m
=
re
.
match
(
r"(?P<major>[0-9]+)\
.(?P<mi
nor>[0-9]+)"
,
version_str
)
if
not
m
:
warnings
.
warn
(
"Expected glibc version with 2 components major.minor,"
" got: %s"
%
version_str
,
RuntimeWarning
,
)
return
False
return
(
int
(
m
.
group
(
"major"
))
==
required_major
and
int
(
m
.
group
(
"minor"
))
>=
minimum_minor
)
def
_have_compatible_glibc
(
required_major
,
minimum_minor
):
version_str
=
_glibc_version_string
()
if
version_str
is
None
:
return
False
return
_check_glibc_version
(
version_str
,
required_major
,
minimum_minor
)
def
_linux_platforms
(
is_32bit
=
_32_BIT_INTERPRETER
):
linux
=
_normalize_string
(
distutils
.
util
.
get_platform
())
if
linux
==
"linux_x86_64"
and
is_32bit
:
linux
=
"linux_i686"
manylinux_support
=
(
(
"manylinux2014"
,
(
2
,
17
)),
# CentOS 7 w/ glibc 2.17 (PEP 599)
(
"manylinux2010"
,
(
2
,
12
)),
# CentOS 6 w/ glibc 2.12 (PEP 571)
(
"manylinux1"
,
(
2
,
5
)),
# CentOS 5 w/ glibc 2.5 (PEP 513)
)
manylinux_support_iter
=
iter
(
manylinux_support
)
for
name
,
glibc_version
in
manylinux_support_iter
:
if
_is_manylinux_compatible
(
name
,
glibc_version
):
platforms
=
[
linux
.
replace
(
"linux"
,
name
)]
break
else
:
platforms
=
[]
# Support for a later manylinux implies support for an earlier version.
platforms
+=
[
linux
.
replace
(
"linux"
,
name
)
for
name
,
_
in
manylinux_support_iter
]
platforms
.
append
(
linux
)
return
platforms
def
_generic_platforms
():
platform
=
_normalize_string
(
distutils
.
util
.
get_platform
())
return
[
platform
]
def
_interpreter_name
():
name
=
platform
.
python_implementation
().
lower
()
return
INTERPRETER_SHORT_NAMES
.
get
(
name
)
or
name
def
_generic_interpreter
(
name
,
py_version
):
version
=
sysconfig
.
get_config_var
(
"py_version_nodot"
)
if
not
version
:
version
=
""
.
join
(
map
(
str
,
py_version
[:
2
]))
return
"{name}{version}"
.
format
(
name
=
name
,
version
=
version
)
def
sys_tags
():
"""
Returns the sequence of tag triples for the running interpreter.
The order of the sequence corresponds to priority order for the
interpreter, from most to least important.
"""
py_version
=
sys
.
version_info
[:
2
]
interpreter_name
=
_interpreter_name
()
if
platform
.
system
()
==
"Darwin"
:
platforms
=
_mac_platforms
()
elif
platform
.
system
()
==
"Linux"
:
platforms
=
_linux_platforms
()
else
:
platforms
=
_generic_platforms
()
if
interpreter_name
==
"cp"
:
interpreter
=
_cpython_interpreter
(
py_version
)
abis
=
_cpython_abis
(
py_version
)
for
tag
in
_cpython_tags
(
py_version
,
interpreter
,
abis
,
platforms
):
yield
tag
elif
interpreter_name
==
"pp"
:
interpreter
=
_pypy_interpreter
()
abi
=
_generic_abi
()
for
tag
in
_pypy_tags
(
py_version
,
interpreter
,
abi
,
platforms
):
yield
tag
else
:
interpreter
=
_generic_interpreter
(
interpreter_name
,
py_version
)
abi
=
_generic_abi
()
for
tag
in
_generic_tags
(
interpreter
,
py_version
,
abi
,
platforms
):
yield
tag
for
tag
in
_independent_tags
(
interpreter
,
py_version
,
platforms
):
yield
tag
pkg_resources/_vendor/packaging/utils.py
View file @
c30aca86
...
@@ -5,6 +5,8 @@ from __future__ import absolute_import, division, print_function
...
@@ -5,6 +5,8 @@ from __future__ import absolute_import, division, print_function
import
re
import
re
from
.version
import
InvalidVersion
,
Version
_canonicalize_regex
=
re
.
compile
(
r"[-_.]+"
)
_canonicalize_regex
=
re
.
compile
(
r"[-_.]+"
)
...
@@ -12,3 +14,44 @@ _canonicalize_regex = re.compile(r"[-_.]+")
...
@@ -12,3 +14,44 @@ _canonicalize_regex = re.compile(r"[-_.]+")
def
canonicalize_name
(
name
):
def
canonicalize_name
(
name
):
# This is taken from PEP 503.
# This is taken from PEP 503.
return
_canonicalize_regex
.
sub
(
"-"
,
name
).
lower
()
return
_canonicalize_regex
.
sub
(
"-"
,
name
).
lower
()
def
canonicalize_version
(
version
):
"""
This is very similar to Version.__str__, but has one subtle differences
with the way it handles the release segment.
"""
try
:
version
=
Version
(
version
)
except
InvalidVersion
:
# Legacy versions cannot be normalized
return
version
parts
=
[]
# Epoch
if
version
.
epoch
!=
0
:
parts
.
append
(
"{0}!"
.
format
(
version
.
epoch
))
# Release segment
# NB: This strips trailing '.0's to normalize
parts
.
append
(
re
.
sub
(
r"(\
.
0)+$"
,
""
,
"."
.
join
(
str
(
x
)
for
x
in
version
.
release
)))
# Pre-release
if
version
.
pre
is
not
None
:
parts
.
append
(
""
.
join
(
str
(
x
)
for
x
in
version
.
pre
))
# Post-release
if
version
.
post
is
not
None
:
parts
.
append
(
".post{0}"
.
format
(
version
.
post
))
# Development release
if
version
.
dev
is
not
None
:
parts
.
append
(
".dev{0}"
.
format
(
version
.
dev
))
# Local version segment
if
version
.
local
is
not
None
:
parts
.
append
(
"+{0}"
.
format
(
version
.
local
))
return
""
.
join
(
parts
)
pkg_resources/_vendor/packaging/version.py
View file @
c30aca86
...
@@ -10,14 +10,11 @@ import re
...
@@ -10,14 +10,11 @@ import re
from
._structures
import
Infinity
from
._structures
import
Infinity
__all__
=
[
__all__
=
[
"parse"
,
"Version"
,
"LegacyVersion"
,
"InvalidVersion"
,
"VERSION_PATTERN"
]
"parse"
,
"Version"
,
"LegacyVersion"
,
"InvalidVersion"
,
"VERSION_PATTERN"
]
_Version
=
collections
.
namedtuple
(
_Version
=
collections
.
namedtuple
(
"_Version"
,
"_Version"
,
[
"epoch"
,
"release"
,
"dev"
,
"pre"
,
"post"
,
"local"
]
[
"epoch"
,
"release"
,
"dev"
,
"pre"
,
"post"
,
"local"
],
)
)
...
@@ -40,7 +37,6 @@ class InvalidVersion(ValueError):
...
@@ -40,7 +37,6 @@ class InvalidVersion(ValueError):
class
_BaseVersion
(
object
):
class
_BaseVersion
(
object
):
def
__hash__
(
self
):
def
__hash__
(
self
):
return
hash
(
self
.
_key
)
return
hash
(
self
.
_key
)
...
@@ -70,7 +66,6 @@ class _BaseVersion(object):
...
@@ -70,7 +66,6 @@ class _BaseVersion(object):
class
LegacyVersion
(
_BaseVersion
):
class
LegacyVersion
(
_BaseVersion
):
def
__init__
(
self
,
version
):
def
__init__
(
self
,
version
):
self
.
_version
=
str
(
version
)
self
.
_version
=
str
(
version
)
self
.
_key
=
_legacy_cmpkey
(
self
.
_version
)
self
.
_key
=
_legacy_cmpkey
(
self
.
_version
)
...
@@ -89,6 +84,26 @@ class LegacyVersion(_BaseVersion):
...
@@ -89,6 +84,26 @@ class LegacyVersion(_BaseVersion):
def
base_version
(
self
):
def
base_version
(
self
):
return
self
.
_version
return
self
.
_version
@
property
def
epoch
(
self
):
return
-
1
@
property
def
release
(
self
):
return
None
@
property
def
pre
(
self
):
return
None
@
property
def
post
(
self
):
return
None
@
property
def
dev
(
self
):
return
None
@
property
@
property
def
local
(
self
):
def
local
(
self
):
return
None
return
None
...
@@ -101,13 +116,19 @@ class LegacyVersion(_BaseVersion):
...
@@ -101,13 +116,19 @@ class LegacyVersion(_BaseVersion):
def
is_postrelease
(
self
):
def
is_postrelease
(
self
):
return
False
return
False
@
property
def
is_devrelease
(
self
):
return
False
_legacy_version_component_re
=
re
.
compile
(
_legacy_version_component_re
=
re
.
compile
(
r"(\
d+ | [
a-z]+ | \
.| -)
", re.VERBOSE)
r"(\
d+ | [
a-z]+ | \
.| -)
", re.VERBOSE,
)
_legacy_version_replacement_map = {
_legacy_version_replacement_map = {
"
pre
": "
c
", "
preview
": "
c
", "
-
": "
final
-
", "
rc
": "
c
", "
dev
": "
@
",
"
pre
": "
c
",
"
preview
": "
c
",
"
-
": "
final
-
",
"
rc
": "
c
",
"
dev
": "
@
",
}
}
...
@@ -154,6 +175,7 @@ def _legacy_cmpkey(version):
...
@@ -154,6 +175,7 @@ def _legacy_cmpkey(version):
return epoch, parts
return epoch, parts
# Deliberately not anchored to the start and end of the string, to make it
# Deliberately not anchored to the start and end of the string, to make it
# easier for 3rd party code to reuse
# easier for 3rd party code to reuse
VERSION_PATTERN = r"""
VERSION_PATTERN = r"""
...
@@ -190,10 +212,7 @@ VERSION_PATTERN = r"""
...
@@ -190,10 +212,7 @@ VERSION_PATTERN = r"""
class Version(_BaseVersion):
class Version(_BaseVersion):
_regex = re.compile(
_regex = re.compile(r"
^
\
s
*
" + VERSION_PATTERN + r"
\
s
*
$
", re.VERBOSE | re.IGNORECASE)
r"
^
\
s
*
" + VERSION_PATTERN + r"
\
s
*
$
",
re.VERBOSE | re.IGNORECASE,
)
def __init__(self, version):
def __init__(self, version):
# Validate the version and parse it into pieces
# Validate the version and parse it into pieces
...
@@ -205,18 +224,11 @@ class Version(_BaseVersion):
...
@@ -205,18 +224,11 @@ class Version(_BaseVersion):
self._version = _Version(
self._version = _Version(
epoch=int(match.group("
epoch
")) if match.group("
epoch
") else 0,
epoch=int(match.group("
epoch
")) if match.group("
epoch
") else 0,
release=tuple(int(i) for i in match.group("
release
").split("
.
")),
release=tuple(int(i) for i in match.group("
release
").split("
.
")),
pre=_parse_letter_version(
pre=_parse_letter_version(match.group("
pre_l
"), match.group("
pre_n
")),
match.group("
pre_l
"),
match.group("
pre_n
"),
),
post=_parse_letter_version(
post=_parse_letter_version(
match.group("
post_l
"),
match.group("
post_l
"), match.group("
post_n1
") or match.group("
post_n2
")
match.group("
post_n1
") or match.group("
post_n2
"),
),
dev=_parse_letter_version(
match.group("
dev_l
"),
match.group("
dev_n
"),
),
),
dev=_parse_letter_version(match.group("
dev_l
"), match.group("
dev_n
")),
local=_parse_local_version(match.group("
local
")),
local=_parse_local_version(match.group("
local
")),
)
)
...
@@ -237,32 +249,57 @@ class Version(_BaseVersion):
...
@@ -237,32 +249,57 @@ class Version(_BaseVersion):
parts = []
parts = []
# Epoch
# Epoch
if self.
_version.
epoch != 0:
if self.epoch != 0:
parts.append("
{
0
}
!
".format(self.
_version.
epoch))
parts.append("
{
0
}
!
".format(self.epoch))
# Release segment
# Release segment
parts.append("
.
".join(str(x) for x in self.
_version.
release))
parts.append("
.
".join(str(x) for x in self.release))
# Pre-release
# Pre-release
if self.
_version.
pre is not None:
if self.pre is not None:
parts.append("".join(str(x) for x in self.
_version.
pre))
parts.append("".join(str(x) for x in self.pre))
# Post-release
# Post-release
if self.
_version.
post is not None:
if self.post is not None:
parts.append("
.
post
{
0
}
".format(self.
_version.post[1]
))
parts.append("
.
post
{
0
}
".format(self.
post
))
# Development release
# Development release
if self.
_version.
dev is not None:
if self.dev is not None:
parts.append("
.
dev
{
0
}
".format(self.
_version.dev[1]
))
parts.append("
.
dev
{
0
}
".format(self.
dev
))
# Local version segment
# Local version segment
if self._version.local is not None:
if self.local is not None:
parts.append(
parts.append("
+
{
0
}
".format(self.local))
"
+
{
0
}
".format("
.
".join(str(x) for x in self._version.local))
)
return "".join(parts)
return "".join(parts)
@property
def epoch(self):
return self._version.epoch
@property
def release(self):
return self._version.release
@property
def pre(self):
return self._version.pre
@property
def post(self):
return self._version.post[1] if self._version.post else None
@property
def dev(self):
return self._version.dev[1] if self._version.dev else None
@property
def local(self):
if self._version.local:
return "
.
".join(str(x) for x in self._version.local)
else:
return None
@property
@property
def public(self):
def public(self):
return str(self).split("
+
", 1)[0]
return str(self).split("
+
", 1)[0]
...
@@ -272,27 +309,25 @@ class Version(_BaseVersion):
...
@@ -272,27 +309,25 @@ class Version(_BaseVersion):
parts = []
parts = []
# Epoch
# Epoch
if self.
_version.
epoch != 0:
if self.epoch != 0:
parts.append("
{
0
}
!
".format(self.
_version.
epoch))
parts.append("
{
0
}
!
".format(self.epoch))
# Release segment
# Release segment
parts.append("
.
".join(str(x) for x in self.
_version.
release))
parts.append("
.
".join(str(x) for x in self.release))
return "".join(parts)
return "".join(parts)
@property
def local(self):
version_string = str(self)
if "
+
" in version_string:
return version_string.split("
+
", 1)[1]
@property
@property
def is_prerelease(self):
def is_prerelease(self):
return
bool(self._version.dev or self._version.pre)
return
self.dev is not None or self.pre is not None
@property
@property
def is_postrelease(self):
def is_postrelease(self):
return bool(self._version.post)
return self.post is not None
@property
def is_devrelease(self):
return self.dev is not None
def _parse_letter_version(letter, number):
def _parse_letter_version(letter, number):
...
@@ -326,7 +361,7 @@ def _parse_letter_version(letter, number):
...
@@ -326,7 +361,7 @@ def _parse_letter_version(letter, number):
return letter, int(number)
return letter, int(number)
_local_version_sep
e
rators = re.compile(r"
[
\
.
_
-
]
")
_local_version_sep
a
rators = re.compile(r"
[
\
.
_
-
]
")
def _parse_local_version(local):
def _parse_local_version(local):
...
@@ -336,7 +371,7 @@ def _parse_local_version(local):
...
@@ -336,7 +371,7 @@ def _parse_local_version(local):
if local is not None:
if local is not None:
return tuple(
return tuple(
part.lower() if not part.isdigit() else int(part)
part.lower() if not part.isdigit() else int(part)
for part in _local_version_sep
e
rators.split(local)
for part in _local_version_sep
a
rators.split(local)
)
)
...
@@ -347,12 +382,7 @@ def _cmpkey(epoch, release, pre, post, dev, local):
...
@@ -347,12 +382,7 @@ def _cmpkey(epoch, release, pre, post, dev, local):
# re-reverse it back into the correct order and make it a tuple and use
# re-reverse it back into the correct order and make it a tuple and use
# that for our sorting key.
# that for our sorting key.
release = tuple(
release = tuple(
reversed(list(
reversed(list(itertools.dropwhile(lambda x: x == 0, reversed(release))))
itertools.dropwhile(
lambda x: x == 0,
reversed(release),
)
))
)
)
# We need to "
trick
" the sorting algorithm to put 1.0.dev0 before 1.0a0.
# We need to "
trick
" the sorting algorithm to put 1.0.dev0 before 1.0a0.
...
@@ -385,9 +415,6 @@ def _cmpkey(epoch, release, pre, post, dev, local):
...
@@ -385,9 +415,6 @@ def _cmpkey(epoch, release, pre, post, dev, local):
# - Numeric segments sort numerically
# - Numeric segments sort numerically
# - Shorter versions sort before longer versions when the prefixes
# - Shorter versions sort before longer versions when the prefixes
# match exactly
# match exactly
local = tuple(
local = tuple((i, "") if isinstance(i, int) else (-Infinity, i) for i in local)
(i, "") if isinstance(i, int) else (-Infinity, i)
for i in local
)
return epoch, release, pre, post, dev, local
return epoch, release, pre, post, dev, local
pkg_resources/_vendor/vendored.txt
View file @
c30aca86
packaging==1
6.8
packaging==1
9.2
pyparsing==2.2.1
pyparsing==2.2.1
six==1.10.0
six==1.10.0
appdirs==1.4.3
appdirs==1.4.3
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment