Skip to content

Commit 0ed0396

Browse files
author
Guido van Rossum
committed
Drop Python 3.2 support.
Tighten parsing of Python version on command line and in config file. The only versions now supported are: - 2.7 - 3.3 and higher 3.x versions Closes #3231.
1 parent 09b6d4b commit 0ed0396

File tree

3 files changed

+25
-11
lines changed

3 files changed

+25
-11
lines changed

mypy/main.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,22 @@ def __getattr__(self, name: str) -> Any:
121121

122122
def parse_version(v: str) -> Tuple[int, int]:
123123
m = re.match(r'\A(\d)\.(\d+)\Z', v)
124-
if m:
125-
return int(m.group(1)), int(m.group(2))
126-
else:
124+
if not m:
127125
raise argparse.ArgumentTypeError(
128126
"Invalid python version '{}' (expected format: 'x.y')".format(v))
127+
major, minor = int(m.group(1)), int(m.group(2))
128+
if major == 2:
129+
if minor != 7:
130+
raise argparse.ArgumentTypeError(
131+
"Python 2.{} is not supported (must be 2.7)".format(minor))
132+
elif major == 3:
133+
if minor <= 2:
134+
raise argparse.ArgumentTypeError(
135+
"Python 3.{} is not supported (must be 3.3 or higher)".format(minor))
136+
else:
137+
raise argparse.ArgumentTypeError(
138+
"Python major version '{}' out of range (must be 2 or 3)".format(major))
139+
return major, minor
129140

130141

131142
# Make the help output a little less jarring.
@@ -553,8 +564,7 @@ def get_init_file(dir: str) -> Optional[str]:
553564
# exists to specify types for values initialized to None or container
554565
# types.
555566
config_types = {
556-
# TODO: Check validity of python version
557-
'python_version': lambda s: tuple(map(int, s.split('.'))),
567+
'python_version': parse_version,
558568
'strict_optional_whitelist': lambda s: s.split(),
559569
'custom_typing_module': str,
560570
'custom_typeshed_dir': str,
@@ -663,7 +673,11 @@ def parse_section(prefix: str, template: Options,
663673
if ct is bool:
664674
v = section.getboolean(key) # type: ignore # Until better stub
665675
elif callable(ct):
666-
v = ct(section.get(key))
676+
try:
677+
v = ct(section.get(key))
678+
except argparse.ArgumentTypeError as err:
679+
print("%s: %s: %s" % (prefix, key, err), file=sys.stderr)
680+
continue
667681
else:
668682
print("%s: Don't know what type %s should have" % (prefix, key), file=sys.stderr)
669683
continue

mypy/test/testcheck.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from typing import Dict, List, Optional, Set, Tuple
1111

1212
from mypy import build, defaults
13-
from mypy.main import parse_version, process_options
13+
from mypy.main import process_options
1414
from mypy.build import BuildSource, find_module_clear_caches
1515
from mypy.myunit import AssertionFailure
1616
from mypy.test.config import test_temp_dir, test_data_prefix

test-data/unit/check-unreachable-code.test

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -404,9 +404,9 @@ x = 1
404404
[out]
405405

406406
[case testCustomSysVersionInfo]
407-
# flags: --python-version 3.2
407+
# flags: --python-version 3.5
408408
import sys
409-
if sys.version_info == (3, 2):
409+
if sys.version_info == (3, 5):
410410
x = "foo"
411411
else:
412412
x = 3
@@ -415,9 +415,9 @@ reveal_type(x) # E: Revealed type is 'builtins.str'
415415
[out]
416416

417417
[case testCustomSysVersionInfo2]
418-
# flags: --python-version 3.1
418+
# flags: --python-version 3.5
419419
import sys
420-
if sys.version_info == (3, 2):
420+
if sys.version_info == (3, 6):
421421
x = "foo"
422422
else:
423423
x = 3

0 commit comments

Comments
 (0)