Skip to content

Commit aa002ee

Browse files
committedNov 18, 2022
require python 3.8.1+
1 parent 16c371d commit aa002ee

File tree

12 files changed

+70
-94
lines changed

12 files changed

+70
-94
lines changed
 

‎.github/workflows/main.yml

+9-9
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,7 @@ jobs:
1313
include:
1414
# linux
1515
- os: ubuntu-latest
16-
python: pypy-3.7
17-
toxenv: py
18-
- os: ubuntu-latest
19-
python: 3.7
16+
python: pypy-3.8
2017
toxenv: py
2118
- os: ubuntu-latest
2219
python: 3.8
@@ -25,21 +22,24 @@ jobs:
2522
python: 3.9
2623
toxenv: py
2724
- os: ubuntu-latest
28-
python: '3.10.0-alpha - 3.10.999'
25+
python: '3.10'
26+
toxenv: py
27+
- os: ubuntu-latest
28+
python: '3.11'
2929
toxenv: py
3030
# windows
3131
- os: windows-latest
32-
python: 3.7
32+
python: 3.8
3333
toxenv: py
3434
# misc
3535
- os: ubuntu-latest
36-
python: 3.9
36+
python: '3.10'
3737
toxenv: docs
3838
- os: ubuntu-latest
39-
python: 3.9
39+
python: '3.10'
4040
toxenv: linters
4141
- os: ubuntu-latest
42-
python: 3.9
42+
python: '3.10'
4343
toxenv: dogfood
4444
runs-on: ${{ matrix.os }}
4545
steps:

‎.pre-commit-config.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ repos:
1313
- id: reorder-python-imports
1414
args: [
1515
--application-directories, '.:src',
16-
--py37-plus,
16+
--py38-plus,
1717
--add-import, 'from __future__ import annotations',
1818
]
1919
- repo: https://github.com/asottile/pyupgrade
2020
rev: v3.2.2
2121
hooks:
2222
- id: pyupgrade
23-
args: [--py37-plus]
23+
args: [--py38-plus]
2424
- repo: https://github.com/psf/black
2525
rev: 22.10.0
2626
hooks:

‎setup.cfg

+2-6
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ classifiers =
2020
Programming Language :: Python
2121
Programming Language :: Python :: 3
2222
Programming Language :: Python :: 3 :: Only
23-
Programming Language :: Python :: 3.7
24-
Programming Language :: Python :: 3.8
25-
Programming Language :: Python :: 3.9
26-
Programming Language :: Python :: 3.10
2723
Programming Language :: Python :: Implementation :: CPython
2824
Programming Language :: Python :: Implementation :: PyPy
2925
Topic :: Software Development :: Libraries :: Python Modules
@@ -41,8 +37,8 @@ install_requires =
4137
mccabe>=0.7.0,<0.8.0
4238
pycodestyle>=2.9.0,<2.10.0
4339
pyflakes>=2.5.0,<2.6.0
44-
importlib-metadata>=1.1.0,<4.3;python_version<"3.8"
45-
python_requires = >=3.7
40+
# 3.8.0's importlib.metadata is broken
41+
python_requires = >=3.8.1
Has comments. Original line has comments.
4642

4743
[options.packages.find]
4844
where = src

‎src/flake8/_compat.py

-18
This file was deleted.

‎src/flake8/plugins/finder.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from __future__ import annotations
33

44
import configparser
5+
import importlib.metadata
56
import inspect
67
import itertools
78
import logging
@@ -12,7 +13,6 @@
1213
from typing import NamedTuple
1314

1415
from flake8 import utils
15-
from flake8._compat import importlib_metadata
1616
from flake8.defaults import VALID_CODE_PREFIX
1717
from flake8.exceptions import ExecutionError
1818
from flake8.exceptions import FailedToLoadPlugin
@@ -32,7 +32,7 @@ class Plugin(NamedTuple):
3232

3333
package: str
3434
version: str
35-
entry_point: importlib_metadata.EntryPoint
35+
entry_point: importlib.metadata.EntryPoint
3636

3737

3838
class LoadedPlugin(NamedTuple):
@@ -148,12 +148,12 @@ def parse_plugin_options(
148148

149149

150150
def _flake8_plugins(
151-
eps: Iterable[importlib_metadata.EntryPoint],
151+
eps: Iterable[importlib.metadata.EntryPoint],
152152
name: str,
153153
version: str,
154154
) -> Generator[Plugin, None, None]:
155-
pyflakes_meta = importlib_metadata.distribution("pyflakes").metadata
156-
pycodestyle_meta = importlib_metadata.distribution("pycodestyle").metadata
155+
pyflakes_meta = importlib.metadata.distribution("pyflakes").metadata
156+
pycodestyle_meta = importlib.metadata.distribution("pycodestyle").metadata
157157

158158
for ep in eps:
159159
if ep.group not in FLAKE8_GROUPS:
@@ -176,7 +176,7 @@ def _flake8_plugins(
176176
def _find_importlib_plugins() -> Generator[Plugin, None, None]:
177177
# some misconfigured pythons (RHEL) have things on `sys.path` twice
178178
seen = set()
179-
for dist in importlib_metadata.distributions():
179+
for dist in importlib.metadata.distributions():
180180
# assigned to prevent continual reparsing
181181
eps = dist.entry_points
182182

@@ -221,7 +221,7 @@ def _find_local_plugins(
221221
):
222222
name, _, entry_str = plugin_s.partition("=")
223223
name, entry_str = name.strip(), entry_str.strip()
224-
ep = importlib_metadata.EntryPoint(name, entry_str, group)
224+
ep = importlib.metadata.EntryPoint(name, entry_str, group)
225225
yield Plugin("local", "local", ep)
226226

227227

‎tests/integration/test_checker.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
"""Integration tests for the checker submodule."""
22
from __future__ import annotations
33

4+
import importlib.metadata
45
import sys
56
from unittest import mock
67

78
import pytest
89

910
from flake8 import checker
10-
from flake8._compat import importlib_metadata
1111
from flake8.plugins import finder
1212
from flake8.processor import FileProcessor
1313

@@ -85,7 +85,7 @@ def mock_file_checker_with_plugin(plugin_target):
8585
finder.Plugin(
8686
"flake-package",
8787
"9001",
88-
importlib_metadata.EntryPoint(
88+
importlib.metadata.EntryPoint(
8989
"Q",
9090
f"{plugin_target.__module__}:{plugin_target.__name__}",
9191
"flake8.extension",

‎tests/integration/test_main.py

-2
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,6 @@ def test_tokenization_error_but_not_syntax_error(tmpdir, capsys):
170170

171171
if hasattr(sys, "pypy_version_info"): # pragma: no cover (pypy)
172172
expected = "t.py:2:1: E999 SyntaxError: end of file (EOF) in multi-line statement\n" # noqa: E501
173-
elif sys.version_info < (3, 8): # pragma: no cover (<cp38)
174-
expected = "t.py:2:1: E902 TokenError: EOF in multi-line statement\n"
175173
elif sys.version_info < (3, 10): # pragma: no cover (cp38+)
176174
expected = "t.py:1:8: E999 SyntaxError: unexpected EOF while parsing\n"
177175
else: # pragma: no cover (cp310+)

‎tests/unit/plugins/finder_test.py

+41-41
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
from __future__ import annotations
22

33
import configparser
4+
import importlib.metadata
45
import sys
56
from unittest import mock
67

78
import pytest
89

9-
from flake8._compat import importlib_metadata
1010
from flake8.exceptions import ExecutionError
1111
from flake8.exceptions import FailedToLoadPlugin
1212
from flake8.plugins import finder
1313
from flake8.plugins.pyflakes import FlakesChecker
1414

1515

1616
def _ep(name="X", value="dne:dne", group="flake8.extension"):
17-
return importlib_metadata.EntryPoint(name, value, group)
17+
return importlib.metadata.EntryPoint(name, value, group)
1818

1919

2020
def _plugin(package="local", version="local", ep=None):
@@ -91,7 +91,7 @@ def pyflakes_dist(tmp_path):
9191
d = tmp_path.joinpath("pyflakes.dist-info")
9292
d.mkdir()
9393
d.joinpath("METADATA").write_text(metadata)
94-
return importlib_metadata.PathDistribution(d)
94+
return importlib.metadata.PathDistribution(d)
9595

9696

9797
@pytest.fixture
@@ -104,7 +104,7 @@ def pycodestyle_dist(tmp_path):
104104
d = tmp_path.joinpath("pycodestyle.dist-info")
105105
d.mkdir()
106106
d.joinpath("METADATA").write_text(metadata)
107-
return importlib_metadata.PathDistribution(d)
107+
return importlib.metadata.PathDistribution(d)
108108

109109

110110
@pytest.fixture
@@ -131,7 +131,7 @@ def flake8_dist(tmp_path):
131131
d.mkdir()
132132
d.joinpath("METADATA").write_text(metadata)
133133
d.joinpath("entry_points.txt").write_text(entry_points)
134-
return importlib_metadata.PathDistribution(d)
134+
return importlib.metadata.PathDistribution(d)
135135

136136

137137
@pytest.fixture
@@ -153,13 +153,13 @@ def flake8_foo_dist(tmp_path):
153153
d.mkdir()
154154
d.joinpath("METADATA").write_text(metadata)
155155
d.joinpath("entry_points.txt").write_text(eps)
156-
return importlib_metadata.PathDistribution(d)
156+
return importlib.metadata.PathDistribution(d)
157157

158158

159159
@pytest.fixture
160160
def mock_distribution(pyflakes_dist, pycodestyle_dist):
161161
dists = {"pyflakes": pyflakes_dist, "pycodestyle": pycodestyle_dist}
162-
with mock.patch.object(importlib_metadata, "distribution", dists.get):
162+
with mock.patch.object(importlib.metadata, "distribution", dists.get):
163163
yield
164164

165165

@@ -172,7 +172,7 @@ def test_flake8_plugins(flake8_dist, mock_distribution):
172172
finder.Plugin(
173173
"pyflakes",
174174
"9000.1.0",
175-
importlib_metadata.EntryPoint(
175+
importlib.metadata.EntryPoint(
176176
"F",
177177
"flake8.plugins.pyflakes:FlakesChecker",
178178
"flake8.extension",
@@ -181,7 +181,7 @@ def test_flake8_plugins(flake8_dist, mock_distribution):
181181
finder.Plugin(
182182
"pycodestyle",
183183
"9000.2.0",
184-
importlib_metadata.EntryPoint(
184+
importlib.metadata.EntryPoint(
185185
"E",
186186
"flake8.plugins.pycodestyle:pycodestyle_logical",
187187
"flake8.extension",
@@ -190,7 +190,7 @@ def test_flake8_plugins(flake8_dist, mock_distribution):
190190
finder.Plugin(
191191
"pycodestyle",
192192
"9000.2.0",
193-
importlib_metadata.EntryPoint(
193+
importlib.metadata.EntryPoint(
194194
"W",
195195
"flake8.plugins.pycodestyle:pycodestyle_physical",
196196
"flake8.extension",
@@ -199,14 +199,14 @@ def test_flake8_plugins(flake8_dist, mock_distribution):
199199
finder.Plugin(
200200
"flake8",
201201
"9001",
202-
importlib_metadata.EntryPoint(
202+
importlib.metadata.EntryPoint(
203203
"default", "flake8.formatting.default:Default", "flake8.report"
204204
),
205205
),
206206
finder.Plugin(
207207
"flake8",
208208
"9001",
209-
importlib_metadata.EntryPoint(
209+
importlib.metadata.EntryPoint(
210210
"pylint", "flake8.formatting.default:Pylint", "flake8.report"
211211
),
212212
),
@@ -220,7 +220,7 @@ def test_importlib_plugins(
220220
mock_distribution,
221221
caplog,
222222
):
223-
"""Ensure we can load plugins from importlib_metadata."""
223+
"""Ensure we can load plugins from importlib.metadata."""
224224

225225
# make sure flake8-colors is skipped
226226
flake8_colors_metadata = """\
@@ -236,7 +236,7 @@ def test_importlib_plugins(
236236
flake8_colors_d.mkdir()
237237
flake8_colors_d.joinpath("METADATA").write_text(flake8_colors_metadata)
238238
flake8_colors_d.joinpath("entry_points.txt").write_text(flake8_colors_eps)
239-
flake8_colors_dist = importlib_metadata.PathDistribution(flake8_colors_d)
239+
flake8_colors_dist = importlib.metadata.PathDistribution(flake8_colors_d)
240240

241241
unrelated_metadata = """\
242242
Metadata-Version: 2.1
@@ -251,10 +251,10 @@ def test_importlib_plugins(
251251
unrelated_d.mkdir()
252252
unrelated_d.joinpath("METADATA").write_text(unrelated_metadata)
253253
unrelated_d.joinpath("entry_points.txt").write_text(unrelated_eps)
254-
unrelated_dist = importlib_metadata.PathDistribution(unrelated_d)
254+
unrelated_dist = importlib.metadata.PathDistribution(unrelated_d)
255255

256256
with mock.patch.object(
257-
importlib_metadata,
257+
importlib.metadata,
258258
"distributions",
259259
return_value=[
260260
flake8_dist,
@@ -269,14 +269,14 @@ def test_importlib_plugins(
269269
finder.Plugin(
270270
"flake8-foo",
271271
"1.2.3",
272-
importlib_metadata.EntryPoint(
272+
importlib.metadata.EntryPoint(
273273
"Q", "flake8_foo:Plugin", "flake8.extension"
274274
),
275275
),
276276
finder.Plugin(
277277
"pycodestyle",
278278
"9000.2.0",
279-
importlib_metadata.EntryPoint(
279+
importlib.metadata.EntryPoint(
280280
"E",
281281
"flake8.plugins.pycodestyle:pycodestyle_logical",
282282
"flake8.extension",
@@ -285,7 +285,7 @@ def test_importlib_plugins(
285285
finder.Plugin(
286286
"pycodestyle",
287287
"9000.2.0",
288-
importlib_metadata.EntryPoint(
288+
importlib.metadata.EntryPoint(
289289
"W",
290290
"flake8.plugins.pycodestyle:pycodestyle_physical",
291291
"flake8.extension",
@@ -294,7 +294,7 @@ def test_importlib_plugins(
294294
finder.Plugin(
295295
"pyflakes",
296296
"9000.1.0",
297-
importlib_metadata.EntryPoint(
297+
importlib.metadata.EntryPoint(
298298
"F",
299299
"flake8.plugins.pyflakes:FlakesChecker",
300300
"flake8.extension",
@@ -303,21 +303,21 @@ def test_importlib_plugins(
303303
finder.Plugin(
304304
"flake8",
305305
"9001",
306-
importlib_metadata.EntryPoint(
306+
importlib.metadata.EntryPoint(
307307
"default", "flake8.formatting.default:Default", "flake8.report"
308308
),
309309
),
310310
finder.Plugin(
311311
"flake8",
312312
"9001",
313-
importlib_metadata.EntryPoint(
313+
importlib.metadata.EntryPoint(
314314
"pylint", "flake8.formatting.default:Pylint", "flake8.report"
315315
),
316316
),
317317
finder.Plugin(
318318
"flake8-foo",
319319
"1.2.3",
320-
importlib_metadata.EntryPoint(
320+
importlib.metadata.EntryPoint(
321321
"foo", "flake8_foo:Formatter", "flake8.report"
322322
),
323323
),
@@ -336,7 +336,7 @@ def test_duplicate_dists(flake8_dist):
336336
# some poorly packaged pythons put lib and lib64 on sys.path resulting in
337337
# duplicates from `importlib.metadata.distributions`
338338
with mock.patch.object(
339-
importlib_metadata,
339+
importlib.metadata,
340340
"distributions",
341341
return_value=[
342342
flake8_dist,
@@ -369,7 +369,7 @@ def test_find_local_plugins(local_plugin_cfg):
369369
finder.Plugin(
370370
"local",
371371
"local",
372-
importlib_metadata.EntryPoint(
372+
importlib.metadata.EntryPoint(
373373
"X",
374374
"mod:attr",
375375
"flake8.extension",
@@ -378,7 +378,7 @@ def test_find_local_plugins(local_plugin_cfg):
378378
finder.Plugin(
379379
"local",
380380
"local",
381-
importlib_metadata.EntryPoint(
381+
importlib.metadata.EntryPoint(
382382
"Y",
383383
"mod2:attr",
384384
"flake8.extension",
@@ -387,7 +387,7 @@ def test_find_local_plugins(local_plugin_cfg):
387387
finder.Plugin(
388388
"local",
389389
"local",
390-
importlib_metadata.EntryPoint(
390+
importlib.metadata.EntryPoint(
391391
"Z",
392392
"mod3:attr",
393393
"flake8.report",
@@ -474,7 +474,7 @@ def test_find_plugins(
474474
):
475475
opts = finder.PluginOptions.blank()
476476
with mock.patch.object(
477-
importlib_metadata,
477+
importlib.metadata,
478478
"distributions",
479479
return_value=[flake8_dist, flake8_foo_dist],
480480
):
@@ -484,52 +484,52 @@ def test_find_plugins(
484484
finder.Plugin(
485485
"flake8",
486486
"9001",
487-
importlib_metadata.EntryPoint(
487+
importlib.metadata.EntryPoint(
488488
"default", "flake8.formatting.default:Default", "flake8.report"
489489
),
490490
),
491491
finder.Plugin(
492492
"flake8",
493493
"9001",
494-
importlib_metadata.EntryPoint(
494+
importlib.metadata.EntryPoint(
495495
"pylint", "flake8.formatting.default:Pylint", "flake8.report"
496496
),
497497
),
498498
finder.Plugin(
499499
"flake8-foo",
500500
"1.2.3",
501-
importlib_metadata.EntryPoint(
501+
importlib.metadata.EntryPoint(
502502
"Q", "flake8_foo:Plugin", "flake8.extension"
503503
),
504504
),
505505
finder.Plugin(
506506
"flake8-foo",
507507
"1.2.3",
508-
importlib_metadata.EntryPoint(
508+
importlib.metadata.EntryPoint(
509509
"foo", "flake8_foo:Formatter", "flake8.report"
510510
),
511511
),
512512
finder.Plugin(
513513
"local",
514514
"local",
515-
importlib_metadata.EntryPoint("X", "mod:attr", "flake8.extension"),
515+
importlib.metadata.EntryPoint("X", "mod:attr", "flake8.extension"),
516516
),
517517
finder.Plugin(
518518
"local",
519519
"local",
520-
importlib_metadata.EntryPoint(
520+
importlib.metadata.EntryPoint(
521521
"Y", "mod2:attr", "flake8.extension"
522522
),
523523
),
524524
finder.Plugin(
525525
"local",
526526
"local",
527-
importlib_metadata.EntryPoint("Z", "mod3:attr", "flake8.report"),
527+
importlib.metadata.EntryPoint("Z", "mod3:attr", "flake8.report"),
528528
),
529529
finder.Plugin(
530530
"pycodestyle",
531531
"9000.2.0",
532-
importlib_metadata.EntryPoint(
532+
importlib.metadata.EntryPoint(
533533
"E",
534534
"flake8.plugins.pycodestyle:pycodestyle_logical",
535535
"flake8.extension",
@@ -538,7 +538,7 @@ def test_find_plugins(
538538
finder.Plugin(
539539
"pycodestyle",
540540
"9000.2.0",
541-
importlib_metadata.EntryPoint(
541+
importlib.metadata.EntryPoint(
542542
"W",
543543
"flake8.plugins.pycodestyle:pycodestyle_physical",
544544
"flake8.extension",
@@ -547,7 +547,7 @@ def test_find_plugins(
547547
finder.Plugin(
548548
"pyflakes",
549549
"9000.1.0",
550-
importlib_metadata.EntryPoint(
550+
importlib.metadata.EntryPoint(
551551
"F",
552552
"flake8.plugins.pyflakes:FlakesChecker",
553553
"flake8.extension",
@@ -570,7 +570,7 @@ def test_find_plugins_plugin_is_present(flake8_foo_dist):
570570
)
571571

572572
with mock.patch.object(
573-
importlib_metadata,
573+
importlib.metadata,
574574
"distributions",
575575
return_value=[flake8_foo_dist],
576576
):
@@ -593,7 +593,7 @@ def test_find_plugins_plugin_is_missing(flake8_dist, flake8_foo_dist):
593593
)
594594

595595
with mock.patch.object(
596-
importlib_metadata,
596+
importlib.metadata,
597597
"distributions",
598598
return_value=[flake8_dist],
599599
):
@@ -623,7 +623,7 @@ def test_find_plugins_name_normalization(flake8_foo_dist):
623623
)
624624

625625
with mock.patch.object(
626-
importlib_metadata,
626+
importlib.metadata,
627627
"distributions",
628628
return_value=[flake8_foo_dist],
629629
):

‎tests/unit/plugins/reporter_test.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
from __future__ import annotations
22

33
import argparse
4+
import importlib.metadata
45

56
import pytest
67

7-
from flake8._compat import importlib_metadata
88
from flake8.formatting import default
99
from flake8.plugins import finder
1010
from flake8.plugins import reporter
@@ -24,7 +24,7 @@ def _plugin(name, cls):
2424
finder.Plugin(
2525
"flake8",
2626
"123",
27-
importlib_metadata.EntryPoint(
27+
importlib.metadata.EntryPoint(
2828
name, f"{cls.__module__}:{cls.__name__}", "flake8.report"
2929
),
3030
),

‎tests/unit/test_debug.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from __future__ import annotations
22

3+
import importlib.metadata
34
from unittest import mock
45

5-
from flake8._compat import importlib_metadata
66
from flake8.main import debug
77
from flake8.plugins import finder
88

@@ -13,7 +13,7 @@ def _plugin(pkg, version, ep_name):
1313
finder.Plugin(
1414
pkg,
1515
version,
16-
importlib_metadata.EntryPoint(
16+
importlib.metadata.EntryPoint(
1717
ep_name, "dne:dne", "flake8.extension"
1818
),
1919
),

‎tests/unit/test_file_checker.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
from __future__ import annotations
33

44
import argparse
5+
import importlib.metadata
56
from unittest import mock
67

78
import pytest
89

910
import flake8
1011
from flake8 import checker
11-
from flake8._compat import importlib_metadata
1212
from flake8.plugins import finder
1313

1414

@@ -46,7 +46,7 @@ def test_raises_exception_on_failed_plugin(tmp_path, default_options):
4646
finder.Plugin(
4747
"plugin-name",
4848
"1.2.3",
49-
importlib_metadata.EntryPoint("X", "dne:dne", "flake8.extension"),
49+
importlib.metadata.EntryPoint("X", "dne:dne", "flake8.extension"),
5050
),
5151
mock.Mock(side_effect=ValueError),
5252
{},

‎tox.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tox]
22
minversion=2.3.1
3-
envlist = py37,py38,flake8,linters,docs
3+
envlist = py,flake8,linters,docs
44

55
[testenv]
66
deps =

0 commit comments

Comments
 (0)
Please sign in to comment.