Merge app_registry and backups apps

This commit is contained in:
Roberto Rosario
2012-08-17 19:52:09 -04:00
parent e7727a4033
commit 67b4e7ebc3
39 changed files with 378 additions and 763 deletions

View File

@@ -1,17 +1,23 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.db import transaction, DatabaseError
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from backups.api import AppBackup, ModelBackup from common.utils import encapsulate
from icons.literals import APP from icons.literals import APP, BACKUPS
from navigation.api import bind_links from job_processor.exceptions import JobQueuePushError
from job_processor.models import JobQueue, JobType
from project_tools.api import register_tool from project_tools.api import register_tool
from project_setup.api import register_setup from project_setup.api import register_setup
from navigation.api import bind_links, register_model_list_columns
from .models import App
from .links import app_registry_tool_link, app_list
from .api import register_app from .api import register_app
from .classes import AppBackup, ModelBackup
from .exceptions import UnableToRegister from .exceptions import UnableToRegister
from .links import (app_registry_tool_link, app_list, backup_tool_link,
restore_tool_link, backup_job_list, backup_job_create, backup_job_edit,
backup_job_test)
from .models import App, BackupJob
register_tool(app_registry_tool_link) register_tool(app_registry_tool_link)
bind_links(['app_list'], [app_list], menu_name='secondary_menu') bind_links(['app_list'], [app_list], menu_name='secondary_menu')
@@ -20,6 +26,33 @@ try:
app = register_app('app_registry', label=_(u'App registry'), icon=APP) app = register_app('app_registry', label=_(u'App registry'), icon=APP)
except UnableToRegister: except UnableToRegister:
pass pass
else: #else:
AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])
# TODO: move to literals
BACKUP_JOB_QUEUE_NAME = 'backups_queue'
@transaction.commit_on_success
def create_backups_job_queue():
global backups_job_queue
try:
backups_job_queue, created = JobQueue.objects.get_or_create(name=BACKUP_JOB_QUEUE_NAME, defaults={'label': _('Backups'), 'unique_jobs': True})
except DatabaseError:
transaction.rollback()
create_backups_job_queue()
#backup_job_type = JobType('remote_backup', _(u'Remove backup'), do_backup)
register_setup(backup_tool_link)
register_tool(restore_tool_link)
bind_links([BackupJob, 'backup_job_list', 'backup_job_create'], [backup_job_list], menu_name='secondary_menu')
bind_links([BackupJob, 'backup_job_list', 'backup_job_create'], [backup_job_create], menu_name='sidebar')
bind_links([BackupJob], [backup_job_edit, backup_job_test])
register_model_list_columns(BackupJob, [
{'name':_(u'begin date time'), 'attribute': 'begin_datetime'},
{'name':_(u'storage module'), 'attribute': 'storage_module.label'},
{'name':_(u'apps'), 'attribute': encapsulate(lambda x: u', '.join([unicode(app) for app in x.apps.all()]))},
])

View File

@@ -2,11 +2,10 @@ from __future__ import absolute_import
from django import forms from django import forms
from app_registry.models import App
from common.widgets import ScrollableCheckboxSelectMultiple from common.widgets import ScrollableCheckboxSelectMultiple
from .models import BackupJob from .classes import AppBackup
from .api import AppBackup from .models import App, BackupJob
def valid_app_choices(): def valid_app_choices():

View File

@@ -6,7 +6,16 @@ from navigation.api import Link
from icons.api import get_icon_name, get_sprite_name from icons.api import get_icon_name, get_sprite_name
from icons.literals import APP from icons.literals import APP
#from .permissions import PERMISSION_BACKUP_JOB_VIEW, PERMISSION_BACKUP_JOB_CREATE, PERMISSION_BACKUP_JOB_EDIT, PERMISSION_BACKUP_JOB_DELETE from .permissions import PERMISSION_BACKUP_JOB_VIEW, PERMISSION_BACKUP_JOB_CREATE, PERMISSION_BACKUP_JOB_EDIT, PERMISSION_BACKUP_JOB_DELETE
app_registry_tool_link = Link(text=_(u'Apps'), view='app_list', icon=get_icon_name(APP))#, permissions=[PERMISSION_BACKUP_JOB_VIEW]) app_registry_tool_link = Link(text=_(u'Apps'), view='app_list', icon=get_icon_name(APP))#, permissions=[PERMISSION_BACKUP_JOB_VIEW])
app_list = Link(text=_(u'app list'), view='app_list', sprite=get_sprite_name(APP))#, permissions=[PERMISSION_BACKUP_JOB_VIEW]) app_list = Link(text=_(u'app list'), view='app_list', sprite=get_sprite_name(APP))#, permissions=[PERMISSION_BACKUP_JOB_VIEW])
backup_tool_link = Link(text=_(u'backups'), view='backup_job_list', icon='cd_burn.png', permissions=[PERMISSION_BACKUP_JOB_VIEW])
backup_job_list = Link(text=_(u'backup job list'), view='backup_job_list', sprite='cd_burn', permissions=[PERMISSION_BACKUP_JOB_VIEW])
backup_job_create = Link(text=_(u'create'), view='backup_job_create', sprite='cd_add', permissions=[PERMISSION_BACKUP_JOB_CREATE])
backup_job_edit = Link(text=_(u'edit'), view='backup_job_edit', args='object.pk', sprite='cd_edit', permissions=[PERMISSION_BACKUP_JOB_EDIT])
backup_job_test = Link(text=_(u'test'), view='backup_job_test', args='object.pk', sprite='cd_go')#, permissions=[PERMISSION_BACKUP_JOB_TEST])
backup_job_delete = Link(text=_(u'delete'), view='backup_job_delete', args='object.pk', sprite='cd_delete', permissions=[PERMISSION_BACKUP_JOB_DELETE])
restore_tool_link = Link(text=_(u'restore'), view='restore_view', icon='cd_eject.png')#, permissions=[])

View File

@@ -1,57 +1,21 @@
from __future__ import absolute_import from __future__ import absolute_import
import datetime
import logging import logging
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ugettext from django.utils.translation import ugettext
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from common.models import TranslatableLabelMixin, LiveObjectMixin
from .classes import AppBackup, StorageModuleBase
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class TranslatableLabelMixin(models.Model):
_labels = {}
@property
def label(self):
try:
return self.__class__._labels[self.pk]
except KeyError:
return unicode(self.__class__)
def __setattr__(self, attr, value):
if attr == 'label':
self.__class__._labels[self.pk] = value
else:
return super(TranslatableLabelMixin, self).__setattr__(attr, value)
def __unicode__(self):
return unicode(self.label)
class Meta:
abstract = True
class LiveObjectsManager(models.Manager):
def get_query_set(self):
return super(LiveObjectsManager, self).get_query_set().filter(pk__in=(entry.pk for entry in self.model._registry))
class LiveObjectMixin(models.Model):
_registry = []
def save(self, *args, **kwargs):
super(LiveObjectMixin, self).save(*args, **kwargs)
self.__class__._registry.append(self)
return self
live = LiveObjectsManager()
objects = models.Manager()
class Meta:
abstract = True
class App(TranslatableLabelMixin, LiveObjectMixin, models.Model): class App(TranslatableLabelMixin, LiveObjectMixin, models.Model):
name = models.CharField(max_length=64, verbose_name=_(u'name'), unique=True) name = models.CharField(max_length=64, verbose_name=_(u'name'), unique=True)
icon = models.CharField(max_length=64, verbose_name=_(u'icon'), blank=True) icon = models.CharField(max_length=64, verbose_name=_(u'icon'), blank=True)
@@ -60,3 +24,57 @@ class App(TranslatableLabelMixin, LiveObjectMixin, models.Model):
ordering = ('name', ) ordering = ('name', )
verbose_name = _(u'app') verbose_name = _(u'app')
verbose_name_plural = _(u'apps') verbose_name_plural = _(u'apps')
class BackupJob(models.Model):
name = models.CharField(max_length=64, verbose_name=_(u'name'))
enabled = models.BooleanField(default=True, verbose_name=_(u'enabled'))
apps = models.ManyToManyField(App)
begin_datetime = models.DateTimeField(verbose_name=_(u'begin date and time'), default=lambda: datetime.datetime.now())
# * repetition =
# day - 1 days
# weekly - days of week checkbox
# month - day of month, day of week
# * repetition option field
# * ends
# - never
# - After # ocurrences
# - On date
# * end option field
# * type
# - Full
# - Incremental
storage_module_name = models.CharField(max_length=32, choices=StorageModuleBase.get_as_choices(), verbose_name=_(u'storage module'))
storage_arguments_json = models.TextField(verbose_name=_(u'storage module arguments (in JSON)'), blank=True)
def __unicode__(self):
return self.name
@property
def storage_module(self):
return StorageModuleBase.get(self.storage_module_name)
def backup(self, dry_run=False):
logger.debug('starting: %s', self)
logger.debug('dry_run: %s' % dry_run)
storage_module = self.storage_module
#TODO: loads
for app in self.apps.all():
app_backup = AppBackup.get(app)
app_backup.backup(storage_module(backup_path='/tmp'), dry_run=dry_run)
def save(self, *args, **kwargs):
#dump
super(BackupJob, self).save(*args, **kwargs)
@models.permalink
def get_absolute_url(self):
return ('checkout_info', [self.document.pk])
class Meta:
verbose_name = _(u'document checkout')
verbose_name_plural = _(u'document checkouts')
#class BackupJobLog

View File

@@ -2,4 +2,9 @@ from django.conf.urls.defaults import patterns, url
urlpatterns = patterns('app_registry.views', urlpatterns = patterns('app_registry.views',
url(r'^list/$', 'app_list', (), 'app_list'), url(r'^list/$', 'app_list', (), 'app_list'),
url(r'^jobs/list/$', 'backup_job_list', (), 'backup_job_list'),
url(r'^jobs/create/$', 'backup_job_create', (), 'backup_job_create'),
url(r'^jobs/(?P<backup_job_pk>\d+)/edit/$', 'backup_job_edit', (), 'backup_job_edit'),
url(r'^jobs/(?P<backup_job_pk>\d+)/test/$', 'backup_job_test', (), 'backup_job_test'),
#url(r'^jobs/(?P<backup_job_pk>\d+)/delete/$', 'backup_job_delete', (), 'backup_job_delete'),
) )

View File

@@ -1,12 +1,19 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.http import HttpResponse, HttpResponseRedirect from django.conf import settings
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404 from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext from django.template import RequestContext
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse
from .models import App from permissions.models import Permission
from .classes import AppBackup
from .forms import BackupJobForm
from .models import App, BackupJob
from .permissions import PERMISSION_BACKUP_JOB_VIEW, PERMISSION_BACKUP_JOB_CREATE, PERMISSION_BACKUP_JOB_EDIT
def app_list(request): def app_list(request):
@@ -21,3 +28,112 @@ def app_list(request):
{'name': _(u'icon'), 'attribute': 'icon'}, {'name': _(u'icon'), 'attribute': 'icon'},
], ],
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def backup_job_list(request):
pre_object_list = BackupJob.objects.all()
try:
Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_VIEW])
except PermissionDenied:
# If user doesn't have global permission, get a list of backup jobs
# for which he/she does have access use it to filter the
# provided object_list
final_object_list = AccessEntry.objects.filter_objects_by_access(PERMISSION_BACKUP_JOB_VIEW, request.user, pre_object_list)
else:
final_object_list = pre_object_list
context = {
'object_list': final_object_list,
'title': _(u'backup jobs'),
'hide_link': True,
#'extra_columns': [
# {'name': _(u'info'), 'attribute': 'info'},
#],
}
return render_to_response('generic_list.html', context,
context_instance=RequestContext(request))
def backup_job_create(request):
Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_CREATE])
if request.method == 'POST':
form = BackupJobForm(data=request.POST)
if form.is_valid():
try:
backup_job = form.save()
except Exception, exc:
messages.error(request, _(u'Error creating backup job; %s') % exc)
else:
messages.success(request, _(u'Backup job "%s" created successfully.') % backup_job)
return HttpResponseRedirect(reverse('backup_job_list'))
else:
form = BackupJobForm()
return render_to_response('generic_form.html', {
'form': form,
'title': _(u'Create backup job')
}, context_instance=RequestContext(request))
def backup_job_edit(request, backup_job_pk):
backup_job = get_object_or_404(BackupJob, pk=backup_job_pk)
try:
Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_EDIT])
except PermissionDenied:
AccessEntry.objects.check_access(PERMISSION_BACKUP_JOB_EDIT, request.user, backup_job)
if request.method == 'POST':
form = BackupJobForm(data=request.POST, instance=backup_job)
if form.is_valid():
try:
backup_job = form.save()
except Exception, exc:
messages.error(request, _(u'Error editing backup job; %s') % exc)
else:
messages.success(request, _(u'Backup job "%s" edited successfully.') % backup_job)
return HttpResponseRedirect(reverse('backup_job_list'))
else:
form = BackupJobForm(instance=backup_job)
return render_to_response('generic_form.html', {
'form': form,
'object': backup_job,
'title': _(u'Edit backup job: %s') % backup_job
}, context_instance=RequestContext(request))
def backup_job_test(request, backup_job_pk):
backup_job = get_object_or_404(BackupJob, pk=backup_job_pk)
#try:
# Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_EDIT])
#except PermissionDenied:
# AccessEntry.objects.check_access(PERMISSION_BACKUP_JOB_EDIT, request.user, backup_job)
try:
backup_job.backup(dry_run=True)
except Exception, exc:
if settings.DEBUG:
raise
else:
messages.error(request, _(u'Error testing backup job; %s') % exc)
return HttpResponseRedirect(reverse('backup_job_list'))
else:
messages.success(request, _(u'Test for backup job "%s" finished successfully.') % backup_job)
return HttpResponseRedirect(reverse('backup_job_list'))
def backup_view(request):
#Permission.objects.check_permissions(request.user, [])
context = {
'object_list': AppBackup.get_all(),
'title': _(u'registered apps for backup'),
'hide_link': True,
'extra_columns': [
{'name': _(u'info'), 'attribute': 'info'},
],
}
return render_to_response('generic_list.html', context,
context_instance=RequestContext(request))

View File

@@ -1,53 +0,0 @@
from __future__ import absolute_import
from django.db import transaction, DatabaseError
from django.utils.translation import ugettext_lazy as _
from app_registry import register_app, UnableToRegister
from common.utils import encapsulate
from job_processor.exceptions import JobQueuePushError
from job_processor.models import JobQueue, JobType
from icons.literals import BACKUPS
from navigation.api import bind_links, register_model_list_columns
from project_setup.api import register_setup
from project_tools.api import register_tool
from .api import AppBackup, ModelBackup
from .links import backup_tool_link, restore_tool_link, backup_job_list, backup_job_create, backup_job_edit, backup_job_test
from .models import BackupJob
# TODO: move to literals
BACKUP_JOB_QUEUE_NAME = 'backups_queue'
@transaction.commit_on_success
def create_backups_job_queue():
global backups_job_queue
try:
backups_job_queue, created = JobQueue.objects.get_or_create(name=BACKUP_JOB_QUEUE_NAME, defaults={'label': _('Backups'), 'unique_jobs': True})
except DatabaseError:
transaction.rollback()
create_backups_job_queue()
#backup_job_type = JobType('remote_backup', _(u'Remove backup'), do_backup)
register_setup(backup_tool_link)
register_tool(restore_tool_link)
bind_links([BackupJob, 'backup_job_list', 'backup_job_create'], [backup_job_list], menu_name='secondary_menu')
bind_links([BackupJob, 'backup_job_list', 'backup_job_create'], [backup_job_create], menu_name='sidebar')
bind_links([BackupJob], [backup_job_edit, backup_job_test])
register_model_list_columns(BackupJob, [
{'name':_(u'begin date time'), 'attribute': 'begin_datetime'},
{'name':_(u'storage module'), 'attribute': 'storage_module.label'},
{'name':_(u'apps'), 'attribute': encapsulate(lambda x: u', '.join([unicode(app) for app in x.apps.all()]))},
])
try:
app = register_app('backups', _(u'Backups'), icon=BACKUPS)
except UnableToRegister:
pass
else:
AppBackup(app, [ModelBackup()])
# 'attribute': encapsulate(lambda x: x.user.get_full_name() if x.user.get_full_name() else x.user)

View File

@@ -1,16 +0,0 @@
from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _
from navigation.api import Link
from .permissions import PERMISSION_BACKUP_JOB_VIEW, PERMISSION_BACKUP_JOB_CREATE, PERMISSION_BACKUP_JOB_EDIT, PERMISSION_BACKUP_JOB_DELETE
backup_tool_link = Link(text=_(u'backups'), view='backup_job_list', icon='cd_burn.png', permissions=[PERMISSION_BACKUP_JOB_VIEW])
backup_job_list = Link(text=_(u'backup job list'), view='backup_job_list', sprite='cd_burn', permissions=[PERMISSION_BACKUP_JOB_VIEW])
backup_job_create = Link(text=_(u'create'), view='backup_job_create', sprite='cd_add', permissions=[PERMISSION_BACKUP_JOB_CREATE])
backup_job_edit = Link(text=_(u'edit'), view='backup_job_edit', args='object.pk', sprite='cd_edit', permissions=[PERMISSION_BACKUP_JOB_EDIT])
backup_job_test = Link(text=_(u'test'), view='backup_job_test', args='object.pk', sprite='cd_go')#, permissions=[PERMISSION_BACKUP_JOB_TEST])
backup_job_delete = Link(text=_(u'delete'), view='backup_job_delete', args='object.pk', sprite='cd_delete', permissions=[PERMISSION_BACKUP_JOB_DELETE])
restore_tool_link = Link(text=_(u'restore'), view='restore_view', icon='cd_eject.png')#, permissions=[])

View File

@@ -1,55 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'BackupJob'
db.create_table('backups_backupjob', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('label', self.gf('django.db.models.fields.CharField')(max_length=64)),
('begin_datetime', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2012, 8, 11, 0, 0))),
('storage_module', self.gf('django.db.models.fields.CharField')(max_length=16)),
('storage_arguments_json', self.gf('django.db.models.fields.TextField')(blank=True)),
))
db.send_create_signal('backups', ['BackupJob'])
# Adding model 'BackupJobApp'
db.create_table('backups_backupjobapp', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('backup_job', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['backups.BackupJob'])),
('app_backup', self.gf('django.db.models.fields.CharField')(max_length=64)),
))
db.send_create_signal('backups', ['BackupJobApp'])
def backwards(self, orm):
# Deleting model 'BackupJob'
db.delete_table('backups_backupjob')
# Deleting model 'BackupJobApp'
db.delete_table('backups_backupjobapp')
models = {
'backups.backupjob': {
'Meta': {'object_name': 'BackupJob'},
'begin_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 11, 0, 0)'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'label': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'storage_arguments_json': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'storage_module': ('django.db.models.fields.CharField', [], {'max_length': '16'})
},
'backups.backupjobapp': {
'Meta': {'object_name': 'BackupJobApp'},
'app_backup': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'backup_job': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['backups.BackupJob']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
}
}
complete_apps = ['backups']

View File

@@ -1,45 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting field 'BackupJob.label'
db.delete_column('backups_backupjob', 'label')
# Adding field 'BackupJob.name'
db.add_column('backups_backupjob', 'name',
self.gf('django.db.models.fields.CharField')(default=' ', max_length=64),
keep_default=False)
def backwards(self, orm):
# User chose to not deal with backwards NULL issues for 'BackupJob.label'
raise RuntimeError("Cannot reverse this migration. 'BackupJob.label' and its values cannot be restored.")
# Deleting field 'BackupJob.name'
db.delete_column('backups_backupjob', 'name')
models = {
'backups.backupjob': {
'Meta': {'object_name': 'BackupJob'},
'begin_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 11, 0, 0)'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'storage_arguments_json': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'storage_module': ('django.db.models.fields.CharField', [], {'max_length': '16'})
},
'backups.backupjobapp': {
'Meta': {'object_name': 'BackupJobApp'},
'app_backup': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'backup_job': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['backups.BackupJob']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
}
}
complete_apps = ['backups']

View File

@@ -1,45 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting field 'BackupJob.storage_module'
db.delete_column('backups_backupjob', 'storage_module')
# Adding field 'BackupJob.storage_module_name'
db.add_column('backups_backupjob', 'storage_module_name',
self.gf('django.db.models.fields.CharField')(default=' ', max_length=16),
keep_default=False)
def backwards(self, orm):
# User chose to not deal with backwards NULL issues for 'BackupJob.storage_module'
raise RuntimeError("Cannot reverse this migration. 'BackupJob.storage_module' and its values cannot be restored.")
# Deleting field 'BackupJob.storage_module_name'
db.delete_column('backups_backupjob', 'storage_module_name')
models = {
'backups.backupjob': {
'Meta': {'object_name': 'BackupJob'},
'begin_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 11, 0, 0)'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'storage_arguments_json': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'storage_module_name': ('django.db.models.fields.CharField', [], {'max_length': '16'})
},
'backups.backupjobapp': {
'Meta': {'object_name': 'BackupJobApp'},
'app_backup': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'backup_job': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['backups.BackupJob']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
}
}
complete_apps = ['backups']

View File

@@ -1,40 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'BackupJob.enabled'
db.add_column('backups_backupjob', 'enabled',
self.gf('django.db.models.fields.BooleanField')(default=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'BackupJob.enabled'
db.delete_column('backups_backupjob', 'enabled')
models = {
'backups.backupjob': {
'Meta': {'object_name': 'BackupJob'},
'begin_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 11, 0, 0)'}),
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'storage_arguments_json': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'storage_module_name': ('django.db.models.fields.CharField', [], {'max_length': '16'})
},
'backups.backupjobapp': {
'Meta': {'object_name': 'BackupJobApp'},
'app_backup': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'backup_job': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['backups.BackupJob']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
}
}
complete_apps = ['backups']

View File

@@ -1,55 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting model 'BackupJobApp'
db.delete_table('backups_backupjobapp')
# Adding M2M table for field app on 'BackupJob'
db.create_table('backups_backupjob_app', (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('backupjob', models.ForeignKey(orm['backups.backupjob'], null=False)),
('app', models.ForeignKey(orm['app_registry.app'], null=False))
))
db.create_unique('backups_backupjob_app', ['backupjob_id', 'app_id'])
def backwards(self, orm):
# Adding model 'BackupJobApp'
db.create_table('backups_backupjobapp', (
('backup_job', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['backups.BackupJob'])),
('app_backup', self.gf('django.db.models.fields.CharField')(max_length=64)),
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
))
db.send_create_signal('backups', ['BackupJobApp'])
# Removing M2M table for field app on 'BackupJob'
db.delete_table('backups_backupjob_app')
models = {
'app_registry.app': {
'Meta': {'ordering': "('name',)", 'object_name': 'App'},
'icon': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'})
},
'backups.backupjob': {
'Meta': {'object_name': 'BackupJob'},
'app': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['app_registry.App']", 'symmetrical': 'False'}),
'begin_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 14, 0, 0)'}),
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'storage_arguments_json': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'storage_module_name': ('django.db.models.fields.CharField', [], {'max_length': '16'})
}
}
complete_apps = ['backups']

View File

@@ -1,55 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Removing M2M table for field app on 'BackupJob'
db.delete_table('backups_backupjob_app')
# Adding M2M table for field apps on 'BackupJob'
db.create_table('backups_backupjob_apps', (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('backupjob', models.ForeignKey(orm['backups.backupjob'], null=False)),
('app', models.ForeignKey(orm['app_registry.app'], null=False))
))
db.create_unique('backups_backupjob_apps', ['backupjob_id', 'app_id'])
def backwards(self, orm):
# Adding M2M table for field app on 'BackupJob'
db.create_table('backups_backupjob_app', (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('backupjob', models.ForeignKey(orm['backups.backupjob'], null=False)),
('app', models.ForeignKey(orm['app_registry.app'], null=False))
))
db.create_unique('backups_backupjob_app', ['backupjob_id', 'app_id'])
# Removing M2M table for field apps on 'BackupJob'
db.delete_table('backups_backupjob_apps')
models = {
'app_registry.app': {
'Meta': {'ordering': "('name',)", 'object_name': 'App'},
'icon': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'})
},
'backups.backupjob': {
'Meta': {'object_name': 'BackupJob'},
'apps': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['app_registry.App']", 'symmetrical': 'False'}),
'begin_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 14, 0, 0)'}),
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'storage_arguments_json': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'storage_module_name': ('django.db.models.fields.CharField', [], {'max_length': '16'})
}
}
complete_apps = ['backups']

View File

@@ -1,39 +0,0 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Changing field 'BackupJob.storage_module_name'
db.alter_column('backups_backupjob', 'storage_module_name', self.gf('django.db.models.fields.CharField')(max_length=32))
def backwards(self, orm):
# Changing field 'BackupJob.storage_module_name'
db.alter_column('backups_backupjob', 'storage_module_name', self.gf('django.db.models.fields.CharField')(max_length=16))
models = {
'app_registry.app': {
'Meta': {'ordering': "('name',)", 'object_name': 'App'},
'icon': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'})
},
'backups.backupjob': {
'Meta': {'object_name': 'BackupJob'},
'apps': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['app_registry.App']", 'symmetrical': 'False'}),
'begin_datetime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 8, 17, 0, 0)'}),
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'storage_arguments_json': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'storage_module_name': ('django.db.models.fields.CharField', [], {'max_length': '32'})
}
}
complete_apps = ['backups']

View File

@@ -1,69 +0,0 @@
from __future__ import absolute_import
import logging
import datetime
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from app_registry.models import App
from .api import AppBackup, StorageModuleBase
logger = logging.getLogger(__name__)
class BackupJob(models.Model):
name = models.CharField(max_length=64, verbose_name=_(u'name'))
enabled = models.BooleanField(default=True, verbose_name=_(u'enabled'))
apps = models.ManyToManyField(App)
begin_datetime = models.DateTimeField(verbose_name=_(u'begin date and time'), default=lambda: datetime.datetime.now())
# * repetition =
# day - 1 days
# weekly - days of week checkbox
# month - day of month, day of week
# * repetition option field
# * ends
# - never
# - After # ocurrences
# - On date
# * end option field
# * type
# - Full
# - Incremental
storage_module_name = models.CharField(max_length=32, choices=StorageModuleBase.get_as_choices(), verbose_name=_(u'storage module'))
storage_arguments_json = models.TextField(verbose_name=_(u'storage module arguments (in JSON)'), blank=True)
def __unicode__(self):
return self.name
@property
def storage_module(self):
return StorageModuleBase.get(self.storage_module_name)
def backup(self, dry_run=False):
logger.debug('starting: %s', self)
logger.debug('dry_run: %s' % dry_run)
storage_module = self.storage_module
#TODO: loads
for app in self.apps.all():
app_backup = AppBackup.get(app)
app_backup.backup(storage_module(backup_path='/tmp'), dry_run=dry_run)
def save(self, *args, **kwargs):
#dump
super(BackupJob, self).save(*args, **kwargs)
@models.permalink
def get_absolute_url(self):
return ('checkout_info', [self.document.pk])
class Meta:
verbose_name = _(u'document checkout')
verbose_name_plural = _(u'document checkouts')
#class BackupJobLog

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1,9 +0,0 @@
from django.conf.urls.defaults import patterns, url
urlpatterns = patterns('backups.views',
url(r'^jobs/list/$', 'backup_job_list', (), 'backup_job_list'),
url(r'^jobs/create/$', 'backup_job_create', (), 'backup_job_create'),
url(r'^jobs/(?P<backup_job_pk>\d+)/edit/$', 'backup_job_edit', (), 'backup_job_edit'),
url(r'^jobs/(?P<backup_job_pk>\d+)/test/$', 'backup_job_test', (), 'backup_job_test'),
#url(r'^jobs/(?P<backup_job_pk>\d+)/delete/$', 'backup_job_delete', (), 'backup_job_delete'),
)

View File

@@ -1,125 +0,0 @@
from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.conf import settings
from permissions.models import Permission
from .api import AppBackup
from .forms import BackupJobForm
from .models import BackupJob
from .permissions import PERMISSION_BACKUP_JOB_VIEW, PERMISSION_BACKUP_JOB_CREATE, PERMISSION_BACKUP_JOB_EDIT
def backup_job_list(request):
pre_object_list = BackupJob.objects.all()
try:
Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_VIEW])
except PermissionDenied:
# If user doesn't have global permission, get a list of backup jobs
# for which he/she does have access use it to filter the
# provided object_list
final_object_list = AccessEntry.objects.filter_objects_by_access(PERMISSION_BACKUP_JOB_VIEW, request.user, pre_object_list)
else:
final_object_list = pre_object_list
context = {
'object_list': final_object_list,
'title': _(u'backup jobs'),
'hide_link': True,
#'extra_columns': [
# {'name': _(u'info'), 'attribute': 'info'},
#],
}
return render_to_response('generic_list.html', context,
context_instance=RequestContext(request))
def backup_job_create(request):
Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_CREATE])
if request.method == 'POST':
form = BackupJobForm(data=request.POST)
if form.is_valid():
try:
backup_job = form.save()
except Exception, exc:
messages.error(request, _(u'Error creating backup job; %s') % exc)
else:
messages.success(request, _(u'Backup job "%s" created successfully.') % backup_job)
return HttpResponseRedirect(reverse('backup_job_list'))
else:
form = BackupJobForm()
return render_to_response('generic_form.html', {
'form': form,
'title': _(u'Create backup job')
}, context_instance=RequestContext(request))
def backup_job_edit(request, backup_job_pk):
backup_job = get_object_or_404(BackupJob, pk=backup_job_pk)
try:
Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_EDIT])
except PermissionDenied:
AccessEntry.objects.check_access(PERMISSION_BACKUP_JOB_EDIT, request.user, backup_job)
if request.method == 'POST':
form = BackupJobForm(data=request.POST, instance=backup_job)
if form.is_valid():
try:
backup_job = form.save()
except Exception, exc:
messages.error(request, _(u'Error editing backup job; %s') % exc)
else:
messages.success(request, _(u'Backup job "%s" edited successfully.') % backup_job)
return HttpResponseRedirect(reverse('backup_job_list'))
else:
form = BackupJobForm(instance=backup_job)
return render_to_response('generic_form.html', {
'form': form,
'object': backup_job,
'title': _(u'Edit backup job: %s') % backup_job
}, context_instance=RequestContext(request))
def backup_job_test(request, backup_job_pk):
backup_job = get_object_or_404(BackupJob, pk=backup_job_pk)
#try:
# Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_EDIT])
#except PermissionDenied:
# AccessEntry.objects.check_access(PERMISSION_BACKUP_JOB_EDIT, request.user, backup_job)
try:
backup_job.backup(dry_run=True)
except Exception, exc:
if settings.DEBUG:
raise
else:
messages.error(request, _(u'Error testing backup job; %s') % exc)
return HttpResponseRedirect(reverse('backup_job_list'))
else:
messages.success(request, _(u'Test for backup job "%s" finished successfully.') % backup_job)
return HttpResponseRedirect(reverse('backup_job_list'))
def backup_view(request):
#Permission.objects.check_permissions(request.user, [])
context = {
'object_list': AppBackup.get_all(),
'title': _(u'registered apps for backup'),
'hide_link': True,
'extra_columns': [
{'name': _(u'info'), 'attribute': 'info'},
],
}
return render_to_response('generic_list.html', context,
context_instance=RequestContext(request))

View File

@@ -3,8 +3,8 @@ from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from backups.api import AppBackup, ModelBackup #from backups.api import AppBackup, ModelBackup
from documents.models import Document from documents.models import Document
from navigation.api import bind_links, register_top_menu from navigation.api import bind_links, register_top_menu
from scheduler.api import LocalScheduler from scheduler.api import LocalScheduler
@@ -42,9 +42,9 @@ checkouts_scheduler.start()
initialize_document_checkout_extra_methods() initialize_document_checkout_extra_methods()
try: #try:
app = register_app('checkouts', _(u'Checkouts')) # app = register_app('checkouts', _(u'Checkouts'))
except UnableToRegister: #except UnableToRegister:
pass # pass
else: #else:
AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])

View File

@@ -60,3 +60,46 @@ class AutoAdminSingleton(Singleton):
class Meta: class Meta:
verbose_name = verbose_name_plural = _(u'auto admin properties') verbose_name = verbose_name_plural = _(u'auto admin properties')
class TranslatableLabelMixin(models.Model):
_labels = {}
@property
def label(self):
try:
return self.__class__._labels[self.pk]
except KeyError:
return unicode(self.__class__)
def __setattr__(self, attr, value):
if attr == 'label':
self.__class__._labels[self.pk] = value
else:
return super(TranslatableLabelMixin, self).__setattr__(attr, value)
def __unicode__(self):
return unicode(self.label)
class Meta:
abstract = True
class LiveObjectsManager(models.Manager):
def get_query_set(self):
return super(LiveObjectsManager, self).get_query_set().filter(pk__in=(entry.pk for entry in self.model._registry))
class LiveObjectMixin(models.Model):
_registry = []
def save(self, *args, **kwargs):
super(LiveObjectMixin, self).save(*args, **kwargs)
self.__class__._registry.append(self)
return self
live = LiveObjectsManager()
objects = models.Manager()
class Meta:
abstract = True

View File

@@ -6,8 +6,8 @@ from django.db.models.signals import post_save, pre_delete, post_delete
from django.dispatch import receiver from django.dispatch import receiver
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from backups.api import AppBackup, ModelBackup #from backups.api import AppBackup, ModelBackup
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from documents.models import Document from documents.models import Document
from maintenance.api import MaintenanceNamespace from maintenance.api import MaintenanceNamespace
from metadata.models import DocumentMetadata from metadata.models import DocumentMetadata
@@ -72,9 +72,9 @@ def document_metadata_index_post_delete(sender, **kwargs):
# TODO: save result in index log # TODO: save result in index log
update_indexes(kwargs['instance'].document) update_indexes(kwargs['instance'].document)
try: #try:
app = register_app('document_indexing', _(u'Document indexing')) # app = register_app('document_indexing', _(u'Document indexing'))
except UnableToRegister: #except UnableToRegister:
pass # pass
else: #aelse:
AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])

View File

@@ -5,8 +5,8 @@ import tempfile
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from backups.api import AppBackup, ModelBackup, FileBackup #from backups.api import AppBackup, ModelBackup, FileBackup
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from common.utils import validate_path, encapsulate from common.utils import validate_path, encapsulate
from diagnostics.api import DiagnosticNamespace from diagnostics.api import DiagnosticNamespace
from history.permissions import PERMISSION_HISTORY_VIEW from history.permissions import PERMISSION_HISTORY_VIEW
@@ -139,9 +139,9 @@ class_permissions(Document, [
register_statistics(get_statistics) register_statistics(get_statistics)
try: #try:
app = register_app('documents', _(u'Documents')) # app = register_app('documents', _(u'Documents'))
except UnableToRegister: #except UnableToRegister:
pass # pass
else: #else:
AppBackup(app, [ModelBackup(), FileBackup(document_settings.STORAGE_BACKEND)]) # AppBackup(app, [ModelBackup(), FileBackup(document_settings.STORAGE_BACKEND)])

View File

@@ -4,8 +4,8 @@ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from acls.permissions import ACLS_EDIT_ACL, ACLS_VIEW_ACL from acls.permissions import ACLS_EDIT_ACL, ACLS_VIEW_ACL
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from backups.api import AppBackup, ModelBackup #from backups.api import AppBackup, ModelBackup
from documents.models import Document from documents.models import Document
from navigation.api import (bind_links, register_top_menu, from navigation.api import (bind_links, register_top_menu,
register_multi_item_links, register_sidebar_template, Link) register_multi_item_links, register_sidebar_template, Link)
@@ -39,9 +39,9 @@ class_permissions(Document, [
PERMISSION_FOLDER_REMOVE_DOCUMENT, PERMISSION_FOLDER_REMOVE_DOCUMENT,
]) ])
try: #try:
app = register_app('folders', _(u'Folders')) # app = register_app('folders', _(u'Folders'))
except UnableToRegister: #except UnableToRegister:
pass # pass
else: #else:
AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])

View File

@@ -2,7 +2,7 @@ from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from backups.api import AppBackup, ModelBackup #from backups.api import AppBackup, ModelBackup
from app_registry import register_app, UnableToRegister from app_registry import register_app, UnableToRegister
from common.utils import encapsulate from common.utils import encapsulate
from navigation.api import bind_links, register_model_list_columns from navigation.api import bind_links, register_model_list_columns
@@ -35,5 +35,5 @@ try:
app = register_app('history', _(u'History')) app = register_app('history', _(u'History'))
except UnableToRegister: except UnableToRegister:
pass pass
else: #else:
AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])

View File

@@ -7,8 +7,8 @@ from django.db.utils import DatabaseError
from django.db import transaction from django.db import transaction
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from backups.api import AppBackup, ModelBackup #from backups.api import AppBackup, ModelBackup
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from project_tools.api import register_tool from project_tools.api import register_tool
from .links import installation_details from .links import installation_details
@@ -39,9 +39,9 @@ register_tool(installation_details)
check_first_run() check_first_run()
try: #try:
app = register_app('installation', _(u'Installation')) # app = register_app('installation', _(u'Installation'))
except UnableToRegister: #except UnableToRegister:
pass # pass
else: #else:
AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])

View File

@@ -9,8 +9,8 @@ from django.db import transaction, DatabaseError
from django.dispatch import receiver from django.dispatch import receiver
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from backups.api import AppBackup, ModelBackup #from backups.api import AppBackup, ModelBackup
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from scheduler.api import LocalScheduler from scheduler.api import LocalScheduler
from navigation.api import bind_links, register_model_list_columns from navigation.api import bind_links, register_model_list_columns
from project_tools.api import register_tool from project_tools.api import register_tool
@@ -91,9 +91,9 @@ def kill_all_node_processes():
atexit.register(kill_all_node_processes) atexit.register(kill_all_node_processes)
try: #try:
app = register_app('job_processor', _(u'Job processor')) # app = register_app('job_processor', _(u'Job processor'))
except UnableToRegister: #except UnableToRegister:
pass # pass
else: #else:
AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])

View File

@@ -4,8 +4,8 @@ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from acls.permissions import ACLS_EDIT_ACL, ACLS_VIEW_ACL from acls.permissions import ACLS_EDIT_ACL, ACLS_VIEW_ACL
from backups.api import AppBackup, ModelBackup #from backups.api import AppBackup, ModelBackup
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from documents.models import Document from documents.models import Document
from navigation.api import bind_links, register_sidebar_template from navigation.api import bind_links, register_sidebar_template
from project_setup.api import register_setup from project_setup.api import register_setup
@@ -36,9 +36,9 @@ class_permissions(SmartLink, [
ACLS_VIEW_ACL ACLS_VIEW_ACL
]) ])
try: #try:
app = register_app('linking', _(u'Document linking')) # app = register_app('linking', _(u'Document linking'))
except UnableToRegister: #except UnableToRegister:
pass # pass
else: #else:
AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])

View File

@@ -3,8 +3,8 @@ from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from backups.api import AppBackup, ModelBackup #from backups.api import AppBackup, ModelBackup
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from common.utils import encapsulate from common.utils import encapsulate
from documents.models import Document, DocumentType from documents.models import Document, DocumentType
from navigation.api import (bind_links, register_sidebar_template, from navigation.api import (bind_links, register_sidebar_template,
@@ -59,9 +59,9 @@ register_model_list_columns(Document, [
]) ])
try: #try:
app = register_app('metadata', _(u'Metadata')) # app = register_app('metadata', _(u'Metadata'))
except UnableToRegister: #except UnableToRegister:
pass # pass
else: #else:
AppBackup(app, [ModelBackup()]) #a AppBackup(app, [ModelBackup()])

View File

@@ -5,8 +5,8 @@ from django.db.models.signals import post_save
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from backups.api import AppBackup, ModelBackup #from backups.api import AppBackup, ModelBackup
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from navigation.api import bind_links, register_multi_item_links from navigation.api import bind_links, register_multi_item_links
from project_setup.api import register_setup from project_setup.api import register_setup
@@ -41,9 +41,9 @@ post_save.connect(user_post_save, sender=User)
register_setup(role_list) register_setup(role_list)
try: #try:
app = register_app('permissions', _(u'Permissions')) # app = register_app('permissions', _(u'Permissions'))
except UnableToRegister: #except UnableToRegister:
pass # pass
else: #else:
AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])

View File

@@ -2,8 +2,8 @@ from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from backups.api import AppBackup, ModelBackup #from backups.api import AppBackup, ModelBackup
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from common.utils import encapsulate from common.utils import encapsulate
from documents.models import Document from documents.models import Document
from navigation.api import (bind_links, register_model_list_columns, from navigation.api import (bind_links, register_model_list_columns,
@@ -68,9 +68,9 @@ sources_scheduler.start()
bind_links(['document_list_recent', 'document_list', 'document_create', 'document_create_multiple', 'upload_interactive', 'staging_file_delete'], [document_create_multiple], menu_name='secondary_menu') bind_links(['document_list_recent', 'document_list', 'document_create', 'document_create_multiple', 'upload_interactive', 'staging_file_delete'], [document_create_multiple], menu_name='secondary_menu')
bind_links([Document], [document_create_multiple], menu_name='secondary_menu') bind_links([Document], [document_create_multiple], menu_name='secondary_menu')
try: #try:
app = register_app('sources', _(u'Sources')) # app = register_app('sources', _(u'Sources'))
except UnableToRegister: #except UnableToRegister:
pass # pass
else: #else:
AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])

View File

@@ -3,8 +3,8 @@ from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from backups.api import AppBackup, ModelBackup #afrom backups.api import AppBackup, ModelBackup
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from common.utils import encapsulate from common.utils import encapsulate
from documents.models import Document from documents.models import Document
from navigation.api import (bind_links, register_top_menu, from navigation.api import (bind_links, register_top_menu,
@@ -60,9 +60,9 @@ class_permissions(Tag, [
Document.add_to_class('tags', TaggableManager()) Document.add_to_class('tags', TaggableManager())
try: #try:
app = register_app('tags', _(u'Tags')) # app = register_app('tags', _(u'Tags'))
except UnableToRegister: #except UnableToRegister:
pass # pass
else: #else:
AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])

View File

@@ -3,8 +3,8 @@ from __future__ import absolute_import
from django.contrib.auth.models import User, Group from django.contrib.auth.models import User, Group
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from backups.api import AppBackup, ModelBackup #from backups.api import AppBackup, ModelBackup
from app_registry import register_app, UnableToRegister #from app_registry import register_app, UnableToRegister
from navigation.api import bind_links, register_multi_item_links from navigation.api import bind_links, register_multi_item_links
from project_setup.api import register_setup from project_setup.api import register_setup
@@ -31,9 +31,9 @@ user_management_views = [
register_setup(user_setup) register_setup(user_setup)
register_setup(group_setup) register_setup(group_setup)
try: #try:
app = register_app('user_management', _(u'User management')) # app = register_app('user_management', _(u'User management'))
except UnableToRegister: #except UnableToRegister:
pass # pass
#else: #else:
# AppBackup(app, [ModelBackup()]) # AppBackup(app, [ModelBackup()])

View File

@@ -166,7 +166,6 @@ INSTALLED_APPS = (
'clustering', 'clustering',
'scheduler', 'scheduler',
'job_processor', 'job_processor',
'backups',
'app_registry', 'app_registry',
'icons', 'icons',
# Mayan EDMS # Mayan EDMS

View File

@@ -43,8 +43,7 @@ urlpatterns = patterns('',
(r'^statistics/', include('statistics.urls')), (r'^statistics/', include('statistics.urls')),
(r'^clustering/', include('clustering.urls')), (r'^clustering/', include('clustering.urls')),
(r'^trash/', include('trash.urls')), (r'^trash/', include('trash.urls')),
(r'^backups/', include('backups.urls')), (r'^apps/', include('app_registry.urls')),#, namespace='user_blogs')),
(r'^apps/', include('app_registry.urls')),
) )