diff --git a/apps/acls/__init__.py b/apps/acls/__init__.py index 64becbdef5..33493dd232 100644 --- a/apps/acls/__init__.py +++ b/apps/acls/__init__.py @@ -7,7 +7,7 @@ from project_setup.api import register_setup from .classes import (AccessHolder, AccessObjectClass, ClassAccessHolder, AccessObject) -from .permissions import (ACLS_EDIT_ACL, ACLS_VIEW_ACL, +from .permissions import (ACLS_EDIT_ACL, ACLS_VIEW_ACL, ACLS_CLASS_EDIT_ACL, ACLS_CLASS_VIEW_ACL) diff --git a/apps/acls/admin.py b/apps/acls/admin.py index 6608e6799b..61c12d9498 100644 --- a/apps/acls/admin.py +++ b/apps/acls/admin.py @@ -1,8 +1,6 @@ from __future__ import absolute_import from django.contrib import admin -from django.contrib.contenttypes import generic -from django.contrib.contenttypes.models import ContentType from .models import AccessEntry @@ -21,5 +19,5 @@ class AccessEntryAdmin(admin.ModelAdmin): list_display = ('pk', 'holder_object', 'permission', 'content_object') list_display_links = ('pk',) model = AccessEntry - + admin.site.register(AccessEntry, AccessEntryAdmin) diff --git a/apps/acls/classes.py b/apps/acls/classes.py index 91141e46b6..f2b7c36ef2 100644 --- a/apps/acls/classes.py +++ b/apps/acls/classes.py @@ -12,13 +12,13 @@ from django.core.exceptions import ObjectDoesNotExist from common.models import AnonymousUserSingleton logger = logging.getLogger(__name__) - + _cache = {} class EncapsulatedObject(object): source_object_name = u'source_object' - + @classmethod def object_key(cls, app_label=None, model=None, pk=None): if pk: @@ -36,7 +36,7 @@ class EncapsulatedObject(object): @classmethod def set_source_object_name(cls, new_name): cls.source_object_name = new_name - + #@classmethod #def encapsulate_list(cls, source_object=None, app_label=None, model=None, pk=None): @@ -44,7 +44,7 @@ class EncapsulatedObject(object): def encapsulate(cls, source_object): source_object = AnonymousUserSingleton.objects.passthru_check(source_object) content_type = ContentType.objects.get_for_model(source_object) - + if hasattr(source_object, 'pk'): # Object object_key = cls.object_key(content_type.app_label, content_type.model, source_object.pk) @@ -67,9 +67,9 @@ class EncapsulatedObject(object): elif len(elements) == 2: app_label, model = elements[0], elements[1] pk = None - + object_key = cls.object_key(*elements) - + try: return _cache[object_key] except KeyError: @@ -90,9 +90,9 @@ class EncapsulatedObject(object): raise ObjectDoesNotExist("%s matching query does not exist." % source_object_model_class._meta.object_name) else: source_object = source_object_model_class - + return cls.encapsulate(source_object) - + def __init__(self, source_object): self.content_type = ContentType.objects.get_for_model(source_object) self.ct_fullname = '%s.%s' % (self.content_type.app_label, self.content_type.name) @@ -101,15 +101,15 @@ class EncapsulatedObject(object): # Class self.gid = '%s.%s' % (self.content_type.app_label, self.content_type.model) else: - # Object + # Object self.gid = '%s.%s.%s' % (self.content_type.app_label, self.content_type.model, source_object.pk) - + setattr(self, self.__class__.source_object_name, source_object) def __unicode__(self): if isinstance(self.source_object, ModelBase): return capfirst(unicode(self.source_object._meta.verbose_name_plural)) - + elif self.ct_fullname == 'auth.user': return u'%s %s' % (self.source_object._meta.verbose_name, self.source_object.get_full_name()) else: @@ -117,19 +117,19 @@ class EncapsulatedObject(object): def __repr__(self): return self.__unicode__() - + @property def source_object(self): return getattr(self, self.__class__.source_object_name, None) - - + + class AccessHolder(EncapsulatedObject): source_object_name = u'holder_object' - - + + class AccessObject(EncapsulatedObject): - source_object_name = u'obj' - + source_object_name = u'obj' + class AccessObjectClass(EncapsulatedObject): source_object_name = u'cls' diff --git a/apps/acls/managers.py b/apps/acls/managers.py index a2cb9ff17f..dd69b7d061 100644 --- a/apps/acls/managers.py +++ b/apps/acls/managers.py @@ -8,8 +8,10 @@ from django.utils.translation import ugettext from django.contrib.contenttypes.models import ContentType from django.contrib.auth.models import User from django.core.exceptions import PermissionDenied +from django.core.urlresolvers import reverse from common.models import AnonymousUserSingleton +from permissions.models import Permission from .classes import EncapsulatedObject, AccessHolder, ClassAccessHolder @@ -22,14 +24,14 @@ class AccessEntryManager(models.Manager): return obj.source_object else: return obj - + def grant(self, permission, actor, obj): ''' Grant a permission (what), (to) an actor, (on) a specific object ''' obj = self.source_object(obj) actor = self.source_object(actor) - + access_entry, created = self.model.objects.get_or_create( permission=permission, holder_type=ContentType.objects.get_for_model(actor), @@ -42,7 +44,7 @@ class AccessEntryManager(models.Manager): def revoke(self, permission, actor, obj): ''' Revoke a permission (what), (from) an actor, (on) a specific object - ''' + ''' obj = self.source_object(obj) actor = self.source_object(actor) @@ -57,12 +59,12 @@ class AccessEntryManager(models.Manager): access_entry.delete() return True except self.model.DoesNotExist: - return False + return False def has_access(self, permission, actor, obj): obj = self.source_object(obj) actor = self.source_object(actor) - + if isinstance(actor, User): if actor.is_superuser or actor.is_staff: return True @@ -80,7 +82,7 @@ class AccessEntryManager(models.Manager): return True except self.model.DoesNotExist: return False - + def check_access(self, permission, actor, obj): obj = self.source_object(obj) actor = self.source_object(actor) @@ -89,7 +91,7 @@ class AccessEntryManager(models.Manager): return True else: raise PermissionDenied(ugettext(u'Insufficient access.')) - + def check_accesses(self, permission_list, actor, obj): obj = self.source_object(obj) actor = self.source_object(actor) @@ -101,7 +103,7 @@ class AccessEntryManager(models.Manager): def get_allowed_class_objects(self, permission, actor, cls, related=None): logger.debug('related: %s' % related) - + actor = AnonymousUserSingleton.objects.passthru_check(actor) actor_type = ContentType.objects.get_for_model(actor) content_type = ContentType.objects.get_for_model(cls) @@ -122,22 +124,22 @@ class AccessEntryManager(models.Manager): def get_new_holder_url(self, obj): content_type = ContentType.objects.get_for_model(obj) return reverse('acl_new_holder_for', args=[content_type.app_label, content_type.model, obj.pk]) - + def get_holders_for(self, obj): content_type = ContentType.objects.get_for_model(obj) holder_list = [] for access_entry in self.model.objects.filter(content_type=content_type, object_id=obj.pk): entry = AccessHolder.encapsulate(access_entry.holder_object) - + if entry not in holder_list: holder_list.append(entry) - + return holder_list def get_holder_permissions_for(self, obj, actor): logger.debug('obj: %s' % obj) logger.debug('actor: %s' % actor) - + if isinstance(actor, User): if actor.is_superuser or actor.is_staff: return Permission.objects.all() @@ -149,11 +151,11 @@ class AccessEntryManager(models.Manager): def filter_objects_by_access(self, permission, actor, object_list, exception_on_empty=False, related=None): logger.debug('exception_on_empty: %s' % exception_on_empty) logger.debug('object_list: %s' % object_list) - + if isinstance(actor, User): if actor.is_superuser or actor.is_staff: return object_list - + try: if object_list.count() == 0: return object_list @@ -161,15 +163,15 @@ class AccessEntryManager(models.Manager): # object_list is not a queryset if len(object_list) == 0: return object_list - + try: # Try to process as a QuerySet qs = object_list.filter(pk__in=[obj.pk for obj in self.get_allowed_class_objects(permission, actor, object_list[0].__class__, related)]) logger.debug('qs: %s' % qs) - + if qs.count() == 0 and exception_on_empty == True: raise PermissionDenied - + return qs except AttributeError: # Fallback to a filtered list @@ -190,17 +192,17 @@ class DefaultAccessEntryManager(models.Manager): holder_list = [] for access_entry in self.model.objects.filter(content_type=content_type): entry = ClassAccessHolder.encapsulate(access_entry.holder_object) - + if entry not in holder_list: holder_list.append(entry) - + return holder_list def has_access(self, permission, actor, cls): if isinstance(actor, User): if actor.is_superuser or actor.is_staff: return True - + try: access_entry = self.model.objects.get( permission=permission.get_stored_permission(), @@ -227,7 +229,7 @@ class DefaultAccessEntryManager(models.Manager): def revoke(self, permission, actor, cls): ''' Revoke a permission (what), (from) an actor, (on) a specific class - ''' + ''' try: access_entry = self.model.objects.get( permission=permission, @@ -238,13 +240,13 @@ class DefaultAccessEntryManager(models.Manager): access_entry.delete() return True except self.model.DoesNotExist: - return False + return False def get_holder_permissions_for(self, cls, actor): if isinstance(actor, User): if actor.is_superuser or actor.is_staff: return Permission.objects.all() - + actor_type = ContentType.objects.get_for_model(actor) content_type = ContentType.objects.get_for_model(cls) return [access.permission for access in self.model.objects.filter(content_type=content_type, holder_type=actor_type, holder_id=actor.pk)] diff --git a/apps/acls/models.py b/apps/acls/models.py index 55df6a253e..a255348760 100644 --- a/apps/acls/models.py +++ b/apps/acls/models.py @@ -18,7 +18,7 @@ from .api import get_classes logger = logging.getLogger(__name__) - + class AccessEntry(models.Model): """ Model that hold the permission, object, actor relationship @@ -64,7 +64,7 @@ class DefaultAccessEntry(models.Model): @classmethod def get_classes(cls): return [AccessObjectClass.encapsulate(cls) for cls in get_classes()] - + permission = models.ForeignKey(StoredPermission, verbose_name=_(u'permission')) holder_type = models.ForeignKey( diff --git a/apps/acls/templatetags/acl_tags.py b/apps/acls/templatetags/acl_tags.py index 20e96dbb2f..68ce30263d 100644 --- a/apps/acls/templatetags/acl_tags.py +++ b/apps/acls/templatetags/acl_tags.py @@ -3,7 +3,7 @@ import logging from django.core.exceptions import PermissionDenied from django.template import (TemplateSyntaxError, Library, Node, Variable, VariableDoesNotExist) - + from acls.models import AccessEntry @@ -33,7 +33,7 @@ class CheckAccessNode(Node): context[u'access'] = False logger.debug('no obj, access False') return u'' - + if not permission_list: # There is no permissions list to check against which means # this link is available for all diff --git a/apps/acls/urls.py b/apps/acls/urls.py index a544274b5b..ba9aa8be92 100644 --- a/apps/acls/urls.py +++ b/apps/acls/urls.py @@ -5,13 +5,13 @@ urlpatterns = patterns('acls.views', url(r'^list_for/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/$', 'acl_list', (), 'acl_list'), url(r'^details/(?P[.\w]+)/holder/(?P[.\w]+)/$', 'acl_detail', (), 'acl_detail'), url(r'^holder/new/(?P[.\w]+)/$', 'acl_holder_new', (), 'acl_holder_new'), - + url(r'^multiple/grant/$', 'acl_grant', (), 'acl_multiple_grant'), url(r'^multiple/revoke/$', 'acl_revoke', (), 'acl_multiple_revoke'), url(r'^class/$', 'acl_setup_valid_classes', (), 'acl_setup_valid_classes'), url(r'^class/details/(?P[.\w]+)/holder/(?P[.\w]+)/$', 'acl_class_acl_detail', (), 'acl_class_acl_detail'), - url(r'^class/list_for/(?P[.\w]+)/$', 'acl_class_acl_list', (), 'acl_class_acl_list'), + url(r'^class/list_for/(?P[.\w]+)/$', 'acl_class_acl_list', (), 'acl_class_acl_list'), url(r'^class/holder/new/(?P[.\w]+)/$', 'acl_class_new_holder_for', (), 'acl_class_new_holder_for'), url(r'^class/multiple/grant/$', 'acl_class_multiple_grant', (), 'acl_class_multiple_grant'), diff --git a/apps/acls/views.py b/apps/acls/views.py index d0a71b79a7..694c4b1e68 100644 --- a/apps/acls/views.py +++ b/apps/acls/views.py @@ -22,7 +22,7 @@ from permissions.models import Permission, Role from common.utils import generate_choices_w_labels, encapsulate from common.widgets import two_state_template -from .permissions import (ACLS_EDIT_ACL, ACLS_VIEW_ACL, +from .permissions import (ACLS_EDIT_ACL, ACLS_VIEW_ACL, ACLS_CLASS_EDIT_ACL, ACLS_CLASS_VIEW_ACL) from .models import AccessEntry, DefaultAccessEntry from .classes import (AccessHolder, AccessObject, AccessObjectClass, @@ -36,8 +36,8 @@ logger = logging.getLogger(__name__) def _permission_titles(permission_list): return u', '.join([unicode(permission) for permission in permission_list]) - - + + def acl_list_for(request, obj, extra_context=None): try: Permission.objects.check_permissions(request.user, [ACLS_VIEW_ACL]) @@ -60,14 +60,14 @@ def acl_list_for(request, obj, extra_context=None): 'navigation_object_list': [ {'object': 'object'}, {'object': 'access_object'} - ], + ], } if extra_context: context.update(extra_context) return render_to_response('generic_list.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def acl_list(request, app_label, model_name, object_id): @@ -90,10 +90,10 @@ def acl_detail_for(request, actor, obj): try: Permission.objects.check_permissions(request.user, [ACLS_VIEW_ACL]) except PermissionDenied: - AccessEntry.objects.check_accesses([ACLS_VIEW_ACL], actor, obj) + AccessEntry.objects.check_accesses([ACLS_VIEW_ACL], actor, obj) permission_list = get_class_permissions_for(obj) - + #TODO : get all globally assigned permission, new function get_permissions_for_holder (roles aware) subtemplates_list = [ { @@ -139,7 +139,7 @@ def acl_detail_for(request, actor, obj): context, context_instance=RequestContext(request) ) - + def acl_grant(request): items_property_list = loads(request.GET.get('items_property_list', [])) @@ -152,13 +152,13 @@ def acl_grant(request): title_suffix = [] navigation_object = None navigation_object_count = 0 - + for item_properties in items_property_list: try: permission = Permission.objects.get({'pk': item_properties['permission_pk']}) except Permission.DoesNotExist: - raise Http404 - + raise Http404 + try: requester = AccessHolder.get(gid=item_properties['holder_gid']) access_object = AccessObject.get(gid=item_properties['object_gid']) @@ -184,13 +184,13 @@ def acl_grant(request): items[requester][access_object].append(permission) navigation_object = access_object navigation_object_count += 1 - + for requester, obj_ps in items.items(): for obj, ps in obj_ps.items(): title_suffix.append(_(u', ').join([u'"%s"' % unicode(p) for p in ps])) title_suffix.append(_(u' for %s') % obj) title_suffix.append(_(u' to %s') % requester) - + if len(items_property_list) == 1: title_prefix = _(u'Are you sure you wish to grant the permission %(title_suffix)s?') else: @@ -225,7 +225,7 @@ def acl_grant(request): context['title'] = title_prefix % { 'title_suffix': u''.join(title_suffix), } - + logger.debug('navigation_object_count: %d' % navigation_object_count) logger.debug('navigation_object: %s' % navigation_object) if navigation_object_count == 1: @@ -251,21 +251,21 @@ def acl_revoke(request): try: permission = Permission.objects.get({'pk': item_properties['permission_pk']}) except Permission.DoesNotExist: - raise Http404 + raise Http404 try: requester = AccessHolder.get(gid=item_properties['holder_gid']) access_object = AccessObject.get(gid=item_properties['object_gid']) except ObjectDoesNotExist: raise Http404 - + try: Permission.objects.check_permissions(request.user, [ACLS_EDIT_ACL]) except PermissionDenied: try: AccessEntry.objects.check_access(ACLS_EDIT_ACL, request.user, access_object) except PermissionDenied: - raise + raise else: items.setdefault(requester, {}) items[requester].setdefault(access_object, []) @@ -277,14 +277,14 @@ def acl_revoke(request): items[requester].setdefault(access_object, []) items[requester][access_object].append(permission) navigation_object = access_object - navigation_object_count += 1 - + navigation_object_count += 1 + for requester, obj_ps in items.items(): for obj, ps in obj_ps.items(): title_suffix.append(_(u', ').join([u'"%s"' % unicode(p) for p in ps])) title_suffix.append(_(u' for %s') % obj) title_suffix.append(_(u' from %s') % requester) - + if len(items_property_list) == 1: title_prefix = _(u'Are you sure you wish to revoke the permission %(title_suffix)s?') else: @@ -319,7 +319,7 @@ def acl_revoke(request): context['title'] = title_prefix % { 'title_suffix': u''.join(title_suffix), } - + logger.debug('navigation_object_count: %d' % navigation_object_count) logger.debug('navigation_object: %s' % navigation_object) if navigation_object_count == 1: @@ -349,7 +349,7 @@ def acl_new_holder_for(request, obj, extra_context=None, navigation_object=None) reverse('acl_detail', args=[access_object.gid, access_holder.gid]), urlencode(query_string) ) - ) + ) except ObjectDoesNotExist: raise Http404 else: @@ -365,12 +365,12 @@ def acl_new_holder_for(request, obj, extra_context=None, navigation_object=None) 'navigation_object_list': [ {'object': 'object'}, {'object': 'access_object'}, - ], + ], } - + if extra_context: context.update(extra_context) - + return render_to_response('generic_form.html', context, context_instance=RequestContext(request)) @@ -399,12 +399,12 @@ def acl_setup_valid_classes(request): } return render_to_response('generic_list.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def acl_class_acl_list(request, access_object_class_gid): Permission.objects.check_permissions(request.user, [ACLS_CLASS_VIEW_ACL]) - + access_object_class = AccessObjectClass.get(gid=access_object_class_gid) context = { 'object_list': DefaultAccessEntry.objects.get_holders_for(access_object_class.source_object), @@ -419,7 +419,7 @@ def acl_class_acl_list(request, access_object_class_gid): } return render_to_response('generic_list.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def acl_class_acl_detail(request, access_object_class_gid, holder_object_gid): @@ -429,7 +429,7 @@ def acl_class_acl_detail(request, access_object_class_gid, holder_object_gid): access_object_class = AccessObjectClass.get(gid=access_object_class_gid) except ObjectDoesNotExist: raise Http404 - + #permission_list = list(access_object_class.get_class_permissions()) permission_list = get_class_permissions_for(access_object_class.content_type.model_class()) #TODO : get all globally assigned permission, new function get_permissions_for_holder (roles aware) @@ -464,9 +464,9 @@ def acl_class_acl_detail(request, access_object_class_gid, holder_object_gid): 'permission_pk': lambda x: x.pk, 'holder_gid': lambda x: actor.gid, 'access_object_class_gid': lambda x: access_object_class.gid, - }, + }, }, context_instance=RequestContext(request)) - + def acl_class_new_holder_for(request, access_object_class_gid): Permission.objects.check_permissions(request.user, [ACLS_CLASS_EDIT_ACL]) @@ -489,11 +489,11 @@ def acl_class_new_holder_for(request, access_object_class_gid): 'title': _(u'add new holder for class: %s') % unicode(access_object_class), 'object': access_object_class, 'submit_label': _(u'Select'), - 'submit_icon_famfam': 'tick' + 'submit_icon_famfam': 'tick' } - + return render_to_response('generic_form.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def acl_class_multiple_grant(request): @@ -513,25 +513,25 @@ def acl_class_multiple_grant(request): try: permission = Permission.objects.get({'pk': item_properties['permission_pk']}) except Permission.DoesNotExist: - raise Http404 + raise Http404 try: requester = AccessHolder.get(gid=item_properties['holder_gid']) access_object_class = AccessObjectClass.get(gid=item_properties['access_object_class_gid']) except ObjectDoesNotExist: raise Http404 - + items.setdefault(requester, {}) items[requester].setdefault(access_object_class, []) items[requester][access_object_class].append(permission) navigation_object = access_object_class navigation_object_count += 1 - + for requester, obj_ps in items.items(): for obj, ps in obj_ps.items(): title_suffix.append(_(u', ').join([u'"%s"' % unicode(p) for p in ps])) title_suffix.append(_(u' for %s') % obj) title_suffix.append(_(u' to %s') % requester) - + if len(items_property_list) == 1: title_prefix = _(u'Are you sure you wish to grant the permission %(title_suffix)s?') else: @@ -566,7 +566,7 @@ def acl_class_multiple_grant(request): context['title'] = title_prefix % { 'title_suffix': u''.join(title_suffix), } - + logger.debug('navigation_object_count: %d' % navigation_object_count) logger.debug('navigation_object: %s' % navigation_object) if navigation_object_count == 1: @@ -593,25 +593,25 @@ def acl_class_multiple_revoke(request): try: permission = Permission.objects.get({'pk': item_properties['permission_pk']}) except Permission.DoesNotExist: - raise Http404 + raise Http404 try: requester = AccessHolder.get(gid=item_properties['holder_gid']) access_object_class = AccessObjectClass.get(gid=item_properties['access_object_class_gid']) except ObjectDoesNotExist: raise Http404 - + items.setdefault(requester, {}) items[requester].setdefault(access_object_class, []) items[requester][access_object_class].append(permission) navigation_object = access_object_class navigation_object_count += 1 - + for requester, obj_ps in items.items(): for obj, ps in obj_ps.items(): title_suffix.append(_(u', ').join([u'"%s"' % unicode(p) for p in ps])) title_suffix.append(_(u' for %s') % obj) title_suffix.append(_(u' from %s') % requester) - + if len(items_property_list) == 1: title_prefix = _(u'Are you sure you wish to revoke the permission %(title_suffix)s?') else: @@ -646,7 +646,7 @@ def acl_class_multiple_revoke(request): context['title'] = title_prefix % { 'title_suffix': u''.join(title_suffix), } - + logger.debug('navigation_object_count: %d' % navigation_object_count) logger.debug('navigation_object: %s' % navigation_object) if navigation_object_count == 1: diff --git a/apps/common/tests.py b/apps/common/tests.py index 2247054b35..3b31148896 100644 --- a/apps/common/tests.py +++ b/apps/common/tests.py @@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2. >>> 1 + 1 == 2 True """} - diff --git a/apps/converter/api.py b/apps/converter/api.py index 8d1239afd2..7e22354b2d 100644 --- a/apps/converter/api.py +++ b/apps/converter/api.py @@ -19,7 +19,7 @@ from .exceptions import OfficeConversionError HASH_FUNCTION = lambda x: hashlib.sha256(x).hexdigest() - + def cache_cleanup(input_filepath, *args, **kwargs): try: os.remove(create_image_cache_filename(input_filepath, *args, **kwargs)) @@ -42,13 +42,13 @@ def convert(input_filepath, output_filepath=None, cleanup_files=False, mimetype= rotation = kwargs.get('rotation', DEFAULT_ROTATION) page = kwargs.get('page', DEFAULT_PAGE_NUMBER) transformations = kwargs.get('transformations', []) - + if transformations is None: transformations = [] if output_filepath is None: output_filepath = create_image_cache_filename(input_filepath, *args, **kwargs) - + if os.path.exists(output_filepath): return output_filepath @@ -79,7 +79,7 @@ def convert(input_filepath, output_filepath=None, cleanup_files=False, mimetype= 'transformation': TRANSFORMATION_ZOOM, 'arguments': {'percent': zoom} } - ) + ) if rotation != 0 and rotation != 360: transformations.append( @@ -87,7 +87,7 @@ def convert(input_filepath, output_filepath=None, cleanup_files=False, mimetype= 'transformation': TRANSFORMATION_ROTATE, 'arguments': {'degrees': rotation} } - ) + ) try: backend.convert_file(input_filepath=input_filepath, output_filepath=output_filepath, transformations=transformations, page=page, file_format=file_format, mimetype=mimetype) @@ -107,7 +107,7 @@ def get_page_count(input_filepath): except OfficeConversionError: raise UnknownFileFormat('office converter exception') - + return backend.get_page_count(input_filepath) ''' @@ -127,8 +127,7 @@ def get_available_transformations_choices(): result.append([transformation, transformation_template]) return result - - + + def get_format_list(): return [(format, FILE_FORMATS.get(format, u'')) for format in backend.get_format_list()] - diff --git a/apps/converter/exceptions.py b/apps/converter/exceptions.py index 74b13a7c56..1423d38002 100644 --- a/apps/converter/exceptions.py +++ b/apps/converter/exceptions.py @@ -1,29 +1,29 @@ class ConvertError(Exception): - ''' + """ Base exception for all coverter app exceptions - ''' + """ pass class UnknownFileFormat(ConvertError): - ''' + """ Raised when the converter backend can't understand a file - ''' + """ pass class IdentifyError(ConvertError): - ''' + """ Raised by the graphcismagick and imagemagics identify program - ''' + """ pass class UnkownConvertError(ConvertError): - ''' + """ Raised when an error is found but there is no disernible way to identify the kind of error - ''' + """ pass diff --git a/apps/converter/literals.py b/apps/converter/literals.py index 14df18106d..aa66218874 100644 --- a/apps/converter/literals.py +++ b/apps/converter/literals.py @@ -53,7 +53,7 @@ FILE_FORMATS = { '8BIN': _(u'Photoshop resource format'), '8BIMTEXT': _(u'Photoshop resource text format'), '8BIMWTEXT': _(u'Photoshop resource wide text format'), - + 'A': _(u'Raw alpha samples'), 'AI': _(u'Adobe Illustrator CS2'), 'APP1': _(u'Raw application information'), @@ -62,7 +62,7 @@ FILE_FORMATS = { 'ARW': _(u'Sony Alpha DSLR Raw Image Format'), 'AVI': _(u'Microsoft Audio/Visual Interleaved'), 'AVS': _(u'AVS X image'), - + 'B': _(u'Raw blue samples'), 'BGR': _(u'Raw blue, green, and red samples'), 'BGRA': _(u'Raw blue, green, red and alpha samples'), @@ -95,7 +95,7 @@ FILE_FORMATS = { 'DJVU': _(u'Déjà vu'), 'DNG': _(u'Adobe Digital Negative'), 'DOT': _(u'Graphviz'), - 'DPX': _(u'SMPTE 268M-2003 (DPX 2.0)'), + 'DPX': _(u'SMPTE 268M-2003 (DPX 2.0)'), 'EPDF': _(u'Encapsulated Portable Document Format'), 'EPI': _(u'Adobe Encapsulated PostScript Interchange format'), @@ -110,7 +110,7 @@ FILE_FORMATS = { 'ERF': _(u'Epson RAW Format'), 'EXIF': _(u'Exif digital camera binary data'), 'EXR': _(u'High Dynamic-range (HDR)'), - + 'FAX': _(u'Group 3 FAX (Not TIFF Group3 FAX)'), 'FLI': _(u'Autodesk FLI animations file'), 'FLC': _(u'Autodesk FLC animations file'), diff --git a/apps/converter/office_converter.py b/apps/converter/office_converter.py index 8df298ceed..07c7a28f62 100644 --- a/apps/converter/office_converter.py +++ b/apps/converter/office_converter.py @@ -13,14 +13,14 @@ from .exceptions import (OfficeConversionError, OfficeBackendError, UnknownFileFormat) CACHED_FILE_SUFFIX = u'_office_converter' - + CONVERTER_OFFICE_FILE_MIMETYPES = [ u'application/msword', u'application/mswrite', u'application/mspowerpoint', u'application/msexcel', u'application/vnd.ms-excel', - u'application/vnd.ms-powerpoint', + u'application/vnd.ms-powerpoint', u'application/vnd.oasis.opendocument.presentation', u'application/vnd.oasis.opendocument.text', u'application/vnd.openxmlformats-officedocument.wordprocessingml.document', @@ -43,7 +43,7 @@ class OfficeConverter(object): self.exists = False self.mimetype = None self.encoding = None - + def mimetypes(self): return CONVERTER_OFFICE_FILE_MIMETYPES @@ -51,7 +51,7 @@ class OfficeConverter(object): self.exists = False self.mimetype = None self.encoding = None - + self.input_filepath = input_filepath # Make sure file is of a known office format @@ -71,13 +71,13 @@ class OfficeConverter(object): except OfficeBackendError, msg: # convert exception so that at least the mime type icon is displayed raise UnknownFileFormat(msg) - + def __unicode__(self): return getattr(self, 'output_filepath', None) - + def __str__(self): return str(self.__unicode__()) - + class OfficeConverterBackendUnoconv(object): def __init__(self): @@ -91,7 +91,7 @@ class OfficeConverterBackendUnoconv(object): ''' self.input_filepath = input_filepath self.output_filepath = output_filepath - + command = [] command.append(self.unoconv_path) diff --git a/apps/converter/tests.py b/apps/converter/tests.py index 2247054b35..3b31148896 100644 --- a/apps/converter/tests.py +++ b/apps/converter/tests.py @@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2. >>> 1 + 1 == 2 True """} - diff --git a/apps/django_gpg/api.py b/apps/django_gpg/api.py index f4aad2fa63..7e188f8d4c 100644 --- a/apps/django_gpg/api.py +++ b/apps/django_gpg/api.py @@ -157,8 +157,8 @@ class GPG(object): # If not, try open it. return open(file_input, 'rb') else: - return file_input - + return file_input + def __init__(self, binary_path=None, home=None, keyring=None, keyservers=None): kwargs = {} if binary_path: @@ -198,9 +198,9 @@ class GPG(object): ''' Verify the signature of a file. ''' - + input_descriptor = GPG.get_descriptor(file_input) - + if detached_signature: # Save the original data and invert the argument order # Signature first, file second @@ -212,10 +212,10 @@ class GPG(object): verify = self.gpg.verify_file(detached_signature, data_filename=filename) else: verify = self.gpg.verify_file(input_descriptor) - + if close_descriptor: input_descriptor.close() - + if verify: return verify #elif getattr(verify, 'status', None) == 'no public key': @@ -240,7 +240,7 @@ class GPG(object): overrided if it already exists), if no destination file name is provided the signature is returned. ''' - + kwargs = {} kwargs['clearsign'] = clearsign @@ -287,12 +287,12 @@ class GPG(object): result = self.gpg.decrypt_file(input_descriptor) if close_descriptor: input_descriptor.close() - + if not result.status: raise GPGDecryptionError('Unable to decrypt file') return result - + def create_key(self, *args, **kwargs): if kwargs.get('passphrase') == u'': kwargs.pop('passphrase') @@ -319,7 +319,7 @@ class GPG(object): return Key.get(self, import_result.fingerprints[0], secret=False) raise KeyFetchingError - + def query(self, term): results = {} for keyserver in self.keyservers: @@ -331,14 +331,14 @@ class GPG(object): results[key.keyid] = key except: pass - + return results.values() - + def import_key(self, key_data): import_result = self.gpg.import_keys(key_data) logger.debug('import_result: %s' % import_result) - + if import_result: return Key.get(self, import_result.fingerprints[0], secret=False) - raise KeyImportError + raise KeyImportError diff --git a/apps/django_gpg/models.py b/apps/django_gpg/models.py index 8b13789179..e69de29bb2 100644 --- a/apps/django_gpg/models.py +++ b/apps/django_gpg/models.py @@ -1 +0,0 @@ - diff --git a/apps/django_gpg/views.py b/apps/django_gpg/views.py index af3c52ef7c..e3dcd4981e 100644 --- a/apps/django_gpg/views.py +++ b/apps/django_gpg/views.py @@ -10,7 +10,7 @@ from django.contrib import messages from permissions.models import Permission from common.utils import (urlquote, encapsulate) - + from .api import Key, SIGNATURE_STATES from .runtime import gpg from .exceptions import (GPGVerificationError, KeyFetchingError, @@ -24,7 +24,7 @@ logger = logging.getLogger(__name__) def key_receive(request, key_id): Permission.objects.check_permissions(request.user, [PERMISSION_KEY_RECEIVE]) - + 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', '/'))) @@ -48,13 +48,13 @@ def key_receive(request, key_id): 'next': next, 'previous': previous, 'submit_method': 'GET', - + }, context_instance=RequestContext(request)) - + def key_list(request, secret=True): Permission.objects.check_permissions(request.user, [PERMISSION_KEY_VIEW]) - + if secret: object_list = Key.get_all(gpg, secret=True) title = _(u'private keys') @@ -81,7 +81,7 @@ def key_list(request, secret=True): def key_delete(request, fingerprint, key_type): Permission.objects.check_permissions(request.user, [PERMISSION_KEY_DELETE]) - + secret = key_type == 'sec' key = Key.get(gpg, fingerprint, secret=secret) @@ -110,7 +110,7 @@ def key_delete(request, fingerprint, key_type): def key_query(request): Permission.objects.check_permissions(request.user, [PERMISSION_KEYSERVER_QUERY]) - + subtemplates_list = [] term = request.GET.get('term') @@ -124,8 +124,8 @@ def key_query(request): 'submit_method': 'GET', }, } - ) - + ) + if term: results = gpg.query(term) subtemplates_list.append( @@ -147,36 +147,36 @@ def key_query(request): { 'name': _(u'creation date'), 'attribute': 'creation_date', - }, + }, { 'name': _(u'disabled'), 'attribute': 'disabled', - }, + }, { 'name': _(u'expiration date'), 'attribute': 'expiration_date', - }, + }, { 'name': _(u'expired'), 'attribute': 'expired', - }, + }, { 'name': _(u'length'), 'attribute': 'key_length', - }, + }, { 'name': _(u'revoked'), 'attribute': 'revoked', - }, - + }, + { 'name': _(u'Identifies'), 'attribute': encapsulate(lambda x: u', '.join([identity.uid for identity in x.identities])), }, - ] + ] }, } - ) + ) return render_to_response('generic_form.html', { 'subtemplates_list': subtemplates_list, diff --git a/apps/document_indexing/tests.py b/apps/document_indexing/tests.py index 2247054b35..3b31148896 100644 --- a/apps/document_indexing/tests.py +++ b/apps/document_indexing/tests.py @@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2. >>> 1 + 1 == 2 True """} - diff --git a/apps/document_signatures/models.py b/apps/document_signatures/models.py index 4b71af2f71..7ae215f675 100644 --- a/apps/document_signatures/models.py +++ b/apps/document_signatures/models.py @@ -14,9 +14,9 @@ logger = logging.getLogger(__name__) class DocumentVersionSignature(models.Model): - ''' + """ Model that describes a document version signature properties - ''' + """ document_version = models.ForeignKey(DocumentVersion, verbose_name=_(u'document version'), editable=False) signature_file = models.FileField(blank=True, null=True, upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND(), verbose_name=_(u'signature file'), editable=False) has_embedded_signature = models.BooleanField(default=False, verbose_name=_(u'has embedded signature'), editable=False) diff --git a/apps/documents/admin.py b/apps/documents/admin.py index 40ac5d0a2b..91ee0ac22c 100644 --- a/apps/documents/admin.py +++ b/apps/documents/admin.py @@ -25,8 +25,8 @@ class DocumentVersionInline(admin.StackedInline): #inlines = [ # DocumentPageInline, #] - - + + class DocumentTypeFilenameInline(admin.StackedInline): model = DocumentTypeFilename extra = 1 diff --git a/apps/folders/forms.py b/apps/folders/forms.py index a17c3a3d27..d76da47f3d 100644 --- a/apps/folders/forms.py +++ b/apps/folders/forms.py @@ -32,7 +32,7 @@ class FolderListForm(forms.Form): Permission.objects.check_permissions(user, [PERMISSION_FOLDER_VIEW]) except PermissionDenied: queryset = AccessEntry.objects.filter_objects_by_access(PERMISSION_FOLDER_VIEW, user, queryset) - + self.fields['folder'] = forms.ModelChoiceField( queryset=queryset, label=_(u'Folder')) diff --git a/apps/folders/models.py b/apps/folders/models.py index c032780241..e58db8ab91 100644 --- a/apps/folders/models.py +++ b/apps/folders/models.py @@ -27,11 +27,11 @@ class Folder(models.Model): @property def documents(self): return [folder_document.document for folder_document in self.folderdocument_set.all()] - + def remove_document(self, document): folder_document = self.folderdocument_set.get(document=document) folder_document.delete() - + def add_document(self, document): folder_document, created = FolderDocument.objects.get_or_create(folder=self, document=document) return created diff --git a/apps/folders/permissions.py b/apps/folders/permissions.py index 6077438f42..5538a70214 100644 --- a/apps/folders/permissions.py +++ b/apps/folders/permissions.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ diff --git a/apps/folders/tests.py b/apps/folders/tests.py index 2247054b35..3b31148896 100644 --- a/apps/folders/tests.py +++ b/apps/folders/tests.py @@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2. >>> 1 + 1 == 2 True """} - diff --git a/apps/folders/urls.py b/apps/folders/urls.py index 0e0cf0d5ad..9f35d24c69 100644 --- a/apps/folders/urls.py +++ b/apps/folders/urls.py @@ -11,6 +11,6 @@ urlpatterns = patterns('folders.views', url(r'^document/(?P\d+)/folder/add/$', 'folder_add_document', (), 'folder_add_document'), url(r'^document/(?P\d+)/folder/list/$', 'document_folder_list', (), 'document_folder_list'), - + url(r'^(?P\d+)/acl/list/$', 'folder_acl_list', (), 'folder_acl_list'), ) diff --git a/apps/folders/views.py b/apps/folders/views.py index b604f00d8b..0bd85d2790 100644 --- a/apps/folders/views.py +++ b/apps/folders/views.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import import logging @@ -49,8 +49,8 @@ def folder_list(request, queryset=None, extra_context=None): queryset = AccessEntry.objects.filter_objects_by_access(PERMISSION_FOLDER_VIEW, request.user, queryset) context['object_list'] = queryset - - return render_to_response('generic_list.html', + + return render_to_response('generic_list.html', context, context_instance=RequestContext(request) ) @@ -58,7 +58,7 @@ def folder_list(request, queryset=None, extra_context=None): def folder_create(request): Permission.objects.check_permissions(request.user, [PERMISSION_FOLDER_CREATE]) - + if request.method == 'POST': form = FolderForm(request.POST) if form.is_valid(): @@ -157,9 +157,9 @@ def folder_view(request, folder_id): 'hide_links': True, 'multi_select_as_buttons': True, 'object': folder, - 'object_name': _(u'folder'), + 'object_name': _(u'folder'), } - + return document_list( request, object_list=folder.documents, @@ -193,14 +193,13 @@ def folder_add_document(request, document_id): else: form = FolderListForm(user=request.user) - return render_to_response('generic_form.html', { 'title': _(u'add document "%s" to a folder') % document, 'form': form, 'object': document, 'next': next, }, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def document_folder_list(request, document_id): diff --git a/apps/linking/__init__.py b/apps/linking/__init__.py index 0d827f3e48..e45e80a496 100644 --- a/apps/linking/__init__.py +++ b/apps/linking/__init__.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ diff --git a/apps/linking/admin.py b/apps/linking/admin.py index 84f13692f5..2116114693 100644 --- a/apps/linking/admin.py +++ b/apps/linking/admin.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django.contrib import admin diff --git a/apps/linking/forms.py b/apps/linking/forms.py index 5cdb6be1f9..53c9639f53 100644 --- a/apps/linking/forms.py +++ b/apps/linking/forms.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django import forms from django.utils.translation import ugettext_lazy as _ @@ -18,7 +18,7 @@ class SmartLinkForm(forms.ModelForm): class Meta: model = SmartLink - + class SmartLinkConditionForm(forms.ModelForm): class Meta: model = SmartLinkCondition @@ -56,7 +56,7 @@ class SmartLinkImageWidget(forms.widgets.Widget): output.append(u'%s' % (reverse('document_view_simple', args=[document.pk]), ugettext(u'Select'))) output.append(u'') output.append(u'') - + output.append(u'') output.append( u'
%s' % @@ -70,9 +70,9 @@ class SmartLinkInstanceForm(forms.Form): smart_link_instances = kwargs.pop('smart_link_instances', None) links = kwargs.pop('links', None) current_document = kwargs.pop('current_document', None) - + super(SmartLinkInstanceForm, self).__init__(*args, **kwargs) - + for smart_link_instance, data in smart_link_instances.items(): self.fields['preview-%s' % smart_link_instance] = forms.CharField( widget=SmartLinkImageWidget(), diff --git a/apps/linking/managers.py b/apps/linking/managers.py index bb6dcba1c5..4583b646ad 100644 --- a/apps/linking/managers.py +++ b/apps/linking/managers.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django.db import models from django.db.models import Q diff --git a/apps/linking/models.py b/apps/linking/models.py index 2c75642c9e..0af9522e77 100644 --- a/apps/linking/models.py +++ b/apps/linking/models.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django.db import models from django.utils.translation import ugettext_lazy as _ diff --git a/apps/linking/permissions.py b/apps/linking/permissions.py index c9b889b084..f5e7cc30b7 100644 --- a/apps/linking/permissions.py +++ b/apps/linking/permissions.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ diff --git a/apps/linking/urls.py b/apps/linking/urls.py index cf47c7ca7e..7cb2749d6e 100644 --- a/apps/linking/urls.py +++ b/apps/linking/urls.py @@ -4,12 +4,12 @@ urlpatterns = patterns('linking.views', url(r'^action/$', 'smart_link_action', (), 'smart_link_action'), url(r'^document/(?P\d+)/smart_link/(?P\d+)/$', 'smart_link_instance_view', (), 'smart_link_instance_view'), url(r'^smart/for_document/(?P\d+)/$', 'smart_link_instances_for_document', (), 'smart_link_instances_for_document'), - + url(r'^setup/list/$', 'smart_link_list', (), 'smart_link_list'), url(r'^setup/create/$', 'smart_link_create', (), 'smart_link_create'), url(r'^setup/(?P\d+)/delete/$', 'smart_link_delete', (), 'smart_link_delete'), url(r'^setup/(?P\d+)/edit/$', 'smart_link_edit', (), 'smart_link_edit'), - + url(r'^setup/(?P\d+)/condition/list/$', 'smart_link_condition_list', (), 'smart_link_condition_list'), url(r'^setup/(?P\d+)/condition/create/$', 'smart_link_condition_create', (), 'smart_link_condition_create'), url(r'^setup/smart_link/condition/(?P\d+)/edit/$', 'smart_link_condition_edit', (), 'smart_link_condition_edit'), diff --git a/apps/linking/views.py b/apps/linking/views.py index 0e8a89ccec..07e1d42351 100644 --- a/apps/linking/views.py +++ b/apps/linking/views.py @@ -32,7 +32,7 @@ logger = logging.getLogger(__name__) def smart_link_action(request): #Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_VIEW]) - + action = request.GET.get('action', None) if not action: @@ -45,12 +45,12 @@ def smart_link_action(request): def smart_link_instance_view(request, document_id, smart_link_pk): document = get_object_or_404(Document, pk=document_id) smart_link = get_object_or_404(SmartLink, pk=smart_link_pk) - + try: Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_VIEW]) except PermissionDenied: AccessEntry.objects.check_access(PERMISSION_SMART_LINK_VIEW, request.user, smart_link) - + object_list, errors = SmartLink.objects.get_smart_link_instances_for(document, smart_link) return document_list( @@ -86,7 +86,7 @@ def smart_link_instances_for_document(request, document_id): for key, value in smart_link_instances.items(): if key not in smart_link_instances_keys_filtered: smart_link_instances.pop(key) - + value['documents'] = AccessEntry.objects.filter_objects_by_access(PERMISSION_DOCUMENT_VIEW, request.user, value['documents']) if smart_link_instances: @@ -116,30 +116,30 @@ def smart_link_instances_for_document(request, document_id): 'document': document, 'subtemplates_list': subtemplates_list, }, context_instance=RequestContext(request)) - - + + def smart_link_list(request): qs = SmartLink.objects.all() - + try: Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_VIEW]) except PermissionDenied: qs = AccessEntry.objects.filter_objects_by_access(PERMISSION_SMART_LINK_VIEW, request.user, qs) - - + + return render_to_response('generic_list.html', { 'title': _(u'smart links'), 'object_list': qs, 'extra_columns': [ {'name': _(u'dynamic title'), 'attribute': 'dynamic_title'}, {'name': _(u'enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))}, - ], + ], 'hide_link': True, 'list_object_variable_name': 'smart_link', }, context_instance=RequestContext(request)) - - + + def smart_link_create(request): Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE]) @@ -155,9 +155,9 @@ def smart_link_create(request): return render_to_response('generic_form.html', { 'form': form, 'title': _(u'Create new smart link') - }, context_instance=RequestContext(request)) - - + }, context_instance=RequestContext(request)) + + def smart_link_edit(request, smart_link_pk): smart_link = get_object_or_404(SmartLink, pk=smart_link_pk) @@ -180,16 +180,16 @@ def smart_link_edit(request, smart_link_pk): 'object': smart_link, 'form': form, 'title': _(u'Edit smart link: %s') % smart_link - }, context_instance=RequestContext(request)) - - + }, context_instance=RequestContext(request)) + + def smart_link_delete(request, smart_link_pk): smart_link = get_object_or_404(SmartLink, pk=smart_link_pk) try: Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_DELETE]) except PermissionDenied: - AccessEntry.objects.check_access(PERMISSION_SMART_LINK_DELETE, request.user, smart_link) + AccessEntry.objects.check_access(PERMISSION_SMART_LINK_DELETE, request.user, smart_link) next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', '/'))) previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) @@ -212,26 +212,26 @@ def smart_link_delete(request, smart_link_pk): 'next': next, 'previous': previous, 'form_icon': u'link_delete.png', - }, context_instance=RequestContext(request)) - + }, context_instance=RequestContext(request)) + def smart_link_condition_list(request, smart_link_pk): smart_link = get_object_or_404(SmartLink, pk=smart_link_pk) - + try: Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT]) except PermissionDenied: - AccessEntry.objects.check_accesses([PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT], request.user, smart_link) - + AccessEntry.objects.check_accesses([PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT], request.user, smart_link) + return render_to_response('generic_list.html', { 'title': _(u'conditions for smart link: %s') % smart_link, 'object_list': smart_link.smartlinkcondition_set.all(), 'extra_columns': [ {'name': _(u'enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))}, - ], + ], 'hide_link': True, 'object': smart_link, - 'list_object_variable_name': 'condition', + 'list_object_variable_name': 'condition', }, context_instance=RequestContext(request)) @@ -241,14 +241,14 @@ def smart_link_condition_create(request, smart_link_pk): try: Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT]) except PermissionDenied: - AccessEntry.objects.check_accesses([PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT], request.user, smart_link) + AccessEntry.objects.check_accesses([PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT], request.user, smart_link) if request.method == 'POST': form = SmartLinkConditionForm(request.POST) if form.is_valid(): new_smart_link_condition = form.save(commit=False) new_smart_link_condition.smart_link = smart_link - new_smart_link_condition.save() + new_smart_link_condition.save() messages.success(request, _(u'Smart link condition: "%s" created successfully.') % new_smart_link_condition) return HttpResponseRedirect(reverse('smart_link_condition_list', args=[smart_link.pk])) else: @@ -257,8 +257,8 @@ def smart_link_condition_create(request, smart_link_pk): return render_to_response('generic_form.html', { 'form': form, 'title': _(u'Add new conditions to smart link: "%s"') % smart_link, - 'object': smart_link, - }, context_instance=RequestContext(request)) + 'object': smart_link, + }, context_instance=RequestContext(request)) def smart_link_condition_edit(request, smart_link_condition_pk): @@ -267,7 +267,7 @@ def smart_link_condition_edit(request, smart_link_condition_pk): try: Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT]) except PermissionDenied: - AccessEntry.objects.check_accesses([PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT], request.user, smart_link_condition.smart_link) + AccessEntry.objects.check_accesses([PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT], request.user, smart_link_condition.smart_link) next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', '/'))) previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) @@ -294,8 +294,8 @@ def smart_link_condition_edit(request, smart_link_condition_pk): {'object': 'object', 'name': _(u'smart link')}, {'object': 'condition', 'name': _(u'condition')} ], - - }, context_instance=RequestContext(request)) + + }, context_instance=RequestContext(request)) def smart_link_condition_delete(request, smart_link_condition_pk): @@ -304,7 +304,7 @@ def smart_link_condition_delete(request, smart_link_condition_pk): try: Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT]) except PermissionDenied: - AccessEntry.objects.check_accesses([PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT], request.user, smart_link_condition.smart_link) + AccessEntry.objects.check_accesses([PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT], request.user, smart_link_condition.smart_link) next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', '/'))) previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) @@ -332,7 +332,7 @@ def smart_link_condition_delete(request, smart_link_condition_pk): 'next': next, 'previous': previous, 'form_icon': u'cog_delete.png', - }, context_instance=RequestContext(request)) + }, context_instance=RequestContext(request)) def smart_link_acl_list(request, smart_link_pk): diff --git a/apps/main/__init__.py b/apps/main/__init__.py index 8a502f30f9..80d503ca7e 100644 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -12,7 +12,7 @@ from .conf.settings import SIDE_BAR_SEARCH, DISABLE_HOME_VIEW __author__ = 'Roberto Rosario' __copyright__ = 'Copyright 2011 Roberto Rosario' -__credits__ = ['Roberto Rosario',] +__credits__ = ['Roberto Rosario',] __license__ = 'GPL' __maintainer__ = 'Roberto Rosario' __email__ = 'roberto.rosario.gonzalez@gmail.com' @@ -58,7 +58,7 @@ __version__ = get_version() if 'django.contrib.admin' in settings.INSTALLED_APPS: register_setup(admin_site) - + register_tool(maintenance_menu) register_tool(statistics) register_tool(diagnostics) diff --git a/apps/main/tests.py b/apps/main/tests.py index 2247054b35..3b31148896 100644 --- a/apps/main/tests.py +++ b/apps/main/tests.py @@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2. >>> 1 + 1 == 2 True """} - diff --git a/apps/metadata/__init__.py b/apps/metadata/__init__.py index 099b908216..f52465d568 100644 --- a/apps/metadata/__init__.py +++ b/apps/metadata/__init__.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ diff --git a/apps/metadata/admin.py b/apps/metadata/admin.py index 53ca6f69cd..058d5d0544 100644 --- a/apps/metadata/admin.py +++ b/apps/metadata/admin.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django.contrib import admin diff --git a/apps/metadata/api.py b/apps/metadata/api.py index 3473cf5bd0..60e611e5f6 100644 --- a/apps/metadata/api.py +++ b/apps/metadata/api.py @@ -1,5 +1,5 @@ -'''Metadata handling commonalities''' -from __future__ import absolute_import +"""Metadata handling commonalities""" +from __future__ import absolute_import from urllib import unquote_plus @@ -9,9 +9,9 @@ from .models import DocumentMetadata, MetadataType def decode_metadata_from_url(url_dict): - ''' + """ Parse a URL query string to a list of metadata - ''' + """ metadata_dict = { 'id': {}, 'value': {} @@ -35,19 +35,19 @@ def decode_metadata_from_url(url_dict): def save_metadata_list(metadata_list, document, create=False): - ''' + """ Take a list of metadata dictionaries and associate them to a document - ''' + """ for item in metadata_list: save_metadata(item, document, create) def save_metadata(metadata_dict, document, create=False): - ''' + """ Take a dictionary of metadata type & value and associate it to a document - ''' + """ if create: # Use matched metadata now to create document metadata document_metadata, created = DocumentMetadata.objects.get_or_create( @@ -81,16 +81,16 @@ def save_metadata(metadata_dict, document, create=False): def metadata_repr(metadata_list): - ''' + """ Return a printable representation of a metadata list - ''' + """ return u', '.join(metadata_repr_as_list(metadata_list)) def metadata_repr_as_list(metadata_list): - ''' + """ Turn a list of metadata into a list of printable representations - ''' + """ output = [] for metadata_dict in metadata_list: try: @@ -103,7 +103,7 @@ def metadata_repr_as_list(metadata_list): def get_metadata_string(document): - ''' + """ Return a formated representation of a document's metadata values - ''' + """ return u', '.join([u'%s - %s' % (metadata.metadata_type, metadata.value) for metadata in DocumentMetadata.objects.filter(document=document).select_related('metadata_type')]) diff --git a/apps/metadata/forms.py b/apps/metadata/forms.py index e319ff3f92..c2e281242c 100644 --- a/apps/metadata/forms.py +++ b/apps/metadata/forms.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django import forms from django.utils.translation import ugettext_lazy as _ diff --git a/apps/metadata/models.py b/apps/metadata/models.py index 1c7fda9249..5e13f65c48 100644 --- a/apps/metadata/models.py +++ b/apps/metadata/models.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -12,9 +12,9 @@ available_functions_string = (_(u' Available functions: %s') % u','.join([u'%s() class MetadataType(models.Model): - ''' + """ Define a type of metadata - ''' + """ name = models.CharField(unique=True, max_length=48, verbose_name=_(u'name'), help_text=_(u'Do not use python reserved words, or spaces.')) title = models.CharField(max_length=48, verbose_name=_(u'title'), blank=True, null=True) default = models.CharField(max_length=128, blank=True, null=True, @@ -35,9 +35,9 @@ class MetadataType(models.Model): class MetadataSet(models.Model): - ''' + """ Define a group of metadata types - ''' + """ title = models.CharField(max_length=48, verbose_name=_(u'title')) def __unicode__(self): @@ -50,10 +50,10 @@ class MetadataSet(models.Model): class MetadataSetItem(models.Model): - ''' + """ Define the set of metadata that relates to a set or group of metadata fields - ''' + """ metadata_set = models.ForeignKey(MetadataSet, verbose_name=_(u'metadata set')) metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'metadata type')) #required = models.BooleanField(default=True, verbose_name=_(u'required')) @@ -67,10 +67,10 @@ class MetadataSetItem(models.Model): class DocumentMetadata(models.Model): - ''' + """ Link a document to a specific instance of a metadata type with it's current value - ''' + """ document = models.ForeignKey(Document, verbose_name=_(u'document')) metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'type')) value = models.CharField(max_length=256, blank=True, verbose_name=_(u'value'), db_index=True) @@ -84,10 +84,10 @@ class DocumentMetadata(models.Model): class DocumentTypeDefaults(models.Model): - ''' + """ Default preselected metadata types and metadata set per document type - ''' + """ document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type')) default_metadata_sets = models.ManyToManyField(MetadataSet, blank=True, verbose_name=_(u'default metadata sets')) default_metadata = models.ManyToManyField(MetadataType, blank=True, verbose_name=_(u'default metadata')) diff --git a/apps/metadata/permissions.py b/apps/metadata/permissions.py index 5ed8f9cb43..9f6ff38a76 100644 --- a/apps/metadata/permissions.py +++ b/apps/metadata/permissions.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ diff --git a/apps/metadata/tests.py b/apps/metadata/tests.py index 2247054b35..3b31148896 100644 --- a/apps/metadata/tests.py +++ b/apps/metadata/tests.py @@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2. >>> 1 + 1 == 2 True """} - diff --git a/apps/metadata/views.py b/apps/metadata/views.py index 6f570beed8..6c66baaf4d 100644 --- a/apps/metadata/views.py +++ b/apps/metadata/views.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from django.shortcuts import render_to_response from django.template import RequestContext @@ -46,10 +46,10 @@ def metadata_edit(request, document_id=None, document_id_list=None): Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_DOCUMENT_EDIT]) except PermissionDenied: documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_METADATA_DOCUMENT_EDIT, request.user, documents) - + if not documents: messages.error(request, _(u'Must provide at least one document.')) - return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) post_action_redirect = reverse('document_list_recent') @@ -141,7 +141,7 @@ def metadata_add(request, document_id=None, document_id_list=None): if not documents: messages.error(request, _(u'Must provide at least one document.')) - return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) for document in documents: RecentDocument.objects.add_document_for_user(request.user, document) @@ -205,12 +205,12 @@ def metadata_remove(request, document_id=None, document_id_list=None): elif document_id_list: documents = [get_object_or_404(Document, pk=document_id) for document_id in document_id_list.split(',')] - + try: Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_DOCUMENT_REMOVE]) except PermissionDenied: documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_METADATA_DOCUMENT_REMOVE, request.user, documents) - + if not documents: messages.error(request, _(u'Must provide at least one document.')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) @@ -304,7 +304,7 @@ def metadata_view(request, document_id): 'hide_link': True, 'object': document, }, context_instance=RequestContext(request)) - + # Setup views def setup_metadata_type_list(request): @@ -323,12 +323,12 @@ def setup_metadata_type_list(request): } return render_to_response('generic_list.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def setup_metadata_type_edit(request, metadatatype_id): Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_EDIT]) - + metadata_type = get_object_or_404(MetadataType, pk=metadatatype_id) if request.method == 'POST': @@ -351,12 +351,12 @@ def setup_metadata_type_edit(request, metadatatype_id): 'object': metadata_type, 'object_name': _(u'metadata type'), }, - context_instance=RequestContext(request)) - - + context_instance=RequestContext(request)) + + def setup_metadata_type_create(request): Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_CREATE]) - + if request.method == 'POST': form = MetadataTypeForm(request.POST) if form.is_valid(): @@ -375,7 +375,7 @@ def setup_metadata_type_create(request): def setup_metadata_type_delete(request, metadatatype_id): Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_DELETE]) - + metadata_type = get_object_or_404(MetadataType, pk=metadatatype_id) post_action_redirect = reverse('setup_metadata_type_list') @@ -423,7 +423,7 @@ def setup_metadata_set_list(request): } return render_to_response('generic_list.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def get_set_members(metadata_set): @@ -471,7 +471,7 @@ def setup_metadata_set_edit(request, metadata_set_id): def setup_metadata_set_create(request): Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_SET_CREATE]) - + if request.method == 'POST': form = MetadataSetForm(request.POST) if form.is_valid(): @@ -490,7 +490,7 @@ def setup_metadata_set_create(request): def setup_metadata_set_delete(request, metadata_set_id): Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_SET_DELETE]) - + metadata_set = get_object_or_404(MetadataSet, pk=metadata_set_id) post_action_redirect = reverse('setup_metadata_set_list') @@ -566,7 +566,7 @@ def setup_document_type_metadata(request, document_type_id): # Initialize defaults DocumentTypeDefaults.objects.get_or_create(document_type=document_type) - + return assign_remove( request, left_list=lambda: generate_choices_w_labels(get_document_type_metadata_non_members(document_type)), diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index c2f2358039..ac2f29ce08 100644 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -21,7 +21,7 @@ from .models import DocumentQueue, QueueTransformation from .tasks import task_process_document_queues from .permissions import (PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_DOCUMENT_DELETE, PERMISSION_OCR_QUEUE_ENABLE_DISABLE, - PERMISSION_OCR_CLEAN_ALL_PAGES, PERMISSION_OCR_QUEUE_EDIT) + PERMISSION_OCR_CLEAN_ALL_PAGES) logger = logging.getLogger(__name__) diff --git a/apps/ocr/tasks.py b/apps/ocr/tasks.py index f042c51460..faab0df58c 100644 --- a/apps/ocr/tasks.py +++ b/apps/ocr/tasks.py @@ -40,7 +40,7 @@ def task_process_queue_document(queue_document_id): queue_document.state = QUEUEDOCUMENT_STATE_ERROR queue_document.result = e queue_document.save() - + lock.release() except LockError: logger.debug('unable to obtain lock') diff --git a/apps/ocr/tests.py b/apps/ocr/tests.py index 2247054b35..3b31148896 100644 --- a/apps/ocr/tests.py +++ b/apps/ocr/tests.py @@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2. >>> 1 + 1 == 2 True """} - diff --git a/apps/ocr/views.py b/apps/ocr/views.py index be640952b4..52e0fc9eb4 100644 --- a/apps/ocr/views.py +++ b/apps/ocr/views.py @@ -123,9 +123,9 @@ def queue_document_multiple_delete(request): def submit_document_multiple(request): for item_id in request.GET.get('id_list', '').split(','): submit_document(request, item_id) - + return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) - + def submit_document(request, document_id): document = get_object_or_404(Document, pk=document_id) @@ -134,7 +134,7 @@ def submit_document(request, document_id): Permission.objects.check_permissions(request.user, [PERMISSION_OCR_DOCUMENT]) except PermissionDenied: AccessEntry.objects.check_access(PERMISSION_OCR_DOCUMENT, request.user, document) - + return submit_document_to_queue(request, document=document, post_submit_redirect=request.META.get('HTTP_REFERER', '/')) diff --git a/apps/permissions/api.py b/apps/permissions/api.py index 8b13789179..e69de29bb2 100644 --- a/apps/permissions/api.py +++ b/apps/permissions/api.py @@ -1 +0,0 @@ - diff --git a/apps/permissions/models.py b/apps/permissions/models.py index b21cdbf7ae..f59215b472 100644 --- a/apps/permissions/models.py +++ b/apps/permissions/models.py @@ -13,7 +13,7 @@ from django.core.exceptions import PermissionDenied from common.models import AnonymousUserSingleton from .managers import (RoleMemberManager, StoredPermissionManager) - + logger = logging.getLogger(__name__) @@ -21,7 +21,7 @@ class PermissionNamespace(object): def __init__(self, name, label): self.name = name self.label = label - + def __unicode__(self): return unicode(self.label) @@ -29,17 +29,17 @@ class PermissionNamespace(object): class PermissionDoesNotExists(Exception): pass - + class PermissionManager(object): _permissions = {} DoesNotExist = PermissionDoesNotExists() - + @classmethod def register(cls, namespace, name, label): permission = Permission(namespace, name, label) cls._permissions[permission.uuid] = permission return permission - + @classmethod def check_permissions(cls, requester, permission_list): for permission in permission_list: @@ -49,11 +49,11 @@ class PermissionManager(object): logger.debug('no permission') raise PermissionDenied(ugettext(u'Insufficient permissions.')) - + @classmethod def get_for_holder(cls, holder): return StoredPermission.objects.get_for_holder(holder) - + @classmethod def all(cls): # Return sorted permisions by namespace.name @@ -69,21 +69,21 @@ class PermissionManager(object): return cls._permissions[get_dict['pk']].get_stored_permission() except KeyError: raise Permission.DoesNotExist - - + + def __init__(self, model): self.model = model - + class Permission(object): DoesNotExist = PermissionDoesNotExists - + def __init__(self, namespace, name, label): self.namespace = namespace self.name = name self.label = label self.pk = self.uuid - + def __unicode__(self): return unicode(self.label) @@ -93,7 +93,7 @@ class Permission(object): @property def uuid(self): return u'%s.%s' % (self.namespace.name, self.name) - + @property def stored_permission(self): return self.get_stored_permission() @@ -107,17 +107,17 @@ class Permission(object): stored_permission.save() stored_permission.volatile_permission = self return stored_permission - + def requester_has_this(self, requester): stored_permission = self.get_stored_permission() return stored_permission.requester_has_this(requester) def save(self, *args, **kwargs): return self.get_stored_permission() - + Permission.objects = PermissionManager(Permission) Permission._default_manager = Permission.objects - + class StoredPermission(models.Model): namespace = models.CharField(max_length=64, verbose_name=_(u'namespace')) @@ -126,15 +126,15 @@ class StoredPermission(models.Model): objects = StoredPermissionManager() class Meta: - ordering = ('namespace', ) + ordering = ('namespace', ) unique_together = ('namespace', 'name') verbose_name = _(u'permission') verbose_name_plural = _(u'permissions') - + def __init__(self, *args, **kwargs): super(StoredPermission, self).__init__(*args, **kwargs) self.volatile_permission = Permission.objects.get({'pk': '%s.%s' % (self.namespace, self.name)}, proxy_only=True) - + def __unicode__(self): return unicode(getattr(self, 'volatile_permission', self.name)) @@ -164,7 +164,7 @@ class StoredPermission(models.Model): for membership in list(set(roles) | set(groups)): if self.requester_has_this(membership): return True - + logger.debug('Fallthru') return False @@ -181,7 +181,7 @@ class StoredPermission(models.Model): return True except PermissionHolder.DoesNotExist: return False - + class PermissionHolder(models.Model): permission = models.ForeignKey(StoredPermission, verbose_name=_(u'permission')) @@ -228,7 +228,7 @@ class Role(models.Model): member = AnonymousUserSingleton.objects.passthru_check(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() + role_member.delete() def members(self, filter_dict=None): filter_dict = filter_dict or {} diff --git a/apps/permissions/runtime.py b/apps/permissions/runtime.py index 8b13789179..e69de29bb2 100644 --- a/apps/permissions/runtime.py +++ b/apps/permissions/runtime.py @@ -1 +0,0 @@ - diff --git a/apps/permissions/tests.py b/apps/permissions/tests.py index 2247054b35..3b31148896 100644 --- a/apps/permissions/tests.py +++ b/apps/permissions/tests.py @@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2. >>> 1 + 1 == 2 True """} - diff --git a/apps/permissions/urls.py b/apps/permissions/urls.py index ed85c44527..a052f1471b 100644 --- a/apps/permissions/urls.py +++ b/apps/permissions/urls.py @@ -7,7 +7,7 @@ urlpatterns = patterns('permissions.views', url(r'^role/(?P\d+)/edit/$', 'role_edit', (), 'role_edit'), url(r'^role/(?P\d+)/delete/$', 'role_delete', (), 'role_delete'), url(r'^role/(?P\d+)/members/$', 'role_members', (), 'role_members'), - + url(r'^permissions/multiple/grant/$', 'permission_grant', (), 'permission_multiple_grant'), url(r'^permissions/multiple/revoke/$', 'permission_revoke', (), 'permission_multiple_revoke'), ) diff --git a/apps/permissions/views.py b/apps/permissions/views.py index a7e2df41fb..4d2230dbb2 100644 --- a/apps/permissions/views.py +++ b/apps/permissions/views.py @@ -24,7 +24,7 @@ from .models import Role, Permission, PermissionHolder, RoleMember from .forms import RoleForm, RoleForm_view from .permissions import (PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT, PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE, - PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE) + PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE) from .widgets import role_permission_link @@ -133,20 +133,20 @@ def permission_grant(request): permission = Permission.objects.get({'pk': item_properties['permission_id']}) except Permission.DoesNotExist: raise Http404 - + ct = get_object_or_404(ContentType, app_label=item_properties['requester_app_label'], model=item_properties['requester_model']) requester_model = ct.model_class() requester = get_object_or_404(requester_model, pk=item_properties['requester_id']) items.append({'requester': requester, 'permission': permission}) - + sorted_items = sorted(items, key=operator.itemgetter('requester')) # Group items by requester groups = itertools.groupby(sorted_items, key=operator.itemgetter('requester')) grouped_items = [(grouper, [permission['permission'] for permission in group_data]) for grouper, group_data in groups] - + # Warning: trial and error black magic ahead title_suffix = _(u' and ').join([_(u'%(permissions)s to %(requester)s') % {'permissions': ', '.join(['"%s"' % unicode(ps) for ps in p]), 'requester': unicode(r)} for r, p in grouped_items]) - + if len(grouped_items) == 1 and len(grouped_items[0][1]) == 1: permissions_label = _(u'permission') else: @@ -174,13 +174,13 @@ def permission_grant(request): 'permissions_label': permissions_label, 'title_suffix': title_suffix, } - + if len(grouped_items) == 1: context['object'] = grouped_items[0][0] return render_to_response('generic_confirm.html', context, context_instance=RequestContext(request)) - + def permission_revoke(request): Permission.objects.check_permissions(request.user, [PERMISSION_PERMISSION_REVOKE]) @@ -197,20 +197,20 @@ def permission_revoke(request): permission = Permission.objects.get({'pk': item_properties['permission_id']}) except Permission.DoesNotExist: raise Http404 - + ct = get_object_or_404(ContentType, app_label=item_properties['requester_app_label'], model=item_properties['requester_model']) requester_model = ct.model_class() requester = get_object_or_404(requester_model, pk=item_properties['requester_id']) items.append({'requester': requester, 'permission': permission}) - + sorted_items = sorted(items, key=operator.itemgetter('requester')) # Group items by requester groups = itertools.groupby(sorted_items, key=operator.itemgetter('requester')) grouped_items = [(grouper, [permission['permission'] for permission in group_data]) for grouper, group_data in groups] - + # Warning: trial and error black magic ahead title_suffix = _(u' and ').join([_(u'%(permissions)s to %(requester)s') % {'permissions': ', '.join(['"%s"' % unicode(ps) for ps in p]), 'requester': unicode(r)} for r, p in grouped_items]) - + if len(grouped_items) == 1 and len(grouped_items[0][1]) == 1: permissions_label = _(u'permission') else: @@ -238,7 +238,7 @@ def permission_revoke(request): 'permissions_label': permissions_label, 'title_suffix': title_suffix, } - + if len(grouped_items) == 1: context['object'] = grouped_items[0][0] @@ -259,7 +259,7 @@ def get_role_members(role, separate=False): user_ct = ContentType.objects.get(model='user') group_ct = ContentType.objects.get(model='group') anonymous = ContentType.objects.get(model='anonymoususersingleton') - + users = role.members(filter_dict={'member_type': user_ct}) groups = role.members(filter_dict={'member_type': group_ct}) anonymous = role.members(filter_dict={'member_type': anonymous}) @@ -268,34 +268,34 @@ def get_role_members(role, separate=False): return users, groups, anonymous else: members = [] - + if users: members.append((_(u'Users'), _as_choice_list(list(users)))) - + if groups: members.append((_(u'Groups'), _as_choice_list(list(groups)))) if anonymous: members.append((_(u'Special'), _as_choice_list(list(anonymous)))) - return members + return members def get_non_role_members(role): #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) super_users = User.objects.filter(is_superuser=True) - + users = set(User.objects.all()) - set(member_users) - set(staff_users) - set(super_users) groups = set(Group.objects.all()) - set(member_groups) anonymous = set([AnonymousUserSingleton.objects.get()]) - set(member_anonymous) - + non_members = [] if users: non_members.append((_(u'Users'), _as_choice_list(list(users)))) - + if groups: non_members.append((_(u'Groups'), _as_choice_list(list(groups)))) @@ -303,7 +303,7 @@ def get_non_role_members(role): non_members.append((_(u'Special'), _as_choice_list(list(anonymous)))) #non_holder_list.append((_(u'Special'), _as_choice_list([AnonymousUserSingleton.objects.get()]))) - + return non_members diff --git a/apps/smart_settings/__init__.py b/apps/smart_settings/__init__.py index 5926e68754..e28aa67add 100644 --- a/apps/smart_settings/__init__.py +++ b/apps/smart_settings/__init__.py @@ -2,6 +2,7 @@ from django.utils.translation import ugettext_lazy as _ from project_setup.api import register_setup + def is_superuser(context): return context['request'].user.is_staff or context['request'].user.is_superuser diff --git a/apps/smart_settings/tests.py b/apps/smart_settings/tests.py index 2247054b35..3b31148896 100644 --- a/apps/smart_settings/tests.py +++ b/apps/smart_settings/tests.py @@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2. >>> 1 + 1 == 2 True """} - diff --git a/apps/sources/tests.py b/apps/sources/tests.py index 2247054b35..3b31148896 100644 --- a/apps/sources/tests.py +++ b/apps/sources/tests.py @@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2. >>> 1 + 1 == 2 True """} - diff --git a/apps/sources/views.py b/apps/sources/views.py index 4ab34935a4..f116dfad64 100644 --- a/apps/sources/views.py +++ b/apps/sources/views.py @@ -85,7 +85,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_NEW_VERSION]) except PermissionDenied: AccessEntry.objects.check_access(PERMISSION_DOCUMENT_NEW_VERSION, request.user, document) - + results = get_active_tab_links(document) else: Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) @@ -149,7 +149,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No expand = False new_filename = get_form_filename(form) - + web_form.upload_file(request.FILES['file'], new_filename, use_file_name=form.cleaned_data.get('use_file_name', False), document_type=document_type, @@ -157,7 +157,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No metadata_dict_list=decode_metadata_from_url(request.GET), user=request.user, document=document, - new_version_data=form.cleaned_data.get('new_version_data') + new_version_data=form.cleaned_data.get('new_version_data') ) if document: messages.success(request, _(u'Document version uploaded successfully.')) @@ -180,7 +180,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No title = _(u'upload a new version from source: %s') % web_form.title else: title = _(u'upload a local document from source: %s') % web_form.title - + subtemplates_list.append({ 'name': 'generic_form_subtemplate.html', 'context': { @@ -214,7 +214,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No expand = False new_filename = get_form_filename(form) - + staging_folder.upload_file(staging_file.upload(), new_filename, use_file_name=form.cleaned_data.get('use_file_name', False), document_type=document_type, @@ -222,7 +222,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No metadata_dict_list=decode_metadata_from_url(request.GET), user=request.user, document=document, - new_version_data=form.cleaned_data.get('new_version_data') + new_version_data=form.cleaned_data.get('new_version_data') ) if document: messages.success(request, _(u'Document version from staging file: %s, uploaded successfully.') % staging_file.filename) @@ -258,7 +258,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No title = _(u'upload a new version from staging source: %s') % staging_folder.title else: title = _(u'upload a document from staging source: %s') % staging_folder.title - + subtemplates_list = [ { 'name': 'generic_form_subtemplate.html', @@ -275,7 +275,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No 'hide_link': True, } }, - ] + ] if document: context['object'] = document @@ -290,11 +290,11 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No }, 'upload_interactive': { 'links': results['tab_links'] - } + } } }, }) - + if not document: context.update( { @@ -310,7 +310,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No ], } ) - + return render_to_response('generic_form.html', context, context_instance=RequestContext(request)) @@ -420,12 +420,12 @@ def setup_source_list(request, source_type): } return render_to_response('generic_list.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def setup_source_edit(request, source_type, source_id): Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT]) - + if source_type == SOURCE_CHOICE_WEB_FORM: cls = WebForm form_class = WebFormSetupForm @@ -435,7 +435,7 @@ def setup_source_edit(request, source_type, source_id): elif source_type == SOURCE_CHOICE_WATCH: cls = WatchFolder form_class = WatchFolderSetupForm - + source = get_object_or_404(cls, pk=source_id) next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', '/'))) @@ -477,12 +477,12 @@ def setup_source_delete(request, source_type, source_id): cls = WatchFolder form_icon = u'folder_delete.png' redirect_view = 'setup_watch_folder_list' - + redirect_view = reverse('setup_source_list', args=[source_type]) previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', redirect_view))) source = get_object_or_404(cls, pk=source_id) - + if request.method == 'POST': try: source.delete() @@ -511,7 +511,7 @@ def setup_source_delete(request, source_type, source_id): def setup_source_create(request, source_type): Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_CREATE]) - + if source_type == SOURCE_CHOICE_WEB_FORM: cls = WebForm form_class = WebFormSetupForm @@ -521,7 +521,7 @@ def setup_source_create(request, source_type): elif source_type == SOURCE_CHOICE_WATCH: cls = WatchFolder form_class = WatchFolderSetupForm - + if request.method == 'POST': form = form_class(data=request.POST) if form.is_valid(): @@ -545,7 +545,7 @@ def setup_source_create(request, source_type): def setup_source_transformation_list(request, source_type, source_id): Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT]) - + if source_type == SOURCE_CHOICE_WEB_FORM: cls = WebForm elif source_type == SOURCE_CHOICE_STAGING: @@ -572,12 +572,12 @@ def setup_source_transformation_list(request, source_type, source_id): } return render_to_response('generic_list.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def setup_source_transformation_edit(request, transformation_id): Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT]) - + source_transformation = get_object_or_404(SourceTransformation, pk=transformation_id) redirect_view = reverse('setup_source_transformation_list', args=[source_transformation.content_object.source_type, source_transformation.content_object.pk]) next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', redirect_view))) @@ -605,7 +605,7 @@ def setup_source_transformation_edit(request, transformation_id): ], 'next': next, }, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def setup_source_transformation_delete(request, transformation_id): @@ -632,14 +632,14 @@ def setup_source_transformation_delete(request, transformation_id): 'navigation_object_list': [ {'object': 'source', 'name': _(u'source')}, {'object': 'transformation', 'name': _(u'transformation')} - ], + ], 'title': _(u'Are you sure you wish to delete source transformation "%(transformation)s"') % { 'transformation': source_transformation.get_transformation_display(), }, 'previous': previous, 'form_icon': u'shape_square_delete.png', }, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def setup_source_transformation_create(request, source_type, source_id): @@ -651,11 +651,11 @@ def setup_source_transformation_create(request, source_type, source_id): cls = StagingFolder elif source_type == SOURCE_CHOICE_WATCH: cls = WatchFolder - + source = get_object_or_404(cls, pk=source_id) - + redirect_view = reverse('setup_source_transformation_list', args=[source.source_type, source.pk]) - + if request.method == 'POST': form = SourceTransformationForm_create(request.POST) if form.is_valid(): @@ -669,7 +669,7 @@ def setup_source_transformation_create(request, source_type, source_id): messages.error(request, _(u'Error creating source transformation; %s') % e) else: form = SourceTransformationForm_create() - + return render_to_response('generic_form.html', { 'form': form, 'source': source, diff --git a/apps/tags/forms.py b/apps/tags/forms.py index cd2bead2c2..b10ac68679 100644 --- a/apps/tags/forms.py +++ b/apps/tags/forms.py @@ -18,9 +18,9 @@ logger = logging.getLogger(__name__) class TagForm(forms.Form): - ''' + """ Form to edit an existing tag's properties - ''' + """ name = forms.CharField(label=_(u'Name')) color = forms.ChoiceField(choices=COLOR_CHOICES, label=_(u'Color')) @@ -36,7 +36,7 @@ class TagListForm(forms.Form): Permission.objects.check_permissions(user, [PERMISSION_TAG_VIEW]) except PermissionDenied: queryset = AccessEntry.objects.filter_objects_by_access(PERMISSION_TAG_VIEW, user, queryset) - + self.fields['tag'] = forms.ModelChoiceField( queryset=queryset, label=_(u'Tags')) diff --git a/apps/tags/urls.py b/apps/tags/urls.py index fff26800a8..14c9902303 100644 --- a/apps/tags/urls.py +++ b/apps/tags/urls.py @@ -12,6 +12,6 @@ urlpatterns = patterns('tags.views', url(r'^multiple/remove_from_document/(?P\d+)/$', 'tag_multiple_remove', (), 'tag_multiple_remove'), url(r'^document/(?P\d+)/add/$', 'tag_attach', (), 'tag_attach'), url(r'^document/(?P\d+)/list/$', 'document_tags', (), 'document_tags'), - + url(r'^(?P\d+)/acl/list/$', 'tag_acl_list', (), 'tag_acl_list'), ) diff --git a/apps/tags/views.py b/apps/tags/views.py index 50e8929c10..615c248829 100644 --- a/apps/tags/views.py +++ b/apps/tags/views.py @@ -40,11 +40,11 @@ def tag_create(request): if tag_name in Tag.objects.values_list('name', flat=True): messages.error(request, _(u'Tag already exists.')) return HttpResponseRedirect(previous) - + tag = Tag(name=tag_name) tag.save() TagProperties(tag=tag, color=form.cleaned_data['color']).save() - + messages.success(request, _(u'Tag created succesfully.')) return HttpResponseRedirect(redirect_url) else: @@ -54,7 +54,7 @@ def tag_create(request): 'title': _(u'create tag'), 'form': form, }, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) def tag_attach(request, document_id): @@ -63,7 +63,7 @@ def tag_attach(request, document_id): try: Permission.objects.check_permissions(request.user, [PERMISSION_TAG_ATTACH]) except PermissionDenied: - AccessEntry.objects.check_access(PERMISSION_TAG_ATTACH, request.user, document) + AccessEntry.objects.check_access(PERMISSION_TAG_ATTACH, request.user, document) next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', reverse('document_tags', args=[document.pk])))) @@ -108,7 +108,7 @@ def tag_list(request, queryset=None, extra_context=None): queryset = AccessEntry.objects.filter_objects_by_access(PERMISSION_TAG_VIEW, request.user, queryset) context['object_list'] = queryset - + return render_to_response('generic_list.html', context, context_instance=RequestContext(request) @@ -126,11 +126,11 @@ def tag_delete(request, tag_id=None, tag_id_list=None): else: messages.error(request, _(u'Must provide at least one tag.')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) - + try: Permission.objects.check_permissions(request.user, [PERMISSION_TAG_DELETE]) except PermissionDenied: - tags = AccessEntry.objects.filter_objects_by_access(PERMISSION_TAG_DELETE, request.user, tags) + tags = AccessEntry.objects.filter_objects_by_access(PERMISSION_TAG_DELETE, request.user, tags) 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', '/'))) @@ -178,7 +178,7 @@ def tag_edit(request, tag_id): try: Permission.objects.check_permissions(request.user, [PERMISSION_TAG_EDIT]) except PermissionDenied: - AccessEntry.objects.check_access(PERMISSION_TAG_EDIT, request.user, tag) + AccessEntry.objects.check_access(PERMISSION_TAG_EDIT, request.user, tag) if request.method == 'POST': form = TagForm(request.POST) @@ -227,13 +227,13 @@ def document_tags(request, document_id): Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) except PermissionDenied: AccessEntry.objects.check_access(PERMISSION_DOCUMENT_VIEW, request.user, document) - + context = { 'object': document, 'document': document, 'title': _(u'tags for: %s') % document, } - + return tag_list(request, queryset=document.tags.all(), extra_context=context) @@ -243,7 +243,7 @@ def tag_remove(request, document_id, tag_id=None, tag_id_list=None): try: Permission.objects.check_permissions(request.user, [PERMISSION_TAG_REMOVE]) except PermissionDenied: - AccessEntry.objects.check_access(PERMISSION_TAG_REMOVE, request.user, document) + AccessEntry.objects.check_access(PERMISSION_TAG_REMOVE, request.user, document) post_action_redirect = None diff --git a/apps/tags/widgets.py b/apps/tags/widgets.py index b9dcb0266b..521ad6a1b2 100644 --- a/apps/tags/widgets.py +++ b/apps/tags/widgets.py @@ -3,9 +3,9 @@ from django.utils.safestring import mark_safe def get_tags_inline_widget(document): - ''' + """ A tag widget that includes the total tag count for a given document - ''' + """ tags_template = [] tag_count = document.tags.count() if tag_count: @@ -13,17 +13,17 @@ def get_tags_inline_widget(document): for tag in document.tags.all(): tags_template.append(u'
  • %s
' % (tag.tagproperties_set.get().get_color_code(), tag.name)) - + tags_template.append(u'
') tags_template.append(u'') return mark_safe(u''.join(tags_template)) def get_tags_inline_widget_simple(document): - ''' + """ A tag widget that only displayes the rectangular colored boxes for a given document - ''' + """ tags_template = [] tag_count = document.tags.count()