Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
6bfc7bd
Update to mypy 0.740
brettcannon Nov 9, 2019
d703c2d
Change `Optional[bool]` to `bool` as `None` is not expected
brettcannon Nov 9, 2019
0b9e724
Tweak docsstrings to follow the rest of the file
brettcannon Nov 9, 2019
c722ee0
Make linters happy
brettcannon Nov 9, 2019
8c2c701
Initial implementation of public *_tags() functions
brettcannon Nov 9, 2019
fb58d28
Tweak a test name
brettcannon Nov 9, 2019
4494b1c
Add tests for cpython_tags()
brettcannon Nov 9, 2019
d5f8730
Add tests for pypy_tags()
brettcannon Nov 9, 2019
2495a36
Add tests for generic_tags()
brettcannon Nov 9, 2019
5ccac11
Add tests for compatible_tags()
brettcannon Nov 9, 2019
ff3e41f
Type _generic_interpreter()
brettcannon Nov 9, 2019
9f398c5
Add tests for _platform()
brettcannon Nov 9, 2019
8f54af0
Remove now-dead code
brettcannon Nov 9, 2019
11b9bed
Fix the docstring for _py_interpreter_range()
brettcannon Nov 11, 2019
c8e90d9
Expose mac_platforms() publicly
brettcannon Nov 12, 2019
c091101
Make some type hints on parameters more readable
brettcannon Nov 12, 2019
f50ce38
Fix some whitespace
brettcannon Nov 12, 2019
d0b5b56
Fix up tests for mac_platforms() exposure and making platform functio…
brettcannon Nov 12, 2019
5ef9af0
Document new public functions
brettcannon Nov 12, 2019
c59e596
Fix tests
brettcannon Nov 12, 2019
defe719
Remove an extra blank line
brettcannon Nov 13, 2019
ab7cc6d
Fix spelling mistake
brettcannon Nov 15, 2019
c952f2c
Fix a grammar mistake
brettcannon Nov 15, 2019
1fbecf2
Fix spelling mistake
brettcannon Nov 15, 2019
123c1e6
Fix a grammar mistake
brettcannon Nov 15, 2019
818cd09
Fix spelling mistake
brettcannon Nov 15, 2019
b168c09
Provide an interpreter name example
brettcannon Nov 15, 2019
b31be53
Tweak phrasing on adding "none" ABI automatically
brettcannon Nov 15, 2019
7277b5d
Simplify handling of "none" ABI
brettcannon Nov 15, 2019
36c2d81
Tweak how we say mac_platforms() is special
brettcannon Nov 15, 2019
df7751d
Rename _platforms() to _platform_tags()
brettcannon Nov 15, 2019
6c81919
Clarify what generic_tags() is for
brettcannon Nov 15, 2019
ff384e8
Rename _warn_parameters()
brettcannon Nov 15, 2019
3f57469
Clarify a comment
brettcannon Nov 15, 2019
1559ffc
Use backticks instead of * for parameters
brettcannon Nov 15, 2019
bc53e90
Fix a syntax hiccup
brettcannon Nov 15, 2019
adea500
Use `` over * for parameters
brettcannon Nov 15, 2019
205ee20
Drop PyPy-specific code
brettcannon Nov 15, 2019
ddc23de
Touch up _generic_abi()
brettcannon Nov 15, 2019
8f08a0a
Add tests that we are getting back iterators
brettcannon Nov 15, 2019
559cfa0
Merge branch 'master' into expose-tags
brettcannon Nov 15, 2019
5b65b05
Merge remote-tracking branch 'origin/master' into expose-tags
brettcannon Nov 15, 2019
5677fc1
Make Python 2.7 happy
brettcannon Nov 15, 2019
40b2eb7
Group tests
brettcannon Nov 15, 2019
a6dfaf5
Merge branch 'master' of github.com:pypa/packaging into expose-tags
brettcannon Nov 15, 2019
443a209
Remove unnecessary trailing newline
brettcannon Nov 15, 2019
20311bb
Make tests more granular
brettcannon Nov 15, 2019
bb54afd
Touch up the docs
brettcannon Nov 22, 2019
5329072
Expose interpreter_name()
brettcannon Nov 22, 2019
c51ca15
Be more strict about default ABIs
brettcannon Nov 22, 2019
7dc1b66
Use `None` as the default for python_version
brettcannon Nov 22, 2019
1350516
Fix a typing typo
brettcannon Nov 22, 2019
68ea56f
Accept major-only Python versions
brettcannon Nov 22, 2019
a295307
Fix compatibility_tags() tests to actually run
brettcannon Nov 22, 2019
4331ec5
Add a test case for cpython_tags() w/ default ABI and major-only Pyth…
brettcannon Nov 22, 2019
7603a49
Run Black
brettcannon Nov 22, 2019
e62f138
Add interpreter_version()
brettcannon Nov 24, 2019
61666fa
Deal with a type ambiguity
brettcannon Nov 24, 2019
42814d1
Make Python 2.7 happy
brettcannon Nov 24, 2019
b7e61cd
Run Black
brettcannon Nov 24, 2019
66f13d9
Make Python 2.7 happy some more
brettcannon Nov 24, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add interpreter_version()
  • Loading branch information
brettcannon committed Nov 24, 2019
commit e62f138033bd75574e9da58efb91c12e10abdb7c
7 changes: 7 additions & 0 deletions docs/tags.rst
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,13 @@ Reference
This typically acts as the prefix to the :attr:`~Tag.interpreter` tag.


.. function:: interpreter_version(*, warn=False)

Returns the running interpreter's version.

This typically acts as the suffix to the :attr:`~Tag.interpreter` tag.


.. function:: mac_platforms(version=None, arch=None)

Yields the :attr:`~Tag.platform` tags for macOS.
Expand Down
27 changes: 18 additions & 9 deletions packaging/tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,14 +256,6 @@ def _generic_abi():
yield _normalize_string(abi)


def _generic_interpreter(warn=False):
# type: (bool) -> str
version = _get_config_var("py_version_nodot", warn)
if not version:
version = "".join(map(str, sys.version_info[:2]))
return "{name}{version}".format(name=interpreter_name(), version=version)


def generic_tags(
interpreter=None, # type: Optional[str]
abis=None, # type: Optional[Iterable[str]]
Expand All @@ -281,7 +273,9 @@ def generic_tags(
"""
warn = _warn_keyword_parameter("generic_tags", kwargs)
if not interpreter:
interpreter = _generic_interpreter(warn=warn)
interp_name = interpreter_name()
interp_version = interpreter_version(warn=warn)
interpreter = "".join([interp_name, interp_version])
if abis is None:
abis = _generic_abi()
platforms = list(platforms or _platform_tags())
Expand Down Expand Up @@ -552,6 +546,9 @@ def _platform_tags():

def interpreter_name():
# type: () -> str
"""
Returns the name of the running interpreter.
"""
try:
name = sys.implementation.name # type: ignore
except AttributeError: # pragma: no cover
Expand All @@ -560,6 +557,18 @@ def interpreter_name():
return INTERPRETER_SHORT_NAMES.get(name) or name


def interpreter_version(**kwargs):
# type: (bool) -> str
"""
Returns the version of the running interpreter.
"""
warn = _warn_keyword_parameter("interpreter_version", kwargs)
version = _get_config_var("py_version_nodot", warn=warn)
if not version:
version = "".join(map(str, sys.version_info[:2]))
return version


def sys_tags(**kwargs):
# type: (bool) -> Iterator[Tag]
"""
Expand Down
56 changes: 42 additions & 14 deletions tests/test_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,45 @@ def test_multi_platform(self):
assert given == expected


class TestInterpreterName:
def test_sys_implementation_name(self, monkeypatch):
monkeypatch.setattr(sys.implementation, "name", "sillywalk")
assert tags.interpreter_name() == "sillywalk"

def test_platform(self, monkeypatch):
monkeypatch.delattr(sys.implementation, "name")
name = "SillyWalk"
monkeypatch.setattr(platform, "python_implementation", lambda: name)
assert tags.interpreter_name() == name.lower()

def test_interpreter_short_names(self, monkeypatch):
monkeypatch.setattr(sys.implementation, "name", "cpython")
assert tags.interpreter_name() == "cp"


class TestInterpreterVersion:
def test_warn(self, monkeypatch):
called_with_warn = False

def get_config_var(var, warn):
nonlocal called_with_warn
called_with_warn = warn
return "38"

monkeypatch.setattr(tags, "_get_config_var", get_config_var)
tags.interpreter_version(warn=True)
assert called_with_warn

def test_python_version_nodot(self, monkeypatch):
monkeypatch.setattr(tags, "_get_config_var", lambda var, warn: "NN")
assert tags.interpreter_version() == "NN"

def test_sys_version_info(self, monkeypatch):
monkeypatch.setattr(tags, "_get_config_var", lambda *args, **kwargs: None)
monkeypatch.setattr(sys, "version_info", ("L", "M", "N"))
assert tags.interpreter_version() == "LM"


class TestMacOSPlatforms:
@pytest.mark.parametrize(
"arch, is_32bit, expected",
Expand Down Expand Up @@ -585,18 +624,6 @@ def test_skip_redundant_abis(self, abis):


class TestGenericTags:
def test_generic_interpreter(self, monkeypatch):
monkeypatch.setattr(sysconfig, "get_config_var", lambda key: "42")
monkeypatch.setattr(tags, "interpreter_name", lambda: "sillywalk")
assert tags._generic_interpreter() == "sillywalk42"

def test_generic_interpreter_no_config_var(self, monkeypatch):
monkeypatch.setattr(sysconfig, "get_config_var", lambda _: None)
monkeypatch.setattr(tags, "interpreter_name", lambda: "sillywalk")
assert tags._generic_interpreter() == "sillywalk{}{}".format(
*sys.version_info[:2]
)

@pytest.mark.skipif(
not sysconfig.get_config_var("SOABI"), reason="SOABI not defined"
)
Expand Down Expand Up @@ -642,9 +669,10 @@ def test_abi_unspecified(self, abi):
]

def test_interpreter_default(self, monkeypatch):
monkeypatch.setattr(tags, "_generic_interpreter", lambda warn: "sillywalk")
monkeypatch.setattr(tags, "interpreter_name", lambda: "sillywalk")
monkeypatch.setattr(tags, "interpreter_version", lambda warn: "NN")
result = list(tags.generic_tags(abis=["none"], platforms=["any"]))
assert result == [tags.Tag("sillywalk", "none", "any")]
assert result == [tags.Tag("sillywalkNN", "none", "any")]

def test_abis_default(self, monkeypatch):
monkeypatch.setattr(tags, "_generic_abi", lambda: iter(["abi"]))
Expand Down