Advertisement
Guest User

Untitled

a guest
Oct 21st, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. import re
  2. import copy
  3. import lxml.etree as etree
  4.  
  5.  
  6. def create_new_cells(parent_element, new_cell_numbers, base_cell=None):
  7. cell_elements = get_cell_elements(parent_element, base_cell)
  8. for new_cell_number in new_cell_numbers:
  9. create_new_cell(parent_element, new_cell_number, cell_elements)
  10.  
  11.  
  12. def get_cell_elements(parent_element, cell_number=None):
  13. managedObject_elements = parent_element.findall('.//{raml21.xsd}managedObject[@distName]')
  14. cell_elements = filter_cell_elements(managedObject_elements, cell_number)
  15. return cell_elements
  16.  
  17.  
  18. def filter_cell_elements(elements, cell_number):
  19. if cell_number is None:
  20. cell_number = get_first_cell_number(elements)
  21. cell_elements = [element for element in elements if is_cell_element(element, cell_number)]
  22. return cell_elements
  23.  
  24.  
  25. def get_first_cell_number(managedObject_elements):
  26. for managedObject in managedObject_elements:
  27. cell_number = get_cell_number(managedObject)
  28. if cell_number:
  29. return cell_number
  30.  
  31.  
  32. def get_cell_number(element):
  33. cell_number = re.search('LNCEL-(\d+)|LCELL-(\d+)', element.attrib['distName'])
  34. if cell_number and cell_number.group(1):
  35. return cell_number.group(1)
  36.  
  37.  
  38. def is_cell_element(element, cell_num):
  39. return any(cell_string in element.attrib['distName'] for cell_string in
  40. ['LCELL-' + cell_num, 'LNCEL-' + cell_num])
  41.  
  42.  
  43. def create_new_cell(parent, cell_num, cell_elems):
  44. for old_cell_element in cell_elems:
  45. create_new_cell_element(old_cell_element, parent, cell_num)
  46.  
  47.  
  48. def create_new_cell_element(old_cell_element, parent_element, new_cell_number):
  49. new_cell_element = copy.deepcopy(old_cell_element)
  50. set_new_cell_number(new_cell_element, new_cell_number)
  51. parent_element.append(new_cell_element)
  52.  
  53.  
  54. def set_new_cell_number(cell_element, new_cell_number):
  55. cell_element.attrib['distName'] = re.sub(r'(LNCEL-|LCELL-)\d+', r'\g<1>' + str(new_cell_number),
  56. cell_element.attrib['distName'])
  57.  
  58.  
  59. def change_lcrId_numbers(parent_element):
  60. lcrIds_parent_elems = parent_element.findall('.//{raml21.xsd}managedObject[@class="NOKLTE:LNCEL"]')
  61. for managedObject in lcrIds_parent_elems:
  62. find_lcrId_element_and_set_text(managedObject)
  63.  
  64.  
  65. def find_lcrId_element_and_set_text(managedObject):
  66. lcrId_element = managedObject.findall('.//{raml21.xsd}p[@name="lcrId"]')[0]
  67. lcrId_element.text = get_cell_number(managedObject)
  68.  
  69.  
  70. def delete_cells(parent_element, cells_to_be_deleted):
  71. cells_to_be_deleted = [str(num) for num in cells_to_be_deleted]
  72. for cell_number in cells_to_be_deleted:
  73. delete_cell_elements(cell_number, parent_element)
  74.  
  75.  
  76. def delete_cell_elements(cell_number, parent_element):
  77. cell_elements = get_cell_elements(parent_element, cell_number=cell_number)
  78. for cell_element in cell_elements:
  79. cell_element.getparent().remove(cell_element)
  80.  
  81. # if __name__ == '__main__':
  82. # treeelement = get_treeelement_from_file('/tmp/192.168.255.129_scf.xml')
  83. # delta_element = create_empty_delta_treeelement(treeelement)
  84. # xml_tree = etree.parse(r'/tmp/192.168.255.129_scf.xml')
  85. # create_new_cell(xml_tree.getroot()[0], 2, delta_file_parent_element=delta_element.getroot()[0])
  86. # print etree.tostring(delta_element)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement