100 lines
2.4 KiB
Python
100 lines
2.4 KiB
Python
from django.utils.translation import ugettext_lazy as _
|
|
from django.utils.translation import ugettext
|
|
|
|
|
|
class BackupManagerBase(object):
|
|
label = _(u'Base backup manager')
|
|
#def __init__(self, name, label):
|
|
# self.label = label
|
|
# self.name = name
|
|
|
|
def info(self):
|
|
return None
|
|
|
|
def __unicode__(self):
|
|
return unicode(self.__class__.label)
|
|
|
|
|
|
class ModelFixtures(BackupManagerBase):
|
|
label = _(u'Model fixtures')
|
|
|
|
def __init__(self, models=None):
|
|
self.model_list = models or []
|
|
|
|
def info(self):
|
|
return u', '.join(self.model_list) or _(u'All')
|
|
|
|
|
|
class DirectoryCopy(BackupManagerBase):
|
|
label = _(u'Directory copy')
|
|
|
|
def __init__(self, path):
|
|
self.path = path
|
|
|
|
def info(self):
|
|
return self.path
|
|
|
|
|
|
class AppBackup(object):
|
|
_registry = {}
|
|
|
|
STATE_BACKING_UP = 'backing_up'
|
|
STATE_RESTORING = 'restoring'
|
|
STATE_IDLE = 'idle'
|
|
|
|
STATE_CHOICES = (
|
|
(STATE_BACKING_UP, _(u'backing up')),
|
|
(STATE_RESTORING, _(u'restoring')),
|
|
(STATE_IDLE, _(u'idle')),
|
|
)
|
|
|
|
@classmethod
|
|
def get(cls, name):
|
|
return cls._registry[name]
|
|
|
|
@classmethod
|
|
def get_all(cls):
|
|
return cls._registry.values()
|
|
|
|
def __init__(self, name, label, backup_managers):
|
|
self.label = label
|
|
self.name = name
|
|
self.backup_managers = backup_managers
|
|
self.state = self.__class__.STATE_IDLE
|
|
self.__class__._registry[name] = self
|
|
|
|
@property
|
|
def info(self):
|
|
results = []
|
|
for manager in self.backup_managers:
|
|
results.append(u'%s - %s' % (manager, manager.info() or _(u'Nothing')))
|
|
return u', '.join(results)
|
|
|
|
def backup(self, storage_module=None):
|
|
self.state = self.__class__.STATE_BACKING_UP
|
|
# call storage_module
|
|
self.state = self.__class__.STATE_IDLE
|
|
|
|
def restore(self, storage_module=None):
|
|
self.state = self.__class__.STATE_RESTORING
|
|
# call storage_module
|
|
self.state = self.__class__.STATE_IDLE
|
|
|
|
def __unicode__(self):
|
|
return unicode(self.label)
|
|
|
|
|
|
class StorageModuleBase(object):
|
|
_registry = {}
|
|
|
|
def __init__(self, name, label):
|
|
self.label = label
|
|
self.name = name
|
|
self.__class__._registry[name] = self
|
|
|
|
def backup(self, *args, **kwargs):
|
|
raise NotImplemented
|
|
|
|
def restore(self, *args, **kwargs):
|
|
raise NotImplemented
|