from ciscoconfparse import CiscoConfParse from Flowdat.Gpon import Gpon from Flowdat.Nap import Nap from Flowdat.Onu import Onu class ModelOltBase: file_name = None conf_file_parse = None def __init__(self, file_name): """ Constructor :param file_name: Contains path for file name """ self.file_name = file self.conf_file_parse = CiscoConfParse(file_name) def get_gpons(self): """ Get config for interface gpon-olt :return: None """ all_intfs = self.conf_file_parse.find_objects("interface gpon-olt") i = 0 gpons_arr = [] for obj in all_intfs: gpon = Gpon() gpon.id = i i += 1 gpon.name = obj.text.replace("interface ", "") gpon.child = [] for objonu in obj.children: onu = Onu() onu.nap = Nap() onu.nap.name = gpon.name.replace("gpon-olt_", "") data_compare = objonu.text.lower().split() data = objonu.text.split() onu.name = objonu.text onu.import_data_list(data_compare, data) if onu.isValid(): gpon.child.append(onu) gpons_arr.append(gpon) return gpons_arr def search_object(self, search): """ Search objects :param search: String to search :return: Retorna object with IOSCfgLine """ resps = self.conf_file_parse.find_objects(search) # la consulta puede devolver varios objectos, entonces busco el indicado for obj in resps: if obj.text == search: return obj return None def get_onus(self, olt): """ Get all onus :param olt: Olt object :return: Return object with child """ for obj_olt in olt.child: for obj_onu in obj_olt.child: # paso el nombre a minuscula search = obj_olt.name.lower() # reemplazo el valor olt por onu search = "interface " + search.replace("olt", "onu") + ":" + str(obj_onu.id) obj = self.search_object(search) if obj is not None and obj.text is not None: # recorro el objeto para obtener los datos for obj in obj.children: data_compare = obj.text.lower().strip() obj_onu.import_data(data_compare, obj) return olt def get_onus_duplicated(self, olt): """ Obtain duplilcated onus :param olt: Olt object :return: Return string with duplicated onu """ resp = "" onus = {} for obj_olt in olt.child: for obj_onu in obj_olt.child: if obj_onu.serial_number not in onus: onus[obj_onu.serial_number] = [] onus[obj_onu.serial_number].append(obj_onu) for tmp in onus: if len(onus[tmp]) > 1: for o in onus[tmp]: resp = resp + "-- Serial number: " + o.serial_number + ", name: " + o.name if o.nap is not None: resp = resp + ", nap: " + o.nap.name resp = resp + "\n" return resp def process_file(self, olt): olt.child = self.get_gpons() self.get_onus(olt)