Files
mayan-edms/apps/bootstrap/api.py

177 lines
7.7 KiB
Python

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 documents.models import DocumentType, DocumentTypeFilename, Document
from metadata.models import MetadataType, MetadataSet
from metadata.api import save_metadata_list
from document_indexing.models import Index, IndexTemplateNode
from sources.models import WebForm, StagingFolder
from ocr.models import QueueDocument, QueueTransformation, DocumentQueue
from history.models import History
from taggit.models import Tag
from tags.models import TagProperties
from folders.models import Folder
from dynamic_search.models import RecentSearch
from django_gpg.runtime import gpg
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 document in the ocr queue
for obj in QueueDocument.objects.all():
obj.delete()
# Delete all the transformations for a queue
for obj in QueueTransformation.objects.all():
obj.delete()
# Delete all the ocr document queues
for obj in DocumentQueue.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