Merge branch 'master' into multi
Conflicts: docs/TODO
This commit is contained in:
@@ -12,5 +12,9 @@ def object_property(value, arg):
|
||||
return return_attrib(value, arg)
|
||||
|
||||
@register.filter
|
||||
def get_model_list_columns(value):
|
||||
return model_list_columns.get(type(value), [])
|
||||
def get_model_list_columns(obj):
|
||||
for key, value in model_list_columns.items():
|
||||
if isinstance(obj, key):
|
||||
return value
|
||||
|
||||
return []
|
||||
|
||||
@@ -48,12 +48,12 @@ class Document(models.Model):
|
||||
file_mimetype = models.CharField(max_length=64, default='', editable=False)
|
||||
file_mime_encoding = models.CharField(max_length=64, default='', editable=False)
|
||||
#FAT filename can be up to 255 using LFN
|
||||
file_filename = models.CharField(max_length=255, default='', editable=False)
|
||||
file_extension = models.CharField(max_length=16, default='', editable=False)
|
||||
date_added = models.DateTimeField(verbose_name=_(u'added'), auto_now_add=True)
|
||||
file_filename = models.CharField(max_length=255, default='', editable=False, db_index=True)
|
||||
file_extension = models.CharField(max_length=16, default='', editable=False, db_index=True)
|
||||
date_added = models.DateTimeField(verbose_name=_(u'added'), auto_now_add=True, db_index=True)
|
||||
date_updated = models.DateTimeField(verbose_name=_(u'updated'), auto_now=True)
|
||||
checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False)
|
||||
description = models.TextField(blank=True, null=True, verbose_name=_(u'description'))
|
||||
description = models.TextField(blank=True, null=True, verbose_name=_(u'description'), db_index=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _(u'document')
|
||||
@@ -264,7 +264,7 @@ class MetadataIndex(models.Model):
|
||||
class DocumentMetadata(models.Model):
|
||||
document = models.ForeignKey(Document, verbose_name=_(u'document'))
|
||||
metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'metadata type'))
|
||||
value = models.TextField(blank=True, null=True, verbose_name=_(u'metadata value'))
|
||||
value = models.TextField(blank=True, null=True, verbose_name=_(u'metadata value'), db_index=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return unicode(self.metadata_type)
|
||||
@@ -276,7 +276,7 @@ class DocumentMetadata(models.Model):
|
||||
|
||||
class DocumentTypeFilename(models.Model):
|
||||
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'))
|
||||
filename = models.CharField(max_length=128, verbose_name=_(u'filename'))
|
||||
filename = models.CharField(max_length=128, verbose_name=_(u'filename'), db_index=True)
|
||||
enabled = models.BooleanField(default=True, verbose_name=_(u'enabled'))
|
||||
|
||||
def __unicode__(self):
|
||||
@@ -290,7 +290,7 @@ class DocumentTypeFilename(models.Model):
|
||||
|
||||
class DocumentPage(models.Model):
|
||||
document = models.ForeignKey(Document, verbose_name=_(u'document'))
|
||||
content = models.TextField(blank=True, null=True, verbose_name=_(u'content'))
|
||||
content = models.TextField(blank=True, null=True, verbose_name=_(u'content'), db_index=True)
|
||||
page_label = models.CharField(max_length=32, blank=True, null=True, verbose_name=_(u'page label'))
|
||||
page_number = models.PositiveIntegerField(default=1, editable=False, verbose_name=_(u'page number'))
|
||||
|
||||
@@ -366,7 +366,7 @@ available_transformations = ([(name, data['label']) for name, data in AVAILABLE_
|
||||
|
||||
class DocumentPageTransformation(models.Model):
|
||||
document_page = models.ForeignKey(DocumentPage, verbose_name=_(u'document page'))
|
||||
order = models.PositiveIntegerField(default=0, blank=True, null=True, verbose_name=_(u'order'))
|
||||
order = models.PositiveIntegerField(default=0, blank=True, null=True, verbose_name=_(u'order'), db_index=True)
|
||||
transformation = models.CharField(choices=available_transformations, max_length=128, verbose_name=_(u'transformation'))
|
||||
arguments = models.TextField(blank=True, null=True, verbose_name=_(u'arguments'), help_text=_(u'Use dictionaries to indentify arguments, example: {\'degrees\':90}'))
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ def document_list(request):
|
||||
|
||||
return object_list(
|
||||
request,
|
||||
queryset=Document.objects.all(),
|
||||
queryset=Document.objects.only('file_filename', 'file_filename', 'file_extension').all(),
|
||||
template_name='generic_list.html',
|
||||
extra_context={
|
||||
'title':_(u'documents'),
|
||||
|
||||
@@ -84,7 +84,7 @@ def perform_search(query_string):
|
||||
model_result_ids &= single_result_ids
|
||||
|
||||
result_count += len(model_result_ids)
|
||||
results = model.objects.filter(pk__in=model_result_ids)[:LIMIT]
|
||||
results = model.objects.filter(pk__in=list(model_result_ids)[:LIMIT])[:LIMIT]
|
||||
shown_result_count += results.count()
|
||||
if results:
|
||||
model_list[data['text']] = results
|
||||
|
||||
@@ -44,7 +44,7 @@ class DocumentQueue(models.Model):
|
||||
class QueueDocument(models.Model):
|
||||
document_queue = models.ForeignKey(DocumentQueue, verbose_name=_(u'document queue'))
|
||||
document = models.ForeignKey(Document, verbose_name=_(u'document'))
|
||||
datetime_submitted = models.DateTimeField(verbose_name=_(u'date time submitted'), auto_now_add=True)
|
||||
datetime_submitted = models.DateTimeField(verbose_name=_(u'date time submitted'), auto_now_add=True, db_index=True)
|
||||
state = models.CharField(max_length=4,
|
||||
choices=QUEUEDOCUMENT_STATE_CHOICES,
|
||||
default=QUEUEDOCUMENT_STATE_PENDING,
|
||||
|
||||
6
docs/FAQ
6
docs/FAQ
@@ -50,3 +50,9 @@
|
||||
|
||||
- Filesystem metadata indexing will not work with this storage backend as
|
||||
file are inside a MongoDB database and can't be linked (at least for now)
|
||||
|
||||
* Site search is slow
|
||||
- Add indexes to the following fields:
|
||||
documents_document - description, recomended size: 160
|
||||
documents_documentmetadata - value, recomended size: 80
|
||||
documents_documentpage - content, recomended size: 3000
|
||||
|
||||
@@ -47,6 +47,11 @@ TODO, WISHLIST
|
||||
* Show current page in generic list template - DONE
|
||||
* Enable/disable ocr queue view & links - DONE
|
||||
|
||||
* Receive documents via email
|
||||
* Mobile version
|
||||
* Exif to metadata convertion
|
||||
* Extract nagivation code into new navigation app
|
||||
* External portal using sites contrib app
|
||||
|
||||
Main
|
||||
====
|
||||
@@ -112,10 +117,6 @@ Documents
|
||||
* Unify document form classes
|
||||
* Use document preview code for staging file also - DONE
|
||||
* Delete physical file on delete method - DEFFERED (Not needed until Django 1.3)
|
||||
|
||||
* Receive documents via email
|
||||
* Mobile version
|
||||
* Exif to metadata convertion
|
||||
|
||||
Filesystem serving
|
||||
==================
|
||||
|
||||
@@ -297,7 +297,7 @@ if DEVELOPMENT:
|
||||
|
||||
try:
|
||||
import debug_toolbar
|
||||
#INSTALLED_APPS.append('debug_toolbar')
|
||||
#INSTALLED_APPS +=('debug_toolbar',)
|
||||
except ImportError:
|
||||
#print 'debug_toolbar is not installed'
|
||||
pass
|
||||
@@ -306,7 +306,7 @@ if DEVELOPMENT:
|
||||
|
||||
WSGI_AUTO_RELOAD = True
|
||||
if 'debug_toolbar' in INSTALLED_APPS:
|
||||
MIDDLEWARE_CLASSES.append('debug_toolbar.middleware.DebugToolbarMiddleware')
|
||||
MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
|
||||
DEBUG_TOOLBAR_CONFIG={
|
||||
'INTERCEPT_REDIRECTS' : False,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user