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())
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)