@@ -29,20 +29,32 @@ def validate(self, positional, named, dryrun=False):
29
29
return
30
30
named = set (name for name , value in named )
31
31
self ._validate_no_multiple_values (positional , named , self ._argspec )
32
+ self ._validate_no_positional_only_as_named (named , self ._argspec )
32
33
self ._validate_positional_limits (positional , named , self ._argspec )
33
34
self ._validate_no_mandatory_missing (positional , named , self ._argspec )
34
35
self ._validate_no_named_only_missing (named , self ._argspec )
35
36
self ._validate_no_extra_named (named , self ._argspec )
36
37
38
+ def _validate_no_multiple_values (self , positional , named , spec ):
39
+ for name in (spec .positional_only + spec .positional_or_named )[:len (positional )]:
40
+ if name in spec .positional_or_named and name in named :
41
+ raise DataError ("%s '%s' got multiple values for argument "
42
+ "'%s'." % (spec .type , spec .name , name ))
43
+
44
+ def _validate_no_positional_only_as_named (self , named , spec ):
45
+ if not spec .var_named :
46
+ for name in named :
47
+ if name in spec .positional_only :
48
+ raise DataError ("%s '%s' does not accept argument '%s' as named "
49
+ "argument." % (spec .type , spec .name , name ))
50
+
37
51
def _validate_positional_limits (self , positional , named , spec ):
38
52
count = len (positional ) + self ._named_positionals (named , spec )
39
53
if not spec .minargs <= count <= spec .maxargs :
40
54
self ._raise_wrong_count (count , spec )
41
55
42
56
def _named_positionals (self , named , spec ):
43
- if not spec .supports_named :
44
- return 0
45
- return sum (1 for n in named if n in spec .positional )
57
+ return sum (1 for n in named if n in spec .positional_or_named )
46
58
47
59
def _raise_wrong_count (self , count , spec ):
48
60
minend = plural_or_not (spec .minargs )
@@ -57,13 +69,6 @@ def _raise_wrong_count(self, count, spec):
57
69
raise DataError ("%s '%s' expected %s, got %d."
58
70
% (spec .type , spec .name , expected , count ))
59
71
60
- def _validate_no_multiple_values (self , positional , named , spec ):
61
- if named and spec .supports_named :
62
- for name in spec .positional [:len (positional )]:
63
- if name in named :
64
- raise DataError ("%s '%s' got multiple values for argument "
65
- "'%s'." % (spec .type , spec .name , name ))
66
-
67
72
def _validate_no_mandatory_missing (self , positional , named , spec ):
68
73
for name in spec .positional [len (positional ):spec .minargs ]:
69
74
if name not in named :
@@ -80,7 +85,7 @@ def _validate_no_named_only_missing(self, named, spec):
80
85
81
86
def _validate_no_extra_named (self , named , spec ):
82
87
if not spec .var_named :
83
- extra = set (named ) - set (spec .positional ) - set (spec .named_only )
88
+ extra = set (named ) - set (spec .positional_or_named ) - set (spec .named_only )
84
89
if extra :
85
90
raise DataError ("%s '%s' got unexpected named argument%s %s."
86
91
% (spec .type , spec .name , plural_or_not (extra ),
0 commit comments