Example #1
0
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