Esempio n. 1
0
    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)))
Esempio n. 2
0
    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())