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 permissions.models import Role #from history.models import History #from django_gpg.runtime import gpg #from documents.models import DocumentType, DocumentTypeFilename, Document #from folders.models import Folder #from taggit.models import Tag #from tags.models import TagProperties #from metadata.models import MetadataType, MetadataSet #from sources.models import WebForm, StagingFolder #from document_indexing.models import Index, IndexTemplateNode #from dynamic_search.models import RecentSearch # TODO: clear the job queues bootstrap_options = {} def nuke_database(): # Delete all document types for obj in DocumentType.objects.all(): obj.delete() # Delete all documents one by one to trigger the document file delete method # Should also get rid of document metadata for obj in Document.objects.all(): obj.delete() # Delete all metadata types for obj in MetadataType.objects.all(): obj.delete() # Delete all metadata sets for obj in MetadataSet.objects.all(): obj.delete() # Delete all indexes types, should also delete index nodes for obj in Index.objects.all(): obj.delete() # Delete all webforms sources for obj in WebForm.objects.all(): obj.delete() # Delete all staging folder sources for obj in StagingFolder.objects.all(): obj.delete() # Delete all user groups for obj in Group.objects.all(): obj.delete() # Delete all users except superadmins and staff for obj in User.objects.all(): if not obj.is_superuser and not obj.is_staff: obj.delete() # Delete all user roles for obj in Role.objects.all(): obj.delete() # Delete all the remaining history events for obj in History.objects.all(): obj.delete() # Delete all tags for obj in Tag.objects.all(): obj.delete() # Delete any remaining tag property for obj in TagProperties.objects.all(): obj.delete() # Delete all foders for obj in Folder.objects.all(): obj.delete() # Delete all recent searches for obj in RecentSearch.objects.all(): obj.delete() # Clear the entire key ring (public and private keys) gpg.delete_all_keys() class BootstrapBase(object): name = None label = '' description = '' def __unicode__(self): return unicode(self.label) class BootstrapSimple(BootstrapBase): name = 'simple' label = _(u'Simple') description = _(u'A simple setup providing an uploaded date metadata and index plus an alphabetic index based on document filenames.') def execute(self): # Create metadata types upload_date = MetadataType.objects.create(name='upload_date', title=ugettext(u'Upload date'), default='current_date()') # Create a segmented date index index = Index.objects.create(name='date_tree', title=ugettext(u'Segmented date index'), enabled=True) template_root = index.template_root # Create index template node1 = IndexTemplateNode.objects.create(parent=template_root, index=index, expression='metadata.upload_date[0:4]', enabled=True, link_documents=False) node2 = IndexTemplateNode.objects.create(parent=node1, index=index, expression='metadata.upload_date[5:7]', enabled=True, link_documents=False) node3 = IndexTemplateNode.objects.create(parent=node2, index=index, expression='metadata.upload_date[8:10]', enabled=True, link_documents=True) class BootstrapPermit(BootstrapBase): name = 'permits' label = _(u'Permits') description = _(u'A setup for handling permits and related documents.') def execute(self): # Create document types form = DocumentType.objects.create(name=ugettext(u'Form')) DocumentTypeFilename.objects.create(document_type=form, filename=ugettext(u'Building construction form')) DocumentTypeFilename.objects.create(document_type=form, filename=ugettext(u'Building usage form')) blueprint = DocumentType.objects.create(name=ugettext(u'Blueprint')) DocumentTypeFilename.objects.create(document_type=blueprint, filename=ugettext(u'Floorplan')) DocumentTypeFilename.objects.create(document_type=blueprint, filename=ugettext(u'Plot plan')) # Create metadata types date = MetadataType.objects.create(name='date', title=ugettext(u'Date'), default='current_date()') client = MetadataType.objects.create(name='client', title=ugettext(u'Client')) permit = MetadataType.objects.create(name='permit', title=ugettext(u'Permit number')) project = MetadataType.objects.create(name='project', title=ugettext(u'Project')) user = MetadataType.objects.create(name='user', title=ugettext(u'User'), lookup='sorted([user.get_full_name() or user for user in User.objects.all() if user.is_active])') # Create a segmented date index index = Index.objects.create(name='main_index', title=ugettext(u'Permit index'), enabled=True) # Create index template per_permit = IndexTemplateNode.objects.create(parent=index.template_root, index=index, expression='\'%s\'' % ugettext(u'Per permit'), enabled=True, link_documents=False) per_permit_child = IndexTemplateNode.objects.create(parent=per_permit, index=index, expression='metadata.permit', enabled=True, link_documents=True) per_project = IndexTemplateNode.objects.create(parent=index.template_root, index=index, expression='\'%s\'' % ugettext(u'Per project'), enabled=True, link_documents=False) per_project_child = IndexTemplateNode.objects.create(parent=per_project, index=index, expression='metadata.project', enabled=True, link_documents=False) per_permit = IndexTemplateNode.objects.create(parent=per_project_child, index=index, expression='\'%s\'' % ugettext(u'Per permit'), enabled=True, link_documents=False) per_permit_child = IndexTemplateNode.objects.create(parent=per_permit, index=index, expression='metadata.permit', enabled=True, link_documents=True) per_date = IndexTemplateNode.objects.create(parent=index.template_root, index=index, expression='\'%s\'' % ugettext(u'Per date'), enabled=True, link_documents=False) per_date_child = IndexTemplateNode.objects.create(parent=per_date, index=index, expression='metadata.date', enabled=True, link_documents=True) per_user = IndexTemplateNode.objects.create(parent=index.template_root, index=index, expression='\'%s\'' % ugettext(u'Per user'), enabled=True, link_documents=False) per_user_child = IndexTemplateNode.objects.create(parent=per_user, index=index, expression='metadata.user', enabled=True, link_documents=True) per_client = IndexTemplateNode.objects.create(parent=index.template_root, index=index, expression='\'%s\'' % ugettext(u'Per client'), enabled=True, link_documents=False) per_client_child = IndexTemplateNode.objects.create(parent=per_client, index=index, expression='metadata.client', enabled=True, link_documents=True) for bootstrap in [BootstrapSimple(), BootstrapPermit()]: bootstrap_options[bootstrap.name] = bootstrap