Initial commit (Vesion 0.1)
[tablet-suite] / src / backup / .svn / text-base / pcsbackupxml.py.svn-base
diff --git a/src/backup/.svn/text-base/pcsbackupxml.py.svn-base b/src/backup/.svn/text-base/pcsbackupxml.py.svn-base
new file mode 100644 (file)
index 0000000..0bf3905
--- /dev/null
@@ -0,0 +1,87 @@
+'''
+@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