--- /dev/null
+'''
+@author: Nicholas Alexander
+
+Created on 07/07/2009
+
+Module with functions used to create backup metadata xml file with same format
+as osso-backup metadata.
+
+'''
+import os
+
+import xml.dom.minidom
+
+from backup.pcsbackuputils import getSize
+from pcsdevicemanager import PcsDeviceManager
+
+
+def createXml(backup_info, filesByCategory, host_ip):
+ doc = xml.dom.minidom.Document()
+ root = doc.createElement("backup-metadata")
+ doc.appendChild(root)
+ _appendSizeNode(backup_info, doc, root)
+ _appendFilesNumberNode(backup_info, doc, root)
+ _appendTimeNode(backup_info, doc, root)
+ _appendProtectedNode(doc, root)
+ _appendDeviceInfoNode(doc, root, host_ip)
+ backupFullPath = os.path.join(backup_info.getPath(), backup_info.getName())
+ _appendCategoriesNode(doc, root, filesByCategory, backupFullPath)
+ metadata_path = os.path.join(backupFullPath, "backup.metadata")
+ file = open(metadata_path, "w")
+ doc.writexml(file)
+ file.close()
+
+
+
+def _appendSizeNode(backupInfo, document, node):
+ sizeNode = document.createElement("size")
+ size = document.createTextNode(str(backupInfo.getSize()))
+ sizeNode.appendChild(size)
+ node.appendChild(sizeNode)
+
+def _appendFilesNumberNode(backupInfo, document, node):
+ filesNode = document.createElement("number-of-files")
+ files = document.createTextNode(str(backupInfo.getFilesNumber()))
+ filesNode.appendChild(files)
+ node.appendChild(filesNode)
+
+def _appendTimeNode(backupInfo, document, node):
+ timeNode = document.createElement("timestamp")
+ time = document.createTextNode(str(int(backupInfo.getTime())))
+ timeNode.appendChild(time)
+ node.appendChild(timeNode)
+
+def _appendProtectedNode(document, node):
+ protectedNode = document.createElement("protected")
+ protected = document.createTextNode("false")
+ protectedNode.appendChild(protected)
+ node.appendChild(protectedNode)
+
+def _appendDeviceInfoNode(document, node, hostIp):
+ deviceManager = PcsDeviceManager()
+ deviceManager.loadDevices()
+ device = deviceManager.getDevice(hostIp)
+ versionNode = document.createElement("device-version")
+ version = document.createTextNode(device.ossoBackup)
+ versionNode.appendChild(version)
+ node.appendChild(versionNode)
+
+def _appendCategoriesNode(document, node, filesByCategory, backupPath):
+ categories = document.createElement("categories")
+ for category in filesByCategory.keys():
+ categoryPath = os.path.join(backupPath, "%s.zip" % category)
+ size = getSize(categoryPath)
+ if size == False:
+ continue
+ categoryNode = document.createElement("%s" % category)
+ categorySize = document.createElement("size")
+ categoryFiles = document.createElement("number-of-files")
+ filesText = document.createTextNode(str(filesByCategory[category]))
+ sizeText = document.createTextNode(str(size))
+ categorySize.appendChild(sizeText)
+ categoryFiles.appendChild(filesText)
+ categoryNode.appendChild(categorySize)
+ categoryNode.appendChild(categoryFiles)
+ categories.appendChild(categoryNode)
+ node.appendChild(categories)
+
\ No newline at end of file