0bf3905c3f19960ea230eec4131cff6cd93802a0
[tablet-suite] / src / backup / .svn / text-base / pcsbackupxml.py.svn-base
1 '''
2 @author: Nicholas Alexander
3
4 Created on 07/07/2009
5
6 Module with functions used to create backup metadata xml file with same format
7 as osso-backup metadata.
8
9 '''
10 import os
11
12 import xml.dom.minidom
13
14 from backup.pcsbackuputils import getSize
15 from pcsdevicemanager import PcsDeviceManager
16
17
18 def createXml(backup_info, filesByCategory, host_ip):
19     doc = xml.dom.minidom.Document()
20     root = doc.createElement("backup-metadata")
21     doc.appendChild(root)
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")
31     doc.writexml(file)
32     file.close()
33
34
35
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)
41     
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)
47     
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)
53
54 def _appendProtectedNode(document, node):
55     protectedNode = document.createElement("protected")
56     protected = document.createTextNode("false")
57     protectedNode.appendChild(protected)
58     node.appendChild(protectedNode)
59     
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)
68     
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)
74         if size == False:
75             continue
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)
87