diff --git a/inventory_provider/routes/classifier.py b/inventory_provider/routes/classifier.py index 906664ff68da43092378affcb8aff3dcc51e06a6..ba9f31a365bb86cea64771353215471e8726a906 100644 --- a/inventory_provider/routes/classifier.py +++ b/inventory_provider/routes/classifier.py @@ -413,15 +413,18 @@ def get_trap_metadata(source_equipment, interface, circuit_id): return Response(result, mimetype="application/json") -@routes.route("/infinera-fibrelink-info/<ne_name_str>/<object_name_str>", +@routes.route("/infinera-fiberlink-info/<ne_name_str>/<object_name_str>", methods=['GET', 'POST']) @common.require_accepts_json -def get_fibrelink_trap_metadata(ne_name_str, object_name_str): +def get_fiberlink_trap_metadata(ne_name_str, object_name_str): objects = object_name_str.split('_') - shelfs = [x.split('-')[0] for x in objects] + shelves = [x.split('-')[0] for x in objects] p = r'([a-zA-Z\d]+?-(OLA|DTNX)\d+(-\d)?)' matches = re.findall(p, ne_name_str) - assert len(matches) == 2 + if len(matches) != 2 or len(shelves) != 2: + raise ClassifierProcessingError( + f'unable to parse {ne_name_str} {object_name_str } ' + 'into two elements') r = common.get_current_redis() @@ -432,16 +435,15 @@ def get_fibrelink_trap_metadata(ne_name_str, object_name_str): if result: result = result.decode('utf-8') else: - nes_a = f'{matches[0][0]}-{shelfs[0]}' - nes_b = f'{matches[1][0]}-{shelfs[1]}' + nes_a = f'{matches[0][0]}-{shelves[0]}' + nes_b = f'{matches[1][0]}-{shelves[1]}' result = [] df_a = r.get(f'opsdb:ne_fibre_spans:{nes_a}') df_b = r.get(f'opsdb:ne_fibre_spans:{nes_b}') - if df_a: + if df_a and df_b: a = json.loads(df_a.decode('utf-8')) - if df_b: b = json.loads(df_b.decode('utf-8')) - if df_a and df_b: + matches = [x for x in itertools.product(a, b) if x[0]['df_route_id'] == x[1]['df_route_id']] if matches: @@ -469,7 +471,8 @@ def get_fibrelink_trap_metadata(ne_name_str, object_name_str): r.set(cache_key, result) if not result: return Response( - response=f'no available info for {ne_name_str}', + response="no available info for " + f"{ne_name_str} {object_name_str}", status=404, mimetype="text/html")