PEP8 Cleanusp (549 warnings).

This commit is contained in:
Roberto Rosario
2015-09-16 04:15:10 -04:00
parent 6a10c6e19b
commit 6ca6cd9f21
27 changed files with 367 additions and 204 deletions

View File

@@ -3,7 +3,7 @@ python:
- 2.7
env:
global:
- TEST_APPS="acls authentication django_gpg document_indexing document_signatures documents dynamic_search folders lock_manager metadata ocr permissions sources tags"
- TEST_APPS="acls authentication checkouts django_gpg document_indexing document_signatures documents dynamic_search folders lock_manager metadata ocr permissions sources tags"
matrix:
- DB=mysql
- DB=postgres

View File

@@ -11,10 +11,9 @@ from django.utils.timezone import now
from authentication.tests.literals import (
TEST_ADMIN_USERNAME, TEST_ADMIN_EMAIL, TEST_ADMIN_PASSWORD
)
from documents.models import Document, DocumentType
from documents.models import DocumentType
from documents.tests.literals import (
TEST_DOCUMENT_TYPE, TEST_DOCUMENT_PATH, TEST_MULTI_PAGE_TIFF_PATH,
TEST_OFFICE_DOCUMENT_PATH, TEST_SMALL_DOCUMENT_PATH
TEST_DOCUMENT_TYPE, TEST_DOCUMENT_PATH, TEST_SMALL_DOCUMENT_PATH
)
from ..exceptions import (
@@ -54,7 +53,9 @@ class DocumentCheckoutTestCase(TestCase):
self.assertTrue(self.document.is_checked_out())
self.assertTrue(
DocumentCheckout.objects.is_document_checked_out(document=self.document)
DocumentCheckout.objects.is_document_checked_out(
document=self.document
)
)
def test_version_creation_blocking(self):
@@ -81,7 +82,9 @@ class DocumentCheckoutTestCase(TestCase):
self.assertFalse(self.document.is_checked_out())
self.assertFalse(
DocumentCheckout.objects.is_document_checked_out(document=self.document)
DocumentCheckout.objects.is_document_checked_out(
document=self.document
)
)
def test_double_checkout(self):
@@ -94,8 +97,9 @@ class DocumentCheckoutTestCase(TestCase):
with self.assertRaises(DocumentAlreadyCheckedOut):
DocumentCheckout.objects.checkout_document(
document=self.document, expiration_datetime=expiration_datetime,
user=self.admin_user, block_new_version=True
document=self.document,
expiration_datetime=expiration_datetime, user=self.admin_user,
block_new_version=True
)
def test_checkin_without_checkout(self):

View File

@@ -142,7 +142,9 @@ def checkout_info(request, document_pk):
) % render_date_object(checkout_info.expiration_datetime)
)
paragraphs.append(
_('New versions allowed: %s') % (_('Yes') if not checkout_info.block_new_version else _('No'))
_(
'New versions allowed: %s'
) % (_('Yes') if not checkout_info.block_new_version else _('No'))
)
return render_to_response(
@@ -198,7 +200,8 @@ class DocumentCheckinView(ConfirmView):
)
except PermissionDenied:
AccessControlList.objects.check_access(
permission_document_checkin_override, request.user, document
permission_document_checkin_override, request.user,
document
)
try:

View File

@@ -6,7 +6,6 @@ import logging
from django.utils.timezone import now
from mayan.celery import app
from common.models import SharedUploadedFile
from .literals import UPLOAD_EXPIRATION_INTERVAL
from .models import SharedUploadedFile

View File

@@ -194,7 +194,9 @@ def multi_object_action_view(request):
)
action = request.GET.get('action', None)
id_list = ','.join([key[3:] for key in request.GET.keys() if key.startswith('pk_')])
id_list = ','.join(
[key[3:] for key in request.GET.keys() if key.startswith('pk_')]
)
items_property_list = [
(key[11:]) for key in request.GET.keys() if key.startswith('properties_')
]

View File

@@ -14,8 +14,8 @@ link_private_keys = Link(
text=_('Private keys'), view='django_gpg:key_private_list'
)
link_public_keys = Link(
icon='fa fa-key', permissions=(permission_key_view,), text=_('Public keys'),
view='django_gpg:key_public_list'
icon='fa fa-key', permissions=(permission_key_view,),
text=_('Public keys'), view='django_gpg:key_public_list'
)
link_key_delete = Link(
permissions=(permission_key_delete,), tags='dangerous', text=_('Delete'),

View File

@@ -87,7 +87,9 @@ class SetupIndexTreeTemplateListView(SingleObjectListView):
return get_object_or_404(Index, pk=self.kwargs['pk'])
def get_queryset(self):
return self.get_index().template_root.get_descendants(include_self=True)
return self.get_index().template_root.get_descendants(
include_self=True
)
def get_extra_context(self):
return {
@@ -128,7 +130,9 @@ class SetupIndexDocumentTypesView(AssignRemoveView):
def get_extra_context(self):
return {
'object': self.get_object(),
'title': _('Document types linked to index: %s') % self.get_object()
'title': _(
'Document types linked to index: %s'
) % self.get_object()
}
@@ -251,7 +255,9 @@ class IndexInstanceNodeView(DocumentListView, SingleObjectListView):
if self.index_instance:
if self.index_instance.index_template_node.link_documents:
return DocumentListView.dispatch(self, request, *args, **kwargs)
return DocumentListView.dispatch(
self, request, *args, **kwargs
)
return SingleObjectListView.dispatch(self, request, *args, **kwargs)
@@ -276,7 +282,9 @@ class IndexInstanceNodeView(DocumentListView, SingleObjectListView):
'hide_links': True,
'object': self.index_instance,
'title': mark_safe(
_('Contents for index: %s') % get_breadcrumbs(self.index_instance)
_(
'Contents for index: %s'
) % get_breadcrumbs(self.index_instance)
)
}

View File

@@ -37,17 +37,23 @@ def document_verify(request, document_pk):
request.user, (permission_document_verify,)
)
except PermissionDenied:
AccessControlList.objects.check_access(permission_document_verify, request.user, document)
AccessControlList.objects.check_access(
permission_document_verify, request.user, document
)
document.add_as_recent_document_for_user(request.user)
try:
signature = DocumentVersionSignature.objects.verify_signature(document.latest_version)
signature = DocumentVersionSignature.objects.verify_signature(
document.latest_version
)
except AttributeError:
signature_state = SIGNATURE_STATES.get(SIGNATURE_STATE_NONE)
signature = None
else:
signature_state = SIGNATURE_STATES.get(getattr(signature, 'status', None))
signature_state = SIGNATURE_STATES.get(
getattr(signature, 'status', None)
)
paragraphs = [_('Signature status: %s') % signature_state['text']]
@@ -65,7 +71,9 @@ def document_verify(request, document_pk):
_('Signature ID: %s') % signature.signature_id,
_('Signature type: %s') % signature_type,
_('Key ID: %s') % signature.key_id,
_('Timestamp: %s') % datetime.fromtimestamp(int(signature.sig_timestamp)),
_('Timestamp: %s') % datetime.fromtimestamp(
int(signature.sig_timestamp)
),
_('Signee: %s') % force_escape(getattr(signature, 'username', '')),
]
)
@@ -82,9 +90,13 @@ def document_signature_upload(request, document_pk):
document = get_object_or_404(Document, pk=document_pk)
try:
Permission.check_permissions(request.user, (permission_signature_upload,))
Permission.check_permissions(
request.user, (permission_signature_upload,)
)
except PermissionDenied:
AccessControlList.objects.check_access(permission_signature_upload, request.user, document)
AccessControlList.objects.check_access(
permission_signature_upload, request.user, document
)
document.add_as_recent_document_for_user(request.user)
@@ -96,8 +108,12 @@ def document_signature_upload(request, document_pk):
form = DetachedSignatureForm(request.POST, request.FILES)
if form.is_valid():
try:
DocumentVersionSignature.objects.add_detached_signature(document.latest_version, request.FILES['file'])
messages.success(request, _('Detached signature uploaded successfully.'))
DocumentVersionSignature.objects.add_detached_signature(
document.latest_version, request.FILES['file']
)
messages.success(
request, _('Detached signature uploaded successfully.')
)
return HttpResponseRedirect(next)
except Exception as exception:
messages.error(request, exception)
@@ -118,13 +134,19 @@ def document_signature_download(request, document_pk):
document = get_object_or_404(Document, pk=document_pk)
try:
Permission.check_permissions(request.user, (permission_signature_download,))
Permission.check_permissions(
request.user, (permission_signature_download,)
)
except PermissionDenied:
AccessControlList.objects.check_access(permission_signature_download, request.user, document)
AccessControlList.objects.check_access(
permission_signature_download, request.user, document
)
try:
if DocumentVersionSignature.objects.has_detached_signature(document.latest_version):
signature = DocumentVersionSignature.objects.detached_signature(document.latest_version)
signature = DocumentVersionSignature.objects.detached_signature(
document.latest_version
)
return serve_file(
request,
signature,
@@ -142,9 +164,13 @@ def document_signature_delete(request, document_pk):
document = get_object_or_404(Document, pk=document_pk)
try:
Permission.check_permissions(request.user, (permission_signature_delete,))
Permission.check_permissions(
request.user, (permission_signature_delete,)
)
except PermissionDenied:
AccessControlList.objects.check_access(permission_signature_delete, request.user, document)
AccessControlList.objects.check_access(
permission_signature_delete, request.user, document
)
document.add_as_recent_document_for_user(request.user)
@@ -154,17 +180,27 @@ def document_signature_delete(request, document_pk):
if request.method == 'POST':
try:
DocumentVersionSignature.objects.clear_detached_signature(document.latest_version)
messages.success(request, _('Detached signature deleted successfully.'))
DocumentVersionSignature.objects.clear_detached_signature(
document.latest_version
)
messages.success(
request, _('Detached signature deleted successfully.')
)
return HttpResponseRedirect(next)
except Exception as exception:
messages.error(request, _('Error while deleting the detached signature; %s') % exception)
messages.error(
request, _(
'Error while deleting the detached signature; %s'
) % exception
)
return HttpResponseRedirect(previous)
return render_to_response('appearance/generic_confirm.html', {
'title': _('Delete the detached signature from document: %s?') % document,
'next': next,
'previous': previous,
'object': document,
'delete_view': True,
'next': next,
'object': document,
'previous': previous,
'title': _(
'Delete the detached signature from document: %s?'
) % document,
}, context_instance=RequestContext(request))

View File

@@ -20,4 +20,3 @@ PAGE_RANGE_RANGE = 'range'
PAGE_RANGE_CHOICES = (
(PAGE_RANGE_ALL, _('All pages')), (PAGE_RANGE_RANGE, _('Page range'))
)

View File

@@ -4,12 +4,7 @@ import datetime
import qsstats
from django.db.models import Avg, Count, Max, Min
from django.utils.translation import ugettext_lazy as _
from statistics.classes import Statistic
from .models import Document, DocumentType, DocumentPage, DocumentVersion
from .models import Document, DocumentPage, DocumentVersion
def new_documents_per_month():
@@ -50,6 +45,7 @@ def new_document_pages_per_month():
}
}
def total_document_per_month():
qss = qsstats.QuerySetStats(Document.objects.all(), 'date_added')
this_year = datetime.date.today().year

View File

@@ -31,9 +31,7 @@ from converter.permissions import permission_transformation_delete
from filetransfers.api import serve_file
from permissions import Permission
from .events import (
event_document_properties_edit, event_document_type_change
)
from .events import event_document_type_change
from .forms import (
DocumentDownloadForm, DocumentForm, DocumentPageForm, DocumentPreviewForm,
DocumentPropertiesForm, DocumentTypeSelectForm,

View File

@@ -7,7 +7,7 @@ from django.test import TestCase, override_settings
from documents.models import DocumentType
from documents.tests import TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE
from ..models import MetadataType, DocumentMetadata, DocumentTypeMetadataType
from ..models import MetadataType, DocumentMetadata
TEST_DEFAULT_VALUE = 'test'
TEST_LOOKUP_TEMPLATE = '1,2,3'

View File

@@ -14,5 +14,3 @@ class DocumentTypeSettingsAdmin(admin.ModelAdmin):
class DocumentVersionOCRErrorAdmin(admin.ModelAdmin):
list_display = ('document_version', 'datetime_submitted')
readonly_fields = ('document_version', 'datetime_submitted', 'result')

View File

@@ -14,10 +14,29 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='DocumentVersionOCRError',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('datetime_submitted', models.DateTimeField(auto_now=True, verbose_name='Date time submitted', db_index=True)),
('result', models.TextField(null=True, verbose_name='Result', blank=True)),
('document_version', models.ForeignKey(verbose_name='Document version', to='documents.DocumentVersion')),
(
'id', models.AutoField(
verbose_name='ID', serialize=False, auto_created=True,
primary_key=True
)
),
(
'datetime_submitted', models.DateTimeField(
auto_now=True, verbose_name='Date time submitted',
db_index=True
)
),
(
'result', models.TextField(
null=True, verbose_name='Result', blank=True
)
),
(
'document_version', models.ForeignKey(
verbose_name='Document version',
to='documents.DocumentVersion'
)
),
],
options={
'ordering': ('datetime_submitted',),

View File

@@ -15,9 +15,23 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='DocumentPageContent',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('content', models.TextField(verbose_name='Content', blank=True)),
('document_page', models.OneToOneField(related_name='ocr_content', verbose_name='Document page', to='documents.DocumentPage')),
(
'id', models.AutoField(
verbose_name='ID', serialize=False, auto_created=True,
primary_key=True
)
),
(
'content', models.TextField(
verbose_name='Content', blank=True
)
),
(
'document_page', models.OneToOneField(
related_name='ocr_content',
verbose_name='Document page', to='documents.DocumentPage'
)
),
],
options={
'verbose_name': 'Document page content',

View File

@@ -26,9 +26,26 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='DocumentTypeSettings',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('auto_ocr', models.BooleanField(default=True, verbose_name='Automatically queue newly created documents for OCR.')),
('document_type', models.OneToOneField(related_name='ocr_settings', verbose_name='Document type', to='documents.DocumentType')),
(
'id', models.AutoField(
verbose_name='ID', serialize=False, auto_created=True,
primary_key=True
)
),
(
'auto_ocr', models.BooleanField(
default=True,
verbose_name='Automatically queue newly created '
'documents for OCR.'
)
),
(
'document_type', models.OneToOneField(
related_name='ocr_settings',
verbose_name='Document type',
to='documents.DocumentType'
)
),
],
options={
'verbose_name': 'Document type settings',

View File

@@ -10,7 +10,6 @@ from documents.tests import (
from ..classes import TextExtractor
from ..parsers import PDFMinerParser, PopplerParser
from ..settings import setting_auto_ocr
@override_settings(OCR_AUTO_OCR=False)

View File

@@ -235,7 +235,11 @@ def entry_re_queue(request, pk=None, pk_list=None):
}
)
except DocumentVersion.DoesNotExist:
messages.error(request, _('Document version id#: %d, no longer exists.') % entry.document_version_id)
messages.error(
request, _(
'Document version id#: %d, no longer exists.'
) % entry.document_version_id
)
return HttpResponseRedirect(next)
context = {

View File

@@ -14,9 +14,19 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='PermissionHolder',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
(
'id', models.AutoField(
verbose_name='ID', serialize=False, auto_created=True,
primary_key=True
)
),
('holder_id', models.PositiveIntegerField()),
('holder_type', models.ForeignKey(related_name='permission_holder', to='contenttypes.ContentType')),
(
'holder_type', models.ForeignKey(
related_name='permission_holder',
to='contenttypes.ContentType'
)
),
],
options={
'verbose_name': 'Permission holder',
@@ -27,9 +37,18 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Role',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
(
'id', models.AutoField(
verbose_name='ID', serialize=False, auto_created=True,
primary_key=True
)
),
('name', models.CharField(unique=True, max_length=64)),
('label', models.CharField(unique=True, max_length=64, verbose_name='Label')),
(
'label', models.CharField(
unique=True, max_length=64, verbose_name='Label'
)
),
],
options={
'ordering': ('label',),
@@ -41,10 +60,24 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='RoleMember',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
(
'id', models.AutoField(
verbose_name='ID', serialize=False, auto_created=True,
primary_key=True
)
),
('member_id', models.PositiveIntegerField()),
('member_type', models.ForeignKey(related_name='role_member', to='contenttypes.ContentType')),
('role', models.ForeignKey(verbose_name='Role', to='permissions.Role')),
(
'member_type', models.ForeignKey(
related_name='role_member',
to='contenttypes.ContentType'
)
),
(
'role', models.ForeignKey(
verbose_name='Role', to='permissions.Role'
)
),
],
options={
'verbose_name': 'Role member',
@@ -55,8 +88,17 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='StoredPermission',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('namespace', models.CharField(max_length=64, verbose_name='Namespace')),
(
'id', models.AutoField(
verbose_name='ID', serialize=False, auto_created=True,
primary_key=True
)
),
(
'namespace', models.CharField(
max_length=64, verbose_name='Namespace'
)
),
('name', models.CharField(max_length=64, verbose_name='Name')),
],
options={
@@ -73,7 +115,9 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='permissionholder',
name='permission',
field=models.ForeignKey(verbose_name='Permission', to='permissions.StoredPermission'),
field=models.ForeignKey(
verbose_name='Permission', to='permissions.StoredPermission'
),
preserve_default=True,
),
]

View File

@@ -37,13 +37,18 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='role',
name='groups',
field=models.ManyToManyField(related_name='roles', verbose_name='Groups', to='auth.Group'),
field=models.ManyToManyField(
related_name='roles', verbose_name='Groups', to='auth.Group'
),
preserve_default=True,
),
migrations.AddField(
model_name='role',
name='permissions',
field=models.ManyToManyField(related_name='roles', verbose_name='Permissions', to='permissions.StoredPermission'),
field=models.ManyToManyField(
related_name='roles', verbose_name='Permissions',
to='permissions.StoredPermission'
),
preserve_default=True,
),
]

View File

@@ -1,7 +1,5 @@
from __future__ import unicode_literals
from importlib import import_module
from django.utils.translation import ugettext_lazy as _
from common import MayanAppConfig, menu_setup, menu_object

View File

@@ -1,6 +1,5 @@
from __future__ import unicode_literals
from celery.schedules import crontab
from kombu import Exchange, Queue
from django.utils.translation import ugettext_lazy as _

View File

@@ -1,10 +1,7 @@
from __future__ import unicode_literals
import json
from django.core.urlresolvers import reverse
from django.http import Http404
from django.shortcuts import HttpResponseRedirect
from django.utils.translation import ugettext_lazy as _
from common.generics import (

View File

@@ -14,10 +14,35 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Tag',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('label', models.CharField(unique=True, max_length=128, verbose_name='Label', db_index=True)),
('color', models.CharField(max_length=3, verbose_name='Color', choices=[('blu', 'Blue'), ('cya', 'Cyan'), ('crl', 'Coral'), ('gry', 'Green-Yellow'), ('kki', 'Khaki'), ('lig', 'LightGrey'), ('mag', 'Magenta'), ('red', 'Red'), ('org', 'Orange'), ('yel', 'Yellow')])),
('documents', models.ManyToManyField(related_name='tags', verbose_name='Documents', to='documents.Document')),
(
'id', models.AutoField(
verbose_name='ID', serialize=False, auto_created=True,
primary_key=True
)
),
(
'label', models.CharField(
unique=True, max_length=128, verbose_name='Label',
db_index=True
)
),
(
'color', models.CharField(
max_length=3, verbose_name='Color', choices=[
('blu', 'Blue'), ('cya', 'Cyan'), ('crl', 'Coral'),
('gry', 'Green-Yellow'), ('kki', 'Khaki'),
('lig', 'LightGrey'), ('mag', 'Magenta'),
('red', 'Red'), ('org', 'Orange'),
('yel', 'Yellow')
]
)
),
(
'documents', models.ManyToManyField(
related_name='tags', verbose_name='Documents',
to='documents.Document'
)
),
],
options={
'verbose_name': 'Tag',

View File

@@ -24,19 +24,80 @@ from .permissions import (
)
class UserListView(SingleObjectListView):
view_permission = permission_user_view
class GroupCreateView(SingleObjectCreateView):
extra_context = {'title': _('Create new group')}
fields = ('name',)
model = Group
post_action_redirect = reverse_lazy('user_management:group_list')
view_permission = permission_group_create
class GroupEditView(SingleObjectEditView):
fields = ('name',)
model = Group
post_action_redirect = reverse_lazy('user_management:group_list')
view_permission = permission_group_edit
def get_extra_context(self):
return {
'hide_link': True,
'title': _('Users'),
'object': self.get_object(),
'title': _('Edit group: %s') % self.get_object(),
}
def get_queryset(self):
return get_user_model().objects.exclude(
is_superuser=True
).exclude(is_staff=True).order_by('last_name', 'first_name')
class GroupListView(SingleObjectListView):
extra_context = {
'hide_link': True,
'title': _('Groups'),
}
model = Group
view_permission = permission_group_view
class GroupDeleteView(SingleObjectDeleteView):
model = Group
post_action_redirect = reverse_lazy('user_management:group_list')
view_permission = permission_group_delete
def get_extra_context(self):
return {
'object': self.get_object(),
'title': _('Delete the group: %s?') % self.get_object(),
}
class GroupMembersView(AssignRemoveView):
decode_content_type = True
left_list_title = _('Available groups')
right_list_title = _('Members of groups')
view_permission = permission_group_edit
def add(self, item):
self.get_object().user_set.add(item)
def get_extra_context(self):
return {
'object': self.get_object(),
'title': _('Members of group: %s') % self.get_object()
}
def get_object(self):
return get_object_or_404(Group, pk=self.kwargs['pk'])
def left_list(self):
return AssignRemoveView.generate_choices(
User.objects.exclude(
groups=self.get_object()
).exclude(is_staff=True).exclude(is_superuser=True)
)
def right_list(self):
return AssignRemoveView.generate_choices(
self.get_object().user_set.all()
)
def remove(self, item):
self.get_object().user_set.remove(item)
class UserEditView(SingleObjectEditView):
@@ -54,6 +115,53 @@ class UserEditView(SingleObjectEditView):
}
class UserGroupsView(AssignRemoveView):
decode_content_type = True
left_list_title = _('Available groups')
right_list_title = _('Groups joined')
view_permission = permission_user_edit
def add(self, item):
item.user_set.add(self.get_object())
def get_extra_context(self):
return {
'object': self.get_object(),
'title': _('Groups of user: %s') % self.get_object()
}
def get_object(self):
return get_object_or_404(User, pk=self.kwargs['pk'])
def left_list(self):
return AssignRemoveView.generate_choices(
Group.objects.exclude(user=self.get_object())
)
def right_list(self):
return AssignRemoveView.generate_choices(
Group.objects.filter(user=self.get_object())
)
def remove(self, item):
item.user_set.remove(self.get_object())
class UserListView(SingleObjectListView):
view_permission = permission_user_view
def get_extra_context(self):
return {
'hide_link': True,
'title': _('Users'),
}
def get_queryset(self):
return get_user_model().objects.exclude(
is_superuser=True
).exclude(is_staff=True).order_by('last_name', 'first_name')
def user_add(request):
Permission.check_permissions(request.user, (permission_user_create,))
@@ -230,112 +338,3 @@ def user_multiple_set_password(request):
return user_set_password(
request, user_id_list=request.GET.get('id_list', [])
)
class UserGroupsView(AssignRemoveView):
decode_content_type = True
left_list_title = _('Available groups')
right_list_title = _('Groups joined')
view_permission = permission_user_edit
def add(self, item):
item.user_set.add(self.get_object())
def get_extra_context(self):
return {
'object': self.get_object(),
'title': _('Groups of user: %s') % self.get_object()
}
def get_object(self):
return get_object_or_404(User, pk=self.kwargs['pk'])
def left_list(self):
return AssignRemoveView.generate_choices(
Group.objects.exclude(user=self.get_object())
)
def right_list(self):
return AssignRemoveView.generate_choices(
Group.objects.filter(user=self.get_object())
)
def remove(self, item):
item.user_set.remove(self.get_object())
# Group views
class GroupCreateView(SingleObjectCreateView):
extra_context = {'title': _('Create new group')}
fields = ('name',)
model = Group
post_action_redirect = reverse_lazy('user_management:group_list')
view_permission = permission_group_create
class GroupEditView(SingleObjectEditView):
fields = ('name',)
model = Group
post_action_redirect = reverse_lazy('user_management:group_list')
view_permission = permission_group_edit
def get_extra_context(self):
return {
'object': self.get_object(),
'title': _('Edit group: %s') % self.get_object(),
}
class GroupListView(SingleObjectListView):
extra_context = {
'hide_link': True,
'title': _('Groups'),
}
model = Group
view_permission = permission_group_view
class GroupDeleteView(SingleObjectDeleteView):
model = Group
post_action_redirect = reverse_lazy('user_management:group_list')
view_permission = permission_group_delete
def get_extra_context(self):
return {
'object': self.get_object(),
'title': _('Delete the group: %s?') % self.get_object(),
}
class GroupMembersView(AssignRemoveView):
decode_content_type = True
left_list_title = _('Available groups')
right_list_title = _('Members of groups')
view_permission = permission_group_edit
def add(self, item):
self.get_object().user_set.add(item)
def get_extra_context(self):
return {
'object': self.get_object(),
'title': _('Members of group: %s') % self.get_object()
}
def get_object(self):
return get_object_or_404(Group, pk=self.kwargs['pk'])
def left_list(self):
return AssignRemoveView.generate_choices(
User.objects.exclude(
groups=self.get_object()
).exclude(is_staff=True).exclude(is_superuser=True)
)
def right_list(self):
return AssignRemoveView.generate_choices(
self.get_object().user_set.all()
)
def remove(self, item):
self.get_object().user_set.remove(item)