From ac65a6db760180d8340e22b6dc5d2581743f0ca1 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 26 Jul 2012 05:03:02 -0400 Subject: [PATCH] Add initial database erase support --- apps/bootstrap/__init__.py | 3 +- apps/bootstrap/api.py | 36 +++++++++++++++++- apps/bootstrap/links.py | 1 + apps/bootstrap/models.py | 13 +------ .../static/images/icons/radioactivity.png | Bin 0 -> 2139 bytes apps/bootstrap/urls.py | 1 + apps/bootstrap/views.py | 36 +++++++++++++++++- 7 files changed, 74 insertions(+), 16 deletions(-) create mode 100755 apps/bootstrap/static/images/icons/radioactivity.png diff --git a/apps/bootstrap/__init__.py b/apps/bootstrap/__init__.py index 07c8a915e2..2b0080d630 100644 --- a/apps/bootstrap/__init__.py +++ b/apps/bootstrap/__init__.py @@ -3,9 +3,10 @@ from __future__ import absolute_import from project_setup.api import register_setup from navigation.api import register_links#, register_sidebar_template -from .links import database_bootstrap, bootstrap_execute +from .links import database_bootstrap, bootstrap_execute, erase_database_link from .api import BootstrapSimple, BootstrapPermit register_setup(database_bootstrap) +register_setup(erase_database_link) register_links(BootstrapSimple, [bootstrap_execute]) register_links(BootstrapPermit, [bootstrap_execute]) diff --git a/apps/bootstrap/api.py b/apps/bootstrap/api.py index af86042dc3..001f2e7f6f 100644 --- a/apps/bootstrap/api.py +++ b/apps/bootstrap/api.py @@ -2,14 +2,48 @@ from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext +from django.contrib.auth.models import User, Group from metadata.models import MetadataType, MetadataSet from document_indexing.models import Index, IndexTemplateNode -from documents.models import DocumentType, DocumentTypeFilename +from documents.models import DocumentType, DocumentTypeFilename, Document +from permissions.models import Role +from metadata.api import save_metadata_list +#from sources.models import WebForm, StagingFolder bootstrap_options = {} +def nuke_database(): + for obj in Document.objects.all(): + obj.delete() + + for obj in MetadataType.objects.all(): + obj.delete() + + for obj in MetadataSet.objects.all(): + obj.delete() + + for obj in Index.objects.all(): + obj.delete() + + for obj in DocumentType.objects.all(): + obj.delete() + + #for obj in WebForm.objects.all(): + # obj.delete() + + #for obj in StagingFolder.objects.all(): + # obj.delete() + + for obj in Group.objects.all(): + obj.delete() + + for obj in User.objects.all(): + if not obj.is_superuser and not obj.is_staff: + obj.delete() + + class BootstrapBase(object): name = None label = '' diff --git a/apps/bootstrap/links.py b/apps/bootstrap/links.py index e2af43dbaa..cbb8f6b238 100644 --- a/apps/bootstrap/links.py +++ b/apps/bootstrap/links.py @@ -7,3 +7,4 @@ def is_superuser(context): database_bootstrap = {'text': _(u'bootstrap database'), 'view': 'bootstrap_type_list', 'icon': 'database_lightning.png', 'condition': is_superuser}#, 'children_view_regex': [r'statistics']} bootstrap_execute = {'text': _(u'execute'), 'view': 'bootstrap_execute', 'args': 'object.name', 'sprite': 'database_lightning.png', 'condition': is_superuser}#, 'children_view_regex': [r'statistics']} +erase_database_link = {'text': _(u'erase database'), 'view': 'erase_database_view', 'icon': 'radioactivity.png', 'condition': is_superuser}#, 'children_view_regex': [r'statistics']} diff --git a/apps/bootstrap/models.py b/apps/bootstrap/models.py index 1f13d1559f..137941ffae 100644 --- a/apps/bootstrap/models.py +++ b/apps/bootstrap/models.py @@ -1,12 +1 @@ -from __future__ import absolute_import - -#import logging - -#from django.db import models -#from django.utils.translation import ugettext_lazy as _ - -#logger = logging.getLogger(__name__) - - -#class CompanyType(models.Model): -# name = +from django.db import models diff --git a/apps/bootstrap/static/images/icons/radioactivity.png b/apps/bootstrap/static/images/icons/radioactivity.png new file mode 100755 index 0000000000000000000000000000000000000000..ad5d5348ff487c2f29f349a573ff95170aecbbab GIT binary patch literal 2139 zcmV-h2&DIkP)L|1*V_T{dhmaYO ziFBx`G(g)i*q~EE(gJxuNW$i|n|d1Dr5zy*~MH z;pcw_2Dg&qFr&S&BK@$F*#{Kf0?7OdD8WidZ^$uX>ir)gnXnGj?8FXYF|Wq}Pv1-E z4XmguEB?}c0t>?!`3HkRd&ZD*U zEui-xSQqPL-HefS&$HK^zr=5fs_N>B);~(%ui_VtJ$T}`V_?{Sb|tX=o+4Nj=9bOZ zX=RZh@+h{mx9!CtBz1wqCnHeID85kf5wulXVNCod_|TTV@_ldOSSBzt28iG96l>O2 zD6cI0${~osCcM@%fZd0tQJC+6Pm`F60o6+cZmLpXnkGqS8z7}cd^YwSoy2<=QV0eV zc)beRK8Pa}Fz~suKKR!?fz;*KHmtA0p(AGyo_(2G_g?&~^ycSl{dqogw4X%%vjm=} zz@xe>DN6D}zeM}~5+r9V=w@~xc~pK1e0qBrLfWnzolz&bsTmV3&lX_gmO8{|k{CJN zaG`o9*0WkC2DaTMmS}!Yt*?9|F!eSX4kl0#)Szi96h(1JBZSe2z>!lkP*t6hK_~q# zLF%-xWB(g7RE#7vmE>evj&!gt)`_V$Fa~2WW+n)gNA9p63a-2l7(0QEP7@c0CAm|9 zN+B(!OS}&F6dZWNfZ{RetQ?FkDHME3UB`jrCj8`fMa`CDU96LJGX`TZCS$V!S||_q zdzO6`B61c@r)>vFnFY?o|23+^7y5y}pG#7}=_KuvM(dw9N0Brnxt?U@Tv^u1x*3D9 z7?ZK-=HT;dsP*^)KukybMXzHqVYxLYr))$cQ<#hp5S`SMsj$Sjs@%ln#59V7Au=Gl z^4k1Y1L@{7$H7>P$=Gaw>M$h-Ns*4OVL?hPS13nGl05#^O(yQV1$e1BfESPWoxShf z9mkG)bsTFq@qUj<^-#GlqlZ{!}%S38p>*k7Z(Da2%7QSIW5tBvJyeKE_#> z!V7=$p)}+&?V0o7Cs=6Me5*r^S00VX_9aH^; zQcI^W4KAh@Cc+aa4!9k0B20~mf^gGn6RG1lw+OvYvd61$qsMm0Ta%O-GkKGCgB;>Emf5l)1u^h76z2qTH{h&gg~LBR}pF zyykbj$2`nC2i)-hffEK}F=nP2abKJHakKS!vWMy{PcmGgXMkQ$|jxwtE zTtUSD>OHOb9q%y@^Ri5~0n*XU7>vc3jGZYrv8H#ee}6P&9gSb=p^2Bw^{^*|b7!iT z(o`te)mTe?o{XXSKq}e9?|6@Sn3rXom?9mli*>SY#$YVQoIMZlGe}f@d9Qk+aP5i` zt$ZnLlV>3tdF0lIpDRQ6_(}qylRHC*J*Q7FcQj_BI&>Kao*c$ZLOQdOAOllFW0>k3 z2(R2}+)m8hL{U~Ea>la~qMA#;Qd){`s#v0}SO!TobY#rN?ceevJZYhomR_M9Kaz;+=goKUl}Uyvx{49KE^V3x1do6%#G5-zeAZc|iWOC|_1-H!Ojt zBp=GsAOwwQB3*ZFF6Fubb1X_Z9zkmGD$NX5&kq`{AGLH?=ZNJB_pHT!n9PoeKsqj# zRxcB!yY5r!H&o(|qJUjJUl2~lMEBWVv_8{hwsem=c|MlD@7VQznq>{VX+!dexc?S9 z4RP*A4W|Zo{3(vfbe_l3r?&s!uj5>gXgo%xo7j9GhdeDL;5KD*F-rd{zyKUyX*)~j R(Eb1b002ovPDHLkV1n+C2}S?_ literal 0 HcmV?d00001 diff --git a/apps/bootstrap/urls.py b/apps/bootstrap/urls.py index a9c29813a2..fe6da57712 100644 --- a/apps/bootstrap/urls.py +++ b/apps/bootstrap/urls.py @@ -3,4 +3,5 @@ from django.conf.urls.defaults import patterns, url urlpatterns = patterns('bootstrap.views', url(r'^type/list/$', 'bootstrap_type_list', (), 'bootstrap_type_list'), url(r'^(?P\w+)/execute/$', 'bootstrap_execute', (), 'bootstrap_execute'), + url(r'^nuke/$', 'erase_database_view', (), 'erase_database_view'), ) diff --git a/apps/bootstrap/views.py b/apps/bootstrap/views.py index 3be20b1dc1..cc1bfef44e 100644 --- a/apps/bootstrap/views.py +++ b/apps/bootstrap/views.py @@ -7,7 +7,7 @@ from django.template import RequestContext from django.contrib import messages from django.core.urlresolvers import reverse -from .api import bootstrap_options +from .api import bootstrap_options, nuke_database def bootstrap_type_list(request): @@ -49,7 +49,7 @@ def bootstrap_execute(request, bootstrap_name): 'delete_view': False, 'previous': previous, 'next': next, - #'form_icon': u'basket_remove.png', + 'form_icon': u'database_lightning.png', 'object': bootstrap, } @@ -57,3 +57,35 @@ def bootstrap_execute(request, bootstrap_name): return render_to_response('generic_confirm.html', context, context_instance=RequestContext(request)) + + +def erase_database_view(request): + # TODO: check for permission + + post_action_redirect = None + + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) + next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', '/'))) + + if request.method == 'POST': + try: + nuke_database() + except Exception, exc: + messages.error(request, _(u'Error erasing database; %s') % exc) + else: + messages.success(request, _(u'Database erased successfully.')) + return HttpResponseRedirect(next) + + context = { + #'object_name': _(u'bootstrap setup'), + 'delete_view': False, + 'previous': previous, + 'next': next, + 'form_icon': u'radioactivity.png', + #'object': bootstrap, + } + + context['title'] = _(u'Are you sure you wish to erase the entire database and document storage?') + + return render_to_response('generic_confirm.html', context, + context_instance=RequestContext(request))