def get_category(): try: list_product_names = list(request.get_json()) output_list = [] for product_name_dict in list_product_names: app.logger.info("Request received {}".format(product_name_dict)) results = {} results_cache = '' product_name = product_name_dict.get('product_name', "") if product_name: product_name_clean = (re.sub(ALPHA_NUM_REGEX, '', product_name)).lower() product_name_key = 'catfight:' + ':' + product_name_clean results_cache = r.get(product_name_key) if not results_cache: results = predict_category( product_name.encode('ascii', 'ignore'), cat_model, dang_model, app.logger) if results: r.setex(product_name_key, json.dumps(results), CACHE_EXPIRY) results['cached'] = False else: results = json.loads(results_cache) results['cached'] = True else: results['invalid_product_name'] = True results['waybill'] = product_name_dict.get('wbn', None) app.logger.info("Result produced {}".format(results)) output_list.append(results) return Response(json.dumps(output_list), mimetype='application/json') except Exception as err: app.logger.error('Exception {} occurred against payload: {}'.format( err, list_product_names)) sentry_client.captureException(message="predict.py: Exception occured", extra={ "error": err, "payload": list_product_names })
def get_category(): try: list_product_names = list(request.get_json()) output_list = [] for product_name_dict in list_product_names: app.logger.info("Request received {}".format(product_name_dict)) results = {} results_cache = '' product_name = product_name_dict.get('product_name', "") if product_name: product_name_clean = (re.sub(ALPHA_NUM_REGEX, '', product_name)).lower() product_name_key = 'catfight:' +':' + product_name_clean results_cache = r.get(product_name_key) if not results_cache: results = predict_category(product_name.encode('ascii','ignore'), cat_model, dang_model, app.logger) if results: r.setex(product_name_key, json.dumps(results), CACHE_EXPIRY) results['cached'] = False else: results = json.loads(results_cache) results['cached'] = True else: results['invalid_product_name'] = True results['waybill'] = product_name_dict.get('wbn', None) app.logger.info("Result produced {}".format(results)) output_list.append(results) return Response(json.dumps(output_list), mimetype='application/json') except Exception as err: app.logger.error( 'Exception {} occurred against payload: {}'.format( err, list_product_names)) sentry_client.captureException( message = "predict.py: Exception occured", extra = {"error" : err, "payload" : list_product_names})
def process_product(product_name_dict, cat_model, dang_model, logger): results = {} results_cache = '' product_name = product_name_dict.get('prd', "") if product_name: final_result = {} original_dict = copy.deepcopy(product_name_dict) product_name_clean = (re.sub(ALPHA_NUM_REGEX, '', product_name)).lower() product_name_key = 'catfight:' + ':' + product_name_clean results_cache = r.get(product_name_key) wbn = product_name_dict.get('wbn', "") if not results_cache: results = predict_category(product_name.encode('ascii', 'ignore'), wbn, cat_model, dang_model, logger) if results: r.setex(product_name_key, json.dumps(results), CACHE_EXPIRY) results['cached'] = False else: results = json.loads(results_cache) l_product_name = product_name.lower() product_words = re.findall(CLEAN_PRODUCT_NAME_REGEX, l_product_name) clean_product_name = " ".join(product_words) first_level = results['cat'] dg_report = predict_dangerous(clean_product_name, wbn, first_level, dang_model.dg_keywords, logger) results['dg'] = dg_report['dangerous'] results['cached'] = True else: results['invalid_product_name'] = True final_result = original_dict final_result['result'] = results return final_result
def process_product(product_name_dict, cat_model, dang_model, logger): results = {} results_cache = '' product_name = product_name_dict.get('prd', "") if product_name: final_result = {} original_dict = copy.deepcopy(product_name_dict) product_name_clean = (re.sub(ALPHA_NUM_REGEX, '', product_name)).lower() product_name_key = 'catfight:' +':' + product_name_clean results_cache = r.get(product_name_key) wbn = product_name_dict.get('wbn', "") if not results_cache: results = predict_category(product_name.encode('ascii','ignore'), wbn, cat_model, dang_model, logger) if results: r.setex(product_name_key, json.dumps(results), CACHE_EXPIRY) results['cached'] = False else: results = json.loads(results_cache) l_product_name = product_name.lower() product_words = re.findall(CLEAN_PRODUCT_NAME_REGEX, l_product_name) clean_product_name = " ".join(product_words) first_level = results['cat'] dg_report = predict_dangerous(clean_product_name, wbn, first_level, dang_model.dg_keywords, logger) results['dg'] = dg_report['dangerous'] results['cached'] = True else: results['invalid_product_name'] = True final_result = original_dict final_result['result'] = results return final_result