diff --git a/mayan/apps/checkouts/__init__.py b/mayan/apps/checkouts/__init__.py
index cb8c375b71..600e41ff5b 100644
--- a/mayan/apps/checkouts/__init__.py
+++ b/mayan/apps/checkouts/__init__.py
@@ -5,8 +5,7 @@ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions
from documents.models import Document
from history.api import register_history_type
-from navigation.api import (register_links, register_top_menu,
- register_multi_item_links, register_sidebar_template)
+from navigation.api import register_links, register_top_menu
from scheduler.api import register_interval_job
from .events import (HISTORY_DOCUMENT_CHECKED_OUT, HISTORY_DOCUMENT_CHECKED_IN,
diff --git a/mayan/apps/converter/__init__.py b/mayan/apps/converter/__init__.py
index 29dcb978fe..272ebb60cd 100644
--- a/mayan/apps/converter/__init__.py
+++ b/mayan/apps/converter/__init__.py
@@ -9,9 +9,11 @@ from project_tools.api import register_tool
from .utils import load_backend
from .conf.settings import GRAPHICS_BACKEND
+
def is_superuser(context):
return context['request'].user.is_staff or context['request'].user.is_superuser
+
formats_list = {'text': _('file formats'), 'view': 'formats_list', 'famfam': 'pictures', 'icon': 'pictures.png', 'condition': is_superuser, 'children_view_regex': [r'formats_list']}
register_sidebar_template(['formats_list'], 'converter_file_formats_help.html')
diff --git a/mayan/apps/document_acls/links.py b/mayan/apps/document_acls/links.py
index 0382ea2744..3c18710808 100644
--- a/mayan/apps/document_acls/links.py
+++ b/mayan/apps/document_acls/links.py
@@ -2,7 +2,6 @@ from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _
-from acls.permissions import ACLS_VIEW_ACL, ACLS_EDIT_ACL
-from django.utils.translation import ugettext_lazy as _
+from acls.permissions import ACLS_VIEW_ACL
acl_list = {'text': _(u'ACLs'), 'view': 'document_acl_list', 'args': 'object.pk', 'famfam': 'lock', 'permissions': [ACLS_VIEW_ACL]}
diff --git a/mayan/apps/history/api.py b/mayan/apps/history/api.py
index eacf65b257..1a8a8e613a 100644
--- a/mayan/apps/history/api.py
+++ b/mayan/apps/history/api.py
@@ -25,7 +25,7 @@ def register_history_type(history_type_dict):
except DatabaseError:
# Special case for syncdb
transaction.rollback()
-
+
# Runtime
history_types_dict.setdefault(namespace, {})
history_types_dict[namespace][name] = {
diff --git a/mayan/apps/history/views.py b/mayan/apps/history/views.py
index 0c2f603f0b..a0786435bb 100644
--- a/mayan/apps/history/views.py
+++ b/mayan/apps/history/views.py
@@ -16,7 +16,7 @@ from acls.models import AccessEntry
from .models import History, HistoryType
from .forms import HistoryDetailForm
from .permissions import PERMISSION_HISTORY_VIEW
-from .widgets import history_entry_object_link, history_entry_summary
+from .widgets import history_entry_object_link
def history_list(request, object_list=None, title=None, extra_context=None):
@@ -76,11 +76,11 @@ def history_for_object(request, app_label, module_name, object_id):
def history_view(request, object_id):
history = get_object_or_404(History, pk=object_id)
-
+
try:
Permission.objects.check_permissions(request.user, [PERMISSION_HISTORY_VIEW])
except PermissionDenied:
- AccessEntry.objects.check_access(PERMISSION_HISTORY_VIEW, request.user, history.content_object)
+ AccessEntry.objects.check_access(PERMISSION_HISTORY_VIEW, request.user, history.content_object)
form = HistoryDetailForm(instance=history, extra_fields=[
{'label': _(u'Date'), 'field': lambda x: x.datetime.date()},
@@ -93,13 +93,12 @@ def history_view(request, object_id):
return render_to_response('generic_detail.html', {
'title': _(u'details for: %s') % history.get_processed_summary(),
'form': form,
- },
- context_instance=RequestContext(request))
+ }, context_instance=RequestContext(request))
def history_type_list(request, history_type_pk):
history_type = get_object_or_404(HistoryType, pk=history_type_pk)
-
+
return history_list(
request,
object_list=History.objects.filter(history_type=history_type),
diff --git a/mayan/apps/history/widgets.py b/mayan/apps/history/widgets.py
index 8173ccbe2b..a439a92ebd 100644
--- a/mayan/apps/history/widgets.py
+++ b/mayan/apps/history/widgets.py
@@ -3,22 +3,20 @@ from django.utils.safestring import mark_safe
def history_entry_object_link(entry):
return mark_safe(u'%(label)s' % {
- 'url': entry.content_object.get_absolute_url() if entry.content_object else u'#',
- 'label': unicode(entry.content_object) if entry.content_object else u''
- }
+ 'url': entry.content_object.get_absolute_url() if entry.content_object else u'#',
+ 'label': unicode(entry.content_object) if entry.content_object else u''}
)
def history_entry_summary(entry):
return mark_safe(u'%(label)s' % {
'url': entry.get_absolute_url(),
- 'label': unicode(entry.get_processed_summary())
- })
+ 'label': unicode(entry.get_processed_summary())}
+ )
def history_entry_type_link(entry):
return mark_safe(u'%(label)s' % {
- 'url': entry.history_type.get_absolute_url(),
- 'label': unicode(entry.history_type)
- }
+ 'url': entry.history_type.get_absolute_url(),
+ 'label': unicode(entry.history_type)}
)
diff --git a/mayan/apps/installation/__init__.py b/mayan/apps/installation/__init__.py
index 160386767e..ea484cf99a 100644
--- a/mayan/apps/installation/__init__.py
+++ b/mayan/apps/installation/__init__.py
@@ -15,7 +15,7 @@ from project_tools.api import register_tool
from .classes import Property, PropertyNamespace
from .links import link_menu_link, link_namespace_details, link_namespace_list
from .models import Installation
-
+
@receiver(post_migrate, dispatch_uid='trigger_first_time')
def trigger_first_time(sender, **kwargs):
@@ -31,7 +31,7 @@ def check_first_run():
details = Installation.objects.get()
except DatabaseError:
# Avoid database errors when the app tables haven't been created yet
- transaction.rollback()
+ transaction.rollback()
else:
if details.is_first_run:
details.submit()
@@ -45,7 +45,7 @@ register_model_list_columns(PropertyNamespace, [
{
'name': _(u'items'),
'attribute': encapsulate(lambda entry: len(entry.get_properties()))
- }
+ }
])
register_model_list_columns(Property, [
@@ -56,7 +56,7 @@ register_model_list_columns(Property, [
{
'name': _(u'value'),
'attribute': 'value'
- }
+ }
])
register_links(PropertyNamespace, [link_namespace_details])
diff --git a/mayan/apps/installation/classes.py b/mayan/apps/installation/classes.py
index be77a522a6..ff01f5840b 100644
--- a/mayan/apps/installation/classes.py
+++ b/mayan/apps/installation/classes.py
@@ -2,7 +2,6 @@ from __future__ import absolute_import
from collections import namedtuple
import os
-import sys
import pbs
@@ -116,7 +115,6 @@ class VirtualEnv(object):
else:
return Dependency(package, version, standard=True)
-
def get_packages_info(self, requirements_file=None):
if requirements_file:
with open(requirements_file) as file_in:
@@ -126,7 +124,6 @@ class VirtualEnv(object):
for item in pip('freeze').splitlines():
yield self.extract_dependency(item)
-
def __init__(self):
self.requirements_file_path = os.path.join(settings.BASE_DIR, 'requirements', 'production.txt')
if not PIP:
diff --git a/mayan/apps/installation/views.py b/mayan/apps/installation/views.py
index 4f9f17bf8b..c09326f4d9 100644
--- a/mayan/apps/installation/views.py
+++ b/mayan/apps/installation/views.py
@@ -3,11 +3,10 @@ from __future__ import absolute_import
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _
-from django.core.exceptions import PermissionDenied
from permissions.models import Permission
-from .classes import Property, PropertyNamespace
+from .classes import PropertyNamespace
from .permissions import PERMISSION_INSTALLATION_DETAILS
from .models import Installation
diff --git a/mayan/apps/linking/__init__.py b/mayan/apps/linking/__init__.py
index 4c75eb611b..d116e5f667 100644
--- a/mayan/apps/linking/__init__.py
+++ b/mayan/apps/linking/__init__.py
@@ -6,7 +6,7 @@ from documents.models import Document
from navigation.api import register_links, register_sidebar_template
from project_setup.api import register_setup
-from .links import (smart_link_instance_view_link, smart_link_instances_for_document,
+from .links import (smart_link_instances_for_document,
smart_link_setup, smart_link_list, smart_link_create, smart_link_edit,
smart_link_delete, smart_link_condition_list, smart_link_condition_create,
smart_link_condition_edit, smart_link_condition_delete, smart_link_acl_list)
diff --git a/mayan/apps/linking/views.py b/mayan/apps/linking/views.py
index 0b3aefef1b..0d7e90c924 100644
--- a/mayan/apps/linking/views.py
+++ b/mayan/apps/linking/views.py
@@ -20,10 +20,10 @@ from documents.views import document_list
from documents.permissions import PERMISSION_DOCUMENT_VIEW
from permissions.models import Permission
-from . import smart_link_instance_view_link
from .conf.settings import SHOW_EMPTY_SMART_LINKS
from .forms import (SmartLinkInstanceForm, SmartLinkForm,
SmartLinkConditionForm)
+from .links import smart_link_instance_view_link
from .models import SmartLink, SmartLinkCondition
from .permissions import (PERMISSION_SMART_LINK_VIEW,
PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_DELETE,
diff --git a/mayan/apps/ocr/__init__.py b/mayan/apps/ocr/__init__.py
index 988d6c75de..da670a1ef4 100644
--- a/mayan/apps/ocr/__init__.py
+++ b/mayan/apps/ocr/__init__.py
@@ -20,16 +20,14 @@ from . import models as ocr_models
from .conf.settings import (AUTOMATIC_OCR, QUEUE_PROCESSING_INTERVAL)
from .exceptions import AlreadyQueued
from .links import (submit_document, submit_document_multiple,
- re_queue_document, re_queue_multiple_document, queue_document_delete,
- queue_document_multiple_delete, document_queue_disable,
- document_queue_enable, all_document_ocr_cleanup, queue_document_list,
+ re_queue_multiple_document, queue_document_multiple_delete,
+ document_queue_disable, document_queue_enable,
+ all_document_ocr_cleanup, queue_document_list,
ocr_tool_link, setup_queue_transformation_list,
setup_queue_transformation_create, setup_queue_transformation_edit,
setup_queue_transformation_delete)
from .models import DocumentQueue, QueueTransformation
-from .permissions import (PERMISSION_OCR_DOCUMENT,
- PERMISSION_OCR_DOCUMENT_DELETE, PERMISSION_OCR_QUEUE_ENABLE_DISABLE,
- PERMISSION_OCR_CLEAN_ALL_PAGES)
+from .permissions import PERMISSION_OCR_DOCUMENT
from .tasks import task_process_document_queues
logger = logging.getLogger(__name__)
@@ -72,14 +70,6 @@ def document_post_save(sender, instance, **kwargs):
except AlreadyQueued:
pass
-# Disabled because it appears Django execute signals using the same
-# process of the signal emiter effectively blocking the view until
-# the OCR process completes which could take several minutes :/
-#@receiver(post_save, dispatch_uid='call_queue', sender=QueueDocument)
-#def call_queue(sender, **kwargs):
-# if kwargs.get('created', False):
-# logger.debug('got call_queue signal: %s' % kwargs)
-# task_process_document_queues()
@receiver(post_syncdb, dispatch_uid='create_default_queue', sender=ocr_models)
def create_default_queue_signal_handler(sender, **kwargs):
diff --git a/mayan/apps/ocr/api.py b/mayan/apps/ocr/api.py
index 86bd8435ef..4324c45b0e 100644
--- a/mayan/apps/ocr/api.py
+++ b/mayan/apps/ocr/api.py
@@ -1,9 +1,7 @@
from __future__ import absolute_import
-import codecs
import os
import subprocess
-import tempfile
import sys
from django.utils.importlib import import_module
@@ -15,7 +13,7 @@ from documents.models import DocumentPage
from .backends import ocr_backend
from .conf.settings import UNPAPER_PATH, LANGUAGE
-from .exceptions import OCRError, UnpaperError
+from .exceptions import UnpaperError
from .literals import (DEFAULT_OCR_FILE_FORMAT, UNPAPER_FILE_FORMAT,
DEFAULT_OCR_FILE_EXTENSION)
from .parsers import parse_document_page
@@ -69,13 +67,13 @@ def do_document_ocr(queue_document):
unpaper_input = convert(document_filepath, file_format=UNPAPER_FILE_FORMAT, transformations=ocr_transformations)
execute_unpaper(input_filepath=unpaper_input, output_filepath=unpaper_output_filepath)
- #from PIL import Image, ImageOps
- #im = Image.open(document_filepath)
- ##if im.mode=='RGBA':
- ## im=im.convert('RGB')
- ##im = im.convert('L')
- #im = ImageOps.grayscale(im)
- #im.save(unpaper_output_filepath)
+ # from PIL import Image, ImageOps
+ # im = Image.open(document_filepath)
+ # #if im.mode=='RGBA':
+ # # im=im.convert('RGB')
+ # #im = im.convert('L')
+ # im = ImageOps.grayscale(im)
+ # im.save(unpaper_output_filepath)
# Convert to TIFF
pre_ocr_filepath = convert(input_filepath=unpaper_output_filepath, file_format=DEFAULT_OCR_FILE_FORMAT)
diff --git a/mayan/apps/ocr/backends/__init__.py b/mayan/apps/ocr/backends/__init__.py
index d1bdbeca9d..5425182c08 100644
--- a/mayan/apps/ocr/backends/__init__.py
+++ b/mayan/apps/ocr/backends/__init__.py
@@ -1,5 +1,7 @@
from __future__ import absolute_import
+import sys
+
from django.utils.importlib import import_module
from ..conf.settings import BACKEND
diff --git a/mayan/apps/ocr/backends/tesseract.py b/mayan/apps/ocr/backends/tesseract.py
index b1bfef03a1..8a448773a3 100644
--- a/mayan/apps/ocr/backends/tesseract.py
+++ b/mayan/apps/ocr/backends/tesseract.py
@@ -4,14 +4,14 @@ import codecs
import os
import subprocess
import tempfile
-import sys
from . import BackendBase
from ..conf.settings import TESSERACT_PATH
+from ..exceptions import OCRError
-def Tesseract(BackendBase):
- def execute(input_filename, language=None):
+class Tesseract(BackendBase):
+ def execute(self, input_filename, language=None):
"""
Execute the command line binary of tesseract
"""
@@ -20,7 +20,7 @@ def Tesseract(BackendBase):
ocr_output = os.extsep.join([filepath, u'txt'])
command = [unicode(TESSERACT_PATH), unicode(input_filename), unicode(filepath)]
- if lang is not None:
+ if language is not None:
command.extend([u'-l', language])
proc = subprocess.Popen(command, close_fds=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
@@ -29,12 +29,12 @@ def Tesseract(BackendBase):
error_text = proc.stderr.read()
cleanup(filepath)
cleanup(ocr_output)
- if lang:
+ if language:
# If tesseract gives an error with a language parameter
# re-run it with no parameter again
- return run_tesseract(input_filename, language=None)
+ return self.execute(input_filename, language=None)
else:
- raise TesseractError(error_text)
+ raise OCRError(error_text)
fd = codecs.open(ocr_output, 'r', 'utf-8')
text = fd.read().strip()
@@ -43,3 +43,14 @@ def Tesseract(BackendBase):
os.unlink(filepath)
return text
+
+
+# TODO: Reduntant, also in api.py
+def cleanup(filename):
+ """
+ Try to remove the given filename, ignoring non-existent files
+ """
+ try:
+ os.remove(filename)
+ except OSError:
+ pass
diff --git a/mayan/apps/ocr/lang/eng.py b/mayan/apps/ocr/lang/eng.py
index 07b46d1757..8a3eb91407 100644
--- a/mayan/apps/ocr/lang/eng.py
+++ b/mayan/apps/ocr/lang/eng.py
@@ -10,28 +10,28 @@ def check_word(word):
ALL_ALPHA = re.compile('^[a-z]+$', re.I)
SINGLE_LETTER_WORDS = re.compile('^[ai]$', re.I)
- #(L) If a string is longer than 20 characters, it is garbage
+ # (L) If a string is longer than 20 characters, it is garbage
if len(word) > 20:
return None
- #(A) If a string's ratio of alphanumeric characters to total
- #characters is less than 50%, the string is garbage
+ # (A) If a string's ratio of alphanumeric characters to total
+ # characters is less than 50%, the string is garbage
if len(ALL_ALPHANUM.findall(word)) < len(word) / 2:
return None
- #Remove word if all the letters in the word are non alphanumeric
+ # Remove word if all the letters in the word are non alphanumeric
if len(NON_ALPHANUM.findall(word)) == len(word):
return None
- #Removed words with too many consecutie vowels
+ # Removed words with too many consecutie vowels
if TOO_MANY_VOWELS.findall(word):
return None
- #Removed words with too many consecutie consonants
+ # Removed words with too many consecutie consonants
if TOO_MANY_CONSONANTS.findall(word):
return None
- #Only allow specific single letter words
+ # Only allow specific single letter words
if len(word) == 1 and not SINGLE_LETTER_WORDS.findall(word):
return None
diff --git a/mayan/apps/ocr/lang/rus.py b/mayan/apps/ocr/lang/rus.py
index a91d3bf224..f0553ca6d7 100644
--- a/mayan/apps/ocr/lang/rus.py
+++ b/mayan/apps/ocr/lang/rus.py
@@ -11,28 +11,28 @@ def check_word(word):
ALL_ALPHA = re.compile('^[ёйцукенгшщзхъфывапролджэячсмитьбю]+$', re.I)
SINGLE_LETTER_WORDS = re.compile('^[уквояси]$', re.I)
- #(L) If a string is longer than 25 characters, it is garbage
+ # (L) If a string is longer than 25 characters, it is garbage
if len(word) > 25:
return None
- #(A) If a string's ratio of alphanumeric characters to total
- #characters is less than 50%, the string is garbage
+ # (A) If a string's ratio of alphanumeric characters to total
+ # characters is less than 50%, the string is garbage
if len(ALL_ALPHANUM.findall(word)) < len(word) / 2:
return None
- #Remove word if all the letters in the word are non alphanumeric
+ # Remove word if all the letters in the word are non alphanumeric
if len(NON_ALPHANUM.findall(word)) == len(word):
return None
- #Removed words with too many consecutie vowels
+ # Removed words with too many consecutie vowels
if TOO_MANY_VOWELS.findall(word):
return None
- #Removed words with too many consecutie consonants
+ # Removed words with too many consecutie consonants
if TOO_MANY_CONSONANTS.findall(word):
return None
- #Only allow specific single letter words
+ # Only allow specific single letter words
if len(word) == 1 and not SINGLE_LETTER_WORDS.findall(word):
return None
diff --git a/mayan/apps/ocr/lang/spa.py b/mayan/apps/ocr/lang/spa.py
index 62fc49452e..fd29d49f8a 100644
--- a/mayan/apps/ocr/lang/spa.py
+++ b/mayan/apps/ocr/lang/spa.py
@@ -11,28 +11,28 @@ def check_word(word):
ALL_ALPHA = re.compile('^[a-z]+$', re.I)
SINGLE_LETTER_WORDS = re.compile('^[aeoóuy]$', re.I)
- #(L) If a string is longer than 20 characters, it is garbage
+ # (L) If a string is longer than 20 characters, it is garbage
if len(word) > 20:
return None
- #(A) If a string’s ratio of alphanumeric characters to total
- #characters is less than 50%, the string is garbage
+ # (A) If a string’s ratio of alphanumeric characters to total
+ # characters is less than 50%, the string is garbage
if len(ALL_ALPHANUM.findall(word)) < len(word) / 2:
return None
- #Remove word if all the letters in the word are non alphanumeric
+ # Remove word if all the letters in the word are non alphanumeric
if len(NON_ALPHANUM.findall(word)) == len(word):
return None
- #Removed words with too many consecutie vowels
+ # Removed words with too many consecutie vowels
if TOO_MANY_VOWELS.findall(word):
return None
- #Removed words with too many consecutie consonants
+ # Removed words with too many consecutie consonants
if TOO_MANY_CONSONANTS.findall(word):
return None
- #Only allow specific single letter words
+ # Only allow specific single letter words
if len(word) == 1 and not SINGLE_LETTER_WORDS.findall(word):
return None
diff --git a/mayan/apps/ocr/models.py b/mayan/apps/ocr/models.py
index aeebb77e36..d82935d365 100644
--- a/mayan/apps/ocr/models.py
+++ b/mayan/apps/ocr/models.py
@@ -15,10 +15,9 @@ from converter.api import get_available_transformations_choices
from sources.managers import SourceTransformationManager
from .exceptions import ReQueueError
-from .literals import (DOCUMENTQUEUE_STATE_STOPPED,
- DOCUMENTQUEUE_STATE_CHOICES, QUEUEDOCUMENT_STATE_PENDING,
- QUEUEDOCUMENT_STATE_CHOICES, QUEUEDOCUMENT_STATE_PROCESSING,
- DOCUMENTQUEUE_STATE_ACTIVE)
+from .literals import (DOCUMENTQUEUE_STATE_CHOICES,
+ QUEUEDOCUMENT_STATE_PENDING, QUEUEDOCUMENT_STATE_CHOICES,
+ QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_ACTIVE)
from .managers import DocumentQueueManager
diff --git a/mayan/apps/ocr/tasks.py b/mayan/apps/ocr/tasks.py
index 8725771f54..3cce23a846 100644
--- a/mayan/apps/ocr/tasks.py
+++ b/mayan/apps/ocr/tasks.py
@@ -10,8 +10,7 @@ from job_processor.api import process_job
from lock_manager import Lock, LockError
from .api import do_document_ocr
-from .conf.settings import (NODE_CONCURRENT_EXECUTION, REPLICATION_DELAY,
- QUEUE_PROCESSING_INTERVAL)
+from .conf.settings import NODE_CONCURRENT_EXECUTION, REPLICATION_DELAY
from .literals import (QUEUEDOCUMENT_STATE_PENDING,
QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_ACTIVE,
QUEUEDOCUMENT_STATE_ERROR)
diff --git a/mayan/apps/ocr/views.py b/mayan/apps/ocr/views.py
index de432b5d29..a97873d792 100644
--- a/mayan/apps/ocr/views.py
+++ b/mayan/apps/ocr/views.py
@@ -18,9 +18,8 @@ from permissions.models import Permission
from .api import clean_pages
from .exceptions import AlreadyQueued, ReQueueError
from .forms import QueueTransformationForm, QueueTransformationForm_create
-from .literals import (QUEUEDOCUMENT_STATE_PENDING,
- QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_STOPPED,
- DOCUMENTQUEUE_STATE_ACTIVE)
+from .literals import (QUEUEDOCUMENT_STATE_PROCESSING,
+ DOCUMENTQUEUE_STATE_STOPPED, DOCUMENTQUEUE_STATE_ACTIVE)
from .models import DocumentQueue, QueueDocument, QueueTransformation
from .permissions import (PERMISSION_OCR_DOCUMENT,
PERMISSION_OCR_DOCUMENT_DELETE, PERMISSION_OCR_QUEUE_ENABLE_DISABLE,
@@ -144,10 +143,12 @@ def submit_document_to_queue(request, document, post_submit_redirect=None):
try:
document_queue = DocumentQueue.objects.queue_document(document)
messages.success(request, _(u'Document: %(document)s was added to the OCR queue: %(queue)s.') % {
- 'document': document, 'queue': document_queue.label})
+ 'document': document, 'queue': document_queue.label}
+ )
except AlreadyQueued:
messages.warning(request, _(u'Document: %(document)s is already queued.') % {
- 'document': document})
+ 'document': document}
+ )
except Exception, e:
messages.error(request, e)
@@ -317,7 +318,7 @@ def setup_queue_transformation_list(request, document_queue_id):
{'name': _(u'order'), 'attribute': 'order'},
{'name': _(u'transformation'), 'attribute': encapsulate(lambda x: x.get_transformation_display())},
{'name': _(u'arguments'), 'attribute': 'arguments'}
- ],
+ ],
'hide_link': True,
'hide_object': True,
}
@@ -355,8 +356,7 @@ def setup_queue_transformation_edit(request, transformation_id):
{'object': 'transformation', 'name': _(u'transformation')}
],
'next': next,
- },
- context_instance=RequestContext(request))
+ }, context_instance=RequestContext(request))
def setup_queue_transformation_delete(request, transformation_id):
@@ -389,8 +389,7 @@ def setup_queue_transformation_delete(request, transformation_id):
},
'previous': previous,
'form_icon': u'shape_square_delete.png',
- },
- context_instance=RequestContext(request))
+ }, context_instance=RequestContext(request))
def setup_queue_transformation_create(request, document_queue_id):
diff --git a/mayan/apps/permissions/__init__.py b/mayan/apps/permissions/__init__.py
index a3523e0d66..adf0308b44 100644
--- a/mayan/apps/permissions/__init__.py
+++ b/mayan/apps/permissions/__init__.py
@@ -1,8 +1,8 @@
from __future__ import absolute_import
from django.contrib.auth.models import User
-from django.db.models.signals import post_save
from django.core.exceptions import ObjectDoesNotExist
+from django.db.models.signals import post_save
from navigation.api import register_links, register_multi_item_links
from project_setup.api import register_setup
diff --git a/mayan/apps/permissions/cleanup.py b/mayan/apps/permissions/cleanup.py
index a74115ad24..edcaba9c1e 100644
--- a/mayan/apps/permissions/cleanup.py
+++ b/mayan/apps/permissions/cleanup.py
@@ -1,6 +1,6 @@
from __future__ import absolute_import
-from .models import Role, PermissionHolder
+from .models import Role
def cleanup():
diff --git a/mayan/apps/permissions/managers.py b/mayan/apps/permissions/managers.py
index 3db2ad66a1..537acedbe9 100644
--- a/mayan/apps/permissions/managers.py
+++ b/mayan/apps/permissions/managers.py
@@ -2,15 +2,9 @@ import logging
from django.db import models
from django.contrib.contenttypes.models import ContentType
-from django.db import transaction
-from django.core.exceptions import PermissionDenied
-from django.shortcuts import get_object_or_404
-from django.db.utils import IntegrityError
-from django.core.exceptions import ImproperlyConfigured
from common.models import AnonymousUserSingleton
-
logger = logging.getLogger(__name__)
diff --git a/mayan/apps/permissions/models.py b/mayan/apps/permissions/models.py
index a308195842..8918c35cd6 100644
--- a/mayan/apps/permissions/models.py
+++ b/mayan/apps/permissions/models.py
@@ -2,13 +2,13 @@ from __future__ import absolute_import
import logging
-from django.db import models
-from django.utils.translation import ugettext_lazy as _
-from django.utils.translation import ugettext
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.contenttypes import generic
from django.contrib.auth.models import User
+from django.contrib.contenttypes import generic
+from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied
+from django.db import models
+from django.utils.translation import ugettext
+from django.utils.translation import ugettext_lazy as _
from common.models import AnonymousUserSingleton
@@ -70,14 +70,13 @@ class PermissionManager(object):
except KeyError:
raise Permission.DoesNotExist
-
def __init__(self, model):
self.model = model
class Permission(object):
_stored_permissions_cache = {}
-
+
DoesNotExist = PermissionDoesNotExists
def __init__(self, namespace, name, label):
@@ -236,7 +235,7 @@ class Role(models.Model):
def remove_member(self, member):
member = AnonymousUserSingleton.objects.passthru_check(member)
- member_type=ContentType.objects.get_for_model(member)
+ member_type = ContentType.objects.get_for_model(member)
role_member = RoleMember.objects.get(role=self, member_type=member_type, member_id=member.pk)
role_member.delete()
@@ -261,7 +260,6 @@ class RoleMember(models.Model):
objects = RoleMemberManager()
class Meta:
- #ordering = ('label',)
verbose_name = _(u'role member')
verbose_name_plural = _(u'role members')
diff --git a/mayan/apps/permissions/registry.py b/mayan/apps/permissions/registry.py
index 37b05e0f42..19066cf192 100644
--- a/mayan/apps/permissions/registry.py
+++ b/mayan/apps/permissions/registry.py
@@ -2,7 +2,6 @@ from __future__ import absolute_import
from .cleanup import cleanup
-
bootstrap_models = [
{
'name': 'role',
diff --git a/mayan/apps/permissions/runtime.py b/mayan/apps/permissions/runtime.py
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/mayan/apps/permissions/views.py b/mayan/apps/permissions/views.py
index 0f1d1087a7..75b828b5da 100644
--- a/mayan/apps/permissions/views.py
+++ b/mayan/apps/permissions/views.py
@@ -1,32 +1,31 @@
from __future__ import absolute_import
-import operator
import itertools
+import operator
-from django.utils.translation import ugettext_lazy as _
+from django.contrib import messages
+from django.contrib.auth.models import User, Group
+from django.contrib.contenttypes.models import ContentType
+from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect, Http404
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
-from django.contrib import messages
-from common.backport.generic.list_detail import object_list
-from django.core.urlresolvers import reverse
-from common.backport.generic.create_update import create_object, delete_object, update_object
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.auth.models import User, Group
from django.utils.simplejson import loads
+from django.utils.translation import ugettext_lazy as _
-from common.views import assign_remove
-from common.utils import generate_choices_w_labels, encapsulate, get_object_name
-from common.widgets import two_state_template
-from common.models import AnonymousUserSingleton
from acls.classes import EncapsulatedObject
+from common.backport.generic.list_detail import object_list
+from common.backport.generic.create_update import create_object, delete_object, update_object
+from common.models import AnonymousUserSingleton
+from common.views import assign_remove
+from common.utils import encapsulate, get_object_name
+from common.widgets import two_state_template
-from .models import Role, Permission, PermissionHolder, RoleMember
from .forms import RoleForm, RoleForm_view
+from .models import Role, Permission
from .permissions import (PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT,
PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE,
PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE)
-from .widgets import role_permission_link
def role_list(request):
@@ -49,7 +48,6 @@ def role_permissions(request, role_id):
role = get_object_or_404(Role, pk=role_id)
form = RoleForm_view(instance=role)
- role_permissions_list = Permission.objects.get_for_holder(role)
subtemplates_list = [
{
'name': u'generic_list_subtemplate.html',
@@ -60,7 +58,7 @@ def role_permissions(request, role_id):
{'name': _(u'namespace'), 'attribute': encapsulate(lambda x: x.namespace)},
{'name': _(u'name'), 'attribute': encapsulate(lambda x: x.label)},
{
- 'name':_(u'has permission'),
+ 'name': _(u'has permission'),
'attribute': encapsulate(lambda x: two_state_template(x.requester_has_this(role))),
},
],
@@ -90,7 +88,8 @@ def role_edit(request, role_id):
return update_object(request, template_name='generic_form.html',
form_class=RoleForm, object_id=role_id, extra_context={
- 'object_name': _(u'role')})
+ 'object_name': _(u'role')}
+ )
def role_create(request):
@@ -129,7 +128,7 @@ def permission_grant(request):
items = []
for item_properties in items_property_list:
- #permission = get_object_or_404(Permission, pk=item_properties['permission_id'])
+ # permission = get_object_or_404(Permission, pk=item_properties['permission_id'])
try:
permission = Permission.objects.get({'pk': item_properties['permission_id']})
except Permission.DoesNotExist:
@@ -192,7 +191,7 @@ def permission_revoke(request):
items = []
for item_properties in items_property_list:
- #permission = get_object_or_404(Permission, pk=item_properties['permission_id'])
+ # permission = get_object_or_404(Permission, pk=item_properties['permission_id'])
try:
permission = Permission.objects.get({'pk': item_properties['permission_id']})
except Permission.DoesNotExist:
@@ -280,7 +279,7 @@ def get_role_members(role, separate=False):
def get_non_role_members(role):
- #non members = all users - members - staff - super users
+ # non members = all users - members - staff - super users
member_users, member_groups, member_anonymous = get_role_members(role, separate=True)
staff_users = User.objects.filter(is_staff=True)
@@ -300,7 +299,7 @@ def get_non_role_members(role):
if anonymous:
non_members.append((_(u'Special'), _as_choice_list(list(anonymous))))
- #non_holder_list.append((_(u'Special'), _as_choice_list([AnonymousUserSingleton.objects.get()])))
+ # non_holder_list.append((_(u'Special'), _as_choice_list([AnonymousUserSingleton.objects.get()])))
return non_members
@@ -321,9 +320,9 @@ def role_members(request, role_id):
return assign_remove(
request,
- #left_list=lambda: generate_choices_w_labels(get_non_role_members(role)),
+ # left_list=lambda: generate_choices_w_labels(get_non_role_members(role)),
left_list=lambda: get_non_role_members(role),
- #right_list=lambda: generate_choices_w_labels(get_role_members(role)),
+ # right_list=lambda: generate_choices_w_labels(get_role_members(role)),
right_list=lambda: get_role_members(role),
add_method=lambda x: add_role_member(role, x),
remove_method=lambda x: remove_role_member(role, x),
diff --git a/mayan/apps/permissions/widgets.py b/mayan/apps/permissions/widgets.py
index 5fa9e462c9..8f2594be17 100644
--- a/mayan/apps/permissions/widgets.py
+++ b/mayan/apps/permissions/widgets.py
@@ -1,7 +1,7 @@
-from django.utils.translation import ugettext
-from django.utils.safestring import mark_safe
from django.contrib.contenttypes.models import ContentType
from django.core.urlresolvers import reverse
+from django.utils.safestring import mark_safe
+from django.utils.translation import ugettext
def role_permission_link(requester, permission, permission_list):
diff --git a/mayan/apps/project_setup/__init__.py b/mayan/apps/project_setup/__init__.py
index 3603ee11cf..a88480e966 100644
--- a/mayan/apps/project_setup/__init__.py
+++ b/mayan/apps/project_setup/__init__.py
@@ -1,7 +1,5 @@
from __future__ import absolute_import
-from django.utils.translation import ugettext_lazy as _
-
from navigation.api import register_top_menu
from .links import link_setup
diff --git a/mayan/apps/project_setup/views.py b/mayan/apps/project_setup/views.py
index 8ab0426572..b1ae3507ee 100644
--- a/mayan/apps/project_setup/views.py
+++ b/mayan/apps/project_setup/views.py
@@ -1,6 +1,6 @@
from __future__ import absolute_import
-from django.shortcuts import render_to_response, get_object_or_404
+from django.shortcuts import render_to_response
from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _
diff --git a/mayan/apps/rest_api/resources.py b/mayan/apps/rest_api/resources.py
index 971161133e..6686a0539c 100644
--- a/mayan/apps/rest_api/resources.py
+++ b/mayan/apps/rest_api/resources.py
@@ -2,8 +2,7 @@ from django.core.urlresolvers import reverse
from rest_framework import serializers
-from converter.exceptions import UnknownFileFormat, UnkownConvertError
-from documents.models import Document, DocumentType
+from documents.models import Document
class DocumentResourceSimple(serializers.HyperlinkedModelSerializer):
diff --git a/mayan/apps/rest_api/views.py b/mayan/apps/rest_api/views.py
index c6f48d72b7..460743b12c 100644
--- a/mayan/apps/rest_api/views.py
+++ b/mayan/apps/rest_api/views.py
@@ -2,16 +2,12 @@
import logging
-from django.core.urlresolvers import reverse
from django.shortcuts import get_object_or_404
-from django.utils.translation import ugettext_lazy as _
from converter.exceptions import UnknownFileFormat, UnkownConvertError
from documents.models import Document, DocumentVersion, DocumentPage
from rest_framework import generics
-from rest_framework import permissions
-from rest_framework import serializers
from rest_framework.response import Response
from rest_framework.reverse import reverse