2 @author: Nicholas Alexander
6 Module with functions used to create backup metadata xml file with same format
7 as osso-backup metadata.
12 import xml.dom.minidom
14 from backup.pcsbackuputils import getSize
15 from pcsdevicemanager import PcsDeviceManager
18 def createXml(backup_info, filesByCategory, host_ip):
19 doc = xml.dom.minidom.Document()
20 root = doc.createElement("backup-metadata")
22 _appendSizeNode(backup_info, doc, root)
23 _appendFilesNumberNode(backup_info, doc, root)
24 _appendTimeNode(backup_info, doc, root)
25 _appendProtectedNode(doc, root)
26 _appendDeviceInfoNode(doc, root, host_ip)
27 backupFullPath = os.path.join(backup_info.getPath(), backup_info.getName())
28 _appendCategoriesNode(doc, root, filesByCategory, backupFullPath)
29 metadata_path = os.path.join(backupFullPath, "backup.metadata")
30 file = open(metadata_path, "w")
36 def _appendSizeNode(backupInfo, document, node):
37 sizeNode = document.createElement("size")
38 size = document.createTextNode(str(backupInfo.getSize()))
39 sizeNode.appendChild(size)
40 node.appendChild(sizeNode)
42 def _appendFilesNumberNode(backupInfo, document, node):
43 filesNode = document.createElement("number-of-files")
44 files = document.createTextNode(str(backupInfo.getFilesNumber()))
45 filesNode.appendChild(files)
46 node.appendChild(filesNode)
48 def _appendTimeNode(backupInfo, document, node):
49 timeNode = document.createElement("timestamp")
50 time = document.createTextNode(str(int(backupInfo.getTime())))
51 timeNode.appendChild(time)
52 node.appendChild(timeNode)
54 def _appendProtectedNode(document, node):
55 protectedNode = document.createElement("protected")
56 protected = document.createTextNode("false")
57 protectedNode.appendChild(protected)
58 node.appendChild(protectedNode)
60 def _appendDeviceInfoNode(document, node, hostIp):
61 deviceManager = PcsDeviceManager()
62 deviceManager.loadDevices()
63 device = deviceManager.getDevice(hostIp)
64 versionNode = document.createElement("device-version")
65 version = document.createTextNode(device.ossoBackup)
66 versionNode.appendChild(version)
67 node.appendChild(versionNode)
69 def _appendCategoriesNode(document, node, filesByCategory, backupPath):
70 categories = document.createElement("categories")
71 for category in filesByCategory.keys():
72 categoryPath = os.path.join(backupPath, "%s.zip" % category)
73 size = getSize(categoryPath)
76 categoryNode = document.createElement("%s" % category)
77 categorySize = document.createElement("size")
78 categoryFiles = document.createElement("number-of-files")
79 filesText = document.createTextNode(str(filesByCategory[category]))
80 sizeText = document.createTextNode(str(size))
81 categorySize.appendChild(sizeText)
82 categoryFiles.appendChild(filesText)
83 categoryNode.appendChild(categorySize)
84 categoryNode.appendChild(categoryFiles)
85 categories.appendChild(categoryNode)
86 node.appendChild(categories)