def post(self): """Returns a jsonp object containing user search results """ term = urllib2.unquote(self.request.get('q')) #TODO: grant access only to queries that provide an API key and originate from a known domain api_key = urllib2.unquote(self.request.get('apikey')) query = '(tokenized_un:{}) OR (tokenized_rn:{})'.format(term, term) logging.info("SEARCH: {}".format(term)) # match the query only on username or real_name fields search_results = find_users(query) logging.info("SEARCH - results count: {}".format(search_results.number_found)) results = {'people': []} #TODO: this should be made faster for doc in search_results: person = {} for field in doc.fields: if field.name == 'username': person[field.name] = field.value if field.name == 'real_name': person[field.name] = field.value if field.name == 'gravatar': person[field.name] = field.value results['people'].append(person) self.response.out.write("%s(%s)" % (urllib2.unquote(self.request.get('callback')), json.dumps(results)))
def _post_put_hook(self, future): """Post put hook, adds user's username and real name to search index. This fires every time a user instance is saved """ #TODO: this doesn't fire when user is registered, only on profile edit try: doc_id = find_users(self.username).results[0].doc_id except IndexError: doc_id = None if self.searchable: doc = create_user_search_document(self.username, self.real_name, self.gravatar, doc_id) add_to_index(doc, 'users') elif not self.searchable and doc_id: remove_from_index(doc_id, 'users') available_chat_rooms(self.username, self.get_all_courses())