sites/irclogs.qmsk.net/urltree.py
branchsites
changeset 43 fc11c4e86a82
parent 42 5a72c00c4ae4
equal deleted inserted replaced
42:5a72c00c4ae4 43:fc11c4e86a82
   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) :