def modify_user_companies(user_id, company_name, action): """ GET Server Status API endpoint Args: Returns: dict: A JSON object containing the nfvacc server status information """ company_net = " ".join(company_name.split('+')) response_data = {} user = mongo.find_one_match('users', {"user_id": user_id}) if user is not None: user_name = user.get('first_name') if action == 'add': user['companies'].append(company_net) message = "{} now on you will be notified for {} too.".format( user_name, company_net) else: user['companies'].remove(company_net) message = "{} now on you won't be notified for {}.".format( user_name, company_net) mongo.insert_one_in('users', {"user_id": user_id}, {'companies': user['companies']}) response_data = {"messages": [{"text": message}]} # print(response_data) status = 200 if response_data is not None else 403 js = json.dumps(response_data, indent=2) return flask.Response(js, status=status, mimetype='application/json')
def user_datetime_data(): """ GET Server Status API endpoint Args: Returns: dict: A JSON object containing the nfvacc server status information """ data = flask.request.get_json() user_id = data.get('user') LOG.info(data) conv_datetime = utils.convert_time(data.get('datetime'), data.get('offset')) LOG.info(conv_datetime) user = mongo.find_one_match('users', {"user_id": user_id}) if user is not None: mongo.insert_one_in('users', {"user_id": user_id}, {'datetime': conv_datetime}) mongo.insert_one_in('users', {"user_id": user_id}, {'offset': data.get('offset')}) # user = mongo.find_one_match('users', {"user_id": user_id}) # utils.start_scheduler_task(user) response_data = {} status = 200 if response_data is not None else 403 js = json.dumps(response_data, indent=2) return flask.Response(js, status=status, mimetype='application/json')
def user_notification(user_id, time_frame): """ GET Server Status API endpoint Args: Returns: dict: A JSON object containing the nfvacc server status information """ user = mongo.find_one_match('users', {"user_id": user_id}) user_name = user.get('first_name', user_id) if time_frame == 'Daily': mongo.insert_one_in('users', {"user_id": user_id}, {'notification_type': 'Daily'}) message = "{} you will be notified {}".format(user_name, time_frame) response_data = {"messages": [{"text": message}]} else: mongo.insert_one_in('users', {"user_id": user_id}, {'notification_type': 'Companies'}) response_data = { "messages": [{ "attachment": { "type": "template", "payload": { "template_type": "generic", "elements": [{ "title": "See scrader's supported companies", "buttons": [{ "type": "web_url", "url": "{}/scrader/companies/{}".format( Server_url, user_id), "title": "Go Now" }] }] } } }] } status = 200 if response_data is not None else 403 js = json.dumps(response_data, indent=2) return flask.Response(js, status=status, mimetype='application/json')
def subscribe(user_id, user_last_name, user_first_name): """ GET Server Status API endpoint Args: Returns: dict: A JSON object containing the nfvacc server status information """ user = mongo.find_one_match('users', {"user_id": user_id}) if user is not None: mongo.insert_one_in('users', {"user_id": user_id}, {'name': user_last_name}) mongo.insert_one_in('users', {"user_id": user_id}, {'subscribed': True}) response_data = {} status = 200 if response_data is not None else 403 js = json.dumps(response_data, indent=2) return flask.Response(js, status=status, mimetype='application/json')
def user_websites_data(): """ GET Server Status API endpoint Args: Returns: dict: A JSON object containing the nfvacc server status information """ data = flask.request.get_json() user_id = data.get('user') user = mongo.find_one_match('users', {"user_id": user_id}) if user is not None: mongo.insert_one_in('users', {"user_id": user_id}, {'websites': data.get('websites')}) response_data = {} status = 200 if response_data is not None else 403 js = json.dumps(response_data, indent=2) return flask.Response(js, status=status, mimetype='application/json')
def manually_tag_article(article_id, value, user): article = mongo.find_one_match('dev_articles', {"_id": ObjectId(article_id)}) if value == 'Skip': mongo.delete_one_from('dev_articles', ObjectId(article_id)) else: if value == 'Wrong': if article.get('direction') == "POS": mongo.insert_one_in('dev_articles', {"_id": ObjectId(article_id)}, {'direction': 'NEG'}) else: mongo.insert_one_in('dev_articles', {"_id": ObjectId(article_id)}, {'direction': 'POS'}) mongo.insert_one_in('dev_articles', {"_id": ObjectId(article_id)}, {'checked': True}) mongo.insert_one_in('dev_articles', {"_id": ObjectId(article_id)}, {'User': user})
def get_companies(): """ GET Server Status API endpoint Args: Returns: dict: A JSON object containing the nfvacc server status information """ stocks_type = request.args.get('stocks_type') LOG.info(stocks_type) next_page = True if request.args.get('NEXT') is not None else False user_id = request.args.get('chatfuel user id') user = mongo.find_one_match('users', {"user_id": user_id}) if user is not None: if next_page: mongo.insert_one_in('users', {"user_id": user_id}, {'companiesPage': 0}) user = mongo.find_one_match('users', {"user_id": user_id}) companies_page = user.get('companiesPage') mongo.insert_one_in('users', {"user_id": user_id}, {'request': stocks_type}) mongo.insert_one_in('users', {"user_id": user_id}, {'companiesPage': companies_page + 1}) # print(user) # print("Fetching companies with {}.".format(stocks_type)) attributes_dict = {"news_type": '', "stocks_type": ''} element = { "title": '', "image_url": '', "subtitle": '', "buttons": [{ "type": "json_plugin_url", "url": '', "title": '' }] } messages = [{ "attachment": { "type": "template", "payload": { "template_type": "list", "top_element_style": "compact", "elements": [] } } }] next_button = { "type": "show_block", "block_name": "Next Company", "title": '' } if stocks_type == 'Good/Neutral News': companies_type = 'good_companies' news_type = 'positive' direction_list = ['POS', 'POSITIVE'] else: companies_type = 'bad_companies' news_type = 'negative' direction_list = ['NEG', 'NEGATIVE'] requested_companies = utils.companies_by_type(companies_type) LOG.info(len(requested_companies)) if len(requested_companies) == 0: message = {"text": 'No {} where found today!'.format(stocks_type)} response_data = {'messages': [message]} status = 200 if response_data is not None else 403 js = json.dumps(response_data, indent=2) return flask.Response(js, status=status, mimetype='application/json') requested_companies = reorder_companies(requested_companies, user_id, direction_list) four_packets = math.ceil((len(requested_companies) / 4.0)) attributes_dict['news_type'] = news_type attributes_dict['stocks_type'] = stocks_type start = companies_page * 4 for index, company in enumerate(requested_companies[start:]): if index < 4: element = copy.deepcopy(element) name_net = '+'.join((company.get('company_name')).split()) company_name = company.get('company_name') element['title'] = company.get('company_name') element['image_url'] = str(company.get('company_logo')) # company_articles = utils.get_companies_articles(company_name) company_articles = utils.get_news_by_direction_and_company( company_name, direction_list, 'today') company_number_of_artcles = len(company_articles) if company_number_of_artcles == 1: article = company_articles[0] #article_title = article.get('title')[0:79] article_title = "1 article found about {}.".format( company_name) element['subtitle'] = \ "{} articles found about {}.".format(company_number_of_artcles, company_name)\ if company_number_of_artcles > 1 else article_title element['buttons'][0][ 'title'] = 'View articles' if company_number_of_artcles > 1 else 'View article' element['buttons'][0][ 'url'] = '{}/company_specific/{}/{}/{}'.format( Server_url, name_net, user_id, 'today') messages[0]['attachment']['payload']['elements'].append(element) response_data = {'set_attributes': attributes_dict, 'messages': messages} if four_packets > 1: if (companies_page + 2) <= four_packets: # remaining = len(requested_companies) - (NEXT + 1) * 4 next_button['title'] = "Next" response_data['messages'][0]['attachment']['payload'][ 'buttons'] = [next_button] if len(response_data['messages'][0]['attachment']['payload'] ['elements']) == 1: response_data['messages'][0]['attachment']['payload'][ 'template_type'] = 'generic' response_data['messages'][0]['attachment']['payload'].\ pop('top_element_style', None) LOG.info(response_data) status = 200 if response_data is not None else 403 js = json.dumps(response_data, indent=2) return flask.Response(js, status=status, mimetype='application/json')
def get_companies(stocks_type): """ GET Server Status API endpoint Args: Returns: dict: A JSON object containing the nfvacc server status information """ global NEXT NEXT = 0 if request.args.get('NEXT') is not None else NEXT user_id = request.args.get('chatfuel user id') user = mongo.find_one_match('users', {"user_id": user_id}) if user is not None: mongo.insert_one_in('users', {"user_id": user_id}, {'request': stocks_type}) # print(user) # print("Fetching companies with {}.".format(stocks_type)) total_articles = utils.total_articles() attributes_dict = {"news_type": '', "stocks_type": ''} element = { "title": '', "image_url": '', "subtitle": '', "buttons": [{ "type": "json_plugin_url", "url": '', "title": '' }] } messages = [{ "attachment": { "type": "template", "payload": { "template_type": "list", "top_element_style": "compact", "elements": [] } } }] next_button = { "type": "show_block", "block_name": "Next Company", "title": '' } if stocks_type == 'Positive+News': companies_type = 'good_companies' news_type = 'positive' else: companies_type = 'bad_companies' news_type = 'negative' requested_companies = utils.companies_by_type(companies_type) requested_companies = reorder_companies(requested_companies, user_id) four_packets = math.ceil((len(requested_companies) / 4.0)) attributes_dict['news_type'] = news_type attributes_dict['stocks_type'] = stocks_type start = NEXT * 4 for index, company in enumerate(requested_companies[start:]): if index < 4: element = copy.deepcopy(element) name_net = company.get('company_name').split()[0] element['title'] = company.get('company_name') element['image_url'] = company.get('company_logo') company_articles = utils.get_companies_articles(name_net) company_number_of_artcles = len(company_articles) if company_number_of_artcles == 1: article = company_articles[0] article_title = article.get('title')[0:79] element['subtitle'] = \ "{} out of {} articles".format(company_number_of_artcles, total_articles)\ if company_number_of_artcles > 1 else article_title element['buttons'][0][ 'title'] = 'View articles' if company_number_of_artcles > 1 else 'View article' element['buttons'][0][ 'url'] = 'http://146.185.138.240/company_specific/{}/{}'.format( name_net, user_id) messages[0]['attachment']['payload']['elements'].append(element) response_data = {'set_attributes': attributes_dict, 'messages': messages} if four_packets > 1: if (NEXT + 2) <= four_packets: remaining = len(requested_companies) - (NEXT + 1) * 4 next_button['title'] = "Next {}/{}".format( remaining, len(requested_companies)) response_data['messages'][0]['attachment']['payload'][ 'buttons'] = [next_button] if len(response_data['messages'][0]['attachment']['payload'] ['elements']) == 1: response_data['messages'][0]['attachment']['payload'][ 'template_type'] = 'generic' response_data['messages'][0]['attachment']['payload'].\ pop('top_element_style', None) NEXT += 1 status = 200 if response_data is not None else 403 js = json.dumps(response_data, indent=2) return flask.Response(js, status=status, mimetype='application/json')