Skip to content

Commit c1d7147

Browse files
authored
pythongh-117613: Argument Clinic: disallow defining class parameter at module level (python#117950)
1 parent a4b44d3 commit c1d7147

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

Lib/test/test_clinic.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2518,6 +2518,15 @@ class m.C "PyObject *" ""
25182518
p = function.parameters['cls']
25192519
self.assertEqual(p.kind, inspect.Parameter.POSITIONAL_ONLY)
25202520

2521+
def test_disallow_defining_class_at_module_level(self):
2522+
err = "A 'defining_class' parameter cannot be defined at module level."
2523+
block = """
2524+
module m
2525+
m.func
2526+
cls: defining_class
2527+
"""
2528+
self.expect_failure(block, err, lineno=2)
2529+
25212530

25222531
class ClinicExternalTest(TestCase):
25232532
maxDiff = None

Tools/clinic/libclinic/dsl_parser.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,6 +1102,8 @@ def bad_node(self, node: ast.AST) -> None:
11021102
fail("A 'defining_class' parameter cannot have a default value.")
11031103
if self.group:
11041104
fail("A 'defining_class' parameter cannot be in an optional group.")
1105+
if self.function.cls is None:
1106+
fail("A 'defining_class' parameter cannot be defined at module level.")
11051107
kind = inspect.Parameter.POSITIONAL_ONLY
11061108
else:
11071109
fail("A 'defining_class' parameter, if specified, must either "

0 commit comments

Comments
 (0)