30
30
31
31
SUPPORTED_VERSIONS = [(3 , 11 ), (3 , 10 ), (3 , 9 ), (3 , 8 ), (3 , 7 ), (3 , 6 ), (2 , 7 )]
32
32
SUPPORTED_PLATFORMS = frozenset ({"linux" , "win32" , "darwin" })
33
+ TYPESHED_DIRECTORIES = frozenset ({"stdlib" , "stubs" , "tests" , "test_cases" , "scripts" })
33
34
34
35
MajorVersion : TypeAlias = int
35
36
MinorVersion : TypeAlias = int
36
37
Platform : TypeAlias = Annotated [str , "Must be one of the entries in SUPPORTED_PLATFORMS" ]
38
+ Directory : TypeAlias = Annotated [str , "Must be one of the entries in TYPESHED_DIRECTORIES" ]
37
39
38
40
39
41
def python_version (arg : str ) -> tuple [MajorVersion , MinorVersion ]:
@@ -50,11 +52,18 @@ def python_platform(platform: str) -> str:
50
52
return platform
51
53
52
54
55
+ def typeshed_directory (directory : str ) -> str :
56
+ if directory not in TYPESHED_DIRECTORIES :
57
+ raise ValueError
58
+ return directory
59
+
60
+
53
61
class CommandLineArgs (argparse .Namespace ):
54
62
verbose : int
55
63
dry_run : bool
56
64
exclude : list [str ] | None
57
65
python_version : list [tuple [MajorVersion , MinorVersion ]] | None
66
+ dir : list [Directory ] | None
58
67
platform : list [Platform ] | None
59
68
filter : list [str ]
60
69
@@ -66,6 +75,14 @@ class CommandLineArgs(argparse.Namespace):
66
75
parser .add_argument (
67
76
"-p" , "--python-version" , type = python_version , nargs = "*" , action = "extend" , help = "These versions only (major[.minor])"
68
77
)
78
+ parser .add_argument (
79
+ "-d" ,
80
+ "--dir" ,
81
+ type = typeshed_directory ,
82
+ nargs = "*" ,
83
+ action = "extend" ,
84
+ help = "Test only these top-level typeshed directories (defaults to all typeshed directories)" ,
85
+ )
69
86
parser .add_argument (
70
87
"--platform" ,
71
88
type = python_platform ,
@@ -85,6 +102,7 @@ class TestConfig:
85
102
exclude : list [str ] | None
86
103
major : MajorVersion
87
104
minor : MinorVersion
105
+ directories : frozenset [Directory ]
88
106
platform : Platform
89
107
filter : list [str ]
90
108
@@ -477,41 +495,47 @@ def test_the_test_cases(code: int, args: TestConfig) -> TestResults:
477
495
def test_typeshed (code : int , args : TestConfig ) -> TestResults :
478
496
print (f"*** Testing Python { args .major } .{ args .minor } on { args .platform } " )
479
497
files_checked_this_version = 0
480
- code , stdlib_files_checked = test_stdlib (code , args )
481
- files_checked_this_version += stdlib_files_checked
482
- print ()
498
+ if "stdlib" in args .directories :
499
+ code , stdlib_files_checked = test_stdlib (code , args )
500
+ files_checked_this_version += stdlib_files_checked
501
+ print ()
483
502
484
503
if args .major == 2 :
485
504
return TestResults (code , files_checked_this_version )
486
505
487
- code , third_party_files_checked = test_third_party_stubs (code , args )
488
- files_checked_this_version += third_party_files_checked
489
- print ()
506
+ if "stubs" in args .directories :
507
+ code , third_party_files_checked = test_third_party_stubs (code , args )
508
+ files_checked_this_version += third_party_files_checked
509
+ print ()
490
510
491
511
if args .minor >= 9 :
492
512
# Run mypy against our own test suite and the scripts directory
493
513
#
494
514
# Skip this on earlier Python versions,
495
515
# as we're using new syntax and new functions in some test files
496
- code , test_script_files_checked = test_the_test_scripts (code , args )
497
- files_checked_this_version += test_script_files_checked
516
+ if "tests" in args .directories :
517
+ code , test_script_files_checked = test_the_test_scripts (code , args )
518
+ files_checked_this_version += test_script_files_checked
519
+ print ()
520
+
521
+ if "scripts" in args .directories :
522
+ code , script_files_checked = test_scripts_directory (code , args )
523
+ files_checked_this_version += script_files_checked
524
+ print ()
525
+
526
+ if "test_cases" in args .directories :
527
+ code , test_case_files_checked = test_the_test_cases (code , args )
528
+ files_checked_this_version += test_case_files_checked
498
529
print ()
499
530
500
- code , script_files_checked = test_scripts_directory (code , args )
501
- files_checked_this_version += script_files_checked
502
- print ()
503
-
504
- code , test_case_files_checked = test_the_test_cases (code , args )
505
- files_checked_this_version += test_case_files_checked
506
- print ()
507
-
508
531
return TestResults (code , files_checked_this_version )
509
532
510
533
511
534
def main () -> None :
512
535
args = parser .parse_args (namespace = CommandLineArgs ())
513
536
versions = args .python_version or SUPPORTED_VERSIONS
514
537
platforms = args .platform or [sys .platform ]
538
+ tested_directories = frozenset (args .dir ) if args .dir else TYPESHED_DIRECTORIES
515
539
code = 0
516
540
total_files_checked = 0
517
541
for (major , minor ), platform in product (versions , platforms ):
@@ -521,6 +545,7 @@ def main() -> None:
521
545
exclude = args .exclude ,
522
546
major = major ,
523
547
minor = minor ,
548
+ directories = tested_directories ,
524
549
platform = platform ,
525
550
filter = args .filter ,
526
551
)
0 commit comments