PEP8 Cleanusp (549 warnings).
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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_')
|
||||
]
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -20,4 +20,3 @@ PAGE_RANGE_RANGE = 'range'
|
||||
PAGE_RANGE_CHOICES = (
|
||||
(PAGE_RANGE_ALL, _('All pages')), (PAGE_RANGE_RANGE, _('Page range'))
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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')
|
||||
|
||||
|
||||
|
||||
@@ -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',),
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
]
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 _
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user