Initial commit (Vesion 0.1)
[tablet-suite] / src / backup / .svn / text-base / pcsdevicebackupmanager.py.svn-base
1
2 from pcsbackupmanager import *
3 from pcspcbackupmanager import PcsPcBackupManager
4 from pcsbackupinfo import PcsBackupInfo
5 import pcsbackuputils as utils
6
7
8 class PcsDeviceBackupManager(PcsBackupManager):
9
10
11     def __init__(self, deviceInfo):
12         PcsBackupManager.__init__(self)
13         self._backupList = []
14         self._deviceInfo = deviceInfo
15         self.restoreInProgress = False
16         self.copyInProgress = False
17
18     def loadBackups(self):
19         
20         # FIXME, error handling is wrong!! return list of PcsBackupInfo
21         try:
22             mountPoint = os.path.join(DEVICES_POINT, "%s/Root" % self._deviceInfo.ip)
23             utils.mountDevice(USER_HOST, self._deviceInfo.ip, mountPoint)
24             
25             self._backupList = utils.getDeviceBackupList(mountPoint)
26             return True
27
28         except Exception, x:
29             print str(x)
30         finally:
31             utils.unmountDevice(mountPoint)  
32             
33         return False          
34  
35     def getBackupList(self):
36         self.loadBackups()
37         for backup in self._backupList:
38             backup.setAtDevice(True)
39         return self._backupList
40     
41     def copyBackupFromDevice(self, backupName, destinationPath):
42         try:
43             self.loadBackups()
44             device_backups = self.getBackupList()
45             
46             mountPoint = os.path.join(DEVICES_POINT, "%s/Root" % self._deviceInfo.ip)
47             utils.mountDevice(USER_HOST, self._deviceInfo.ip, mountPoint)
48     
49             # Search complete_path
50             completePath = ''
51             for backup in device_backups:
52                 if backupName == backup.getName():
53                     completePath = backup.getPath()
54                     break
55             if completePath == '':
56                 raise Exception("Backup not found.")
57             
58             pcBackupManager = PcsPcBackupManager()
59             pcBackupManager.loadBackups()
60             correctName = pcBackupManager._verify_backup_name(backupName)
61             destination = os.path.join(destinationPath, correctName)
62             
63             self.setCopyInProgress(True)
64             if self.copy(completePath, destination) == 0:
65                 return 0
66             self.setCopyInProgress(False)
67             
68             backup_size = utils.getSize(destination)
69             backup = PcsBackupInfo(correctName, destinationPath, backup_size, 
70                                    'Copied from device')
71             backup.setAtDevice(False)
72             pcBackupManager._backupList.append(backup)
73             pcBackupManager.saveBackups()
74             
75         finally:
76             utils.unmountDevice(mountPoint)
77             
78             
79     def startBackupRestore(self, backupInfo, categories):
80         device_ip = self._deviceInfo.ip
81         return self.restoreBackup(backupInfo, device_ip, categories)
82     
83     
84     def setCopyInProgress(self, status):
85         self.copyInProgress = status
86         
87         
88     def setRestoreInProgress(self, status):
89         self.restoreInProgress = status
90         
91
92     def getBackupInfo(self, backupName):
93         self.loadBackups()
94         for backupInfo in self._backupList:
95             if backupInfo.getName() == backupName:
96                 backupInfo.setAtDevice(True)
97                 return backupInfo
98             
99         return None
100     
101             
102