sites/irclogs.qmsk.net/urltree.py
branchsites
changeset 43 fc11c4e86a82
parent 42 5a72c00c4ae4
--- a/sites/irclogs.qmsk.net/urltree.py	Sun Feb 08 02:29:23 2009 +0200
+++ b/sites/irclogs.qmsk.net/urltree.py	Sun Feb 08 02:55:53 2009 +0200
@@ -265,6 +265,9 @@
         # default
         None    : str,
 
+        # string
+        'str'   : str,
+
         # integer
         'int'   : int,
     }
@@ -335,8 +338,11 @@
                 # parse key
                 key = query_item
 
+                # type
+                type = self.config.type_dict[type]
+
                 # add to query_args as (type, default) tuple
-                self.query_args[key] = (self.config.type_dict[type], default)
+                self.query_args[key] = (type, type(default) if default else default)
          
     def get_label_path (self) :
         """
@@ -359,7 +365,6 @@
             kwargs[label_value.label.key] = label_value.value
        
         # then parse all query args
-        # XXX: catch missing arguments
         for key, value in request.get_args() :
             # lookup spec
             type, default = self.query_args[key]
@@ -386,6 +391,24 @@
             
             # set key
             kwargs[key] = value
+        
+        # then check all query args
+        for key, (type, default) in self.query_args.iteritems() :
+            # skip those already present
+            if key in kwargs :
+                continue
+
+            # apply default?
+            if default is None :
+                raise URLError("Missing required argument: %r" % (key, ))
+            
+            elif default == '' :
+                # skip empty default
+                continue
+
+            else :
+                # set default
+                kwargs[key] = default
 
         # execute the handler
         return self.handler(request, **kwargs)