PEP8 cleanups

This commit is contained in:
Roberto Rosario
2012-01-18 14:37:15 -04:00
parent ad59734460
commit 970cb74d35
62 changed files with 365 additions and 379 deletions

View File

@@ -7,7 +7,7 @@ from project_setup.api import register_setup
from .classes import (AccessHolder, AccessObjectClass, ClassAccessHolder, from .classes import (AccessHolder, AccessObjectClass, ClassAccessHolder,
AccessObject) 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) ACLS_CLASS_EDIT_ACL, ACLS_CLASS_VIEW_ACL)

View File

@@ -1,8 +1,6 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.contrib import admin from django.contrib import admin
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType
from .models import AccessEntry from .models import AccessEntry
@@ -21,5 +19,5 @@ class AccessEntryAdmin(admin.ModelAdmin):
list_display = ('pk', 'holder_object', 'permission', 'content_object') list_display = ('pk', 'holder_object', 'permission', 'content_object')
list_display_links = ('pk',) list_display_links = ('pk',)
model = AccessEntry model = AccessEntry
admin.site.register(AccessEntry, AccessEntryAdmin) admin.site.register(AccessEntry, AccessEntryAdmin)

View File

@@ -12,13 +12,13 @@ from django.core.exceptions import ObjectDoesNotExist
from common.models import AnonymousUserSingleton from common.models import AnonymousUserSingleton
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
_cache = {} _cache = {}
class EncapsulatedObject(object): class EncapsulatedObject(object):
source_object_name = u'source_object' source_object_name = u'source_object'
@classmethod @classmethod
def object_key(cls, app_label=None, model=None, pk=None): def object_key(cls, app_label=None, model=None, pk=None):
if pk: if pk:
@@ -36,7 +36,7 @@ class EncapsulatedObject(object):
@classmethod @classmethod
def set_source_object_name(cls, new_name): def set_source_object_name(cls, new_name):
cls.source_object_name = new_name cls.source_object_name = new_name
#@classmethod #@classmethod
#def encapsulate_list(cls, source_object=None, app_label=None, model=None, pk=None): #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): def encapsulate(cls, source_object):
source_object = AnonymousUserSingleton.objects.passthru_check(source_object) source_object = AnonymousUserSingleton.objects.passthru_check(source_object)
content_type = ContentType.objects.get_for_model(source_object) content_type = ContentType.objects.get_for_model(source_object)
if hasattr(source_object, 'pk'): if hasattr(source_object, 'pk'):
# Object # Object
object_key = cls.object_key(content_type.app_label, content_type.model, source_object.pk) 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: elif len(elements) == 2:
app_label, model = elements[0], elements[1] app_label, model = elements[0], elements[1]
pk = None pk = None
object_key = cls.object_key(*elements) object_key = cls.object_key(*elements)
try: try:
return _cache[object_key] return _cache[object_key]
except KeyError: except KeyError:
@@ -90,9 +90,9 @@ class EncapsulatedObject(object):
raise ObjectDoesNotExist("%s matching query does not exist." % source_object_model_class._meta.object_name) raise ObjectDoesNotExist("%s matching query does not exist." % source_object_model_class._meta.object_name)
else: else:
source_object = source_object_model_class source_object = source_object_model_class
return cls.encapsulate(source_object) return cls.encapsulate(source_object)
def __init__(self, source_object): def __init__(self, source_object):
self.content_type = ContentType.objects.get_for_model(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) self.ct_fullname = '%s.%s' % (self.content_type.app_label, self.content_type.name)
@@ -101,15 +101,15 @@ class EncapsulatedObject(object):
# Class # Class
self.gid = '%s.%s' % (self.content_type.app_label, self.content_type.model) self.gid = '%s.%s' % (self.content_type.app_label, self.content_type.model)
else: else:
# Object # Object
self.gid = '%s.%s.%s' % (self.content_type.app_label, self.content_type.model, source_object.pk) 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) setattr(self, self.__class__.source_object_name, source_object)
def __unicode__(self): def __unicode__(self):
if isinstance(self.source_object, ModelBase): if isinstance(self.source_object, ModelBase):
return capfirst(unicode(self.source_object._meta.verbose_name_plural)) return capfirst(unicode(self.source_object._meta.verbose_name_plural))
elif self.ct_fullname == 'auth.user': elif self.ct_fullname == 'auth.user':
return u'%s %s' % (self.source_object._meta.verbose_name, self.source_object.get_full_name()) return u'%s %s' % (self.source_object._meta.verbose_name, self.source_object.get_full_name())
else: else:
@@ -117,19 +117,19 @@ class EncapsulatedObject(object):
def __repr__(self): def __repr__(self):
return self.__unicode__() return self.__unicode__()
@property @property
def source_object(self): def source_object(self):
return getattr(self, self.__class__.source_object_name, None) return getattr(self, self.__class__.source_object_name, None)
class AccessHolder(EncapsulatedObject): class AccessHolder(EncapsulatedObject):
source_object_name = u'holder_object' source_object_name = u'holder_object'
class AccessObject(EncapsulatedObject): class AccessObject(EncapsulatedObject):
source_object_name = u'obj' source_object_name = u'obj'
class AccessObjectClass(EncapsulatedObject): class AccessObjectClass(EncapsulatedObject):
source_object_name = u'cls' source_object_name = u'cls'

View File

@@ -8,8 +8,10 @@ from django.utils.translation import ugettext
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse
from common.models import AnonymousUserSingleton from common.models import AnonymousUserSingleton
from permissions.models import Permission
from .classes import EncapsulatedObject, AccessHolder, ClassAccessHolder from .classes import EncapsulatedObject, AccessHolder, ClassAccessHolder
@@ -22,14 +24,14 @@ class AccessEntryManager(models.Manager):
return obj.source_object return obj.source_object
else: else:
return obj return obj
def grant(self, permission, actor, obj): def grant(self, permission, actor, obj):
''' '''
Grant a permission (what), (to) an actor, (on) a specific object Grant a permission (what), (to) an actor, (on) a specific object
''' '''
obj = self.source_object(obj) obj = self.source_object(obj)
actor = self.source_object(actor) actor = self.source_object(actor)
access_entry, created = self.model.objects.get_or_create( access_entry, created = self.model.objects.get_or_create(
permission=permission, permission=permission,
holder_type=ContentType.objects.get_for_model(actor), holder_type=ContentType.objects.get_for_model(actor),
@@ -42,7 +44,7 @@ class AccessEntryManager(models.Manager):
def revoke(self, permission, actor, obj): def revoke(self, permission, actor, obj):
''' '''
Revoke a permission (what), (from) an actor, (on) a specific object Revoke a permission (what), (from) an actor, (on) a specific object
''' '''
obj = self.source_object(obj) obj = self.source_object(obj)
actor = self.source_object(actor) actor = self.source_object(actor)
@@ -57,12 +59,12 @@ class AccessEntryManager(models.Manager):
access_entry.delete() access_entry.delete()
return True return True
except self.model.DoesNotExist: except self.model.DoesNotExist:
return False return False
def has_access(self, permission, actor, obj): def has_access(self, permission, actor, obj):
obj = self.source_object(obj) obj = self.source_object(obj)
actor = self.source_object(actor) actor = self.source_object(actor)
if isinstance(actor, User): if isinstance(actor, User):
if actor.is_superuser or actor.is_staff: if actor.is_superuser or actor.is_staff:
return True return True
@@ -80,7 +82,7 @@ class AccessEntryManager(models.Manager):
return True return True
except self.model.DoesNotExist: except self.model.DoesNotExist:
return False return False
def check_access(self, permission, actor, obj): def check_access(self, permission, actor, obj):
obj = self.source_object(obj) obj = self.source_object(obj)
actor = self.source_object(actor) actor = self.source_object(actor)
@@ -89,7 +91,7 @@ class AccessEntryManager(models.Manager):
return True return True
else: else:
raise PermissionDenied(ugettext(u'Insufficient access.')) raise PermissionDenied(ugettext(u'Insufficient access.'))
def check_accesses(self, permission_list, actor, obj): def check_accesses(self, permission_list, actor, obj):
obj = self.source_object(obj) obj = self.source_object(obj)
actor = self.source_object(actor) actor = self.source_object(actor)
@@ -101,7 +103,7 @@ class AccessEntryManager(models.Manager):
def get_allowed_class_objects(self, permission, actor, cls, related=None): def get_allowed_class_objects(self, permission, actor, cls, related=None):
logger.debug('related: %s' % related) logger.debug('related: %s' % related)
actor = AnonymousUserSingleton.objects.passthru_check(actor) actor = AnonymousUserSingleton.objects.passthru_check(actor)
actor_type = ContentType.objects.get_for_model(actor) actor_type = ContentType.objects.get_for_model(actor)
content_type = ContentType.objects.get_for_model(cls) content_type = ContentType.objects.get_for_model(cls)
@@ -122,22 +124,22 @@ class AccessEntryManager(models.Manager):
def get_new_holder_url(self, obj): def get_new_holder_url(self, obj):
content_type = ContentType.objects.get_for_model(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]) return reverse('acl_new_holder_for', args=[content_type.app_label, content_type.model, obj.pk])
def get_holders_for(self, obj): def get_holders_for(self, obj):
content_type = ContentType.objects.get_for_model(obj) content_type = ContentType.objects.get_for_model(obj)
holder_list = [] holder_list = []
for access_entry in self.model.objects.filter(content_type=content_type, object_id=obj.pk): for access_entry in self.model.objects.filter(content_type=content_type, object_id=obj.pk):
entry = AccessHolder.encapsulate(access_entry.holder_object) entry = AccessHolder.encapsulate(access_entry.holder_object)
if entry not in holder_list: if entry not in holder_list:
holder_list.append(entry) holder_list.append(entry)
return holder_list return holder_list
def get_holder_permissions_for(self, obj, actor): def get_holder_permissions_for(self, obj, actor):
logger.debug('obj: %s' % obj) logger.debug('obj: %s' % obj)
logger.debug('actor: %s' % actor) logger.debug('actor: %s' % actor)
if isinstance(actor, User): if isinstance(actor, User):
if actor.is_superuser or actor.is_staff: if actor.is_superuser or actor.is_staff:
return Permission.objects.all() 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): 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('exception_on_empty: %s' % exception_on_empty)
logger.debug('object_list: %s' % object_list) logger.debug('object_list: %s' % object_list)
if isinstance(actor, User): if isinstance(actor, User):
if actor.is_superuser or actor.is_staff: if actor.is_superuser or actor.is_staff:
return object_list return object_list
try: try:
if object_list.count() == 0: if object_list.count() == 0:
return object_list return object_list
@@ -161,15 +163,15 @@ class AccessEntryManager(models.Manager):
# object_list is not a queryset # object_list is not a queryset
if len(object_list) == 0: if len(object_list) == 0:
return object_list return object_list
try: try:
# Try to process as a QuerySet # 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)]) 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) logger.debug('qs: %s' % qs)
if qs.count() == 0 and exception_on_empty == True: if qs.count() == 0 and exception_on_empty == True:
raise PermissionDenied raise PermissionDenied
return qs return qs
except AttributeError: except AttributeError:
# Fallback to a filtered list # Fallback to a filtered list
@@ -190,17 +192,17 @@ class DefaultAccessEntryManager(models.Manager):
holder_list = [] holder_list = []
for access_entry in self.model.objects.filter(content_type=content_type): for access_entry in self.model.objects.filter(content_type=content_type):
entry = ClassAccessHolder.encapsulate(access_entry.holder_object) entry = ClassAccessHolder.encapsulate(access_entry.holder_object)
if entry not in holder_list: if entry not in holder_list:
holder_list.append(entry) holder_list.append(entry)
return holder_list return holder_list
def has_access(self, permission, actor, cls): def has_access(self, permission, actor, cls):
if isinstance(actor, User): if isinstance(actor, User):
if actor.is_superuser or actor.is_staff: if actor.is_superuser or actor.is_staff:
return True return True
try: try:
access_entry = self.model.objects.get( access_entry = self.model.objects.get(
permission=permission.get_stored_permission(), permission=permission.get_stored_permission(),
@@ -227,7 +229,7 @@ class DefaultAccessEntryManager(models.Manager):
def revoke(self, permission, actor, cls): def revoke(self, permission, actor, cls):
''' '''
Revoke a permission (what), (from) an actor, (on) a specific class Revoke a permission (what), (from) an actor, (on) a specific class
''' '''
try: try:
access_entry = self.model.objects.get( access_entry = self.model.objects.get(
permission=permission, permission=permission,
@@ -238,13 +240,13 @@ class DefaultAccessEntryManager(models.Manager):
access_entry.delete() access_entry.delete()
return True return True
except self.model.DoesNotExist: except self.model.DoesNotExist:
return False return False
def get_holder_permissions_for(self, cls, actor): def get_holder_permissions_for(self, cls, actor):
if isinstance(actor, User): if isinstance(actor, User):
if actor.is_superuser or actor.is_staff: if actor.is_superuser or actor.is_staff:
return Permission.objects.all() return Permission.objects.all()
actor_type = ContentType.objects.get_for_model(actor) actor_type = ContentType.objects.get_for_model(actor)
content_type = ContentType.objects.get_for_model(cls) 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)] return [access.permission for access in self.model.objects.filter(content_type=content_type, holder_type=actor_type, holder_id=actor.pk)]

View File

@@ -18,7 +18,7 @@ from .api import get_classes
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class AccessEntry(models.Model): class AccessEntry(models.Model):
""" """
Model that hold the permission, object, actor relationship Model that hold the permission, object, actor relationship
@@ -64,7 +64,7 @@ class DefaultAccessEntry(models.Model):
@classmethod @classmethod
def get_classes(cls): def get_classes(cls):
return [AccessObjectClass.encapsulate(cls) for cls in get_classes()] return [AccessObjectClass.encapsulate(cls) for cls in get_classes()]
permission = models.ForeignKey(StoredPermission, verbose_name=_(u'permission')) permission = models.ForeignKey(StoredPermission, verbose_name=_(u'permission'))
holder_type = models.ForeignKey( holder_type = models.ForeignKey(

View File

@@ -3,7 +3,7 @@ import logging
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.template import (TemplateSyntaxError, Library, from django.template import (TemplateSyntaxError, Library,
Node, Variable, VariableDoesNotExist) Node, Variable, VariableDoesNotExist)
from acls.models import AccessEntry from acls.models import AccessEntry
@@ -33,7 +33,7 @@ class CheckAccessNode(Node):
context[u'access'] = False context[u'access'] = False
logger.debug('no obj, access False') logger.debug('no obj, access False')
return u'' return u''
if not permission_list: if not permission_list:
# There is no permissions list to check against which means # There is no permissions list to check against which means
# this link is available for all # this link is available for all

View File

@@ -5,13 +5,13 @@ urlpatterns = patterns('acls.views',
url(r'^list_for/(?P<app_label>[-\w]+)/(?P<model_name>[-\w]+)/(?P<object_id>\d+)/$', 'acl_list', (), 'acl_list'), url(r'^list_for/(?P<app_label>[-\w]+)/(?P<model_name>[-\w]+)/(?P<object_id>\d+)/$', 'acl_list', (), 'acl_list'),
url(r'^details/(?P<access_object_gid>[.\w]+)/holder/(?P<holder_object_gid>[.\w]+)/$', 'acl_detail', (), 'acl_detail'), url(r'^details/(?P<access_object_gid>[.\w]+)/holder/(?P<holder_object_gid>[.\w]+)/$', 'acl_detail', (), 'acl_detail'),
url(r'^holder/new/(?P<access_object_gid>[.\w]+)/$', 'acl_holder_new', (), 'acl_holder_new'), url(r'^holder/new/(?P<access_object_gid>[.\w]+)/$', 'acl_holder_new', (), 'acl_holder_new'),
url(r'^multiple/grant/$', 'acl_grant', (), 'acl_multiple_grant'), url(r'^multiple/grant/$', 'acl_grant', (), 'acl_multiple_grant'),
url(r'^multiple/revoke/$', 'acl_revoke', (), 'acl_multiple_revoke'), url(r'^multiple/revoke/$', 'acl_revoke', (), 'acl_multiple_revoke'),
url(r'^class/$', 'acl_setup_valid_classes', (), 'acl_setup_valid_classes'), url(r'^class/$', 'acl_setup_valid_classes', (), 'acl_setup_valid_classes'),
url(r'^class/details/(?P<access_object_class_gid>[.\w]+)/holder/(?P<holder_object_gid>[.\w]+)/$', 'acl_class_acl_detail', (), 'acl_class_acl_detail'), url(r'^class/details/(?P<access_object_class_gid>[.\w]+)/holder/(?P<holder_object_gid>[.\w]+)/$', 'acl_class_acl_detail', (), 'acl_class_acl_detail'),
url(r'^class/list_for/(?P<access_object_class_gid>[.\w]+)/$', 'acl_class_acl_list', (), 'acl_class_acl_list'), url(r'^class/list_for/(?P<access_object_class_gid>[.\w]+)/$', 'acl_class_acl_list', (), 'acl_class_acl_list'),
url(r'^class/holder/new/(?P<access_object_class_gid>[.\w]+)/$', 'acl_class_new_holder_for', (), 'acl_class_new_holder_for'), url(r'^class/holder/new/(?P<access_object_class_gid>[.\w]+)/$', 'acl_class_new_holder_for', (), 'acl_class_new_holder_for'),
url(r'^class/multiple/grant/$', 'acl_class_multiple_grant', (), 'acl_class_multiple_grant'), url(r'^class/multiple/grant/$', 'acl_class_multiple_grant', (), 'acl_class_multiple_grant'),

View File

@@ -22,7 +22,7 @@ from permissions.models import Permission, Role
from common.utils import generate_choices_w_labels, encapsulate from common.utils import generate_choices_w_labels, encapsulate
from common.widgets import two_state_template 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) ACLS_CLASS_EDIT_ACL, ACLS_CLASS_VIEW_ACL)
from .models import AccessEntry, DefaultAccessEntry from .models import AccessEntry, DefaultAccessEntry
from .classes import (AccessHolder, AccessObject, AccessObjectClass, from .classes import (AccessHolder, AccessObject, AccessObjectClass,
@@ -36,8 +36,8 @@ logger = logging.getLogger(__name__)
def _permission_titles(permission_list): def _permission_titles(permission_list):
return u', '.join([unicode(permission) for permission in permission_list]) return u', '.join([unicode(permission) for permission in permission_list])
def acl_list_for(request, obj, extra_context=None): def acl_list_for(request, obj, extra_context=None):
try: try:
Permission.objects.check_permissions(request.user, [ACLS_VIEW_ACL]) 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': [ 'navigation_object_list': [
{'object': 'object'}, {'object': 'object'},
{'object': 'access_object'} {'object': 'access_object'}
], ],
} }
if extra_context: if extra_context:
context.update(extra_context) context.update(extra_context)
return render_to_response('generic_list.html', 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): def acl_list(request, app_label, model_name, object_id):
@@ -90,10 +90,10 @@ def acl_detail_for(request, actor, obj):
try: try:
Permission.objects.check_permissions(request.user, [ACLS_VIEW_ACL]) Permission.objects.check_permissions(request.user, [ACLS_VIEW_ACL])
except PermissionDenied: 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) permission_list = get_class_permissions_for(obj)
#TODO : get all globally assigned permission, new function get_permissions_for_holder (roles aware) #TODO : get all globally assigned permission, new function get_permissions_for_holder (roles aware)
subtemplates_list = [ subtemplates_list = [
{ {
@@ -139,7 +139,7 @@ def acl_detail_for(request, actor, obj):
context, context,
context_instance=RequestContext(request) context_instance=RequestContext(request)
) )
def acl_grant(request): def acl_grant(request):
items_property_list = loads(request.GET.get('items_property_list', [])) items_property_list = loads(request.GET.get('items_property_list', []))
@@ -152,13 +152,13 @@ def acl_grant(request):
title_suffix = [] title_suffix = []
navigation_object = None navigation_object = None
navigation_object_count = 0 navigation_object_count = 0
for item_properties in items_property_list: for item_properties in items_property_list:
try: try:
permission = Permission.objects.get({'pk': item_properties['permission_pk']}) permission = Permission.objects.get({'pk': item_properties['permission_pk']})
except Permission.DoesNotExist: except Permission.DoesNotExist:
raise Http404 raise Http404
try: try:
requester = AccessHolder.get(gid=item_properties['holder_gid']) requester = AccessHolder.get(gid=item_properties['holder_gid'])
access_object = AccessObject.get(gid=item_properties['object_gid']) access_object = AccessObject.get(gid=item_properties['object_gid'])
@@ -184,13 +184,13 @@ def acl_grant(request):
items[requester][access_object].append(permission) items[requester][access_object].append(permission)
navigation_object = access_object navigation_object = access_object
navigation_object_count += 1 navigation_object_count += 1
for requester, obj_ps in items.items(): for requester, obj_ps in items.items():
for obj, ps in obj_ps.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', ').join([u'"%s"' % unicode(p) for p in ps]))
title_suffix.append(_(u' for %s') % obj) title_suffix.append(_(u' for %s') % obj)
title_suffix.append(_(u' to %s') % requester) title_suffix.append(_(u' to %s') % requester)
if len(items_property_list) == 1: if len(items_property_list) == 1:
title_prefix = _(u'Are you sure you wish to grant the permission %(title_suffix)s?') title_prefix = _(u'Are you sure you wish to grant the permission %(title_suffix)s?')
else: else:
@@ -225,7 +225,7 @@ def acl_grant(request):
context['title'] = title_prefix % { context['title'] = title_prefix % {
'title_suffix': u''.join(title_suffix), 'title_suffix': u''.join(title_suffix),
} }
logger.debug('navigation_object_count: %d' % navigation_object_count) logger.debug('navigation_object_count: %d' % navigation_object_count)
logger.debug('navigation_object: %s' % navigation_object) logger.debug('navigation_object: %s' % navigation_object)
if navigation_object_count == 1: if navigation_object_count == 1:
@@ -251,21 +251,21 @@ def acl_revoke(request):
try: try:
permission = Permission.objects.get({'pk': item_properties['permission_pk']}) permission = Permission.objects.get({'pk': item_properties['permission_pk']})
except Permission.DoesNotExist: except Permission.DoesNotExist:
raise Http404 raise Http404
try: try:
requester = AccessHolder.get(gid=item_properties['holder_gid']) requester = AccessHolder.get(gid=item_properties['holder_gid'])
access_object = AccessObject.get(gid=item_properties['object_gid']) access_object = AccessObject.get(gid=item_properties['object_gid'])
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404 raise Http404
try: try:
Permission.objects.check_permissions(request.user, [ACLS_EDIT_ACL]) Permission.objects.check_permissions(request.user, [ACLS_EDIT_ACL])
except PermissionDenied: except PermissionDenied:
try: try:
AccessEntry.objects.check_access(ACLS_EDIT_ACL, request.user, access_object) AccessEntry.objects.check_access(ACLS_EDIT_ACL, request.user, access_object)
except PermissionDenied: except PermissionDenied:
raise raise
else: else:
items.setdefault(requester, {}) items.setdefault(requester, {})
items[requester].setdefault(access_object, []) items[requester].setdefault(access_object, [])
@@ -277,14 +277,14 @@ def acl_revoke(request):
items[requester].setdefault(access_object, []) items[requester].setdefault(access_object, [])
items[requester][access_object].append(permission) items[requester][access_object].append(permission)
navigation_object = access_object navigation_object = access_object
navigation_object_count += 1 navigation_object_count += 1
for requester, obj_ps in items.items(): for requester, obj_ps in items.items():
for obj, ps in obj_ps.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', ').join([u'"%s"' % unicode(p) for p in ps]))
title_suffix.append(_(u' for %s') % obj) title_suffix.append(_(u' for %s') % obj)
title_suffix.append(_(u' from %s') % requester) title_suffix.append(_(u' from %s') % requester)
if len(items_property_list) == 1: if len(items_property_list) == 1:
title_prefix = _(u'Are you sure you wish to revoke the permission %(title_suffix)s?') title_prefix = _(u'Are you sure you wish to revoke the permission %(title_suffix)s?')
else: else:
@@ -319,7 +319,7 @@ def acl_revoke(request):
context['title'] = title_prefix % { context['title'] = title_prefix % {
'title_suffix': u''.join(title_suffix), 'title_suffix': u''.join(title_suffix),
} }
logger.debug('navigation_object_count: %d' % navigation_object_count) logger.debug('navigation_object_count: %d' % navigation_object_count)
logger.debug('navigation_object: %s' % navigation_object) logger.debug('navigation_object: %s' % navigation_object)
if navigation_object_count == 1: 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]), reverse('acl_detail', args=[access_object.gid, access_holder.gid]),
urlencode(query_string) urlencode(query_string)
) )
) )
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404 raise Http404
else: else:
@@ -365,12 +365,12 @@ def acl_new_holder_for(request, obj, extra_context=None, navigation_object=None)
'navigation_object_list': [ 'navigation_object_list': [
{'object': 'object'}, {'object': 'object'},
{'object': 'access_object'}, {'object': 'access_object'},
], ],
} }
if extra_context: if extra_context:
context.update(extra_context) context.update(extra_context)
return render_to_response('generic_form.html', context, return render_to_response('generic_form.html', context,
context_instance=RequestContext(request)) context_instance=RequestContext(request))
@@ -399,12 +399,12 @@ def acl_setup_valid_classes(request):
} }
return render_to_response('generic_list.html', context, 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): def acl_class_acl_list(request, access_object_class_gid):
Permission.objects.check_permissions(request.user, [ACLS_CLASS_VIEW_ACL]) Permission.objects.check_permissions(request.user, [ACLS_CLASS_VIEW_ACL])
access_object_class = AccessObjectClass.get(gid=access_object_class_gid) access_object_class = AccessObjectClass.get(gid=access_object_class_gid)
context = { context = {
'object_list': DefaultAccessEntry.objects.get_holders_for(access_object_class.source_object), '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, 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): 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) access_object_class = AccessObjectClass.get(gid=access_object_class_gid)
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404 raise Http404
#permission_list = list(access_object_class.get_class_permissions()) #permission_list = list(access_object_class.get_class_permissions())
permission_list = get_class_permissions_for(access_object_class.content_type.model_class()) 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) #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, 'permission_pk': lambda x: x.pk,
'holder_gid': lambda x: actor.gid, 'holder_gid': lambda x: actor.gid,
'access_object_class_gid': lambda x: access_object_class.gid, 'access_object_class_gid': lambda x: access_object_class.gid,
}, },
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def acl_class_new_holder_for(request, access_object_class_gid): def acl_class_new_holder_for(request, access_object_class_gid):
Permission.objects.check_permissions(request.user, [ACLS_CLASS_EDIT_ACL]) 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), 'title': _(u'add new holder for class: %s') % unicode(access_object_class),
'object': access_object_class, 'object': access_object_class,
'submit_label': _(u'Select'), 'submit_label': _(u'Select'),
'submit_icon_famfam': 'tick' 'submit_icon_famfam': 'tick'
} }
return render_to_response('generic_form.html', context, return render_to_response('generic_form.html', context,
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def acl_class_multiple_grant(request): def acl_class_multiple_grant(request):
@@ -513,25 +513,25 @@ def acl_class_multiple_grant(request):
try: try:
permission = Permission.objects.get({'pk': item_properties['permission_pk']}) permission = Permission.objects.get({'pk': item_properties['permission_pk']})
except Permission.DoesNotExist: except Permission.DoesNotExist:
raise Http404 raise Http404
try: try:
requester = AccessHolder.get(gid=item_properties['holder_gid']) requester = AccessHolder.get(gid=item_properties['holder_gid'])
access_object_class = AccessObjectClass.get(gid=item_properties['access_object_class_gid']) access_object_class = AccessObjectClass.get(gid=item_properties['access_object_class_gid'])
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404 raise Http404
items.setdefault(requester, {}) items.setdefault(requester, {})
items[requester].setdefault(access_object_class, []) items[requester].setdefault(access_object_class, [])
items[requester][access_object_class].append(permission) items[requester][access_object_class].append(permission)
navigation_object = access_object_class navigation_object = access_object_class
navigation_object_count += 1 navigation_object_count += 1
for requester, obj_ps in items.items(): for requester, obj_ps in items.items():
for obj, ps in obj_ps.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', ').join([u'"%s"' % unicode(p) for p in ps]))
title_suffix.append(_(u' for %s') % obj) title_suffix.append(_(u' for %s') % obj)
title_suffix.append(_(u' to %s') % requester) title_suffix.append(_(u' to %s') % requester)
if len(items_property_list) == 1: if len(items_property_list) == 1:
title_prefix = _(u'Are you sure you wish to grant the permission %(title_suffix)s?') title_prefix = _(u'Are you sure you wish to grant the permission %(title_suffix)s?')
else: else:
@@ -566,7 +566,7 @@ def acl_class_multiple_grant(request):
context['title'] = title_prefix % { context['title'] = title_prefix % {
'title_suffix': u''.join(title_suffix), 'title_suffix': u''.join(title_suffix),
} }
logger.debug('navigation_object_count: %d' % navigation_object_count) logger.debug('navigation_object_count: %d' % navigation_object_count)
logger.debug('navigation_object: %s' % navigation_object) logger.debug('navigation_object: %s' % navigation_object)
if navigation_object_count == 1: if navigation_object_count == 1:
@@ -593,25 +593,25 @@ def acl_class_multiple_revoke(request):
try: try:
permission = Permission.objects.get({'pk': item_properties['permission_pk']}) permission = Permission.objects.get({'pk': item_properties['permission_pk']})
except Permission.DoesNotExist: except Permission.DoesNotExist:
raise Http404 raise Http404
try: try:
requester = AccessHolder.get(gid=item_properties['holder_gid']) requester = AccessHolder.get(gid=item_properties['holder_gid'])
access_object_class = AccessObjectClass.get(gid=item_properties['access_object_class_gid']) access_object_class = AccessObjectClass.get(gid=item_properties['access_object_class_gid'])
except ObjectDoesNotExist: except ObjectDoesNotExist:
raise Http404 raise Http404
items.setdefault(requester, {}) items.setdefault(requester, {})
items[requester].setdefault(access_object_class, []) items[requester].setdefault(access_object_class, [])
items[requester][access_object_class].append(permission) items[requester][access_object_class].append(permission)
navigation_object = access_object_class navigation_object = access_object_class
navigation_object_count += 1 navigation_object_count += 1
for requester, obj_ps in items.items(): for requester, obj_ps in items.items():
for obj, ps in obj_ps.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', ').join([u'"%s"' % unicode(p) for p in ps]))
title_suffix.append(_(u' for %s') % obj) title_suffix.append(_(u' for %s') % obj)
title_suffix.append(_(u' from %s') % requester) title_suffix.append(_(u' from %s') % requester)
if len(items_property_list) == 1: if len(items_property_list) == 1:
title_prefix = _(u'Are you sure you wish to revoke the permission %(title_suffix)s?') title_prefix = _(u'Are you sure you wish to revoke the permission %(title_suffix)s?')
else: else:
@@ -646,7 +646,7 @@ def acl_class_multiple_revoke(request):
context['title'] = title_prefix % { context['title'] = title_prefix % {
'title_suffix': u''.join(title_suffix), 'title_suffix': u''.join(title_suffix),
} }
logger.debug('navigation_object_count: %d' % navigation_object_count) logger.debug('navigation_object_count: %d' % navigation_object_count)
logger.debug('navigation_object: %s' % navigation_object) logger.debug('navigation_object: %s' % navigation_object)
if navigation_object_count == 1: if navigation_object_count == 1:

View File

@@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2 >>> 1 + 1 == 2
True True
"""} """}

View File

@@ -19,7 +19,7 @@ from .exceptions import OfficeConversionError
HASH_FUNCTION = lambda x: hashlib.sha256(x).hexdigest() HASH_FUNCTION = lambda x: hashlib.sha256(x).hexdigest()
def cache_cleanup(input_filepath, *args, **kwargs): def cache_cleanup(input_filepath, *args, **kwargs):
try: try:
os.remove(create_image_cache_filename(input_filepath, *args, **kwargs)) 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) rotation = kwargs.get('rotation', DEFAULT_ROTATION)
page = kwargs.get('page', DEFAULT_PAGE_NUMBER) page = kwargs.get('page', DEFAULT_PAGE_NUMBER)
transformations = kwargs.get('transformations', []) transformations = kwargs.get('transformations', [])
if transformations is None: if transformations is None:
transformations = [] transformations = []
if output_filepath is None: if output_filepath is None:
output_filepath = create_image_cache_filename(input_filepath, *args, **kwargs) output_filepath = create_image_cache_filename(input_filepath, *args, **kwargs)
if os.path.exists(output_filepath): if os.path.exists(output_filepath):
return output_filepath return output_filepath
@@ -79,7 +79,7 @@ def convert(input_filepath, output_filepath=None, cleanup_files=False, mimetype=
'transformation': TRANSFORMATION_ZOOM, 'transformation': TRANSFORMATION_ZOOM,
'arguments': {'percent': zoom} 'arguments': {'percent': zoom}
} }
) )
if rotation != 0 and rotation != 360: if rotation != 0 and rotation != 360:
transformations.append( transformations.append(
@@ -87,7 +87,7 @@ def convert(input_filepath, output_filepath=None, cleanup_files=False, mimetype=
'transformation': TRANSFORMATION_ROTATE, 'transformation': TRANSFORMATION_ROTATE,
'arguments': {'degrees': rotation} 'arguments': {'degrees': rotation}
} }
) )
try: try:
backend.convert_file(input_filepath=input_filepath, output_filepath=output_filepath, transformations=transformations, page=page, file_format=file_format, mimetype=mimetype) 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: except OfficeConversionError:
raise UnknownFileFormat('office converter exception') raise UnknownFileFormat('office converter exception')
return backend.get_page_count(input_filepath) return backend.get_page_count(input_filepath)
''' '''
@@ -127,8 +127,7 @@ def get_available_transformations_choices():
result.append([transformation, transformation_template]) result.append([transformation, transformation_template])
return result return result
def get_format_list(): def get_format_list():
return [(format, FILE_FORMATS.get(format, u'')) for format in backend.get_format_list()] return [(format, FILE_FORMATS.get(format, u'')) for format in backend.get_format_list()]

View File

@@ -1,29 +1,29 @@
class ConvertError(Exception): class ConvertError(Exception):
''' """
Base exception for all coverter app exceptions Base exception for all coverter app exceptions
''' """
pass pass
class UnknownFileFormat(ConvertError): class UnknownFileFormat(ConvertError):
''' """
Raised when the converter backend can't understand a file Raised when the converter backend can't understand a file
''' """
pass pass
class IdentifyError(ConvertError): class IdentifyError(ConvertError):
''' """
Raised by the graphcismagick and imagemagics identify program Raised by the graphcismagick and imagemagics identify program
''' """
pass pass
class UnkownConvertError(ConvertError): class UnkownConvertError(ConvertError):
''' """
Raised when an error is found but there is no disernible way to Raised when an error is found but there is no disernible way to
identify the kind of error identify the kind of error
''' """
pass pass

View File

@@ -53,7 +53,7 @@ FILE_FORMATS = {
'8BIN': _(u'Photoshop resource format'), '8BIN': _(u'Photoshop resource format'),
'8BIMTEXT': _(u'Photoshop resource text format'), '8BIMTEXT': _(u'Photoshop resource text format'),
'8BIMWTEXT': _(u'Photoshop resource wide text format'), '8BIMWTEXT': _(u'Photoshop resource wide text format'),
'A': _(u'Raw alpha samples'), 'A': _(u'Raw alpha samples'),
'AI': _(u'Adobe Illustrator CS2'), 'AI': _(u'Adobe Illustrator CS2'),
'APP1': _(u'Raw application information'), 'APP1': _(u'Raw application information'),
@@ -62,7 +62,7 @@ FILE_FORMATS = {
'ARW': _(u'Sony Alpha DSLR Raw Image Format'), 'ARW': _(u'Sony Alpha DSLR Raw Image Format'),
'AVI': _(u'Microsoft Audio/Visual Interleaved'), 'AVI': _(u'Microsoft Audio/Visual Interleaved'),
'AVS': _(u'AVS X image'), 'AVS': _(u'AVS X image'),
'B': _(u'Raw blue samples'), 'B': _(u'Raw blue samples'),
'BGR': _(u'Raw blue, green, and red samples'), 'BGR': _(u'Raw blue, green, and red samples'),
'BGRA': _(u'Raw blue, green, red and alpha samples'), 'BGRA': _(u'Raw blue, green, red and alpha samples'),
@@ -95,7 +95,7 @@ FILE_FORMATS = {
'DJVU': _(u'Déjà vu'), 'DJVU': _(u'Déjà vu'),
'DNG': _(u'Adobe Digital Negative'), 'DNG': _(u'Adobe Digital Negative'),
'DOT': _(u'Graphviz'), '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'), 'EPDF': _(u'Encapsulated Portable Document Format'),
'EPI': _(u'Adobe Encapsulated PostScript Interchange format'), 'EPI': _(u'Adobe Encapsulated PostScript Interchange format'),
@@ -110,7 +110,7 @@ FILE_FORMATS = {
'ERF': _(u'Epson RAW Format'), 'ERF': _(u'Epson RAW Format'),
'EXIF': _(u'Exif digital camera binary data'), 'EXIF': _(u'Exif digital camera binary data'),
'EXR': _(u'High Dynamic-range (HDR)'), 'EXR': _(u'High Dynamic-range (HDR)'),
'FAX': _(u'Group 3 FAX (Not TIFF Group3 FAX)'), 'FAX': _(u'Group 3 FAX (Not TIFF Group3 FAX)'),
'FLI': _(u'Autodesk FLI animations file'), 'FLI': _(u'Autodesk FLI animations file'),
'FLC': _(u'Autodesk FLC animations file'), 'FLC': _(u'Autodesk FLC animations file'),

View File

@@ -13,14 +13,14 @@ from .exceptions import (OfficeConversionError,
OfficeBackendError, UnknownFileFormat) OfficeBackendError, UnknownFileFormat)
CACHED_FILE_SUFFIX = u'_office_converter' CACHED_FILE_SUFFIX = u'_office_converter'
CONVERTER_OFFICE_FILE_MIMETYPES = [ CONVERTER_OFFICE_FILE_MIMETYPES = [
u'application/msword', u'application/msword',
u'application/mswrite', u'application/mswrite',
u'application/mspowerpoint', u'application/mspowerpoint',
u'application/msexcel', u'application/msexcel',
u'application/vnd.ms-excel', 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.presentation',
u'application/vnd.oasis.opendocument.text', u'application/vnd.oasis.opendocument.text',
u'application/vnd.openxmlformats-officedocument.wordprocessingml.document', u'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
@@ -43,7 +43,7 @@ class OfficeConverter(object):
self.exists = False self.exists = False
self.mimetype = None self.mimetype = None
self.encoding = None self.encoding = None
def mimetypes(self): def mimetypes(self):
return CONVERTER_OFFICE_FILE_MIMETYPES return CONVERTER_OFFICE_FILE_MIMETYPES
@@ -51,7 +51,7 @@ class OfficeConverter(object):
self.exists = False self.exists = False
self.mimetype = None self.mimetype = None
self.encoding = None self.encoding = None
self.input_filepath = input_filepath self.input_filepath = input_filepath
# Make sure file is of a known office format # Make sure file is of a known office format
@@ -71,13 +71,13 @@ class OfficeConverter(object):
except OfficeBackendError, msg: except OfficeBackendError, msg:
# convert exception so that at least the mime type icon is displayed # convert exception so that at least the mime type icon is displayed
raise UnknownFileFormat(msg) raise UnknownFileFormat(msg)
def __unicode__(self): def __unicode__(self):
return getattr(self, 'output_filepath', None) return getattr(self, 'output_filepath', None)
def __str__(self): def __str__(self):
return str(self.__unicode__()) return str(self.__unicode__())
class OfficeConverterBackendUnoconv(object): class OfficeConverterBackendUnoconv(object):
def __init__(self): def __init__(self):
@@ -91,7 +91,7 @@ class OfficeConverterBackendUnoconv(object):
''' '''
self.input_filepath = input_filepath self.input_filepath = input_filepath
self.output_filepath = output_filepath self.output_filepath = output_filepath
command = [] command = []
command.append(self.unoconv_path) command.append(self.unoconv_path)

View File

@@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2 >>> 1 + 1 == 2
True True
"""} """}

View File

@@ -157,8 +157,8 @@ class GPG(object):
# If not, try open it. # If not, try open it.
return open(file_input, 'rb') return open(file_input, 'rb')
else: else:
return file_input return file_input
def __init__(self, binary_path=None, home=None, keyring=None, keyservers=None): def __init__(self, binary_path=None, home=None, keyring=None, keyservers=None):
kwargs = {} kwargs = {}
if binary_path: if binary_path:
@@ -198,9 +198,9 @@ class GPG(object):
''' '''
Verify the signature of a file. Verify the signature of a file.
''' '''
input_descriptor = GPG.get_descriptor(file_input) input_descriptor = GPG.get_descriptor(file_input)
if detached_signature: if detached_signature:
# Save the original data and invert the argument order # Save the original data and invert the argument order
# Signature first, file second # Signature first, file second
@@ -212,10 +212,10 @@ class GPG(object):
verify = self.gpg.verify_file(detached_signature, data_filename=filename) verify = self.gpg.verify_file(detached_signature, data_filename=filename)
else: else:
verify = self.gpg.verify_file(input_descriptor) verify = self.gpg.verify_file(input_descriptor)
if close_descriptor: if close_descriptor:
input_descriptor.close() input_descriptor.close()
if verify: if verify:
return verify return verify
#elif getattr(verify, 'status', None) == 'no public key': #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 overrided if it already exists), if no destination file name is
provided the signature is returned. provided the signature is returned.
''' '''
kwargs = {} kwargs = {}
kwargs['clearsign'] = clearsign kwargs['clearsign'] = clearsign
@@ -287,12 +287,12 @@ class GPG(object):
result = self.gpg.decrypt_file(input_descriptor) result = self.gpg.decrypt_file(input_descriptor)
if close_descriptor: if close_descriptor:
input_descriptor.close() input_descriptor.close()
if not result.status: if not result.status:
raise GPGDecryptionError('Unable to decrypt file') raise GPGDecryptionError('Unable to decrypt file')
return result return result
def create_key(self, *args, **kwargs): def create_key(self, *args, **kwargs):
if kwargs.get('passphrase') == u'': if kwargs.get('passphrase') == u'':
kwargs.pop('passphrase') kwargs.pop('passphrase')
@@ -319,7 +319,7 @@ class GPG(object):
return Key.get(self, import_result.fingerprints[0], secret=False) return Key.get(self, import_result.fingerprints[0], secret=False)
raise KeyFetchingError raise KeyFetchingError
def query(self, term): def query(self, term):
results = {} results = {}
for keyserver in self.keyservers: for keyserver in self.keyservers:
@@ -331,14 +331,14 @@ class GPG(object):
results[key.keyid] = key results[key.keyid] = key
except: except:
pass pass
return results.values() return results.values()
def import_key(self, key_data): def import_key(self, key_data):
import_result = self.gpg.import_keys(key_data) import_result = self.gpg.import_keys(key_data)
logger.debug('import_result: %s' % import_result) logger.debug('import_result: %s' % import_result)
if import_result: if import_result:
return Key.get(self, import_result.fingerprints[0], secret=False) return Key.get(self, import_result.fingerprints[0], secret=False)
raise KeyImportError raise KeyImportError

View File

@@ -1 +0,0 @@

View File

@@ -10,7 +10,7 @@ from django.contrib import messages
from permissions.models import Permission from permissions.models import Permission
from common.utils import (urlquote, encapsulate) from common.utils import (urlquote, encapsulate)
from .api import Key, SIGNATURE_STATES from .api import Key, SIGNATURE_STATES
from .runtime import gpg from .runtime import gpg
from .exceptions import (GPGVerificationError, KeyFetchingError, from .exceptions import (GPGVerificationError, KeyFetchingError,
@@ -24,7 +24,7 @@ logger = logging.getLogger(__name__)
def key_receive(request, key_id): def key_receive(request, key_id):
Permission.objects.check_permissions(request.user, [PERMISSION_KEY_RECEIVE]) Permission.objects.check_permissions(request.user, [PERMISSION_KEY_RECEIVE])
post_action_redirect = None post_action_redirect = None
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) 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', '/'))) 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, 'next': next,
'previous': previous, 'previous': previous,
'submit_method': 'GET', 'submit_method': 'GET',
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def key_list(request, secret=True): def key_list(request, secret=True):
Permission.objects.check_permissions(request.user, [PERMISSION_KEY_VIEW]) Permission.objects.check_permissions(request.user, [PERMISSION_KEY_VIEW])
if secret: if secret:
object_list = Key.get_all(gpg, secret=True) object_list = Key.get_all(gpg, secret=True)
title = _(u'private keys') title = _(u'private keys')
@@ -81,7 +81,7 @@ def key_list(request, secret=True):
def key_delete(request, fingerprint, key_type): def key_delete(request, fingerprint, key_type):
Permission.objects.check_permissions(request.user, [PERMISSION_KEY_DELETE]) Permission.objects.check_permissions(request.user, [PERMISSION_KEY_DELETE])
secret = key_type == 'sec' secret = key_type == 'sec'
key = Key.get(gpg, fingerprint, secret=secret) key = Key.get(gpg, fingerprint, secret=secret)
@@ -110,7 +110,7 @@ def key_delete(request, fingerprint, key_type):
def key_query(request): def key_query(request):
Permission.objects.check_permissions(request.user, [PERMISSION_KEYSERVER_QUERY]) Permission.objects.check_permissions(request.user, [PERMISSION_KEYSERVER_QUERY])
subtemplates_list = [] subtemplates_list = []
term = request.GET.get('term') term = request.GET.get('term')
@@ -124,8 +124,8 @@ def key_query(request):
'submit_method': 'GET', 'submit_method': 'GET',
}, },
} }
) )
if term: if term:
results = gpg.query(term) results = gpg.query(term)
subtemplates_list.append( subtemplates_list.append(
@@ -147,36 +147,36 @@ def key_query(request):
{ {
'name': _(u'creation date'), 'name': _(u'creation date'),
'attribute': 'creation_date', 'attribute': 'creation_date',
}, },
{ {
'name': _(u'disabled'), 'name': _(u'disabled'),
'attribute': 'disabled', 'attribute': 'disabled',
}, },
{ {
'name': _(u'expiration date'), 'name': _(u'expiration date'),
'attribute': 'expiration_date', 'attribute': 'expiration_date',
}, },
{ {
'name': _(u'expired'), 'name': _(u'expired'),
'attribute': 'expired', 'attribute': 'expired',
}, },
{ {
'name': _(u'length'), 'name': _(u'length'),
'attribute': 'key_length', 'attribute': 'key_length',
}, },
{ {
'name': _(u'revoked'), 'name': _(u'revoked'),
'attribute': 'revoked', 'attribute': 'revoked',
}, },
{ {
'name': _(u'Identifies'), 'name': _(u'Identifies'),
'attribute': encapsulate(lambda x: u', '.join([identity.uid for identity in x.identities])), 'attribute': encapsulate(lambda x: u', '.join([identity.uid for identity in x.identities])),
}, },
] ]
}, },
} }
) )
return render_to_response('generic_form.html', { return render_to_response('generic_form.html', {
'subtemplates_list': subtemplates_list, 'subtemplates_list': subtemplates_list,

View File

@@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2 >>> 1 + 1 == 2
True True
"""} """}

View File

@@ -14,9 +14,9 @@ logger = logging.getLogger(__name__)
class DocumentVersionSignature(models.Model): class DocumentVersionSignature(models.Model):
''' """
Model that describes a document version signature properties Model that describes a document version signature properties
''' """
document_version = models.ForeignKey(DocumentVersion, verbose_name=_(u'document version'), editable=False) 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) 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) has_embedded_signature = models.BooleanField(default=False, verbose_name=_(u'has embedded signature'), editable=False)

View File

@@ -25,8 +25,8 @@ class DocumentVersionInline(admin.StackedInline):
#inlines = [ #inlines = [
# DocumentPageInline, # DocumentPageInline,
#] #]
class DocumentTypeFilenameInline(admin.StackedInline): class DocumentTypeFilenameInline(admin.StackedInline):
model = DocumentTypeFilename model = DocumentTypeFilename
extra = 1 extra = 1

View File

@@ -32,7 +32,7 @@ class FolderListForm(forms.Form):
Permission.objects.check_permissions(user, [PERMISSION_FOLDER_VIEW]) Permission.objects.check_permissions(user, [PERMISSION_FOLDER_VIEW])
except PermissionDenied: except PermissionDenied:
queryset = AccessEntry.objects.filter_objects_by_access(PERMISSION_FOLDER_VIEW, user, queryset) queryset = AccessEntry.objects.filter_objects_by_access(PERMISSION_FOLDER_VIEW, user, queryset)
self.fields['folder'] = forms.ModelChoiceField( self.fields['folder'] = forms.ModelChoiceField(
queryset=queryset, queryset=queryset,
label=_(u'Folder')) label=_(u'Folder'))

View File

@@ -27,11 +27,11 @@ class Folder(models.Model):
@property @property
def documents(self): def documents(self):
return [folder_document.document for folder_document in self.folderdocument_set.all()] return [folder_document.document for folder_document in self.folderdocument_set.all()]
def remove_document(self, document): def remove_document(self, document):
folder_document = self.folderdocument_set.get(document=document) folder_document = self.folderdocument_set.get(document=document)
folder_document.delete() folder_document.delete()
def add_document(self, document): def add_document(self, document):
folder_document, created = FolderDocument.objects.get_or_create(folder=self, document=document) folder_document, created = FolderDocument.objects.get_or_create(folder=self, document=document)
return created return created

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _

View File

@@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2 >>> 1 + 1 == 2
True True
"""} """}

View File

@@ -11,6 +11,6 @@ urlpatterns = patterns('folders.views',
url(r'^document/(?P<document_id>\d+)/folder/add/$', 'folder_add_document', (), 'folder_add_document'), url(r'^document/(?P<document_id>\d+)/folder/add/$', 'folder_add_document', (), 'folder_add_document'),
url(r'^document/(?P<document_id>\d+)/folder/list/$', 'document_folder_list', (), 'document_folder_list'), url(r'^document/(?P<document_id>\d+)/folder/list/$', 'document_folder_list', (), 'document_folder_list'),
url(r'^(?P<folder_pk>\d+)/acl/list/$', 'folder_acl_list', (), 'folder_acl_list'), url(r'^(?P<folder_pk>\d+)/acl/list/$', 'folder_acl_list', (), 'folder_acl_list'),
) )

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
import logging 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) queryset = AccessEntry.objects.filter_objects_by_access(PERMISSION_FOLDER_VIEW, request.user, queryset)
context['object_list'] = queryset context['object_list'] = queryset
return render_to_response('generic_list.html', return render_to_response('generic_list.html',
context, context,
context_instance=RequestContext(request) context_instance=RequestContext(request)
) )
@@ -58,7 +58,7 @@ def folder_list(request, queryset=None, extra_context=None):
def folder_create(request): def folder_create(request):
Permission.objects.check_permissions(request.user, [PERMISSION_FOLDER_CREATE]) Permission.objects.check_permissions(request.user, [PERMISSION_FOLDER_CREATE])
if request.method == 'POST': if request.method == 'POST':
form = FolderForm(request.POST) form = FolderForm(request.POST)
if form.is_valid(): if form.is_valid():
@@ -157,9 +157,9 @@ def folder_view(request, folder_id):
'hide_links': True, 'hide_links': True,
'multi_select_as_buttons': True, 'multi_select_as_buttons': True,
'object': folder, 'object': folder,
'object_name': _(u'folder'), 'object_name': _(u'folder'),
} }
return document_list( return document_list(
request, request,
object_list=folder.documents, object_list=folder.documents,
@@ -193,14 +193,13 @@ def folder_add_document(request, document_id):
else: else:
form = FolderListForm(user=request.user) form = FolderListForm(user=request.user)
return render_to_response('generic_form.html', { return render_to_response('generic_form.html', {
'title': _(u'add document "%s" to a folder') % document, 'title': _(u'add document "%s" to a folder') % document,
'form': form, 'form': form,
'object': document, 'object': document,
'next': next, 'next': next,
}, },
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def document_folder_list(request, document_id): def document_folder_list(request, document_id):

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.contrib import admin from django.contrib import admin

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django import forms from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@@ -18,7 +18,7 @@ class SmartLinkForm(forms.ModelForm):
class Meta: class Meta:
model = SmartLink model = SmartLink
class SmartLinkConditionForm(forms.ModelForm): class SmartLinkConditionForm(forms.ModelForm):
class Meta: class Meta:
model = SmartLinkCondition model = SmartLinkCondition
@@ -56,7 +56,7 @@ class SmartLinkImageWidget(forms.widgets.Widget):
output.append(u'<a href="%s"><span class="famfam active famfam-page_go"></span>%s</a>' % (reverse('document_view_simple', args=[document.pk]), ugettext(u'Select'))) output.append(u'<a href="%s"><span class="famfam active famfam-page_go"></span>%s</a>' % (reverse('document_view_simple', args=[document.pk]), ugettext(u'Select')))
output.append(u'</div>') output.append(u'</div>')
output.append(u'</div>') output.append(u'</div>')
output.append(u'</div>') output.append(u'</div>')
output.append( output.append(
u'<br /><span class="famfam active famfam-magnifier"></span>%s' % u'<br /><span class="famfam active famfam-magnifier"></span>%s' %
@@ -70,9 +70,9 @@ class SmartLinkInstanceForm(forms.Form):
smart_link_instances = kwargs.pop('smart_link_instances', None) smart_link_instances = kwargs.pop('smart_link_instances', None)
links = kwargs.pop('links', None) links = kwargs.pop('links', None)
current_document = kwargs.pop('current_document', None) current_document = kwargs.pop('current_document', None)
super(SmartLinkInstanceForm, self).__init__(*args, **kwargs) super(SmartLinkInstanceForm, self).__init__(*args, **kwargs)
for smart_link_instance, data in smart_link_instances.items(): for smart_link_instance, data in smart_link_instances.items():
self.fields['preview-%s' % smart_link_instance] = forms.CharField( self.fields['preview-%s' % smart_link_instance] = forms.CharField(
widget=SmartLinkImageWidget(), widget=SmartLinkImageWidget(),

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.db import models from django.db import models
from django.db.models import Q from django.db.models import Q

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _

View File

@@ -4,12 +4,12 @@ urlpatterns = patterns('linking.views',
url(r'^action/$', 'smart_link_action', (), 'smart_link_action'), url(r'^action/$', 'smart_link_action', (), 'smart_link_action'),
url(r'^document/(?P<document_id>\d+)/smart_link/(?P<smart_link_pk>\d+)/$', 'smart_link_instance_view', (), 'smart_link_instance_view'), url(r'^document/(?P<document_id>\d+)/smart_link/(?P<smart_link_pk>\d+)/$', 'smart_link_instance_view', (), 'smart_link_instance_view'),
url(r'^smart/for_document/(?P<document_id>\d+)/$', 'smart_link_instances_for_document', (), 'smart_link_instances_for_document'), url(r'^smart/for_document/(?P<document_id>\d+)/$', 'smart_link_instances_for_document', (), 'smart_link_instances_for_document'),
url(r'^setup/list/$', 'smart_link_list', (), 'smart_link_list'), url(r'^setup/list/$', 'smart_link_list', (), 'smart_link_list'),
url(r'^setup/create/$', 'smart_link_create', (), 'smart_link_create'), url(r'^setup/create/$', 'smart_link_create', (), 'smart_link_create'),
url(r'^setup/(?P<smart_link_pk>\d+)/delete/$', 'smart_link_delete', (), 'smart_link_delete'), url(r'^setup/(?P<smart_link_pk>\d+)/delete/$', 'smart_link_delete', (), 'smart_link_delete'),
url(r'^setup/(?P<smart_link_pk>\d+)/edit/$', 'smart_link_edit', (), 'smart_link_edit'), url(r'^setup/(?P<smart_link_pk>\d+)/edit/$', 'smart_link_edit', (), 'smart_link_edit'),
url(r'^setup/(?P<smart_link_pk>\d+)/condition/list/$', 'smart_link_condition_list', (), 'smart_link_condition_list'), url(r'^setup/(?P<smart_link_pk>\d+)/condition/list/$', 'smart_link_condition_list', (), 'smart_link_condition_list'),
url(r'^setup/(?P<smart_link_pk>\d+)/condition/create/$', 'smart_link_condition_create', (), 'smart_link_condition_create'), url(r'^setup/(?P<smart_link_pk>\d+)/condition/create/$', 'smart_link_condition_create', (), 'smart_link_condition_create'),
url(r'^setup/smart_link/condition/(?P<smart_link_condition_pk>\d+)/edit/$', 'smart_link_condition_edit', (), 'smart_link_condition_edit'), url(r'^setup/smart_link/condition/(?P<smart_link_condition_pk>\d+)/edit/$', 'smart_link_condition_edit', (), 'smart_link_condition_edit'),

View File

@@ -32,7 +32,7 @@ logger = logging.getLogger(__name__)
def smart_link_action(request): def smart_link_action(request):
#Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_VIEW]) #Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_VIEW])
action = request.GET.get('action', None) action = request.GET.get('action', None)
if not action: if not action:
@@ -45,12 +45,12 @@ def smart_link_action(request):
def smart_link_instance_view(request, document_id, smart_link_pk): def smart_link_instance_view(request, document_id, smart_link_pk):
document = get_object_or_404(Document, pk=document_id) document = get_object_or_404(Document, pk=document_id)
smart_link = get_object_or_404(SmartLink, pk=smart_link_pk) smart_link = get_object_or_404(SmartLink, pk=smart_link_pk)
try: try:
Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_VIEW]) Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_VIEW])
except PermissionDenied: except PermissionDenied:
AccessEntry.objects.check_access(PERMISSION_SMART_LINK_VIEW, request.user, smart_link) 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) object_list, errors = SmartLink.objects.get_smart_link_instances_for(document, smart_link)
return document_list( return document_list(
@@ -86,7 +86,7 @@ def smart_link_instances_for_document(request, document_id):
for key, value in smart_link_instances.items(): for key, value in smart_link_instances.items():
if key not in smart_link_instances_keys_filtered: if key not in smart_link_instances_keys_filtered:
smart_link_instances.pop(key) smart_link_instances.pop(key)
value['documents'] = AccessEntry.objects.filter_objects_by_access(PERMISSION_DOCUMENT_VIEW, request.user, value['documents']) value['documents'] = AccessEntry.objects.filter_objects_by_access(PERMISSION_DOCUMENT_VIEW, request.user, value['documents'])
if smart_link_instances: if smart_link_instances:
@@ -116,30 +116,30 @@ def smart_link_instances_for_document(request, document_id):
'document': document, 'document': document,
'subtemplates_list': subtemplates_list, 'subtemplates_list': subtemplates_list,
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def smart_link_list(request): def smart_link_list(request):
qs = SmartLink.objects.all() qs = SmartLink.objects.all()
try: try:
Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_VIEW]) Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_VIEW])
except PermissionDenied: except PermissionDenied:
qs = AccessEntry.objects.filter_objects_by_access(PERMISSION_SMART_LINK_VIEW, request.user, qs) qs = AccessEntry.objects.filter_objects_by_access(PERMISSION_SMART_LINK_VIEW, request.user, qs)
return render_to_response('generic_list.html', { return render_to_response('generic_list.html', {
'title': _(u'smart links'), 'title': _(u'smart links'),
'object_list': qs, 'object_list': qs,
'extra_columns': [ 'extra_columns': [
{'name': _(u'dynamic title'), 'attribute': 'dynamic_title'}, {'name': _(u'dynamic title'), 'attribute': 'dynamic_title'},
{'name': _(u'enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))}, {'name': _(u'enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))},
], ],
'hide_link': True, 'hide_link': True,
'list_object_variable_name': 'smart_link', 'list_object_variable_name': 'smart_link',
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def smart_link_create(request): def smart_link_create(request):
Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE]) 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', { return render_to_response('generic_form.html', {
'form': form, 'form': form,
'title': _(u'Create new smart link') 'title': _(u'Create new smart link')
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def smart_link_edit(request, smart_link_pk): def smart_link_edit(request, smart_link_pk):
smart_link = get_object_or_404(SmartLink, pk=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, 'object': smart_link,
'form': form, 'form': form,
'title': _(u'Edit smart link: %s') % smart_link 'title': _(u'Edit smart link: %s') % smart_link
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def smart_link_delete(request, smart_link_pk): def smart_link_delete(request, smart_link_pk):
smart_link = get_object_or_404(SmartLink, pk=smart_link_pk) smart_link = get_object_or_404(SmartLink, pk=smart_link_pk)
try: try:
Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_DELETE]) Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_DELETE])
except PermissionDenied: 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', '/'))) 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', '/'))) 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, 'next': next,
'previous': previous, 'previous': previous,
'form_icon': u'link_delete.png', 'form_icon': u'link_delete.png',
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def smart_link_condition_list(request, smart_link_pk): def smart_link_condition_list(request, smart_link_pk):
smart_link = get_object_or_404(SmartLink, pk=smart_link_pk) smart_link = get_object_or_404(SmartLink, pk=smart_link_pk)
try: try:
Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT]) Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT])
except PermissionDenied: 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', { return render_to_response('generic_list.html', {
'title': _(u'conditions for smart link: %s') % smart_link, 'title': _(u'conditions for smart link: %s') % smart_link,
'object_list': smart_link.smartlinkcondition_set.all(), 'object_list': smart_link.smartlinkcondition_set.all(),
'extra_columns': [ 'extra_columns': [
{'name': _(u'enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))}, {'name': _(u'enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))},
], ],
'hide_link': True, 'hide_link': True,
'object': smart_link, 'object': smart_link,
'list_object_variable_name': 'condition', 'list_object_variable_name': 'condition',
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
@@ -241,14 +241,14 @@ def smart_link_condition_create(request, smart_link_pk):
try: try:
Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT]) Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT])
except PermissionDenied: 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': if request.method == 'POST':
form = SmartLinkConditionForm(request.POST) form = SmartLinkConditionForm(request.POST)
if form.is_valid(): if form.is_valid():
new_smart_link_condition = form.save(commit=False) new_smart_link_condition = form.save(commit=False)
new_smart_link_condition.smart_link = smart_link 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) 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])) return HttpResponseRedirect(reverse('smart_link_condition_list', args=[smart_link.pk]))
else: else:
@@ -257,8 +257,8 @@ def smart_link_condition_create(request, smart_link_pk):
return render_to_response('generic_form.html', { return render_to_response('generic_form.html', {
'form': form, 'form': form,
'title': _(u'Add new conditions to smart link: "%s"') % smart_link, 'title': _(u'Add new conditions to smart link: "%s"') % smart_link,
'object': smart_link, 'object': smart_link,
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def smart_link_condition_edit(request, smart_link_condition_pk): 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: try:
Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT]) Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT])
except PermissionDenied: 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', '/'))) 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', '/'))) 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': 'object', 'name': _(u'smart link')},
{'object': 'condition', 'name': _(u'condition')} {'object': 'condition', 'name': _(u'condition')}
], ],
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def smart_link_condition_delete(request, smart_link_condition_pk): 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: try:
Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT]) Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT])
except PermissionDenied: 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', '/'))) 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', '/'))) 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, 'next': next,
'previous': previous, 'previous': previous,
'form_icon': u'cog_delete.png', 'form_icon': u'cog_delete.png',
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
def smart_link_acl_list(request, smart_link_pk): def smart_link_acl_list(request, smart_link_pk):

View File

@@ -12,7 +12,7 @@ from .conf.settings import SIDE_BAR_SEARCH, DISABLE_HOME_VIEW
__author__ = 'Roberto Rosario' __author__ = 'Roberto Rosario'
__copyright__ = 'Copyright 2011 Roberto Rosario' __copyright__ = 'Copyright 2011 Roberto Rosario'
__credits__ = ['Roberto Rosario',] __credits__ = ['Roberto Rosario',]
__license__ = 'GPL' __license__ = 'GPL'
__maintainer__ = 'Roberto Rosario' __maintainer__ = 'Roberto Rosario'
__email__ = 'roberto.rosario.gonzalez@gmail.com' __email__ = 'roberto.rosario.gonzalez@gmail.com'
@@ -58,7 +58,7 @@ __version__ = get_version()
if 'django.contrib.admin' in settings.INSTALLED_APPS: if 'django.contrib.admin' in settings.INSTALLED_APPS:
register_setup(admin_site) register_setup(admin_site)
register_tool(maintenance_menu) register_tool(maintenance_menu)
register_tool(statistics) register_tool(statistics)
register_tool(diagnostics) register_tool(diagnostics)

View File

@@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2 >>> 1 + 1 == 2
True True
"""} """}

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.contrib import admin from django.contrib import admin

View File

@@ -1,5 +1,5 @@
'''Metadata handling commonalities''' """Metadata handling commonalities"""
from __future__ import absolute_import from __future__ import absolute_import
from urllib import unquote_plus from urllib import unquote_plus
@@ -9,9 +9,9 @@ from .models import DocumentMetadata, MetadataType
def decode_metadata_from_url(url_dict): def decode_metadata_from_url(url_dict):
''' """
Parse a URL query string to a list of metadata Parse a URL query string to a list of metadata
''' """
metadata_dict = { metadata_dict = {
'id': {}, 'id': {},
'value': {} 'value': {}
@@ -35,19 +35,19 @@ def decode_metadata_from_url(url_dict):
def save_metadata_list(metadata_list, document, create=False): def save_metadata_list(metadata_list, document, create=False):
''' """
Take a list of metadata dictionaries and associate them to a Take a list of metadata dictionaries and associate them to a
document document
''' """
for item in metadata_list: for item in metadata_list:
save_metadata(item, document, create) save_metadata(item, document, create)
def save_metadata(metadata_dict, document, create=False): def save_metadata(metadata_dict, document, create=False):
''' """
Take a dictionary of metadata type & value and associate it to a Take a dictionary of metadata type & value and associate it to a
document document
''' """
if create: if create:
# Use matched metadata now to create document metadata # Use matched metadata now to create document metadata
document_metadata, created = DocumentMetadata.objects.get_or_create( 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): def metadata_repr(metadata_list):
''' """
Return a printable representation of a metadata list Return a printable representation of a metadata list
''' """
return u', '.join(metadata_repr_as_list(metadata_list)) return u', '.join(metadata_repr_as_list(metadata_list))
def metadata_repr_as_list(metadata_list): def metadata_repr_as_list(metadata_list):
''' """
Turn a list of metadata into a list of printable representations Turn a list of metadata into a list of printable representations
''' """
output = [] output = []
for metadata_dict in metadata_list: for metadata_dict in metadata_list:
try: try:
@@ -103,7 +103,7 @@ def metadata_repr_as_list(metadata_list):
def get_metadata_string(document): def get_metadata_string(document):
''' """
Return a formated representation of a document's metadata values 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')]) return u', '.join([u'%s - %s' % (metadata.metadata_type, metadata.value) for metadata in DocumentMetadata.objects.filter(document=document).select_related('metadata_type')])

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django import forms from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ 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): class MetadataType(models.Model):
''' """
Define a type of metadata 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.')) 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) title = models.CharField(max_length=48, verbose_name=_(u'title'), blank=True, null=True)
default = models.CharField(max_length=128, 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): class MetadataSet(models.Model):
''' """
Define a group of metadata types Define a group of metadata types
''' """
title = models.CharField(max_length=48, verbose_name=_(u'title')) title = models.CharField(max_length=48, verbose_name=_(u'title'))
def __unicode__(self): def __unicode__(self):
@@ -50,10 +50,10 @@ class MetadataSet(models.Model):
class MetadataSetItem(models.Model): class MetadataSetItem(models.Model):
''' """
Define the set of metadata that relates to a set or group of Define the set of metadata that relates to a set or group of
metadata fields metadata fields
''' """
metadata_set = models.ForeignKey(MetadataSet, verbose_name=_(u'metadata set')) metadata_set = models.ForeignKey(MetadataSet, verbose_name=_(u'metadata set'))
metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'metadata type')) metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'metadata type'))
#required = models.BooleanField(default=True, verbose_name=_(u'required')) #required = models.BooleanField(default=True, verbose_name=_(u'required'))
@@ -67,10 +67,10 @@ class MetadataSetItem(models.Model):
class DocumentMetadata(models.Model): class DocumentMetadata(models.Model):
''' """
Link a document to a specific instance of a metadata type with it's Link a document to a specific instance of a metadata type with it's
current value current value
''' """
document = models.ForeignKey(Document, verbose_name=_(u'document')) document = models.ForeignKey(Document, verbose_name=_(u'document'))
metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'type')) metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'type'))
value = models.CharField(max_length=256, blank=True, verbose_name=_(u'value'), db_index=True) 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): class DocumentTypeDefaults(models.Model):
''' """
Default preselected metadata types and metadata set per document Default preselected metadata types and metadata set per document
type type
''' """
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'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_sets = models.ManyToManyField(MetadataSet, blank=True, verbose_name=_(u'default metadata sets'))
default_metadata = models.ManyToManyField(MetadataType, blank=True, verbose_name=_(u'default metadata')) default_metadata = models.ManyToManyField(MetadataType, blank=True, verbose_name=_(u'default metadata'))

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _

View File

@@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2 >>> 1 + 1 == 2
True True
"""} """}

View File

@@ -1,4 +1,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.template import RequestContext 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]) Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_DOCUMENT_EDIT])
except PermissionDenied: except PermissionDenied:
documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_METADATA_DOCUMENT_EDIT, request.user, documents) documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_METADATA_DOCUMENT_EDIT, request.user, documents)
if not documents: if not documents:
messages.error(request, _(u'Must provide at least one document.')) 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') 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: if not documents:
messages.error(request, _(u'Must provide at least one document.')) 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: for document in documents:
RecentDocument.objects.add_document_for_user(request.user, document) 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: elif document_id_list:
documents = [get_object_or_404(Document, pk=document_id) for document_id in document_id_list.split(',')] documents = [get_object_or_404(Document, pk=document_id) for document_id in document_id_list.split(',')]
try: try:
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_DOCUMENT_REMOVE]) Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_DOCUMENT_REMOVE])
except PermissionDenied: except PermissionDenied:
documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_METADATA_DOCUMENT_REMOVE, request.user, documents) documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_METADATA_DOCUMENT_REMOVE, request.user, documents)
if not documents: if not documents:
messages.error(request, _(u'Must provide at least one document.')) messages.error(request, _(u'Must provide at least one document.'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
@@ -304,7 +304,7 @@ def metadata_view(request, document_id):
'hide_link': True, 'hide_link': True,
'object': document, 'object': document,
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
# Setup views # Setup views
def setup_metadata_type_list(request): def setup_metadata_type_list(request):
@@ -323,12 +323,12 @@ def setup_metadata_type_list(request):
} }
return render_to_response('generic_list.html', context, return render_to_response('generic_list.html', context,
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def setup_metadata_type_edit(request, metadatatype_id): def setup_metadata_type_edit(request, metadatatype_id):
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_EDIT]) Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_EDIT])
metadata_type = get_object_or_404(MetadataType, pk=metadatatype_id) metadata_type = get_object_or_404(MetadataType, pk=metadatatype_id)
if request.method == 'POST': if request.method == 'POST':
@@ -351,12 +351,12 @@ def setup_metadata_type_edit(request, metadatatype_id):
'object': metadata_type, 'object': metadata_type,
'object_name': _(u'metadata type'), 'object_name': _(u'metadata type'),
}, },
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def setup_metadata_type_create(request): def setup_metadata_type_create(request):
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_CREATE]) Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_CREATE])
if request.method == 'POST': if request.method == 'POST':
form = MetadataTypeForm(request.POST) form = MetadataTypeForm(request.POST)
if form.is_valid(): if form.is_valid():
@@ -375,7 +375,7 @@ def setup_metadata_type_create(request):
def setup_metadata_type_delete(request, metadatatype_id): def setup_metadata_type_delete(request, metadatatype_id):
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_DELETE]) Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_TYPE_DELETE])
metadata_type = get_object_or_404(MetadataType, pk=metadatatype_id) metadata_type = get_object_or_404(MetadataType, pk=metadatatype_id)
post_action_redirect = reverse('setup_metadata_type_list') 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, return render_to_response('generic_list.html', context,
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def get_set_members(metadata_set): 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): def setup_metadata_set_create(request):
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_SET_CREATE]) Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_SET_CREATE])
if request.method == 'POST': if request.method == 'POST':
form = MetadataSetForm(request.POST) form = MetadataSetForm(request.POST)
if form.is_valid(): if form.is_valid():
@@ -490,7 +490,7 @@ def setup_metadata_set_create(request):
def setup_metadata_set_delete(request, metadata_set_id): def setup_metadata_set_delete(request, metadata_set_id):
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_SET_DELETE]) Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_SET_DELETE])
metadata_set = get_object_or_404(MetadataSet, pk=metadata_set_id) metadata_set = get_object_or_404(MetadataSet, pk=metadata_set_id)
post_action_redirect = reverse('setup_metadata_set_list') post_action_redirect = reverse('setup_metadata_set_list')
@@ -566,7 +566,7 @@ def setup_document_type_metadata(request, document_type_id):
# Initialize defaults # Initialize defaults
DocumentTypeDefaults.objects.get_or_create(document_type=document_type) DocumentTypeDefaults.objects.get_or_create(document_type=document_type)
return assign_remove( return assign_remove(
request, request,
left_list=lambda: generate_choices_w_labels(get_document_type_metadata_non_members(document_type)), left_list=lambda: generate_choices_w_labels(get_document_type_metadata_non_members(document_type)),

View File

@@ -21,7 +21,7 @@ from .models import DocumentQueue, QueueTransformation
from .tasks import task_process_document_queues from .tasks import task_process_document_queues
from .permissions import (PERMISSION_OCR_DOCUMENT, from .permissions import (PERMISSION_OCR_DOCUMENT,
PERMISSION_OCR_DOCUMENT_DELETE, PERMISSION_OCR_QUEUE_ENABLE_DISABLE, 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__) logger = logging.getLogger(__name__)

View File

@@ -40,7 +40,7 @@ def task_process_queue_document(queue_document_id):
queue_document.state = QUEUEDOCUMENT_STATE_ERROR queue_document.state = QUEUEDOCUMENT_STATE_ERROR
queue_document.result = e queue_document.result = e
queue_document.save() queue_document.save()
lock.release() lock.release()
except LockError: except LockError:
logger.debug('unable to obtain lock') logger.debug('unable to obtain lock')

View File

@@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2 >>> 1 + 1 == 2
True True
"""} """}

View File

@@ -123,9 +123,9 @@ def queue_document_multiple_delete(request):
def submit_document_multiple(request): def submit_document_multiple(request):
for item_id in request.GET.get('id_list', '').split(','): for item_id in request.GET.get('id_list', '').split(','):
submit_document(request, item_id) submit_document(request, item_id)
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
def submit_document(request, document_id): def submit_document(request, document_id):
document = get_object_or_404(Document, pk=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]) Permission.objects.check_permissions(request.user, [PERMISSION_OCR_DOCUMENT])
except PermissionDenied: except PermissionDenied:
AccessEntry.objects.check_access(PERMISSION_OCR_DOCUMENT, request.user, document) AccessEntry.objects.check_access(PERMISSION_OCR_DOCUMENT, request.user, document)
return submit_document_to_queue(request, document=document, return submit_document_to_queue(request, document=document,
post_submit_redirect=request.META.get('HTTP_REFERER', '/')) post_submit_redirect=request.META.get('HTTP_REFERER', '/'))

View File

@@ -1 +0,0 @@

View File

@@ -13,7 +13,7 @@ from django.core.exceptions import PermissionDenied
from common.models import AnonymousUserSingleton from common.models import AnonymousUserSingleton
from .managers import (RoleMemberManager, StoredPermissionManager) from .managers import (RoleMemberManager, StoredPermissionManager)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -21,7 +21,7 @@ class PermissionNamespace(object):
def __init__(self, name, label): def __init__(self, name, label):
self.name = name self.name = name
self.label = label self.label = label
def __unicode__(self): def __unicode__(self):
return unicode(self.label) return unicode(self.label)
@@ -29,17 +29,17 @@ class PermissionNamespace(object):
class PermissionDoesNotExists(Exception): class PermissionDoesNotExists(Exception):
pass pass
class PermissionManager(object): class PermissionManager(object):
_permissions = {} _permissions = {}
DoesNotExist = PermissionDoesNotExists() DoesNotExist = PermissionDoesNotExists()
@classmethod @classmethod
def register(cls, namespace, name, label): def register(cls, namespace, name, label):
permission = Permission(namespace, name, label) permission = Permission(namespace, name, label)
cls._permissions[permission.uuid] = permission cls._permissions[permission.uuid] = permission
return permission return permission
@classmethod @classmethod
def check_permissions(cls, requester, permission_list): def check_permissions(cls, requester, permission_list):
for permission in permission_list: for permission in permission_list:
@@ -49,11 +49,11 @@ class PermissionManager(object):
logger.debug('no permission') logger.debug('no permission')
raise PermissionDenied(ugettext(u'Insufficient permissions.')) raise PermissionDenied(ugettext(u'Insufficient permissions.'))
@classmethod @classmethod
def get_for_holder(cls, holder): def get_for_holder(cls, holder):
return StoredPermission.objects.get_for_holder(holder) return StoredPermission.objects.get_for_holder(holder)
@classmethod @classmethod
def all(cls): def all(cls):
# Return sorted permisions by namespace.name # Return sorted permisions by namespace.name
@@ -69,21 +69,21 @@ class PermissionManager(object):
return cls._permissions[get_dict['pk']].get_stored_permission() return cls._permissions[get_dict['pk']].get_stored_permission()
except KeyError: except KeyError:
raise Permission.DoesNotExist raise Permission.DoesNotExist
def __init__(self, model): def __init__(self, model):
self.model = model self.model = model
class Permission(object): class Permission(object):
DoesNotExist = PermissionDoesNotExists DoesNotExist = PermissionDoesNotExists
def __init__(self, namespace, name, label): def __init__(self, namespace, name, label):
self.namespace = namespace self.namespace = namespace
self.name = name self.name = name
self.label = label self.label = label
self.pk = self.uuid self.pk = self.uuid
def __unicode__(self): def __unicode__(self):
return unicode(self.label) return unicode(self.label)
@@ -93,7 +93,7 @@ class Permission(object):
@property @property
def uuid(self): def uuid(self):
return u'%s.%s' % (self.namespace.name, self.name) return u'%s.%s' % (self.namespace.name, self.name)
@property @property
def stored_permission(self): def stored_permission(self):
return self.get_stored_permission() return self.get_stored_permission()
@@ -107,17 +107,17 @@ class Permission(object):
stored_permission.save() stored_permission.save()
stored_permission.volatile_permission = self stored_permission.volatile_permission = self
return stored_permission return stored_permission
def requester_has_this(self, requester): def requester_has_this(self, requester):
stored_permission = self.get_stored_permission() stored_permission = self.get_stored_permission()
return stored_permission.requester_has_this(requester) return stored_permission.requester_has_this(requester)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
return self.get_stored_permission() return self.get_stored_permission()
Permission.objects = PermissionManager(Permission) Permission.objects = PermissionManager(Permission)
Permission._default_manager = Permission.objects Permission._default_manager = Permission.objects
class StoredPermission(models.Model): class StoredPermission(models.Model):
namespace = models.CharField(max_length=64, verbose_name=_(u'namespace')) namespace = models.CharField(max_length=64, verbose_name=_(u'namespace'))
@@ -126,15 +126,15 @@ class StoredPermission(models.Model):
objects = StoredPermissionManager() objects = StoredPermissionManager()
class Meta: class Meta:
ordering = ('namespace', ) ordering = ('namespace', )
unique_together = ('namespace', 'name') unique_together = ('namespace', 'name')
verbose_name = _(u'permission') verbose_name = _(u'permission')
verbose_name_plural = _(u'permissions') verbose_name_plural = _(u'permissions')
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(StoredPermission, self).__init__(*args, **kwargs) super(StoredPermission, self).__init__(*args, **kwargs)
self.volatile_permission = Permission.objects.get({'pk': '%s.%s' % (self.namespace, self.name)}, proxy_only=True) self.volatile_permission = Permission.objects.get({'pk': '%s.%s' % (self.namespace, self.name)}, proxy_only=True)
def __unicode__(self): def __unicode__(self):
return unicode(getattr(self, 'volatile_permission', self.name)) return unicode(getattr(self, 'volatile_permission', self.name))
@@ -164,7 +164,7 @@ class StoredPermission(models.Model):
for membership in list(set(roles) | set(groups)): for membership in list(set(roles) | set(groups)):
if self.requester_has_this(membership): if self.requester_has_this(membership):
return True return True
logger.debug('Fallthru') logger.debug('Fallthru')
return False return False
@@ -181,7 +181,7 @@ class StoredPermission(models.Model):
return True return True
except PermissionHolder.DoesNotExist: except PermissionHolder.DoesNotExist:
return False return False
class PermissionHolder(models.Model): class PermissionHolder(models.Model):
permission = models.ForeignKey(StoredPermission, verbose_name=_(u'permission')) permission = models.ForeignKey(StoredPermission, verbose_name=_(u'permission'))
@@ -228,7 +228,7 @@ class Role(models.Model):
member = AnonymousUserSingleton.objects.passthru_check(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 = 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): def members(self, filter_dict=None):
filter_dict = filter_dict or {} filter_dict = filter_dict or {}

View File

@@ -1 +0,0 @@

View File

@@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2 >>> 1 + 1 == 2
True True
"""} """}

View File

@@ -7,7 +7,7 @@ urlpatterns = patterns('permissions.views',
url(r'^role/(?P<role_id>\d+)/edit/$', 'role_edit', (), 'role_edit'), url(r'^role/(?P<role_id>\d+)/edit/$', 'role_edit', (), 'role_edit'),
url(r'^role/(?P<role_id>\d+)/delete/$', 'role_delete', (), 'role_delete'), url(r'^role/(?P<role_id>\d+)/delete/$', 'role_delete', (), 'role_delete'),
url(r'^role/(?P<role_id>\d+)/members/$', 'role_members', (), 'role_members'), url(r'^role/(?P<role_id>\d+)/members/$', 'role_members', (), 'role_members'),
url(r'^permissions/multiple/grant/$', 'permission_grant', (), 'permission_multiple_grant'), url(r'^permissions/multiple/grant/$', 'permission_grant', (), 'permission_multiple_grant'),
url(r'^permissions/multiple/revoke/$', 'permission_revoke', (), 'permission_multiple_revoke'), url(r'^permissions/multiple/revoke/$', 'permission_revoke', (), 'permission_multiple_revoke'),
) )

View File

@@ -24,7 +24,7 @@ from .models import Role, Permission, PermissionHolder, RoleMember
from .forms import RoleForm, RoleForm_view from .forms import RoleForm, RoleForm_view
from .permissions import (PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT, from .permissions import (PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT,
PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE, PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE,
PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE) PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE)
from .widgets import role_permission_link from .widgets import role_permission_link
@@ -133,20 +133,20 @@ def permission_grant(request):
permission = Permission.objects.get({'pk': item_properties['permission_id']}) permission = Permission.objects.get({'pk': item_properties['permission_id']})
except Permission.DoesNotExist: except Permission.DoesNotExist:
raise Http404 raise Http404
ct = get_object_or_404(ContentType, app_label=item_properties['requester_app_label'], model=item_properties['requester_model']) ct = get_object_or_404(ContentType, app_label=item_properties['requester_app_label'], model=item_properties['requester_model'])
requester_model = ct.model_class() requester_model = ct.model_class()
requester = get_object_or_404(requester_model, pk=item_properties['requester_id']) requester = get_object_or_404(requester_model, pk=item_properties['requester_id'])
items.append({'requester': requester, 'permission': permission}) items.append({'requester': requester, 'permission': permission})
sorted_items = sorted(items, key=operator.itemgetter('requester')) sorted_items = sorted(items, key=operator.itemgetter('requester'))
# Group items by requester # Group items by requester
groups = itertools.groupby(sorted_items, key=operator.itemgetter('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] grouped_items = [(grouper, [permission['permission'] for permission in group_data]) for grouper, group_data in groups]
# Warning: trial and error black magic ahead # 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]) 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: if len(grouped_items) == 1 and len(grouped_items[0][1]) == 1:
permissions_label = _(u'permission') permissions_label = _(u'permission')
else: else:
@@ -174,13 +174,13 @@ def permission_grant(request):
'permissions_label': permissions_label, 'permissions_label': permissions_label,
'title_suffix': title_suffix, 'title_suffix': title_suffix,
} }
if len(grouped_items) == 1: if len(grouped_items) == 1:
context['object'] = grouped_items[0][0] context['object'] = grouped_items[0][0]
return render_to_response('generic_confirm.html', context, return render_to_response('generic_confirm.html', context,
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def permission_revoke(request): def permission_revoke(request):
Permission.objects.check_permissions(request.user, [PERMISSION_PERMISSION_REVOKE]) 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']}) permission = Permission.objects.get({'pk': item_properties['permission_id']})
except Permission.DoesNotExist: except Permission.DoesNotExist:
raise Http404 raise Http404
ct = get_object_or_404(ContentType, app_label=item_properties['requester_app_label'], model=item_properties['requester_model']) ct = get_object_or_404(ContentType, app_label=item_properties['requester_app_label'], model=item_properties['requester_model'])
requester_model = ct.model_class() requester_model = ct.model_class()
requester = get_object_or_404(requester_model, pk=item_properties['requester_id']) requester = get_object_or_404(requester_model, pk=item_properties['requester_id'])
items.append({'requester': requester, 'permission': permission}) items.append({'requester': requester, 'permission': permission})
sorted_items = sorted(items, key=operator.itemgetter('requester')) sorted_items = sorted(items, key=operator.itemgetter('requester'))
# Group items by requester # Group items by requester
groups = itertools.groupby(sorted_items, key=operator.itemgetter('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] grouped_items = [(grouper, [permission['permission'] for permission in group_data]) for grouper, group_data in groups]
# Warning: trial and error black magic ahead # 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]) 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: if len(grouped_items) == 1 and len(grouped_items[0][1]) == 1:
permissions_label = _(u'permission') permissions_label = _(u'permission')
else: else:
@@ -238,7 +238,7 @@ def permission_revoke(request):
'permissions_label': permissions_label, 'permissions_label': permissions_label,
'title_suffix': title_suffix, 'title_suffix': title_suffix,
} }
if len(grouped_items) == 1: if len(grouped_items) == 1:
context['object'] = grouped_items[0][0] context['object'] = grouped_items[0][0]
@@ -259,7 +259,7 @@ def get_role_members(role, separate=False):
user_ct = ContentType.objects.get(model='user') user_ct = ContentType.objects.get(model='user')
group_ct = ContentType.objects.get(model='group') group_ct = ContentType.objects.get(model='group')
anonymous = ContentType.objects.get(model='anonymoususersingleton') anonymous = ContentType.objects.get(model='anonymoususersingleton')
users = role.members(filter_dict={'member_type': user_ct}) users = role.members(filter_dict={'member_type': user_ct})
groups = role.members(filter_dict={'member_type': group_ct}) groups = role.members(filter_dict={'member_type': group_ct})
anonymous = role.members(filter_dict={'member_type': anonymous}) anonymous = role.members(filter_dict={'member_type': anonymous})
@@ -268,34 +268,34 @@ def get_role_members(role, separate=False):
return users, groups, anonymous return users, groups, anonymous
else: else:
members = [] members = []
if users: if users:
members.append((_(u'Users'), _as_choice_list(list(users)))) members.append((_(u'Users'), _as_choice_list(list(users))))
if groups: if groups:
members.append((_(u'Groups'), _as_choice_list(list(groups)))) members.append((_(u'Groups'), _as_choice_list(list(groups))))
if anonymous: if anonymous:
members.append((_(u'Special'), _as_choice_list(list(anonymous)))) members.append((_(u'Special'), _as_choice_list(list(anonymous))))
return members return members
def get_non_role_members(role): 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) member_users, member_groups, member_anonymous = get_role_members(role, separate=True)
staff_users = User.objects.filter(is_staff=True) staff_users = User.objects.filter(is_staff=True)
super_users = User.objects.filter(is_superuser=True) super_users = User.objects.filter(is_superuser=True)
users = set(User.objects.all()) - set(member_users) - set(staff_users) - set(super_users) users = set(User.objects.all()) - set(member_users) - set(staff_users) - set(super_users)
groups = set(Group.objects.all()) - set(member_groups) groups = set(Group.objects.all()) - set(member_groups)
anonymous = set([AnonymousUserSingleton.objects.get()]) - set(member_anonymous) anonymous = set([AnonymousUserSingleton.objects.get()]) - set(member_anonymous)
non_members = [] non_members = []
if users: if users:
non_members.append((_(u'Users'), _as_choice_list(list(users)))) non_members.append((_(u'Users'), _as_choice_list(list(users))))
if groups: if groups:
non_members.append((_(u'Groups'), _as_choice_list(list(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_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 return non_members

View File

@@ -2,6 +2,7 @@ from django.utils.translation import ugettext_lazy as _
from project_setup.api import register_setup from project_setup.api import register_setup
def is_superuser(context): def is_superuser(context):
return context['request'].user.is_staff or context['request'].user.is_superuser return context['request'].user.is_staff or context['request'].user.is_superuser

View File

@@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2 >>> 1 + 1 == 2
True True
"""} """}

View File

@@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2 >>> 1 + 1 == 2
True True
"""} """}

View File

@@ -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]) Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_NEW_VERSION])
except PermissionDenied: except PermissionDenied:
AccessEntry.objects.check_access(PERMISSION_DOCUMENT_NEW_VERSION, request.user, document) AccessEntry.objects.check_access(PERMISSION_DOCUMENT_NEW_VERSION, request.user, document)
results = get_active_tab_links(document) results = get_active_tab_links(document)
else: else:
Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) 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 expand = False
new_filename = get_form_filename(form) new_filename = get_form_filename(form)
web_form.upload_file(request.FILES['file'], web_form.upload_file(request.FILES['file'],
new_filename, use_file_name=form.cleaned_data.get('use_file_name', False), new_filename, use_file_name=form.cleaned_data.get('use_file_name', False),
document_type=document_type, 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), metadata_dict_list=decode_metadata_from_url(request.GET),
user=request.user, user=request.user,
document=document, document=document,
new_version_data=form.cleaned_data.get('new_version_data') new_version_data=form.cleaned_data.get('new_version_data')
) )
if document: if document:
messages.success(request, _(u'Document version uploaded successfully.')) 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 title = _(u'upload a new version from source: %s') % web_form.title
else: else:
title = _(u'upload a local document from source: %s') % web_form.title title = _(u'upload a local document from source: %s') % web_form.title
subtemplates_list.append({ subtemplates_list.append({
'name': 'generic_form_subtemplate.html', 'name': 'generic_form_subtemplate.html',
'context': { 'context': {
@@ -214,7 +214,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No
expand = False expand = False
new_filename = get_form_filename(form) new_filename = get_form_filename(form)
staging_folder.upload_file(staging_file.upload(), staging_folder.upload_file(staging_file.upload(),
new_filename, use_file_name=form.cleaned_data.get('use_file_name', False), new_filename, use_file_name=form.cleaned_data.get('use_file_name', False),
document_type=document_type, 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), metadata_dict_list=decode_metadata_from_url(request.GET),
user=request.user, user=request.user,
document=document, document=document,
new_version_data=form.cleaned_data.get('new_version_data') new_version_data=form.cleaned_data.get('new_version_data')
) )
if document: if document:
messages.success(request, _(u'Document version from staging file: %s, uploaded successfully.') % staging_file.filename) 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 title = _(u'upload a new version from staging source: %s') % staging_folder.title
else: else:
title = _(u'upload a document from staging source: %s') % staging_folder.title title = _(u'upload a document from staging source: %s') % staging_folder.title
subtemplates_list = [ subtemplates_list = [
{ {
'name': 'generic_form_subtemplate.html', '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, 'hide_link': True,
} }
}, },
] ]
if document: if document:
context['object'] = document context['object'] = document
@@ -290,11 +290,11 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No
}, },
'upload_interactive': { 'upload_interactive': {
'links': results['tab_links'] 'links': results['tab_links']
} }
} }
}, },
}) })
if not document: if not document:
context.update( 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, return render_to_response('generic_form.html', context,
context_instance=RequestContext(request)) context_instance=RequestContext(request))
@@ -420,12 +420,12 @@ def setup_source_list(request, source_type):
} }
return render_to_response('generic_list.html', context, 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): def setup_source_edit(request, source_type, source_id):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT]) Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT])
if source_type == SOURCE_CHOICE_WEB_FORM: if source_type == SOURCE_CHOICE_WEB_FORM:
cls = WebForm cls = WebForm
form_class = WebFormSetupForm form_class = WebFormSetupForm
@@ -435,7 +435,7 @@ def setup_source_edit(request, source_type, source_id):
elif source_type == SOURCE_CHOICE_WATCH: elif source_type == SOURCE_CHOICE_WATCH:
cls = WatchFolder cls = WatchFolder
form_class = WatchFolderSetupForm form_class = WatchFolderSetupForm
source = get_object_or_404(cls, pk=source_id) source = get_object_or_404(cls, pk=source_id)
next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', '/'))) 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 cls = WatchFolder
form_icon = u'folder_delete.png' form_icon = u'folder_delete.png'
redirect_view = 'setup_watch_folder_list' redirect_view = 'setup_watch_folder_list'
redirect_view = reverse('setup_source_list', args=[source_type]) 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))) 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) source = get_object_or_404(cls, pk=source_id)
if request.method == 'POST': if request.method == 'POST':
try: try:
source.delete() source.delete()
@@ -511,7 +511,7 @@ def setup_source_delete(request, source_type, source_id):
def setup_source_create(request, source_type): def setup_source_create(request, source_type):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_CREATE]) Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_CREATE])
if source_type == SOURCE_CHOICE_WEB_FORM: if source_type == SOURCE_CHOICE_WEB_FORM:
cls = WebForm cls = WebForm
form_class = WebFormSetupForm form_class = WebFormSetupForm
@@ -521,7 +521,7 @@ def setup_source_create(request, source_type):
elif source_type == SOURCE_CHOICE_WATCH: elif source_type == SOURCE_CHOICE_WATCH:
cls = WatchFolder cls = WatchFolder
form_class = WatchFolderSetupForm form_class = WatchFolderSetupForm
if request.method == 'POST': if request.method == 'POST':
form = form_class(data=request.POST) form = form_class(data=request.POST)
if form.is_valid(): 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): def setup_source_transformation_list(request, source_type, source_id):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT]) Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT])
if source_type == SOURCE_CHOICE_WEB_FORM: if source_type == SOURCE_CHOICE_WEB_FORM:
cls = WebForm cls = WebForm
elif source_type == SOURCE_CHOICE_STAGING: 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, return render_to_response('generic_list.html', context,
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def setup_source_transformation_edit(request, transformation_id): def setup_source_transformation_edit(request, transformation_id):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT]) Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT])
source_transformation = get_object_or_404(SourceTransformation, pk=transformation_id) 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]) 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))) 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, 'next': next,
}, },
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def setup_source_transformation_delete(request, transformation_id): def setup_source_transformation_delete(request, transformation_id):
@@ -632,14 +632,14 @@ def setup_source_transformation_delete(request, transformation_id):
'navigation_object_list': [ 'navigation_object_list': [
{'object': 'source', 'name': _(u'source')}, {'object': 'source', 'name': _(u'source')},
{'object': 'transformation', 'name': _(u'transformation')} {'object': 'transformation', 'name': _(u'transformation')}
], ],
'title': _(u'Are you sure you wish to delete source transformation "%(transformation)s"') % { 'title': _(u'Are you sure you wish to delete source transformation "%(transformation)s"') % {
'transformation': source_transformation.get_transformation_display(), 'transformation': source_transformation.get_transformation_display(),
}, },
'previous': previous, 'previous': previous,
'form_icon': u'shape_square_delete.png', '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): 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 cls = StagingFolder
elif source_type == SOURCE_CHOICE_WATCH: elif source_type == SOURCE_CHOICE_WATCH:
cls = WatchFolder cls = WatchFolder
source = get_object_or_404(cls, pk=source_id) source = get_object_or_404(cls, pk=source_id)
redirect_view = reverse('setup_source_transformation_list', args=[source.source_type, source.pk]) redirect_view = reverse('setup_source_transformation_list', args=[source.source_type, source.pk])
if request.method == 'POST': if request.method == 'POST':
form = SourceTransformationForm_create(request.POST) form = SourceTransformationForm_create(request.POST)
if form.is_valid(): 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) messages.error(request, _(u'Error creating source transformation; %s') % e)
else: else:
form = SourceTransformationForm_create() form = SourceTransformationForm_create()
return render_to_response('generic_form.html', { return render_to_response('generic_form.html', {
'form': form, 'form': form,
'source': source, 'source': source,

View File

@@ -18,9 +18,9 @@ logger = logging.getLogger(__name__)
class TagForm(forms.Form): class TagForm(forms.Form):
''' """
Form to edit an existing tag's properties Form to edit an existing tag's properties
''' """
name = forms.CharField(label=_(u'Name')) name = forms.CharField(label=_(u'Name'))
color = forms.ChoiceField(choices=COLOR_CHOICES, label=_(u'Color')) 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]) Permission.objects.check_permissions(user, [PERMISSION_TAG_VIEW])
except PermissionDenied: except PermissionDenied:
queryset = AccessEntry.objects.filter_objects_by_access(PERMISSION_TAG_VIEW, user, queryset) queryset = AccessEntry.objects.filter_objects_by_access(PERMISSION_TAG_VIEW, user, queryset)
self.fields['tag'] = forms.ModelChoiceField( self.fields['tag'] = forms.ModelChoiceField(
queryset=queryset, queryset=queryset,
label=_(u'Tags')) label=_(u'Tags'))

View File

@@ -12,6 +12,6 @@ urlpatterns = patterns('tags.views',
url(r'^multiple/remove_from_document/(?P<document_id>\d+)/$', 'tag_multiple_remove', (), 'tag_multiple_remove'), url(r'^multiple/remove_from_document/(?P<document_id>\d+)/$', 'tag_multiple_remove', (), 'tag_multiple_remove'),
url(r'^document/(?P<document_id>\d+)/add/$', 'tag_attach', (), 'tag_attach'), url(r'^document/(?P<document_id>\d+)/add/$', 'tag_attach', (), 'tag_attach'),
url(r'^document/(?P<document_id>\d+)/list/$', 'document_tags', (), 'document_tags'), url(r'^document/(?P<document_id>\d+)/list/$', 'document_tags', (), 'document_tags'),
url(r'^(?P<tag_pk>\d+)/acl/list/$', 'tag_acl_list', (), 'tag_acl_list'), url(r'^(?P<tag_pk>\d+)/acl/list/$', 'tag_acl_list', (), 'tag_acl_list'),
) )

View File

@@ -40,11 +40,11 @@ def tag_create(request):
if tag_name in Tag.objects.values_list('name', flat=True): if tag_name in Tag.objects.values_list('name', flat=True):
messages.error(request, _(u'Tag already exists.')) messages.error(request, _(u'Tag already exists.'))
return HttpResponseRedirect(previous) return HttpResponseRedirect(previous)
tag = Tag(name=tag_name) tag = Tag(name=tag_name)
tag.save() tag.save()
TagProperties(tag=tag, color=form.cleaned_data['color']).save() TagProperties(tag=tag, color=form.cleaned_data['color']).save()
messages.success(request, _(u'Tag created succesfully.')) messages.success(request, _(u'Tag created succesfully.'))
return HttpResponseRedirect(redirect_url) return HttpResponseRedirect(redirect_url)
else: else:
@@ -54,7 +54,7 @@ def tag_create(request):
'title': _(u'create tag'), 'title': _(u'create tag'),
'form': form, 'form': form,
}, },
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def tag_attach(request, document_id): def tag_attach(request, document_id):
@@ -63,7 +63,7 @@ def tag_attach(request, document_id):
try: try:
Permission.objects.check_permissions(request.user, [PERMISSION_TAG_ATTACH]) Permission.objects.check_permissions(request.user, [PERMISSION_TAG_ATTACH])
except PermissionDenied: 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])))) 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) queryset = AccessEntry.objects.filter_objects_by_access(PERMISSION_TAG_VIEW, request.user, queryset)
context['object_list'] = queryset context['object_list'] = queryset
return render_to_response('generic_list.html', return render_to_response('generic_list.html',
context, context,
context_instance=RequestContext(request) context_instance=RequestContext(request)
@@ -126,11 +126,11 @@ def tag_delete(request, tag_id=None, tag_id_list=None):
else: else:
messages.error(request, _(u'Must provide at least one tag.')) messages.error(request, _(u'Must provide at least one tag.'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
try: try:
Permission.objects.check_permissions(request.user, [PERMISSION_TAG_DELETE]) Permission.objects.check_permissions(request.user, [PERMISSION_TAG_DELETE])
except PermissionDenied: 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', '/'))) 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', '/'))) 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: try:
Permission.objects.check_permissions(request.user, [PERMISSION_TAG_EDIT]) Permission.objects.check_permissions(request.user, [PERMISSION_TAG_EDIT])
except PermissionDenied: 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': if request.method == 'POST':
form = TagForm(request.POST) form = TagForm(request.POST)
@@ -227,13 +227,13 @@ def document_tags(request, document_id):
Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW])
except PermissionDenied: except PermissionDenied:
AccessEntry.objects.check_access(PERMISSION_DOCUMENT_VIEW, request.user, document) AccessEntry.objects.check_access(PERMISSION_DOCUMENT_VIEW, request.user, document)
context = { context = {
'object': document, 'object': document,
'document': document, 'document': document,
'title': _(u'tags for: %s') % document, 'title': _(u'tags for: %s') % document,
} }
return tag_list(request, queryset=document.tags.all(), extra_context=context) 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: try:
Permission.objects.check_permissions(request.user, [PERMISSION_TAG_REMOVE]) Permission.objects.check_permissions(request.user, [PERMISSION_TAG_REMOVE])
except PermissionDenied: 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 post_action_redirect = None

View File

@@ -3,9 +3,9 @@ from django.utils.safestring import mark_safe
def get_tags_inline_widget(document): def get_tags_inline_widget(document):
''' """
A tag widget that includes the total tag count for a given document A tag widget that includes the total tag count for a given document
''' """
tags_template = [] tags_template = []
tag_count = document.tags.count() tag_count = document.tags.count()
if tag_count: if tag_count:
@@ -13,17 +13,17 @@ def get_tags_inline_widget(document):
for tag in document.tags.all(): for tag in document.tags.all():
tags_template.append(u'<ul class="tags"><li style="background: %s;">%s</li></ul>' % (tag.tagproperties_set.get().get_color_code(), tag.name)) tags_template.append(u'<ul class="tags"><li style="background: %s;">%s</li></ul>' % (tag.tagproperties_set.get().get_color_code(), tag.name))
tags_template.append(u'<div style="clear:both;"></div>') tags_template.append(u'<div style="clear:both;"></div>')
tags_template.append(u'</div>') tags_template.append(u'</div>')
return mark_safe(u''.join(tags_template)) return mark_safe(u''.join(tags_template))
def get_tags_inline_widget_simple(document): def get_tags_inline_widget_simple(document):
''' """
A tag widget that only displayes the rectangular colored boxes for a A tag widget that only displayes the rectangular colored boxes for a
given document given document
''' """
tags_template = [] tags_template = []
tag_count = document.tags.count() tag_count = document.tags.count()