Show More
@@ -91,6 +91,38 b' class parser(object):' | |||||
91 | return self.eval(t) |
|
91 | return self.eval(t) | |
92 | return t |
|
92 | return t | |
93 |
|
93 | |||
|
94 | def buildargsdict(trees, funcname, keys, keyvaluenode, keynode): | |||
|
95 | """Build dict from list containing positional and keyword arguments | |||
|
96 | ||||
|
97 | Invalid keywords or too many positional arguments are rejected, but | |||
|
98 | missing arguments are just omitted. | |||
|
99 | """ | |||
|
100 | if len(trees) > len(keys): | |||
|
101 | raise error.ParseError(_("%(func)s takes at most %(nargs)d arguments") | |||
|
102 | % {'func': funcname, 'nargs': len(keys)}) | |||
|
103 | args = {} | |||
|
104 | # consume positional arguments | |||
|
105 | for k, x in zip(keys, trees): | |||
|
106 | if x[0] == keyvaluenode: | |||
|
107 | break | |||
|
108 | args[k] = x | |||
|
109 | # remainder should be keyword arguments | |||
|
110 | for x in trees[len(args):]: | |||
|
111 | if x[0] != keyvaluenode or x[1][0] != keynode: | |||
|
112 | raise error.ParseError(_("%(func)s got an invalid argument") | |||
|
113 | % {'func': funcname}) | |||
|
114 | k = x[1][1] | |||
|
115 | if k not in keys: | |||
|
116 | raise error.ParseError(_("%(func)s got an unexpected keyword " | |||
|
117 | "argument '%(key)s'") | |||
|
118 | % {'func': funcname, 'key': k}) | |||
|
119 | if k in args: | |||
|
120 | raise error.ParseError(_("%(func)s got multiple values for keyword " | |||
|
121 | "argument '%(key)s'") | |||
|
122 | % {'func': funcname, 'key': k}) | |||
|
123 | args[k] = x[2] | |||
|
124 | return args | |||
|
125 | ||||
94 | def _prettyformat(tree, leafnodes, level, lines): |
|
126 | def _prettyformat(tree, leafnodes, level, lines): | |
95 | if not isinstance(tree, tuple) or tree[0] in leafnodes: |
|
127 | if not isinstance(tree, tuple) or tree[0] in leafnodes: | |
96 | lines.append((level, str(tree))) |
|
128 | lines.append((level, str(tree))) |
@@ -282,6 +282,10 b' def getargs(x, min, max, err):' | |||||
282 | raise error.ParseError(err) |
|
282 | raise error.ParseError(err) | |
283 | return l |
|
283 | return l | |
284 |
|
284 | |||
|
285 | def getkwargs(x, funcname, keys): | |||
|
286 | return parser.buildargsdict(getlist(x), funcname, keys.split(), | |||
|
287 | keyvaluenode='keyvalue', keynode='symbol') | |||
|
288 | ||||
285 | def isvalidsymbol(tree): |
|
289 | def isvalidsymbol(tree): | |
286 | """Examine whether specified ``tree`` is valid ``symbol`` or not |
|
290 | """Examine whether specified ``tree`` is valid ``symbol`` or not | |
287 | """ |
|
291 | """ |
General Comments 0
You need to be logged in to leave comments.
Login now