mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-10-29 17:22:42 +00:00
adding a roadm sheet to handle per degree info in roadms
This part only targets conversion from an xls input topology file. In order to define per degree power, the convert function needs to know the booster final name. However before this change, the booster name may not be known if there is no defined amplifier in eqpt sheet at this stage. In order to solve this ambiguity, the final name are defined in the convert function provided that the direction is defined in eqpt sheet and even if the amp type is not defined. Then the per degrre target power is defined in a new roadm sheet using the same direction naming as for Eqpt sheet. Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com> Change-Id: I8f279aa880aa0a8ceb60e48e43bddb0f6ff06147
This commit is contained in:
committed by
Jan Kundrát
parent
c56ea898a6
commit
093085fba8
@@ -643,6 +643,21 @@
|
||||
"out_voa": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"uid": "east edfa in Lorient_KMA to Vannes_KBE",
|
||||
"metadata": {
|
||||
"location": {
|
||||
"city": "Lorient_KMA",
|
||||
"region": "RLD",
|
||||
"latitude": 2.0,
|
||||
"longitude": 3.0
|
||||
}
|
||||
},
|
||||
"type": "Fused",
|
||||
"params": {
|
||||
"loss": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"uid": "east edfa in Lannion_CAS to Stbrieuc",
|
||||
"metadata": {
|
||||
@@ -946,21 +961,6 @@
|
||||
"tilt_target": 0,
|
||||
"out_voa": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"uid": "east edfa in Lorient_KMA to Vannes_KBE",
|
||||
"metadata": {
|
||||
"location": {
|
||||
"city": "Lorient_KMA",
|
||||
"region": "RLD",
|
||||
"latitude": 2.0,
|
||||
"longitude": 3.0
|
||||
}
|
||||
},
|
||||
"type": "Fused",
|
||||
"params": {
|
||||
"loss": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"connections": [
|
||||
@@ -1245,4 +1245,4 @@
|
||||
"to_node": "trx Brest_KLA"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,6 +124,23 @@ class Eqpt(object):
|
||||
}
|
||||
|
||||
|
||||
class Roadm(object):
|
||||
def __init__(self, **kwargs):
|
||||
super(Roadm, self).__init__()
|
||||
self.update_attr(kwargs)
|
||||
|
||||
def update_attr(self, kwargs):
|
||||
clean_kwargs = {k: v for k, v in kwargs.items() if v != ''}
|
||||
for k, v in self.default_values.items():
|
||||
v = clean_kwargs.get(k, v)
|
||||
setattr(self, k, v)
|
||||
|
||||
default_values = {'from_node': '',
|
||||
'to_node': '',
|
||||
'target_pch_out_db': None
|
||||
}
|
||||
|
||||
|
||||
def read_header(my_sheet, line, slice_):
|
||||
""" return the list of headers !:= ''
|
||||
header_i = [(header, header_column_index), ...]
|
||||
@@ -234,7 +251,7 @@ def sanity_check(nodes, links, nodes_by_city, links_by_city, eqpts_by_city):
|
||||
# => correct to make it a ROADM and remove entry in links_by_city
|
||||
# TODO: put in log rather than print
|
||||
print(f'invalid node type ({nodes_by_city[city].node_type})\
|
||||
specified in {city}, replaced by ROADM')
|
||||
specified in {city}, replaced by ROADM')
|
||||
nodes_by_city[city].node_type = 'ROADM'
|
||||
for n in nodes:
|
||||
if n.city == city:
|
||||
@@ -242,8 +259,99 @@ def sanity_check(nodes, links, nodes_by_city, links_by_city, eqpts_by_city):
|
||||
return nodes, links
|
||||
|
||||
|
||||
def create_roadm_element(node, roadms_by_city):
|
||||
""" create the json element for a roadm node, including the different cases:
|
||||
- if there are restrictions
|
||||
- if there are per degree target power defined on a direction
|
||||
direction is defined by the booster name, so that booster must also be created in eqpt sheet
|
||||
if the direction is defined in roadm
|
||||
"""
|
||||
roadm = {'uid': f'roadm {node.city}'}
|
||||
if node.preamp_restriction != '' or node.booster_restriction != '':
|
||||
roadm['params'] = {
|
||||
'restrictions': {
|
||||
'preamp_variety_list': silent_remove(node.preamp_restriction.split(' | '), ''),
|
||||
'booster_variety_list': silent_remove(node.booster_restriction.split(' | '), '')}
|
||||
}
|
||||
if node.city in roadms_by_city.keys():
|
||||
if 'params' not in roadm.keys():
|
||||
roadm['params'] = {}
|
||||
roadm['params']['per_degree_params'] = []
|
||||
for elem in roadms_by_city[node.city]:
|
||||
to_node = f'east edfa in {node.city} to {elem.to_node}'
|
||||
if elem.target_pch_out_db is not None:
|
||||
roadm['params']['per_degree_params'].append({'to_node': to_node,
|
||||
'target_pch_out_db': elem.target_pch_out_db})
|
||||
roadm['metadata'] = {'location': {'city': node.city,
|
||||
'region': node.region,
|
||||
'latitude': node.latitude,
|
||||
'longitude': node.longitude}}
|
||||
roadm['type'] = 'Roadm'
|
||||
return roadm
|
||||
|
||||
|
||||
def create_east_eqpt_element(node):
|
||||
""" create amplifiers json elements for the east direction.
|
||||
this includes the case where the case of a fused element defined instead of an
|
||||
ILA in eqpt sheet
|
||||
"""
|
||||
eqpt = {'uid': f'east edfa in {node.from_city} to {node.to_city}',
|
||||
'metadata': {'location': {'city': nodes_by_city[node.from_city].city,
|
||||
'region': nodes_by_city[node.from_city].region,
|
||||
'latitude': nodes_by_city[node.from_city].latitude,
|
||||
'longitude': nodes_by_city[node.from_city].longitude}}}
|
||||
if node.east_amp_type.lower() != '' and node.east_amp_type.lower() != 'fused':
|
||||
eqpt['type'] = 'Edfa'
|
||||
eqpt['type_variety'] = f'{node.east_amp_type}'
|
||||
eqpt['operational'] = {'gain_target': node.east_amp_gain,
|
||||
'delta_p': node.east_amp_dp,
|
||||
'tilt_target': node.east_tilt,
|
||||
'out_voa': node.east_att_out}
|
||||
elif node.east_amp_type.lower() == '':
|
||||
eqpt['type'] = 'Edfa'
|
||||
eqpt['operational'] = {'gain_target': node.east_amp_gain,
|
||||
'delta_p': node.east_amp_dp,
|
||||
'tilt_target': node.east_tilt,
|
||||
'out_voa': node.east_att_out}
|
||||
elif node.east_amp_type.lower() == 'fused':
|
||||
# fused edfa variety is a hack to indicate that there should not be
|
||||
# booster amplifier out the roadm.
|
||||
# If user specifies ILA in Nodes sheet and fused in Eqpt sheet, then assumes that
|
||||
# this is a fused nodes.
|
||||
eqpt['type'] = 'Fused'
|
||||
eqpt['params'] = {'loss': 0}
|
||||
return eqpt
|
||||
|
||||
|
||||
def create_west_eqpt_element(node):
|
||||
""" create amplifiers json elements for the west direction.
|
||||
this includes the case where the case of a fused element defined instead of an
|
||||
ILA in eqpt sheet
|
||||
"""
|
||||
eqpt = {'uid': f'west edfa in {node.from_city} to {node.to_city}',
|
||||
'metadata': {'location': {'city': nodes_by_city[node.from_city].city,
|
||||
'region': nodes_by_city[node.from_city].region,
|
||||
'latitude': nodes_by_city[node.from_city].latitude,
|
||||
'longitude': nodes_by_city[node.from_city].longitude}},
|
||||
'type': 'Edfa'}
|
||||
if node.west_amp_type.lower() != '' and node.west_amp_type.lower() != 'fused':
|
||||
eqpt['type_variety'] = f'{node.west_amp_type}'
|
||||
eqpt['operational'] = {'gain_target': node.west_amp_gain,
|
||||
'delta_p': node.west_amp_dp,
|
||||
'tilt_target': node.west_tilt,
|
||||
'out_voa': node.west_att_out}
|
||||
elif node.west_amp_type.lower() == '':
|
||||
eqpt['operational'] = {'gain_target': node.west_amp_gain,
|
||||
'delta_p': node.west_amp_dp,
|
||||
'tilt_target': node.west_tilt,
|
||||
'out_voa': node.west_att_out}
|
||||
elif node.west_amp_type.lower() == 'fused':
|
||||
eqpt['type'] = 'Fused'
|
||||
eqpt['params'] = {'loss': 0}
|
||||
return eqpt
|
||||
|
||||
def xls_to_json_data(input_filename, filter_region=[]):
|
||||
nodes, links, eqpts = parse_excel(input_filename)
|
||||
nodes, links, eqpts, roadms = parse_excel(input_filename)
|
||||
if filter_region:
|
||||
nodes = [n for n in nodes if n.region.lower() in filter_region]
|
||||
cities = {n.city for n in nodes}
|
||||
@@ -266,6 +374,10 @@ def xls_to_json_data(input_filename, filter_region=[]):
|
||||
for eqpt in eqpts:
|
||||
eqpts_by_city[eqpt.from_city].append(eqpt)
|
||||
|
||||
roadms_by_city = defaultdict(list)
|
||||
for roadm in roadms:
|
||||
roadms_by_city[roadm.from_node].append(roadm)
|
||||
|
||||
nodes, links = sanity_check(nodes, links, nodes_by_city, links_by_city, eqpts_by_city)
|
||||
|
||||
return {
|
||||
@@ -277,28 +389,8 @@ def xls_to_json_data(input_filename, filter_region=[]):
|
||||
'longitude': x.longitude}},
|
||||
'type': 'Transceiver'}
|
||||
for x in nodes_by_city.values() if x.node_type.lower() == 'roadm'] +
|
||||
[{'uid': f'roadm {x.city}',
|
||||
'metadata': {'location': {'city': x.city,
|
||||
'region': x.region,
|
||||
'latitude': x.latitude,
|
||||
'longitude': x.longitude}},
|
||||
'type': 'Roadm'}
|
||||
for x in nodes_by_city.values() if x.node_type.lower() == 'roadm'
|
||||
and x.booster_restriction == '' and x.preamp_restriction == ''] +
|
||||
[{'uid': f'roadm {x.city}',
|
||||
'params': {
|
||||
'restrictions': {
|
||||
'preamp_variety_list': silent_remove(x.preamp_restriction.split(' | '), ''),
|
||||
'booster_variety_list': silent_remove(x.booster_restriction.split(' | '), '')
|
||||
}
|
||||
},
|
||||
'metadata': {'location': {'city': x.city,
|
||||
'region': x.region,
|
||||
'latitude': x.latitude,
|
||||
'longitude': x.longitude}},
|
||||
'type': 'Roadm'}
|
||||
for x in nodes_by_city.values() if x.node_type.lower() == 'roadm' and
|
||||
(x.booster_restriction != '' or x.preamp_restriction != '')] +
|
||||
[create_roadm_element(x, roadms_by_city)
|
||||
for x in nodes_by_city.values() if x.node_type.lower() == 'roadm'] +
|
||||
[{'uid': f'west fused spans in {x.city}',
|
||||
'metadata': {'location': {'city': x.city,
|
||||
'region': x.region,
|
||||
@@ -333,60 +425,12 @@ def xls_to_json_data(input_filename, filter_region=[]):
|
||||
'params': {'length': round(x.west_distance, 3),
|
||||
'length_units': x.distance_units,
|
||||
'loss_coef': x.west_lineic,
|
||||
'con_in': x.west_con_in,
|
||||
'con_out': x.west_con_out}
|
||||
} # missing ILA construction
|
||||
for x in links] +
|
||||
[{'uid': f'east edfa in {e.from_city} to {e.to_city}',
|
||||
'metadata': {'location': {'city': nodes_by_city[e.from_city].city,
|
||||
'region': nodes_by_city[e.from_city].region,
|
||||
'latitude': nodes_by_city[e.from_city].latitude,
|
||||
'longitude': nodes_by_city[e.from_city].longitude}},
|
||||
'type': 'Edfa',
|
||||
'type_variety': e.east_amp_type,
|
||||
'operational': {'gain_target': e.east_amp_gain,
|
||||
'delta_p': e.east_amp_dp,
|
||||
'tilt_target': e.east_tilt,
|
||||
'out_voa': e.east_att_out}
|
||||
}
|
||||
for e in eqpts if (e.east_amp_type.lower() != '' and \
|
||||
e.east_amp_type.lower() != 'fused')] +
|
||||
[{'uid': f'west edfa in {e.from_city} to {e.to_city}',
|
||||
'metadata': {'location': {'city': nodes_by_city[e.from_city].city,
|
||||
'region': nodes_by_city[e.from_city].region,
|
||||
'latitude': nodes_by_city[e.from_city].latitude,
|
||||
'longitude': nodes_by_city[e.from_city].longitude}},
|
||||
'type': 'Edfa',
|
||||
'type_variety': e.west_amp_type,
|
||||
'operational': {'gain_target': e.west_amp_gain,
|
||||
'delta_p': e.west_amp_dp,
|
||||
'tilt_target': e.west_tilt,
|
||||
'out_voa': e.west_att_out}
|
||||
}
|
||||
for e in eqpts if (e.west_amp_type.lower() != '' and \
|
||||
e.west_amp_type.lower() != 'fused')] +
|
||||
# fused edfa variety is a hack to indicate that there should not be
|
||||
# booster amplifier out the roadm.
|
||||
# If user specifies ILA in Nodes sheet and fused in Eqpt sheet, then assumes that
|
||||
# this is a fused nodes.
|
||||
[{'uid': f'east edfa in {e.from_city} to {e.to_city}',
|
||||
'metadata': {'location': {'city': nodes_by_city[e.from_city].city,
|
||||
'region': nodes_by_city[e.from_city].region,
|
||||
'latitude': nodes_by_city[e.from_city].latitude,
|
||||
'longitude': nodes_by_city[e.from_city].longitude}},
|
||||
'type': 'Fused',
|
||||
'params': {'loss': 0}
|
||||
}
|
||||
for e in eqpts if e.east_amp_type.lower() == 'fused'] +
|
||||
[{'uid': f'west edfa in {e.from_city} to {e.to_city}',
|
||||
'metadata': {'location': {'city': nodes_by_city[e.from_city].city,
|
||||
'region': nodes_by_city[e.from_city].region,
|
||||
'latitude': nodes_by_city[e.from_city].latitude,
|
||||
'longitude': nodes_by_city[e.from_city].longitude}},
|
||||
'type': 'Fused',
|
||||
'params': {'loss': 0}
|
||||
}
|
||||
for e in eqpts if e.west_amp_type.lower() == 'fused'],
|
||||
'con_in':x.west_con_in,
|
||||
'con_out':x.west_con_out}
|
||||
} # missing ILA construction
|
||||
for x in links] +
|
||||
[create_east_eqpt_element(e) for e in eqpts] +
|
||||
[create_west_eqpt_element(e) for e in eqpts],
|
||||
'connections':
|
||||
list(chain.from_iterable([eqpt_connection_by_city(n.city)
|
||||
for n in nodes]))
|
||||
@@ -407,6 +451,7 @@ def convert_file(input_filename, filter_region=[], output_json_file_name=None):
|
||||
output_json_file_name = input_filename.with_suffix('.json')
|
||||
with open(output_json_file_name, 'w', encoding='utf-8') as edfa_json_file:
|
||||
edfa_json_file.write(dumps(data, indent=2, ensure_ascii=False))
|
||||
edfa_json_file.write('\n') # add end of file newline because json dumps does not.
|
||||
return output_json_file_name
|
||||
|
||||
|
||||
@@ -415,7 +460,7 @@ def corresp_names(input_filename, network):
|
||||
and names used in the json, and created by the autodesign.
|
||||
All names are listed
|
||||
"""
|
||||
nodes, links, eqpts = parse_excel(input_filename)
|
||||
nodes, links, eqpts, roadms = parse_excel(input_filename)
|
||||
fused = [n.uid for n in network.nodes() if isinstance(n, Fused)]
|
||||
ila = [n.uid for n in network.nodes() if isinstance(n, Edfa)]
|
||||
|
||||
@@ -443,17 +488,15 @@ def corresp_names(input_filename, network):
|
||||
# build corresp ila based on eqpt sheet
|
||||
# start with east direction
|
||||
corresp_ila = {e.from_city: [f'east edfa in {e.from_city} to {e.to_city}']
|
||||
for e in eqpts if e.east_amp_type.lower() != '' and
|
||||
f'east edfa in {e.from_city} to {e.to_city}' in ila}
|
||||
for e in eqpts if f'east edfa in {e.from_city} to {e.to_city}' in ila}
|
||||
# west direction, append name or create a new item in dict
|
||||
for my_e in eqpts:
|
||||
if my_e.west_amp_type.lower() != '':
|
||||
name = f'west edfa in {my_e.from_city} to {my_e.to_city}'
|
||||
if name in ila:
|
||||
if my_e.from_city in corresp_ila.keys():
|
||||
corresp_ila[my_e.from_city].append(name)
|
||||
else:
|
||||
corresp_ila[my_e.from_city] = [name]
|
||||
name = f'west edfa in {my_e.from_city} to {my_e.to_city}'
|
||||
if name in ila:
|
||||
if my_e.from_city in corresp_ila.keys():
|
||||
corresp_ila[my_e.from_city].append(name)
|
||||
else:
|
||||
corresp_ila[my_e.from_city] = [name]
|
||||
# complete with potential autodesign names: amplifiers
|
||||
for my_l in links:
|
||||
name = f'Edfa0_fiber ({my_l.to_city} \u2192 {my_l.from_city})-{my_l.west_cable}'
|
||||
@@ -474,7 +517,6 @@ def corresp_names(input_filename, network):
|
||||
corresp_ila[my_l.to_city].append(name)
|
||||
else:
|
||||
corresp_ila[my_l.to_city] = [name]
|
||||
|
||||
# merge fused with ila:
|
||||
for key, val in corresp_fused.items():
|
||||
if key in corresp_ila.keys():
|
||||
@@ -539,6 +581,10 @@ def parse_excel(input_filename):
|
||||
'att_out': 'west_att_out'
|
||||
}
|
||||
}
|
||||
roadm_headers = {'Node A': 'from_node',
|
||||
'Node Z': 'to_node',
|
||||
'per degree target power (dBm)': 'target_pch_out_db'
|
||||
}
|
||||
|
||||
with open_workbook(input_filename) as wb:
|
||||
nodes_sheet = wb.sheet_by_name('Nodes')
|
||||
@@ -548,6 +594,11 @@ def parse_excel(input_filename):
|
||||
except Exception:
|
||||
# eqpt_sheet is optional
|
||||
eqpt_sheet = None
|
||||
try:
|
||||
roadm_sheet = wb.sheet_by_name('Roadms')
|
||||
except Exception:
|
||||
# roadm_sheet is optional
|
||||
roadm_sheet = None
|
||||
|
||||
nodes = []
|
||||
for node in parse_sheet(nodes_sheet, node_headers, NODES_LINE, NODES_LINE + 1, NODES_COLUMN):
|
||||
@@ -566,6 +617,11 @@ def parse_excel(input_filename):
|
||||
for eqpt in parse_sheet(eqpt_sheet, eqpt_headers, EQPTS_LINE, EQPTS_LINE + 2, EQPTS_COLUMN):
|
||||
eqpts.append(Eqpt(**eqpt))
|
||||
|
||||
roadms = []
|
||||
if roadm_sheet is not None:
|
||||
for roadm in parse_sheet(roadm_sheet, roadm_headers, ROADMS_LINE, ROADMS_LINE+2, ROADMS_COLUMN):
|
||||
roadms.append(Roadm(**roadm))
|
||||
|
||||
# sanity check
|
||||
all_cities = Counter(n.city for n in nodes)
|
||||
if len(all_cities) != len(nodes):
|
||||
@@ -581,7 +637,7 @@ def parse_excel(input_filename):
|
||||
f'are not defined in the {ansi_escapes.cyan}Nodes{ansi_escapes.reset} sheet:\n'
|
||||
+ _format_items(f'{item[0]} -> {item[1]}' for item in bad_links))
|
||||
|
||||
return nodes, links, eqpts
|
||||
return nodes, links, eqpts, roadms
|
||||
|
||||
|
||||
def eqpt_connection_by_city(city_name):
|
||||
@@ -627,14 +683,13 @@ def eqpt_in_city_to_city(in_city, to_city, direction='east'):
|
||||
if in_city in eqpts_by_city:
|
||||
for e in eqpts_by_city[in_city]:
|
||||
if nodes_by_city[in_city].node_type.lower() == 'roadm':
|
||||
if e.to_city == to_city and getattr(e, amp_direction) != '':
|
||||
if e.to_city == to_city:
|
||||
return_eqpt = f'{direction} edfa in {e.from_city} to {e.to_city}'
|
||||
elif nodes_by_city[in_city].node_type.lower() == 'ila':
|
||||
if e.to_city != to_city:
|
||||
direction = rev_direction
|
||||
amp_direction = amp_rev_direction
|
||||
if getattr(e, amp_direction) != '':
|
||||
return_eqpt = f'{direction} edfa in {e.from_city} to {e.to_city}'
|
||||
return_eqpt = f'{direction} edfa in {e.from_city} to {e.to_city}'
|
||||
if nodes_by_city[in_city].node_type.lower() == 'fused':
|
||||
return_eqpt = f'{direction} fused spans in {in_city}'
|
||||
return return_eqpt
|
||||
@@ -741,6 +796,8 @@ LINKS_COLUMN = 16
|
||||
LINKS_LINE = 3
|
||||
EQPTS_LINE = 3
|
||||
EQPTS_COLUMN = 14
|
||||
ROADMS_LINE = 3
|
||||
ROADMS_COLUMN = 3
|
||||
|
||||
|
||||
def _do_convert():
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -79,8 +79,8 @@
|
||||
"path-route-object": {
|
||||
"index": 5,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa1_roadm Lorient_KMA",
|
||||
"link-tp-id": "Edfa1_roadm Lorient_KMA"
|
||||
"node-id": "east edfa in Lorient_KMA to Vannes_KBE",
|
||||
"link-tp-id": "east edfa in Lorient_KMA to Vannes_KBE"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -115,8 +115,8 @@
|
||||
"path-route-object": {
|
||||
"index": 9,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_fiber (Lorient_KMA → Vannes_KBE)-F055",
|
||||
"link-tp-id": "Edfa0_fiber (Lorient_KMA → Vannes_KBE)-F055"
|
||||
"node-id": "west edfa in Vannes_KBE to Lorient_KMA",
|
||||
"link-tp-id": "west edfa in Vannes_KBE to Lorient_KMA"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -256,8 +256,8 @@
|
||||
"path-route-object": {
|
||||
"index": 5,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_roadm Brest_KLA",
|
||||
"link-tp-id": "Edfa0_roadm Brest_KLA"
|
||||
"node-id": "east edfa in Brest_KLA to Morlaix",
|
||||
"link-tp-id": "east edfa in Brest_KLA to Morlaix"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -472,8 +472,8 @@
|
||||
"path-route-object": {
|
||||
"index": 29,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_fiber (Loudeac → Lorient_KMA)-F054",
|
||||
"link-tp-id": "Edfa0_fiber (Loudeac → Lorient_KMA)-F054"
|
||||
"node-id": "west edfa in Lorient_KMA to Loudeac",
|
||||
"link-tp-id": "west edfa in Lorient_KMA to Loudeac"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -508,8 +508,8 @@
|
||||
"path-route-object": {
|
||||
"index": 33,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa1_roadm Lorient_KMA",
|
||||
"link-tp-id": "Edfa1_roadm Lorient_KMA"
|
||||
"node-id": "east edfa in Lorient_KMA to Vannes_KBE",
|
||||
"link-tp-id": "east edfa in Lorient_KMA to Vannes_KBE"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -544,8 +544,8 @@
|
||||
"path-route-object": {
|
||||
"index": 37,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_fiber (Lorient_KMA → Vannes_KBE)-F055",
|
||||
"link-tp-id": "Edfa0_fiber (Lorient_KMA → Vannes_KBE)-F055"
|
||||
"node-id": "west edfa in Vannes_KBE to Lorient_KMA",
|
||||
"link-tp-id": "west edfa in Vannes_KBE to Lorient_KMA"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -757,8 +757,8 @@
|
||||
"path-route-object": {
|
||||
"index": 13,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_fiber (Stbrieuc → Rennes_STA)-F057",
|
||||
"link-tp-id": "Edfa0_fiber (Stbrieuc → Rennes_STA)-F057"
|
||||
"node-id": "west edfa in Rennes_STA to Stbrieuc",
|
||||
"link-tp-id": "west edfa in Rennes_STA to Stbrieuc"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -898,8 +898,8 @@
|
||||
"path-route-object": {
|
||||
"index": 5,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa1_roadm Rennes_STA",
|
||||
"link-tp-id": "Edfa1_roadm Rennes_STA"
|
||||
"node-id": "east edfa in Rennes_STA to Ploermel",
|
||||
"link-tp-id": "east edfa in Rennes_STA to Ploermel"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -970,8 +970,8 @@
|
||||
"path-route-object": {
|
||||
"index": 13,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_fiber (Ploermel → Vannes_KBE)-",
|
||||
"link-tp-id": "Edfa0_fiber (Ploermel → Vannes_KBE)-"
|
||||
"node-id": "west edfa in Vannes_KBE to Ploermel",
|
||||
"link-tp-id": "west edfa in Vannes_KBE to Ploermel"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1006,8 +1006,8 @@
|
||||
"path-route-object": {
|
||||
"index": 17,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_roadm Vannes_KBE",
|
||||
"link-tp-id": "Edfa0_roadm Vannes_KBE"
|
||||
"node-id": "east edfa in Vannes_KBE to Lorient_KMA",
|
||||
"link-tp-id": "east edfa in Vannes_KBE to Lorient_KMA"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1042,8 +1042,8 @@
|
||||
"path-route-object": {
|
||||
"index": 21,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_fiber (Vannes_KBE → Lorient_KMA)-F055",
|
||||
"link-tp-id": "Edfa0_fiber (Vannes_KBE → Lorient_KMA)-F055"
|
||||
"node-id": "west edfa in Lorient_KMA to Vannes_KBE",
|
||||
"link-tp-id": "west edfa in Lorient_KMA to Vannes_KBE"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1078,8 +1078,8 @@
|
||||
"path-route-object": {
|
||||
"index": 25,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_roadm Lorient_KMA",
|
||||
"link-tp-id": "Edfa0_roadm Lorient_KMA"
|
||||
"node-id": "east edfa in Lorient_KMA to Loudeac",
|
||||
"link-tp-id": "east edfa in Lorient_KMA to Loudeac"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1327,8 +1327,8 @@
|
||||
"path-route-object": {
|
||||
"index": 5,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_roadm Rennes_STA",
|
||||
"link-tp-id": "Edfa0_roadm Rennes_STA"
|
||||
"node-id": "east edfa in Rennes_STA to Stbrieuc",
|
||||
"link-tp-id": "east edfa in Rennes_STA to Stbrieuc"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1363,8 +1363,8 @@
|
||||
"path-route-object": {
|
||||
"index": 9,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_fiber (Rennes_STA → Stbrieuc)-F057",
|
||||
"link-tp-id": "Edfa0_fiber (Rennes_STA → Stbrieuc)-F057"
|
||||
"node-id": "west edfa in Stbrieuc to Rennes_STA",
|
||||
"link-tp-id": "west edfa in Stbrieuc to Rennes_STA"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1399,8 +1399,8 @@
|
||||
"path-route-object": {
|
||||
"index": 13,
|
||||
"num-unnum-hop": {
|
||||
"node-id": "Edfa0_fiber (Stbrieuc → Lannion_CAS)-F056",
|
||||
"link-tp-id": "Edfa0_fiber (Stbrieuc → Lannion_CAS)-F056"
|
||||
"node-id": "west edfa in Lannion_CAS to Stbrieuc",
|
||||
"link-tp-id": "west edfa in Lannion_CAS to Stbrieuc"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
response-id,source,destination,path_bandwidth,Pass?,nb of tsp pairs,total cost,transponder-type,transponder-mode,OSNR-0.1nm,SNR-0.1nm,SNR-bandwidth,baud rate (Gbaud),input power (dBm),path,"spectrum (N,M)",reversed path OSNR-0.1nm,reversed path SNR-0.1nm,reversed path SNR-bandwidth
|
||||
0,trx Lorient_KMA,trx Vannes_KBE,100.0,True,1,1,Voyager,mode 1,30.84,30.84,26.75,32.0,0.0,trx Lorient_KMA | roadm Lorient_KMA | Edfa1_roadm Lorient_KMA | fiber (Lorient_KMA → Vannes_KBE)-F055 | Edfa0_fiber (Lorient_KMA → Vannes_KBE)-F055 | roadm Vannes_KBE | trx Vannes_KBE,"-284, 4"
|
||||
1,trx Brest_KLA,trx Vannes_KBE,10.0,True,1,1,Voyager,mode 1,22.65,22.11,18.03,32.0,1.0,trx Brest_KLA | roadm Brest_KLA | Edfa0_roadm Brest_KLA | fiber (Brest_KLA → Morlaix)-F060 | east fused spans in Morlaix | fiber (Morlaix → Lannion_CAS)-F059 | west edfa in Lannion_CAS to Morlaix | roadm Lannion_CAS | east edfa in Lannion_CAS to Corlay | fiber (Lannion_CAS → Corlay)-F061 | west fused spans in Corlay | fiber (Corlay → Loudeac)-F010 | west fused spans in Loudeac | fiber (Loudeac → Lorient_KMA)-F054 | Edfa0_fiber (Loudeac → Lorient_KMA)-F054 | roadm Lorient_KMA | Edfa1_roadm Lorient_KMA | fiber (Lorient_KMA → Vannes_KBE)-F055 | Edfa0_fiber (Lorient_KMA → Vannes_KBE)-F055 | roadm Vannes_KBE | trx Vannes_KBE,"-276, 4"
|
||||
3,trx Lannion_CAS,trx Rennes_STA,60.0,True,1,1,vendorA_trx-type1,mode 1,28.29,25.85,21.77,32.0,1.0,trx Lannion_CAS | roadm Lannion_CAS | east edfa in Lannion_CAS to Stbrieuc | fiber (Lannion_CAS → Stbrieuc)-F056 | east edfa in Stbrieuc to Rennes_STA | fiber (Stbrieuc → Rennes_STA)-F057 | Edfa0_fiber (Stbrieuc → Rennes_STA)-F057 | roadm Rennes_STA | trx Rennes_STA,"-284, 4"
|
||||
4,trx Rennes_STA,trx Lannion_CAS,150.0,True,1,1,vendorA_trx-type1,mode 2,22.27,22.15,15.05,64.0,0.0,trx Rennes_STA | roadm Rennes_STA | Edfa1_roadm Rennes_STA | fiber (Rennes_STA → Ploermel)- | east edfa in Ploermel to Vannes_KBE | fiber (Ploermel → Vannes_KBE)- | Edfa0_fiber (Ploermel → Vannes_KBE)- | roadm Vannes_KBE | Edfa0_roadm Vannes_KBE | fiber (Vannes_KBE → Lorient_KMA)-F055 | Edfa0_fiber (Vannes_KBE → Lorient_KMA)-F055 | roadm Lorient_KMA | Edfa0_roadm Lorient_KMA | fiber (Lorient_KMA → Loudeac)-F054 | east fused spans in Loudeac | fiber (Loudeac → Corlay)-F010 | east fused spans in Corlay | fiber (Corlay → Lannion_CAS)-F061 | west edfa in Lannion_CAS to Corlay | roadm Lannion_CAS | trx Lannion_CAS,"-266, 6"
|
||||
5,trx Rennes_STA,trx Lannion_CAS,20.0,True,1,1,vendorA_trx-type1,mode 2,30.79,28.77,21.68,64.0,3.0,trx Rennes_STA | roadm Rennes_STA | Edfa0_roadm Rennes_STA | fiber (Rennes_STA → Stbrieuc)-F057 | Edfa0_fiber (Rennes_STA → Stbrieuc)-F057 | fiber (Stbrieuc → Lannion_CAS)-F056 | Edfa0_fiber (Stbrieuc → Lannion_CAS)-F056 | roadm Lannion_CAS | trx Lannion_CAS,"-274, 6"
|
||||
6,,,,NO_PATH,,,,,,,,,,,
|
||||
|
||||
0,trx Lorient_KMA,trx Vannes_KBE,100.0,True,1,1,Voyager,mode 1,30.84,30.84,26.75,32.0,0.0,trx Lorient_KMA | roadm Lorient_KMA | east edfa in Lorient_KMA to Vannes_KBE | fiber (Lorient_KMA → Vannes_KBE)-F055 | west edfa in Vannes_KBE to Lorient_KMA | roadm Vannes_KBE | trx Vannes_KBE,"-284, 4",,,
|
||||
1,trx Brest_KLA,trx Vannes_KBE,10.0,True,1,1,Voyager,mode 1,22.65,22.11,18.03,32.0,1.0,trx Brest_KLA | roadm Brest_KLA | east edfa in Brest_KLA to Morlaix | fiber (Brest_KLA → Morlaix)-F060 | east fused spans in Morlaix | fiber (Morlaix → Lannion_CAS)-F059 | west edfa in Lannion_CAS to Morlaix | roadm Lannion_CAS | east edfa in Lannion_CAS to Corlay | fiber (Lannion_CAS → Corlay)-F061 | west fused spans in Corlay | fiber (Corlay → Loudeac)-F010 | west fused spans in Loudeac | fiber (Loudeac → Lorient_KMA)-F054 | west edfa in Lorient_KMA to Loudeac | roadm Lorient_KMA | east edfa in Lorient_KMA to Vannes_KBE | fiber (Lorient_KMA → Vannes_KBE)-F055 | west edfa in Vannes_KBE to Lorient_KMA | roadm Vannes_KBE | trx Vannes_KBE,"-276, 4",,,
|
||||
3,trx Lannion_CAS,trx Rennes_STA,60.0,True,1,1,vendorA_trx-type1,mode 1,28.29,25.85,21.77,32.0,1.0,trx Lannion_CAS | roadm Lannion_CAS | east edfa in Lannion_CAS to Stbrieuc | fiber (Lannion_CAS → Stbrieuc)-F056 | east edfa in Stbrieuc to Rennes_STA | fiber (Stbrieuc → Rennes_STA)-F057 | west edfa in Rennes_STA to Stbrieuc | roadm Rennes_STA | trx Rennes_STA,"-284, 4",,,
|
||||
4,trx Rennes_STA,trx Lannion_CAS,150.0,True,1,1,vendorA_trx-type1,mode 2,22.27,22.15,15.05,64.0,0.0,trx Rennes_STA | roadm Rennes_STA | east edfa in Rennes_STA to Ploermel | fiber (Rennes_STA → Ploermel)- | east edfa in Ploermel to Vannes_KBE | fiber (Ploermel → Vannes_KBE)- | west edfa in Vannes_KBE to Ploermel | roadm Vannes_KBE | east edfa in Vannes_KBE to Lorient_KMA | fiber (Vannes_KBE → Lorient_KMA)-F055 | west edfa in Lorient_KMA to Vannes_KBE | roadm Lorient_KMA | east edfa in Lorient_KMA to Loudeac | fiber (Lorient_KMA → Loudeac)-F054 | east fused spans in Loudeac | fiber (Loudeac → Corlay)-F010 | east fused spans in Corlay | fiber (Corlay → Lannion_CAS)-F061 | west edfa in Lannion_CAS to Corlay | roadm Lannion_CAS | trx Lannion_CAS,"-266, 6",,,
|
||||
5,trx Rennes_STA,trx Lannion_CAS,20.0,True,1,1,vendorA_trx-type1,mode 2,30.79,28.77,21.68,64.0,3.0,trx Rennes_STA | roadm Rennes_STA | east edfa in Rennes_STA to Stbrieuc | fiber (Rennes_STA → Stbrieuc)-F057 | west edfa in Stbrieuc to Rennes_STA | fiber (Stbrieuc → Lannion_CAS)-F056 | west edfa in Lannion_CAS to Stbrieuc | roadm Lannion_CAS | trx Lannion_CAS,"-274, 6",,,
|
||||
6,,,,NO_PATH,,,,,,,,,,,,,,
|
||||
|
||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
@@ -361,9 +361,9 @@ def test_json_response_generation(xls_input, expected_response_file):
|
||||
('trx Lannion_CAS', 'trx Lorient_KMA', 'Ploermel | Vannes_KBE', 'LOOSE',
|
||||
['east edfa in Ploermel to Vannes_KBE', 'roadm Vannes_KBE']),
|
||||
('trx Rennes_STA', 'trx Brest_KLA', 'Vannes_KBE | Quimper | Brest_KLA', 'LOOSE',
|
||||
['roadm Vannes_KBE', 'Edfa0_fiber (Lorient_KMA → Quimper)-', 'roadm Brest_KLA']),
|
||||
['roadm Vannes_KBE', 'west edfa in Quimper to Lorient_KMA', 'roadm Brest_KLA']),
|
||||
('trx Brest_KLA', 'trx Rennes_STA', 'Brest_KLA | Quimper | Lorient_KMA', 'LOOSE',
|
||||
['roadm Brest_KLA', 'Edfa0_fiber (Brest_KLA → Quimper)-', 'roadm Lorient_KMA']),
|
||||
['roadm Brest_KLA', 'east edfa in Quimper to Lorient_KMA', 'roadm Lorient_KMA']),
|
||||
('Brest_KLA', 'trx Rennes_STA', '', 'LOOSE', 'Fail'),
|
||||
('trx Brest_KLA', 'Rennes_STA', '', 'LOOSE', 'Fail'),
|
||||
('Brest_KLA', 'Rennes_STA', '', 'LOOSE', 'Fail'),
|
||||
|
||||
Reference in New Issue
Block a user