Skip to content

Commit b0c0c45

Browse files
authored
Replace platform import (#1459)
1 parent 128e50f commit b0c0c45

11 files changed

+23
-32
lines changed

astroid/const.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import enum
2-
import platform
32
import sys
43

54
PY36 = sys.version_info[:2] == (3, 6)
@@ -12,7 +11,8 @@
1211

1312
WIN32 = sys.platform == "win32"
1413

15-
IMPLEMENTATION_PYPY = platform.python_implementation() == "PyPy"
14+
IS_PYPY = sys.implementation.name == "pypy"
15+
IS_JYTHON = sys.implementation.name == "jython"
1616

1717

1818
class Context(enum.Enum):

astroid/modutils.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@
4646
import importlib.util
4747
import itertools
4848
import os
49-
import platform
5049
import sys
5150
import sysconfig
5251
import types
5352
from pathlib import Path
5453
from typing import Dict, Set
5554

55+
from astroid.const import IS_JYTHON, IS_PYPY
5656
from astroid.interpreter._import import spec, util
5757

5858
if sys.platform.startswith("win"):
@@ -84,7 +84,7 @@
8484
except AttributeError:
8585
pass
8686

87-
if platform.python_implementation() == "PyPy" and sys.version_info < (3, 8):
87+
if IS_PYPY and sys.version_info < (3, 8):
8888
# PyPy stores the stdlib in two places: sys.prefix/lib_pypy and sys.prefix/lib-python/3
8989
# sysconfig.get_path on PyPy returns the first, but without an underscore so we patch this manually.
9090
# Beginning with 3.8 the stdlib is only stored in: sys.prefix/pypy{py_version_short}
@@ -124,7 +124,6 @@ def _posix_path(path):
124124
STD_LIB_DIRS.add(_posix_path("lib64"))
125125

126126
EXT_LIB_DIRS = {sysconfig.get_path("purelib"), sysconfig.get_path("platlib")}
127-
IS_JYTHON = platform.python_implementation() == "Jython"
128127
BUILTIN_MODULES = dict.fromkeys(sys.builtin_module_names, True)
129128

130129

astroid/nodes/scoped_nodes/scoped_nodes.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
from astroid import bases
5858
from astroid import decorators as decorators_mod
5959
from astroid import mixins, util
60-
from astroid.const import IMPLEMENTATION_PYPY, PY38, PY38_PLUS, PY39_PLUS
60+
from astroid.const import IS_PYPY, PY38, PY38_PLUS, PY39_PLUS
6161
from astroid.context import (
6262
CallContext,
6363
InferenceContext,
@@ -2399,7 +2399,7 @@ def _newstyle_impl(self, context=None):
23992399
@cached_property
24002400
def fromlineno(self) -> Optional[int]:
24012401
"""The first line that this node appears on in the source code."""
2402-
if not PY38_PLUS or PY38 and IMPLEMENTATION_PYPY:
2402+
if not PY38_PLUS or PY38 and IS_PYPY:
24032403
# For Python < 3.8 the lineno is the line number of the first decorator.
24042404
# We want the class statement lineno. Similar to 'FunctionDef.fromlineno'
24052405
lineno = self.lineno

astroid/rebuilder.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454

5555
from astroid import nodes
5656
from astroid._ast import ParserModule, get_parser_module, parse_function_type_comment
57-
from astroid.const import IMPLEMENTATION_PYPY, PY36, PY38, PY38_PLUS, PY39_PLUS, Context
57+
from astroid.const import IS_PYPY, PY36, PY38, PY38_PLUS, PY39_PLUS, Context
5858
from astroid.manager import AstroidManager
5959
from astroid.nodes import NodeNG
6060
from astroid.nodes.utils import Position
@@ -224,7 +224,7 @@ def _fix_doc_node_position(self, node: NodesWithDocsType) -> None:
224224

225225
lineno = node.lineno or 1 # lineno of modules is 0
226226
end_range: Optional[int] = node.doc_node.lineno
227-
if IMPLEMENTATION_PYPY and not PY39_PLUS:
227+
if IS_PYPY and not PY39_PLUS:
228228
end_range = None
229229
# pylint: disable-next=unsubscriptable-object
230230
data = "\n".join(self._data[lineno - 1 : end_range])
@@ -312,7 +312,7 @@ def visit_module(
312312
doc_node=self.visit(doc_ast_node, newnode),
313313
)
314314
self._fix_doc_node_position(newnode)
315-
if IMPLEMENTATION_PYPY and PY38:
315+
if IS_PYPY and PY38:
316316
self._reset_end_lineno(newnode)
317317
return newnode
318318

tests/unittest_builder.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
import pytest
4444

4545
from astroid import Instance, builder, nodes, test_utils, util
46-
from astroid.const import IMPLEMENTATION_PYPY, PY38, PY38_PLUS, PY39_PLUS
46+
from astroid.const import IS_PYPY, PY38, PY38_PLUS, PY39_PLUS
4747
from astroid.exceptions import (
4848
AstroidBuildingError,
4949
AstroidSyntaxError,
@@ -79,7 +79,7 @@ def test_callfunc_lineno(self) -> None:
7979
self.assertEqual(name.tolineno, 4)
8080
strarg = callfunc.args[0]
8181
self.assertIsInstance(strarg, nodes.Const)
82-
if IMPLEMENTATION_PYPY:
82+
if IS_PYPY:
8383
self.assertEqual(strarg.fromlineno, 4)
8484
if not PY39_PLUS:
8585
self.assertEqual(strarg.tolineno, 4)
@@ -187,7 +187,7 @@ class C:
187187

188188
c = ast_module.body[2]
189189
assert isinstance(c, nodes.ClassDef)
190-
if not PY38_PLUS or PY38 and IMPLEMENTATION_PYPY:
190+
if not PY38_PLUS or PY38 and IS_PYPY:
191191
# Not perfect, but best we can do for Python 3.7 and PyPy 3.8
192192
# Can't detect closing bracket on new line.
193193
assert c.fromlineno == 12

tests/unittest_inference.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444

4545
"""Tests for the astroid inference capabilities"""
4646

47-
import platform
4847
import textwrap
4948
import unittest
5049
from abc import ABCMeta
@@ -61,7 +60,7 @@
6160
from astroid.arguments import CallSite
6261
from astroid.bases import BoundMethod, Instance, UnboundMethod
6362
from astroid.builder import AstroidBuilder, extract_node, parse
64-
from astroid.const import PY38_PLUS, PY39_PLUS
63+
from astroid.const import IS_PYPY, PY38_PLUS, PY39_PLUS
6564
from astroid.context import InferenceContext
6665
from astroid.exceptions import (
6766
AstroidTypeError,
@@ -858,7 +857,7 @@ def test_builtin_open(self) -> None:
858857
self.assertIsInstance(inferred[0], nodes.FunctionDef)
859858
self.assertEqual(inferred[0].name, "open")
860859

861-
if platform.python_implementation() == "PyPy":
860+
if IS_PYPY:
862861
test_builtin_open = unittest.expectedFailure(test_builtin_open)
863862

864863
def test_callfunc_context_func(self) -> None:

tests/unittest_manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
# For details: https://github.com/PyCQA/astroid/blob/main/LICENSE
2525

2626
import os
27-
import platform
2827
import site
2928
import sys
3029
import time
@@ -36,13 +35,14 @@
3635

3736
import astroid
3837
from astroid import manager, test_utils
38+
from astroid.const import IS_JYTHON
3939
from astroid.exceptions import AstroidBuildingError, AstroidImportError
4040

4141
from . import resources
4242

4343

4444
def _get_file_from_object(obj) -> str:
45-
if platform.python_implementation() == "Jython":
45+
if IS_JYTHON:
4646
return obj.__file__.split("$py.class")[0] + ".py"
4747
return obj.__file__
4848

tests/unittest_nodes.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
"""
3434
import copy
3535
import os
36-
import platform
3736
import sys
3837
import textwrap
3938
import unittest
@@ -290,12 +289,6 @@ def func(param: Tuple):
290289
ast = abuilder.string_build(code)
291290
self.assertEqual(ast.as_string().strip(), code.strip())
292291

293-
# This test is disabled on PyPy because we cannot get a release that has proper
294-
# support for f-strings (we need 7.2 at least)
295-
@pytest.mark.skipif(
296-
platform.python_implementation() == "PyPy",
297-
reason="Needs f-string support.",
298-
)
299292
def test_f_strings(self):
300293
code = r'''
301294
a = f"{'a'}"

tests/unittest_nodes_lineno.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
import astroid
66
from astroid import builder, nodes
7-
from astroid.const import IMPLEMENTATION_PYPY, PY38, PY38_PLUS, PY39_PLUS, PY310_PLUS
7+
from astroid.const import IS_PYPY, PY38, PY38_PLUS, PY39_PLUS, PY310_PLUS
88

99

1010
@pytest.mark.skipif(
11-
PY38_PLUS and not (PY38 and IMPLEMENTATION_PYPY),
11+
PY38_PLUS and not (PY38 and IS_PYPY),
1212
reason="end_lineno and end_col_offset were added in PY38",
1313
)
1414
class TestEndLinenoNotSet:
@@ -37,7 +37,7 @@ def test_end_lineno_not_set() -> None:
3737

3838

3939
@pytest.mark.skipif(
40-
not PY38_PLUS or PY38 and IMPLEMENTATION_PYPY,
40+
not PY38_PLUS or PY38 and IS_PYPY,
4141
reason="end_lineno and end_col_offset were added in PY38",
4242
)
4343
class TestLinenoColOffset:

tests/unittest_raw_building.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
1414
# For details: https://github.com/PyCQA/astroid/blob/main/LICENSE
1515

16-
import platform
1716
import unittest
1817

1918
import _io
2019
import pytest
2120

2221
from astroid.builder import AstroidBuilder
22+
from astroid.const import IS_PYPY
2323
from astroid.raw_building import (
2424
attach_dummy_node,
2525
build_class,
@@ -85,7 +85,7 @@ def test_build_from_import(self) -> None:
8585
node = build_from_import("astroid", names)
8686
self.assertEqual(len(names), len(node.names))
8787

88-
@unittest.skipIf(platform.python_implementation() == "PyPy", "Only affects CPython")
88+
@unittest.skipIf(IS_PYPY, "Only affects CPython")
8989
def test_io_is__io(self):
9090
# _io module calls itself io. This leads
9191
# to cyclic dependencies when astroid tries to resolve

0 commit comments

Comments
 (0)