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