def get(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 == "avatar_url": 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 get(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 == 'avatar_url': 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 testSearch(self): results = find_all() self.assertEqual(len(results), 3, "Should find 2 users, found: %s" % len(results)) results = find_users("person") self.assertEqual( results.number_found, 2, "Should find 2 users, found: %s" % results.number_found)
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 """ try: doc_id = find_users(self.username_norm).results[0].doc_id except IndexError: doc_id = None if self.searchable: # TODO: update document by putting one with the same id # TODO: separate log_token to a login tracking subsystem or implement GAE Users. every time a user logs in # User instance gets saved and _post_put_hook called, etc. doc = create_user_search_document(self.username_norm, self.real_name, self.avatar_url, doc_id) add_to_index(doc, 'users') elif not self.searchable and doc_id: remove_from_index(doc_id, 'users')
def testSearch(self): results = find_all() self.assertEqual(len(results), 3, "Should find 2 users, found: %s" % len(results)) results = find_users("person") self.assertEqual(results.number_found, 2, "Should find 2 users, found: %s" % results.number_found)