From 09c53aed19c18eb503f87caded74367baf886efc Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 10 Aug 2012 14:20:38 -0400 Subject: [PATCH] Start of working BackupManager class --- apps/backups/api.py | 61 ++++++++++++++++++++++++++++++++++++-- apps/backups/views.py | 12 ++++---- apps/documents/__init__.py | 2 ++ 3 files changed, 67 insertions(+), 8 deletions(-) diff --git a/apps/backups/api.py b/apps/backups/api.py index 5717d99e50..5483a91108 100644 --- a/apps/backups/api.py +++ b/apps/backups/api.py @@ -1,7 +1,41 @@ from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext -class ModuleBackup(object): +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' @@ -22,12 +56,20 @@ class ModuleBackup(object): def get_all(cls): return cls._registry.values() - def __init__(self, name, label): + 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 @@ -40,3 +82,18 @@ class ModuleBackup(object): 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 diff --git a/apps/backups/views.py b/apps/backups/views.py index 9e83e82162..7ab749b638 100644 --- a/apps/backups/views.py +++ b/apps/backups/views.py @@ -9,7 +9,7 @@ from django.core.urlresolvers import reverse from permissions.models import Permission -from .api import ModuleBackup +from .api import AppBackup #from .permissions import @@ -17,12 +17,12 @@ def backup_view(request): #Permission.objects.check_permissions(request.user, []) context = { - 'object_list': ModuleBackup.get_all(), - 'title': _(u'apps registered for backup'), + 'object_list': AppBackup.get_all(), + 'title': _(u'registered apps for backup'), 'hide_link': True, - #'extra_columns': [ - # {'name': _(u'description'), 'attribute': 'description'}, - #], + 'extra_columns': [ + {'name': _(u'info'), 'attribute': 'info'}, + ], } return render_to_response('generic_list.html', context, diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 1e2adee1a1..407ddee4a7 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -14,6 +14,7 @@ from history.permissions import PERMISSION_HISTORY_VIEW from project_setup.api import register_setup from acls.api import class_permissions from statistics.api import register_statistics +from backups.api import AppBackup, ModelFixtures, DirectoryCopy from .models import (Document, DocumentPage, DocumentPageTransformation, DocumentType, DocumentTypeFilename, @@ -136,3 +137,4 @@ class_permissions(Document, [ ]) register_statistics(get_statistics) +AppBackup('documents', _(u'Documents'), [ModelFixtures(), DirectoryCopy(document_settings.STORAGE_BACKEND)])