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