def _search_principals(self, request, arg):
     def err_specific(res):
         # special message case
         if isinstance(res.value, DirectoryException):
             msg = res.value.message
         else:
             msg = "Could not search principal data."
         return self.err(res, request, "_search_principals", msg)
 
     try:
         def write_to_json(ret_list): 
           request.write(simplejson.dumps(ret_list))
           request.finish()
         type_str = get_principal_type_from_args(arg)
         dirname = arg.get('<dir name>', None)
         d = do_principal_search(request, type_str, dirname, 
                                 self._dm, self.bindings_dir) 
         d.addCallback(write_to_json)
         d.addErrback(err_specific)
         return NOT_DONE_YET
     except Exception, e:
         return err_specific(Failure())
Esempio n. 2
0
    def _search_principals(self, request, arg):
        def err_specific(res):
            # special message case
            if isinstance(res.value, DirectoryException):
                msg = res.value.message
            else:
                msg = "Could not search principal data."
            return self.err(res, request, "_search_principals", msg)

        try:

            def write_to_json(ret_list):
                request.write(simplejson.dumps(ret_list))
                request.finish()

            type_str = get_principal_type_from_args(arg)
            dirname = arg.get('<dir name>', None)
            d = do_principal_search(request, type_str, dirname, self._dm,
                                    self.bindings_dir)
            d.addCallback(write_to_json)
            d.addErrback(err_specific)
            return NOT_DONE_YET
        except Exception, e:
            return err_specific(Failure())
Esempio n. 3
0
    def render_GET(self, request):
      try : 

        #args come as bytestrings, but they might be utf-8, so treat as unicode
        self.arg_cpy = dict([(k, [unicode(v1, 'utf-8') for v1 in v])
                for (k,v) in request.args.items()])
        
        # get pagination values
        start = int(request.args.get("start",["0"])[-1])
        count = int(request.args.get("count",[PAGINATION_COUNT_DEFAULT])[-1])
        end = start + count

        # get sorting values
        sort_attr = request.args.get("sort_attr",["name"])[-1]
        sort_desc_str = request.args.get("sort_desc",["false"])[-1]
        sort_desc = sort_desc_str == "true"

        # remove args that we don't want to pass to the directory 
        for key in self.to_remove: 
          if key in request.args:
            del request.args[key]
            
        def write_to_html(ret_list):
            total = len(ret_list) 
            if len(ret_list) > 1: 
                cmp_fn = new_get_cmp_fn(ret_list, sort_attr,sort_desc)
                ret_list.sort(cmp = cmp_fn)

            ret_list = ret_list[start:end]
            
            num_rows = len(ret_list)
            first_res_num = start + 1
            if num_rows == 0: 
              first_res_num = 0
            
            # repopulate status combobox
            a = self.arg_cpy.get('active',[''])[0]
            status_selected = [] 
            for x in [ "", "true", "false" ]: 
              if a == x: 
                status_selected.append('selected = "true"')
              else: 
                status_selected.append("") 
            
            request.write(self.render_tmpl(request, "%slist.mako" % self.ptype, 
                p_list=ret_list, args=self.arg_cpy, start=start,count=count,
                total=total, sort_attr=sort_attr, sort_desc_str=sort_desc_str,
                num_rows = num_rows, first_res_num = first_res_num,
                status_selected=status_selected,ptype = self.ptype, **self.template_args))
            request.finish() 
        
        dir = None
        if "directory" in request.args: 
          dir = request.args["directory"][-1]
          del request.args["directory"]

        d = do_principal_search(request,self.ptype, dir, self.dm, self.bd)
        d.addCallbacks(self.handle_search_results)
        d.addCallback(write_to_html)
        d.addErrback(self.err,request)
      except Exception, e: 
        self.err(Failure(),request)