equal
deleted
inserted
replaced
262 |
262 |
263 # built-in type codes |
263 # built-in type codes |
264 BUILTIN_TYPES = { |
264 BUILTIN_TYPES = { |
265 # default |
265 # default |
266 None : str, |
266 None : str, |
|
267 |
|
268 # string |
|
269 'str' : str, |
267 |
270 |
268 # integer |
271 # integer |
269 'int' : int, |
272 'int' : int, |
270 } |
273 } |
271 |
274 |
333 type = None |
336 type = None |
334 |
337 |
335 # parse key |
338 # parse key |
336 key = query_item |
339 key = query_item |
337 |
340 |
|
341 # type |
|
342 type = self.config.type_dict[type] |
|
343 |
338 # add to query_args as (type, default) tuple |
344 # add to query_args as (type, default) tuple |
339 self.query_args[key] = (self.config.type_dict[type], default) |
345 self.query_args[key] = (type, type(default) if default else default) |
340 |
346 |
341 def get_label_path (self) : |
347 def get_label_path (self) : |
342 """ |
348 """ |
343 Returns a list containing the labels in this url |
349 Returns a list containing the labels in this url |
344 """ |
350 """ |
357 # then add all the values |
363 # then add all the values |
358 for label_value in label_values : |
364 for label_value in label_values : |
359 kwargs[label_value.label.key] = label_value.value |
365 kwargs[label_value.label.key] = label_value.value |
360 |
366 |
361 # then parse all query args |
367 # then parse all query args |
362 # XXX: catch missing arguments |
|
363 for key, value in request.get_args() : |
368 for key, value in request.get_args() : |
364 # lookup spec |
369 # lookup spec |
365 type, default = self.query_args[key] |
370 type, default = self.query_args[key] |
366 |
371 |
367 # normalize empty value to None |
372 # normalize empty value to None |
384 # otherwise, fail |
389 # otherwise, fail |
385 raise URLError("No value given for required argument: %r" % (key, )) |
390 raise URLError("No value given for required argument: %r" % (key, )) |
386 |
391 |
387 # set key |
392 # set key |
388 kwargs[key] = value |
393 kwargs[key] = value |
|
394 |
|
395 # then check all query args |
|
396 for key, (type, default) in self.query_args.iteritems() : |
|
397 # skip those already present |
|
398 if key in kwargs : |
|
399 continue |
|
400 |
|
401 # apply default? |
|
402 if default is None : |
|
403 raise URLError("Missing required argument: %r" % (key, )) |
|
404 |
|
405 elif default == '' : |
|
406 # skip empty default |
|
407 continue |
|
408 |
|
409 else : |
|
410 # set default |
|
411 kwargs[key] = default |
389 |
412 |
390 # execute the handler |
413 # execute the handler |
391 return self.handler(request, **kwargs) |
414 return self.handler(request, **kwargs) |
392 |
415 |
393 def build (self, request, **values) : |
416 def build (self, request, **values) : |