示例#1
0
 def get(self, resource_id):
     app.logger.info('Get resource_details method called')
     rs = requests.session()
     search_url = 'http://{}/{}/{}/{}'.format(app.config['ES_HOST'],
                                              _es_index, _es_type,
                                              resource_id)
     response = rs.get(url=search_url, headers=_http_headers).json()
     print(response)
     if 'found' in response:
         if response['found']:
             data = response['_source']
             data['id'] = response['_id']
             data['resource_id'] = response['_id']
             data['updated_at'] = time.strftime(
                 '%Y-%m-%d %H:%M:%S', time.localtime(data['updated_at']))
             user_details = get_user_details(data['resource_writer'])
             data['resource_writer_handle'] = user_details['username']
             data['resource_writer_skill_color'] = user_details[
                 'skill_color']
             data['vote_count'] = get_vote_count_list(data['resource_id'])
             app.logger.info('Get resource_details method completed')
             return data, 200
         app.logger.warning('Resource not found')
         return {'found': response['found']}, 404
     app.logger.error('Elasticsearch down, response: ' + str(response))
     return response, 500
示例#2
0
def get_problem_details(problem_id, user_id=None):
    try:
        rs = requests.session()
        search_url = 'http://{}/{}/{}/{}'.format(app.config['ES_HOST'],
                                                 _es_index_problem, _es_type,
                                                 problem_id)
        response = rs.get(url=search_url, headers=_http_headers).json()
        if 'found' in response:
            if response['found']:
                data = response['_source']
                data['id'] = response['_id']
                data['comment_list'] = get_comment_list(response['_id'])
                data['vote_count'] = get_vote_count_list(response['_id'])
                data['solve_count'] = get_solved_count_for_problem(
                    response['_id'])
                data['comment_count'] = get_comment_count(response['_id'])
                data['resource_list'] = search_resource(
                    {'resource_ref_id': response['_id']}, 0, _es_size)
                if user_id:
                    edge = get_user_problem_status(user_id, problem_id)
                    if edge:
                        data['user_status'] = edge['status']
                return data
        return None
    except Exception as e:
        raise e
def dfs_comment_tree(cur_node_id):
    try:
        rs = requests.session()
        must = [{'term': {'comment_parent_id': cur_node_id}}]
        query_json = {'query': {'bool': {'must': must}}}
        query_json['size'] = _es_size
        search_url = 'http://{}/{}/{}/_search'.format(app.config['ES_HOST'],
                                                      _es_index_comment,
                                                      _es_type)
        response = rs.post(url=search_url,
                           json=query_json,
                           headers=_http_headers).json()
        print('response: ', json.dumps(response))
        if 'hits' in response:
            comment_list = []
            for hit in response['hits']['hits']:
                data = hit['_source']
                data['comment_id'] = hit['_id']
                data['updated_at'] = time.strftime(
                    '%Y-%m-%d %H:%M:%S', time.localtime(data['updated_at']))
                if 'comment_writer' in data:
                    user_details = get_user_details(data['comment_writer'])
                    data['comment_writer_handle'] = user_details['username']
                    data['comment_writer_skill_color'] = user_details[
                        'skill_color']
                data['comment_id'] = hit['_id']
                data['vote_count'] = get_vote_count_list(data['comment_id'])
                child_list = dfs_comment_tree(data['comment_id'])
                data['comment_list'] = child_list
                comment_list.append(data)
            return comment_list
        app.logger.error('Elasticsearch down, response: ' + str(response))
        raise Exception('Internal server error')
    except Exception as e:
        raise e
    def post(self, page=0):
        app.logger.info('Blog search method called')
        rs = requests.session()
        param = request.get_json()
        query_json = {'query': {'match_all': {}}}

        must = []
        keyword_fields = [
            'blog_title', 'blog_root', 'blog_type', 'blog_ref_id'
        ]

        for f in param:
            if f in keyword_fields:
                must.append({'term': {f: param[f]}})
            else:
                must.append({'match': {f: param[f]}})

        if len(must) > 0:
            query_json = {'query': {'bool': {'must': must}}}

        query_json['from'] = page * _es_size
        query_json['size'] = _es_size
        query_json['sort'] = [{'updated_at': {'order': 'desc'}}]
        search_url = 'http://{}/{}/{}/_search'.format(app.config['ES_HOST'],
                                                      _es_index, _es_type)
        response = rs.post(url=search_url,
                           json=query_json,
                           headers=_http_headers).json()
        print(response)
        if 'hits' in response:
            item_list = []
            for hit in response['hits']['hits']:
                blog = hit['_source']
                blog['id'] = hit['_id']
                blog['blog_id'] = hit['_id']
                blog['updated_at'] = time.strftime(
                    '%Y-%m-%d %H:%M:%S', time.localtime(blog['updated_at']))
                blog['comment_list'] = get_comment_list(blog['blog_id'])
                blog['vote_count'] = get_vote_count_list(blog['blog_id'])
                blog['comment_count'] = get_comment_count(blog['blog_id'])
                if 'blog_writer' in blog:
                    user_details = get_user_details(blog['blog_writer'])
                    blog['blog_writer_skill_color'] = user_details[
                        'skill_color']
                    blog['blog_writer_handle'] = user_details['username']
                item_list.append(blog)
            print(item_list)
            app.logger.info('Blog search method completed')
            return {'blog_list': item_list}
        app.logger.error('Elasticsearch down, response: ' + str(response))
        return {'message': 'internal server error'}, 500
示例#5
0
def search_resource(param, from_val, size):
    try:
        rs = requests.session()
        query_json = {'query': {'match_all': {}}}

        must = []
        keyword_fields = [
            'resource_ref_id', 'resource_type', 'resource_title',
            'resource_writer', 'resource_owner'
        ]

        for f in param:
            if f in keyword_fields:
                must.append({'term': {f: param[f]}})
            else:
                must.append({'match': {f: param[f]}})

        if len(must) > 0:
            query_json = {'query': {'bool': {'must': must}}}

        query_json['size'] = size
        query_json['from'] = from_val
        query_json['sort'] = [{'created_at': {'order': 'desc'}}]

        search_url = 'http://{}/{}/{}/_search'.format(app.config['ES_HOST'],
                                                      _es_index_resource,
                                                      _es_type)
        response = rs.post(url=search_url,
                           json=query_json,
                           headers=_http_headers).json()
        print('response: ', response)
        item_list = []
        if 'hits' in response:
            for hit in response['hits']['hits']:
                data = hit['_source']
                data['id'] = hit['_id']
                user_details = get_user_details(data['resource_writer'])
                data['resource_writer_handle'] = user_details['username']
                data['resource_writer_skill_color'] = user_details[
                    'skill_color']
                data['resource_id'] = hit['_id']
                data['updated_at'] = time.strftime(
                    '%Y-%m-%d %H:%M:%S', time.localtime(data['updated_at']))
                data['vote_count'] = get_vote_count_list(data['resource_id'])
                item_list.append(data)
        print('item_list: ', item_list)
        return item_list

    except Exception as e:
        raise e
示例#6
0
def get_category_details(cat_id, user_id=None):
    app.logger.info(
        f'get_category_details function called for cat_id: {cat_id}, user_id: {user_id}'
    )
    try:
        rs = requests.session()
        search_url = 'http://{}/{}/{}/{}'.format(app.config['ES_HOST'],
                                                 _es_index_category, _es_type,
                                                 cat_id)
        response = rs.get(url=search_url, headers=_http_headers).json()
        if 'found' in response:
            if response['found']:
                data = response['_source']
                data['category_id'] = response['_id']
                data['comment_list'] = get_comment_list(response['_id'])
                data['vote_count'] = get_vote_count_list(response['_id'])
                data['comment_count'] = get_comment_count(response['_id'])
                data['resource_list'] = search_resource(
                    {'resource_ref_id': response['_id']}, 0, _es_size)
                data['problem_count'] = 0
                if data['category_root'] == 'root':
                    data['problem_count'] = get_problem_count_for_category(
                        {'category_root': data['category_name']})
                else:
                    data['problem_count'] = get_problem_count_for_category(
                        {'category_name': data['category_name']})

                if user_id:
                    cat_info = get_user_category_data(user_id,
                                                      data['category_id'])
                    if cat_info:
                        skill_value = float(cat_info.get('skill_value', 0))
                        data['skill_value'] = "{:.2f}".format(skill_value)
                        skill = Skill()
                        data['skill_title'] = skill.get_skill_title(
                            skill_value)
                    else:
                        data['skill_value'] = 0
                        data['skill_title'] = "NA"
                app.logger.info('get_category_details completed')
                return data
        return None
    except Exception as e:
        raise e