from ciscoconfparse import CiscoConfParse from Flowdat.Gpon import Gpon from Flowdat.Nap import Nap from Flowdat.Onu import Onu from Util import Strings class Huawei(object): 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 process_file(self, olt): olt.child = self.get_gpons() self.get_onus(olt) 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 for obj in resps: if search in obj.text: return obj return None def get_gpons(self): """ Get config for interface gpon-olt :return: None """ all_intfs = self.conf_file_parse.find_objects("gpon-") i = 0 gpons_arr = [] for obj in all_intfs: gpon = Gpon() gpon.id = i i += 1 gpon.name = obj.text gpon.child = [] for idx, objonu in enumerate(obj.children, start=1): if "ont add" in objonu.text: onu_split = objonu.text.split() slot = gpon.name.split('-')[1].split('/')[1].replace('>','') link = onu_split[2] nap = Nap() nap.name = 'NAP/%(slot)s/%(link)s' % locals() nap.slot = slot nap.link = link onu = Onu() onu.nap = nap onu.name = objonu.text data_compare = objonu.text.lower().split() data = objonu.text.split() onu.import_data_list(data_compare, data, idx, 'Huawei') if onu.isValid(): gpon.child.append(onu) gpons_arr.append(gpon) return gpons_arr 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 serial_number = obj_onu.serial_number search = "sn-auth %(serial_number)s " % locals() obj = self.search_object(search) if obj is not None and obj.text is not None: # recorro el objeto para obtener los datos data_compare = obj.text.lower().strip() obj_onu.import_data(data_compare, obj, 'Huawei') obj_onu.service_port = [] if obj_onu.nap and obj_onu.nap.slot and obj_onu.nap.link: slot = obj_onu.nap.slot link = obj_onu.nap.link position = obj_onu.position service_ports = self.conf_file_parse.find_objects(" gpon 0/%(slot)s/%(link)s ont %(position)s " % locals()) for service_port in service_ports: obj_onu.import_data(service_port.text.lower(), obj_onu, 'Huawei') 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 get_pon_onu_mng(self, olt): """ Complete :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 = "pon-onu-mng " + 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: val = obj.text.lower().strip() index = Strings.index_value(val, "video") if index >= 0: obj_onu.catv = Catv() obj_onu.catv.name = obj.text return olt