Allow app to auto add their urlpatterns via MayanAppConfig AppConfig subclass

This commit is contained in:
Roberto Rosario
2015-06-19 20:42:34 -04:00
parent f4c320dae8
commit 50e547dc98
27 changed files with 150 additions and 106 deletions

View File

@@ -1,11 +1,11 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.db.models.signals import post_migrate from django.db.models.signals import post_migrate
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common.menus import ( from common import (
menu_multi_item, menu_object, menu_secondary, menu_setup, menu_sidebar MayanAppConfig, menu_multi_item, menu_object, menu_secondary, menu_setup,
menu_sidebar
) )
from .classes import ( from .classes import (
@@ -25,11 +25,13 @@ def create_creator_user(sender, **kwargs):
CreatorSingleton.objects.get_or_create() CreatorSingleton.objects.get_or_create()
class ACLsApp(apps.AppConfig): class ACLsApp(MayanAppConfig):
name = 'acls' name = 'acls'
verbose_name = _('ACLs') verbose_name = _('ACLs')
def ready(self): def ready(self):
super(ACLsApp, self).ready()
menu_multi_item.bind_links(links=[link_acl_class_grant, link_acl_class_revoke], sources=['acls:acl_class_acl_detail']) menu_multi_item.bind_links(links=[link_acl_class_grant, link_acl_class_revoke], sources=['acls:acl_class_acl_detail'])
menu_multi_item.bind_links(links=[link_acl_grant, link_acl_revoke], sources=['acls:acl_detail']) menu_multi_item.bind_links(links=[link_acl_grant, link_acl_revoke], sources=['acls:acl_detail'])
menu_object.bind_links(links=[link_acl_class_acl_detail], sources=[ClassAccessHolder]) menu_object.bind_links(links=[link_acl_class_acl_detail], sources=[ClassAccessHolder])

View File

@@ -3,7 +3,6 @@ from __future__ import absolute_import, unicode_literals
import logging import logging
import tempfile import tempfile
from django import apps
from django.conf import settings from django.conf import settings
from django.contrib.auth import models as auth_models from django.contrib.auth import models as auth_models
from django.contrib.auth.models import User from django.contrib.auth.models import User
@@ -11,20 +10,20 @@ from django.contrib.auth.signals import user_logged_in
from django.db.models.signals import post_migrate, post_save from django.db.models.signals import post_migrate, post_save
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common.menus import ( from common import MayanAppConfig, menu_secondary
menu_facet, menu_main, menu_secondary, menu_setup, menu_tools
)
from .links import link_logout, link_password_change from .links import link_logout, link_password_change
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class AuthenticationApp(apps.AppConfig): class AuthenticationApp(MayanAppConfig):
name = 'authentication' name = 'authentication'
verbose_name = _('Authentication') verbose_name = _('Authentication')
def ready(self): def ready(self):
super(AuthenticationApp, self).ready()
menu_secondary.bind_links( menu_secondary.bind_links(
links=[ links=[
link_password_change, link_logout link_password_change, link_logout

View File

@@ -2,12 +2,11 @@ from __future__ import absolute_import, unicode_literals
from datetime import timedelta from datetime import timedelta
from django import apps
from django.db.models.signals import pre_save from django.db.models.signals import pre_save
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from common.menus import menu_facet, menu_main, menu_sidebar from common import MayanAppConfig, menu_facet, menu_main, menu_sidebar
from documents.models import Document, DocumentVersion from documents.models import Document, DocumentVersion
from mayan.celery import app from mayan.celery import app
from rest_api.classes import APIEndPoint from rest_api.classes import APIEndPoint
@@ -26,11 +25,15 @@ from .permissions import (
CHECK_EXPIRED_CHECK_OUTS_INTERVAL = 60 # Lowest check out expiration allowed CHECK_EXPIRED_CHECK_OUTS_INTERVAL = 60 # Lowest check out expiration allowed
class CheckoutsApp(apps.AppConfig): class CheckoutsApp(MayanAppConfig):
name = 'checkouts' name = 'checkouts'
verbose_name = _('Checkouts') verbose_name = _('Checkouts')
def ready(self): def ready(self):
super(CheckoutsApp, self).ready()
APIEndPoint('checkouts')
Document.add_to_class('is_checked_out', lambda document: DocumentCheckout.objects.is_document_checked_out(document)) Document.add_to_class('is_checked_out', lambda document: DocumentCheckout.objects.is_document_checked_out(document))
Document.add_to_class('check_in', lambda document, user=None: DocumentCheckout.objects.check_in_document(document, user)) Document.add_to_class('check_in', lambda document, user=None: DocumentCheckout.objects.check_in_document(document, user))
Document.add_to_class('checkout_info', lambda document: DocumentCheckout.objects.document_checkout_info(document)) Document.add_to_class('checkout_info', lambda document: DocumentCheckout.objects.document_checkout_info(document))
@@ -55,5 +58,3 @@ class CheckoutsApp(apps.AppConfig):
menu_sidebar.bind_links(links=[link_checkout_document, link_checkin_document], sources=['checkouts:checkout_info', 'checkouts:checkout_document', 'checkouts:checkin_document']) menu_sidebar.bind_links(links=[link_checkout_document, link_checkin_document], sources=['checkouts:checkout_info', 'checkouts:checkout_document', 'checkouts:checkin_document'])
pre_save.connect(check_if_new_versions_allowed, dispatch_uid='document_index_delete', sender=DocumentVersion) pre_save.connect(check_if_new_versions_allowed, dispatch_uid='document_index_delete', sender=DocumentVersion)
APIEndPoint('checkouts')

View File

@@ -1,2 +1,3 @@
from .apps import MayanAppConfig # NOQA
from .classes import MissingItem # NOQA from .classes import MissingItem # NOQA
from .menus import * # NOQA from .menus import * # NOQA

View File

@@ -5,6 +5,7 @@ import tempfile
from django import apps from django import apps
from django.conf import settings from django.conf import settings
from django.conf.urls import include, patterns, url
from django.contrib.auth.signals import user_logged_in from django.contrib.auth.signals import user_logged_in
from django.db.models.signals import post_migrate, post_save from django.db.models.signals import post_migrate, post_save
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@@ -34,11 +35,32 @@ def create_anonymous_user(sender, **kwargs):
AnonymousUserSingleton.objects.get_or_create() AnonymousUserSingleton.objects.get_or_create()
class CommonApp(apps.AppConfig): class MayanAppConfig(apps.AppConfig):
app_url = None
app_namespace = None
def ready(self):
from mayan.urls import urlpatterns
if self.app_url:
top_url = '{}/'.format(self.app_url)
elif not self.app_url is None:
top_url = ''
else:
top_url = '{}/'.format(self.name)
urlpatterns += url(r'^{}'.format(top_url), include('{}.urls'.format(self.name), namespace=self.app_namespace or self.name)),
class CommonApp(MayanAppConfig):
app_url = ''
name = 'common' name = 'common'
verbose_name = _('Common') verbose_name = _('Common')
def ready(self): def ready(self):
super(CommonApp, self).ready()
menu_facet.bind_links(links=[link_current_user_details, link_current_user_locale_profile_details, link_tools, link_setup], sources=['common:current_user_details', 'common:current_user_edit', 'common:current_user_locale_profile_details', 'common:current_user_locale_profile_edit', 'authentication:password_change_view', 'common:setup_list', 'common:tools_list']) menu_facet.bind_links(links=[link_current_user_details, link_current_user_locale_profile_details, link_tools, link_setup], sources=['common:current_user_details', 'common:current_user_edit', 'common:current_user_locale_profile_details', 'common:current_user_locale_profile_edit', 'authentication:password_change_view', 'common:setup_list', 'common:tools_list'])
menu_main.bind_links(links=[link_about], position=-1) menu_main.bind_links(links=[link_about], position=-1)
menu_secondary.bind_links( menu_secondary.bind_links(

View File

@@ -1,9 +1,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import menu_object, menu_sidebar from common import MayanAppConfig, menu_object, menu_sidebar
from .links import ( from .links import (
link_transformation_create, link_transformation_delete, link_transformation_create, link_transformation_delete,
@@ -12,11 +11,13 @@ from .links import (
from .models import Transformation from .models import Transformation
class ConverterApp(apps.AppConfig): class ConverterApp(MayanAppConfig):
name = 'converter' name = 'converter'
verbose_name = _('Converter') verbose_name = _('Converter')
def ready(self): def ready(self):
super(ConverterApp, self).ready()
menu_sidebar.bind_links(links=[link_transformation_create], sources=[Transformation]) menu_sidebar.bind_links(links=[link_transformation_create], sources=[Transformation])
menu_sidebar.bind_links(links=[link_transformation_create], sources=['converter:transformation_create', 'converter:transformation_list']) menu_sidebar.bind_links(links=[link_transformation_create], sources=['converter:transformation_create', 'converter:transformation_list'])
menu_object.bind_links(links=[link_transformation_edit, link_transformation_delete], sources=[Transformation]) menu_object.bind_links(links=[link_transformation_edit, link_transformation_delete], sources=[Transformation])

View File

@@ -1,9 +1,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import menu_object, menu_setup, menu_sidebar from common import MayanAppConfig, menu_object, menu_setup, menu_sidebar
from .api import Key, KeyStub from .api import Key, KeyStub
from .links import ( from .links import (
@@ -12,11 +11,14 @@ from .links import (
) )
class DjangoGPGApp(apps.AppConfig): class DjangoGPGApp(MayanAppConfig):
app_url = 'gpg'
name = 'django_gpg' name = 'django_gpg'
verbose_name = _('Django GPG') verbose_name = _('Django GPG')
def ready(self): def ready(self):
super(DjangoGPGApp, self).ready()
menu_object.bind_links(links=[link_key_delete], sources=[Key]) menu_object.bind_links(links=[link_key_delete], sources=[Key])
menu_object.bind_links(links=[link_key_receive], sources=[KeyStub]) menu_object.bind_links(links=[link_key_receive], sources=[KeyStub])
menu_setup.bind_links(links=[link_key_setup]) menu_setup.bind_links(links=[link_key_setup])

View File

@@ -1,12 +1,11 @@
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
from django import apps
from django.contrib.comments.models import Comment from django.contrib.comments.models import Comment
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from common import menu_facet, menu_object, menu_sidebar from common import MayanAppConfig, menu_facet, menu_object, menu_sidebar
from common.classes import ModelAttribute from common.classes import ModelAttribute
from common.utils import encapsulate from common.utils import encapsulate
from documents.models import Document from documents.models import Document
@@ -21,11 +20,15 @@ from .permissions import (
) )
class DocumentCommentsApp(apps.AppConfig): class DocumentCommentsApp(MayanAppConfig):
app_namespace = 'comments'
app_url = 'comments'
name = 'document_comments' name = 'document_comments'
verbose_name = _('Document comments') verbose_name = _('Document comments')
def ready(self): def ready(self):
super(DocumentCommentsApp, self).ready()
Document.add_to_class( Document.add_to_class(
'comments', 'comments',
generic.GenericRelation( generic.GenericRelation(

View File

@@ -5,7 +5,8 @@ from django.db.models.signals import post_save, post_delete
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import ( from common import (
menu_facet, menu_main, menu_object, menu_secondary, menu_setup MayanAppConfig, menu_facet, menu_main, menu_object, menu_secondary,
menu_setup
) )
from common.api import register_maintenance_links from common.api import register_maintenance_links
from documents.models import Document from documents.models import Document
@@ -27,11 +28,15 @@ from .links import (
from .models import Index, IndexTemplateNode, IndexInstanceNode from .models import Index, IndexTemplateNode, IndexInstanceNode
class DocumentIndexingApp(apps.AppConfig): class DocumentIndexingApp(MayanAppConfig):
app_namespace = 'indexing'
app_url = 'indexing'
name = 'document_indexing' name = 'document_indexing'
verbose_name = _('Document indexing') verbose_name = _('Document indexing')
def ready(self): def ready(self):
super(DocumentIndexingApp, self).ready()
APIEndPoint('indexes', app_name='document_indexing') APIEndPoint('indexes', app_name='document_indexing')
menu_facet.bind_links(links=[link_document_index_list], sources=[Document]) menu_facet.bind_links(links=[link_document_index_list], sources=[Document])

View File

@@ -7,11 +7,10 @@ try:
except ImportError: except ImportError:
from StringIO import StringIO from StringIO import StringIO
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from common import menu_facet, menu_sidebar from common import MayanAppConfig, menu_facet, menu_sidebar
from django_gpg.exceptions import GPGDecryptionError from django_gpg.exceptions import GPGDecryptionError
from django_gpg.runtime import gpg from django_gpg.runtime import gpg
from documents.models import Document, DocumentVersion from documents.models import Document, DocumentVersion
@@ -56,11 +55,15 @@ def document_version_post_save_hook(instance):
document_signature.check_for_embedded_signature() document_signature.check_for_embedded_signature()
class DocumentSignaturesApp(apps.AppConfig): class DocumentSignaturesApp(MayanAppConfig):
app_namespace = 'signatures'
app_url = 'signatures'
name = 'document_signatures' name = 'document_signatures'
verbose_name = _('Document signatures') verbose_name = _('Document signatures')
def ready(self): def ready(self):
super(DocumentSignaturesApp, self).ready()
DocumentVersion.register_post_save_hook(1, document_version_post_save_hook) DocumentVersion.register_post_save_hook(1, document_version_post_save_hook)
DocumentVersion.register_pre_open_hook(1, document_pre_open_hook) DocumentVersion.register_pre_open_hook(1, document_pre_open_hook)

View File

@@ -1,11 +1,11 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import ( from common import (
menu_facet, menu_object, menu_secondary, menu_setup, menu_sidebar MayanAppConfig, menu_facet, menu_object, menu_secondary, menu_setup,
menu_sidebar
) )
from common.utils import encapsulate from common.utils import encapsulate
from documents.models import Document from documents.models import Document
@@ -28,11 +28,13 @@ from .links import (
) )
class DocumentStatesApp(apps.AppConfig): class DocumentStatesApp(MayanAppConfig):
app_url = 'states'
name = 'document_states' name = 'document_states'
verbose_name = _('Document states') verbose_name = _('Document states')
def ready(self): def ready(self):
super(DocumentStatesApp, self).ready()
menu_facet.bind_links(links=[link_document_workflow_instance_list], sources=[Document]) menu_facet.bind_links(links=[link_document_workflow_instance_list], sources=[Document])
menu_object.bind_links(links=[link_setup_workflow_states, link_setup_workflow_transitions, link_setup_workflow_document_types, link_setup_workflow_edit, link_setup_workflow_delete], sources=[Workflow]) menu_object.bind_links(links=[link_setup_workflow_states, link_setup_workflow_transitions, link_setup_workflow_document_types, link_setup_workflow_edit, link_setup_workflow_delete], sources=[Workflow])
menu_object.bind_links(links=[link_setup_workflow_state_edit, link_setup_workflow_state_delete], sources=[WorkflowState]) menu_object.bind_links(links=[link_setup_workflow_state_edit, link_setup_workflow_state_delete], sources=[WorkflowState])

View File

@@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals
import tempfile import tempfile
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from actstream import registry from actstream import registry
@@ -10,8 +9,8 @@ from actstream import registry
from acls.api import class_permissions from acls.api import class_permissions
from acls.permissions import ACLS_VIEW_ACL, ACLS_EDIT_ACL from acls.permissions import ACLS_VIEW_ACL, ACLS_EDIT_ACL
from common import ( from common import (
MissingItem, menu_facet, menu_front_page, menu_object, menu_secondary, MayanAppConfig, MissingItem, menu_facet, menu_front_page, menu_object,
menu_setup, menu_sidebar, menu_multi_item menu_secondary, menu_setup, menu_sidebar, menu_multi_item
) )
from common.api import register_maintenance_links from common.api import register_maintenance_links
from common.classes import ModelAttribute from common.classes import ModelAttribute
@@ -70,11 +69,13 @@ from .statistics import DocumentStatistics, DocumentUsageStatistics
from .widgets import document_thumbnail from .widgets import document_thumbnail
class DocumentsApp(apps.AppConfig): class DocumentsApp(MayanAppConfig):
name = 'documents' name = 'documents'
verbose_name = _('Documents') verbose_name = _('Documents')
def ready(self): def ready(self):
super(DocumentsApp, self).ready()
if (not validate_path(document_settings.CACHE_PATH)) or (not document_settings.CACHE_PATH): if (not validate_path(document_settings.CACHE_PATH)) or (not document_settings.CACHE_PATH):
setattr(document_settings, 'CACHE_PATH', tempfile.mkdtemp()) setattr(document_settings, 'CACHE_PATH', tempfile.mkdtemp())

View File

@@ -1,19 +1,22 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import menu_facet, menu_sidebar from common import MayanAppConfig, menu_facet, menu_sidebar
from rest_api.classes import APIEndPoint from rest_api.classes import APIEndPoint
from .links import link_search, link_search_advanced, link_search_again from .links import link_search, link_search_advanced, link_search_again
class DynamicSearchApp(apps.AppConfig): class DynamicSearchApp(MayanAppConfig):
app_namespace = 'search'
app_url = 'search'
name = 'dynamic_search' name = 'dynamic_search'
verbose_name = _('Dynamic search') verbose_name = _('Dynamic search')
def ready(self): def ready(self):
super(DynamicSearchApp, self).ready()
APIEndPoint('search', app_name='dynamic_search') APIEndPoint('search', app_name='dynamic_search')
menu_facet.bind_links(links=[link_search, link_search_advanced], sources=['search:search', 'search:search_advanced', 'search:results']) menu_facet.bind_links(links=[link_search, link_search_advanced], sources=['search:search', 'search:search_advanced', 'search:results'])

View File

@@ -1,16 +1,17 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import menu_tools from common import MayanAppConfig, menu_tools
from .links import link_events_list from .links import link_events_list
class EventsApp(apps.AppConfig): class EventsApp(MayanAppConfig):
name = 'events' name = 'events'
verbose_name = _('Events') verbose_name = _('Events')
def ready(self): def ready(self):
super(EventsApp, self).ready()
menu_tools.bind_links(links=[link_events_list]) menu_tools.bind_links(links=[link_events_list])

View File

@@ -1,11 +1,13 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from acls.permissions import ACLS_EDIT_ACL, ACLS_VIEW_ACL from acls.permissions import ACLS_EDIT_ACL, ACLS_VIEW_ACL
from common.menus import menu_facet, menu_main, menu_object, menu_secondary, menu_sidebar, menu_multi_item from common import (
MayanAppConfig, menu_facet, menu_main, menu_object, menu_secondary,
menu_sidebar, menu_multi_item
)
from common.utils import encapsulate from common.utils import encapsulate
from documents.models import Document from documents.models import Document
from navigation.api import register_model_list_columns from navigation.api import register_model_list_columns
@@ -27,11 +29,13 @@ from .permissions import (
) )
class FoldersApp(apps.AppConfig): class FoldersApp(MayanAppConfig):
name = 'folders' name = 'folders'
verbose_name = _('Folders') verbose_name = _('Folders')
def ready(self): def ready(self):
super(FoldersApp, self).ready()
APIEndPoint('folders') APIEndPoint('folders')
class_permissions(Document, [ class_permissions(Document, [

View File

@@ -1,9 +1,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import menu_tools, menu_object, menu_secondary from common import MayanAppConfig, menu_tools, menu_object, menu_secondary
from common.utils import encapsulate from common.utils import encapsulate
from navigation.api import register_model_list_columns from navigation.api import register_model_list_columns
@@ -11,11 +10,13 @@ from .classes import Property, PropertyNamespace, PIPNotFound, VirtualEnv
from .links import link_menu_link, link_namespace_details, link_namespace_list from .links import link_menu_link, link_namespace_details, link_namespace_list
class InstallationApp(apps.AppConfig): class InstallationApp(MayanAppConfig):
name = 'installation' name = 'installation'
verbose_name = _('Installation') verbose_name = _('Installation')
def ready(self): def ready(self):
super(InstallationApp, self).ready()
menu_object.bind_links(links=[link_namespace_details], sources=[PropertyNamespace]) menu_object.bind_links(links=[link_namespace_details], sources=[PropertyNamespace])
menu_secondary.bind_links(links=[link_namespace_list], sources=['installation:namespace_list', PropertyNamespace]) menu_secondary.bind_links(links=[link_namespace_list], sources=['installation:namespace_list', PropertyNamespace])
menu_tools.bind_links(links=[link_menu_link]) menu_tools.bind_links(links=[link_menu_link])

View File

@@ -1,12 +1,12 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from acls.permissions import ACLS_EDIT_ACL, ACLS_VIEW_ACL from acls.permissions import ACLS_EDIT_ACL, ACLS_VIEW_ACL
from common import ( from common import (
menu_facet, menu_object, menu_secondary, menu_setup, menu_sidebar MayanAppConfig, menu_facet, menu_object, menu_secondary, menu_setup,
menu_sidebar
) )
from documents.models import Document from documents.models import Document
@@ -27,11 +27,13 @@ from .permissions import (
) )
class LinkingApp(apps.AppConfig): class LinkingApp(MayanAppConfig):
name = 'linking' name = 'linking'
verbose_name = _('Linking') verbose_name = _('Linking')
def ready(self): def ready(self):
super(LinkingApp, self).ready()
class_permissions(SmartLink, [ class_permissions(SmartLink, [
ACLS_EDIT_ACL, ACLS_VIEW_ACL, PERMISSION_SMART_LINK_DELETE, ACLS_EDIT_ACL, ACLS_VIEW_ACL, PERMISSION_SMART_LINK_DELETE,
PERMISSION_SMART_LINK_EDIT, PERMISSION_SMART_LINK_VIEW PERMISSION_SMART_LINK_EDIT, PERMISSION_SMART_LINK_VIEW

View File

@@ -1,10 +1,9 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from common import menu_object from common import MayanAppConfig, menu_object
from documents.models import Document from documents.models import Document
from .links import link_send_document_link, link_send_document from .links import link_send_document_link, link_send_document
@@ -13,11 +12,13 @@ from .permissions import (
) )
class MailerApp(apps.AppConfig): class MailerApp(MayanAppConfig):
name = 'mailer' name = 'mailer'
verbose_name = _('Mailer') verbose_name = _('Mailer')
def ready(self): def ready(self):
super(MailerApp, self).ready()
class_permissions(Document, [ class_permissions(Document, [
PERMISSION_MAILING_LINK, PERMISSION_MAILING_SEND_DOCUMENT PERMISSION_MAILING_LINK, PERMISSION_MAILING_SEND_DOCUMENT
]) ])

View File

@@ -8,8 +8,8 @@ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from common import ( from common import (
menu_facet, menu_multi_item, menu_object, menu_secondary, menu_setup, MayanAppConfig, menu_facet, menu_multi_item, menu_object, menu_secondary,
menu_sidebar, menu_tools menu_setup, menu_sidebar, menu_tools
) )
from common.classes import ModelAttribute from common.classes import ModelAttribute
from common.utils import encapsulate from common.utils import encapsulate
@@ -42,11 +42,13 @@ from .permissions import (
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class MetadataApp(apps.AppConfig): class MetadataApp(MayanAppConfig):
name = 'metadata' name = 'metadata'
verbose_name = _('Metadata') verbose_name = _('Metadata')
def ready(self): def ready(self):
super(MetadataApp, self).ready()
APIEndPoint('metadata') APIEndPoint('metadata')
Document.add_to_class('metadata_value_of', DocumentMetadataHelper.constructor) Document.add_to_class('metadata_value_of', DocumentMetadataHelper.constructor)

View File

@@ -4,12 +4,12 @@ import logging
import sh import sh
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from common import ( from common import (
menu_facet, menu_multi_item, menu_object, menu_secondary, menu_tools MayanAppConfig, menu_facet, menu_multi_item, menu_object, menu_secondary,
menu_tools
) )
from common.api import register_maintenance_links from common.api import register_maintenance_links
from common.utils import encapsulate from common.utils import encapsulate
@@ -43,11 +43,13 @@ def document_version_ocr_submit(self):
task_do_ocr.apply_async(args=[self.pk], queue='ocr') task_do_ocr.apply_async(args=[self.pk], queue='ocr')
class OCRApp(apps.AppConfig): class OCRApp(MayanAppConfig):
name = 'ocr' name = 'ocr'
verbose_name = _('OCR') verbose_name = _('OCR')
def ready(self): def ready(self):
super(OCRApp, self).ready()
APIEndPoint('ocr') APIEndPoint('ocr')
Document.add_to_class('submit_for_ocr', document_ocr_submit) Document.add_to_class('submit_for_ocr', document_ocr_submit)

View File

@@ -1,12 +1,11 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common.menus import ( from common import (
menu_multi_item, menu_object, menu_secondary, menu_setup MayanAppConfig, menu_multi_item, menu_object, menu_secondary, menu_setup
) )
from rest_api.classes import APIEndPoint from rest_api.classes import APIEndPoint
@@ -19,11 +18,13 @@ from .links import (
) )
class PermissionsApp(apps.AppConfig): class PermissionsApp(MayanAppConfig):
name = 'permissions' name = 'permissions'
verbose_name = _('Permissions') verbose_name = _('Permissions')
def ready(self): def ready(self):
super(PermissionsApp, self).ready()
APIEndPoint('permissions') APIEndPoint('permissions')
menu_object.bind_links(links=[link_role_edit, link_role_members, link_role_permissions, link_role_delete], sources=[Role]) menu_object.bind_links(links=[link_role_edit, link_role_members, link_role_permissions, link_role_delete], sources=[Role])

View File

@@ -1,16 +1,19 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import menu_setup from common import MayanAppConfig, menu_setup
from .links import link_check_settings from .links import link_check_settings
class SmartSettingsApp(apps.AppConfig): class SmartSettingsApp(MayanAppConfig):
app_namespace = 'settings'
app_url = 'settings'
name = 'smart_settings' name = 'smart_settings'
verbose_name = _('Smart settings') verbose_name = _('Smart settings')
def ready(self): def ready(self):
super(SmartSettingsApp, self).ready()
menu_setup.bind_links(links=[link_check_settings]) menu_setup.bind_links(links=[link_check_settings])

View File

@@ -1,11 +1,10 @@
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import ( from common import (
MissingItem, menu_front_page, menu_object, menu_secondary, menu_sidebar, MayanAppConfig, MissingItem, menu_front_page, menu_object, menu_secondary,
menu_setup menu_sidebar, menu_setup
) )
from common.signals import post_initial_setup from common.signals import post_initial_setup
from common.utils import encapsulate from common.utils import encapsulate
@@ -29,11 +28,13 @@ from .models import Source
from .widgets import staging_file_thumbnail from .widgets import staging_file_thumbnail
class SourcesApp(apps.AppConfig): class SourcesApp(MayanAppConfig):
name = 'sources' name = 'sources'
verbose_name = _('Sources') verbose_name = _('Sources')
def ready(self): def ready(self):
super(SourcesApp, self).ready()
APIEndPoint('sources') APIEndPoint('sources')
MissingItem(label=_('Create a document source'), description=_('Document sources are the way in which new documents are feed to Mayan EDMS, create at least a web form source to be able to upload documents from a browser.'), condition=lambda: not Source.objects.exists(), view='sources:setup_source_list') MissingItem(label=_('Create a document source'), description=_('Document sources are the way in which new documents are feed to Mayan EDMS, create at least a web form source to be able to upload documents from a browser.'), condition=lambda: not Source.objects.exists(), view='sources:setup_source_list')

View File

@@ -1,9 +1,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import menu_object, menu_secondary, menu_tools from common import MayanAppConfig, menu_object, menu_secondary, menu_tools
from .classes import Statistic, StatisticNamespace from .classes import Statistic, StatisticNamespace
from .links import ( from .links import (
@@ -12,11 +11,13 @@ from .links import (
) )
class StatisticsApp(apps.AppConfig): class StatisticsApp(MayanAppConfig):
name = 'statistics' name = 'statistics'
verbose_name = _('Statistics') verbose_name = _('Statistics')
def ready(self): def ready(self):
super(StatisticsApp, self).ready()
menu_object.bind_links(links=[link_execute], sources=[Statistic]) menu_object.bind_links(links=[link_execute], sources=[Statistic])
menu_object.bind_links(links=[link_namespace_details], sources=[StatisticNamespace]) menu_object.bind_links(links=[link_namespace_details], sources=[StatisticNamespace])
menu_secondary.bind_links(links=[link_namespace_list], sources=[StatisticNamespace, 'statistics:namespace_list']) menu_secondary.bind_links(links=[link_namespace_list], sources=[StatisticNamespace, 'statistics:namespace_list'])

View File

@@ -1,12 +1,11 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from acls.api import class_permissions from acls.api import class_permissions
from common.menus import ( from common import (
menu_facet, menu_secondary, menu_object, menu_main, menu_multi_item, MayanAppConfig, menu_facet, menu_secondary, menu_object, menu_main,
menu_sidebar menu_multi_item, menu_sidebar
) )
from common.utils import encapsulate from common.utils import encapsulate
from documents.models import Document from documents.models import Document
@@ -28,11 +27,13 @@ from .permissions import (
from .widgets import get_tags_inline_widget_simple, single_tag_widget from .widgets import get_tags_inline_widget_simple, single_tag_widget
class TagsApp(apps.AppConfig): class TagsApp(MayanAppConfig):
name = 'tags' name = 'tags'
verbose_name = _('Tags') verbose_name = _('Tags')
def ready(self): def ready(self):
super(TagsApp, self).ready()
APIEndPoint('tags') APIEndPoint('tags')
class_permissions(Document, [ class_permissions(Document, [

View File

@@ -1,12 +1,12 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from django import apps
from django.contrib.auth.models import User, Group from django.contrib.auth.models import User, Group
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from actstream import registry from actstream import registry
from common import menu_multi_item, menu_object, menu_secondary, menu_setup from common import menu_multi_item, menu_object, menu_secondary, menu_setup
from common.apps import MayanAppConfig
from rest_api.classes import APIEndPoint from rest_api.classes import APIEndPoint
from .links import ( from .links import (
@@ -18,11 +18,15 @@ from .links import (
) )
class UserManagementApp(apps.AppConfig): class UserManagementApp(MayanAppConfig):
app_url = 'accounts'
name = 'user_management' name = 'user_management'
verbose_name = _('User management') verbose_name = _('User management')
def ready(self): def ready(self):
super(UserManagementApp, self).ready()
APIEndPoint('users', app_name='user_management') APIEndPoint('users', app_name='user_management')
menu_multi_item.bind_links(links=[link_group_multiple_delete], sources=['user_management:group_list']) menu_multi_item.bind_links(links=[link_group_multiple_delete], sources=['user_management:group_list'])

View File

@@ -8,34 +8,9 @@ admin.autodiscover()
urlpatterns = patterns( urlpatterns = patterns(
'', '',
url(r'^', include('common.urls', namespace='common')),
url(r'^accounts/', include('user_management.urls', namespace='user_management')),
url(r'^acls/', include('acls.urls', namespace='acls')),
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', include(admin.site.urls)),
url(r'^api/', include('rest_api.urls')), url(r'^api/', include('rest_api.urls')),
url(r'^authentication/', include('authentication.urls', namespace='authentication')),
url(r'^checkouts/', include('checkouts.urls', namespace='checkouts')),
url(r'^comments/', include('document_comments.urls', namespace='comments')),
url(r'^converter/', include('converter.urls', namespace='converter')),
url(r'^document/signatures/', include('document_signatures.urls', namespace='signatures')),
url(r'^document/states/', include('document_states.urls', namespace='document_states')),
url(r'^documents/', include('documents.urls', namespace='documents')),
url(r'^docs/', include('rest_framework_swagger.urls')), url(r'^docs/', include('rest_framework_swagger.urls')),
url(r'^events/', include('events.urls', namespace='events')),
url(r'^folders/', include('folders.urls', namespace='folders')),
url(r'^gpg/', include('django_gpg.urls', namespace='django_gpg')),
url(r'^indexing/', include('document_indexing.urls', namespace='indexing')),
url(r'^installation/', include('installation.urls', namespace='installation')),
url(r'^linking/', include('linking.urls', namespace='linking')),
url(r'^mailer/', include('mailer.urls', namespace='mailer')),
url(r'^metadata/', include('metadata.urls', namespace='metadata')),
url(r'^ocr/', include('ocr.urls', namespace='ocr')),
url(r'^permissions/', include('permissions.urls', namespace='permissions')),
url(r'^search/', include('dynamic_search.urls', namespace='search')),
url(r'^settings/', include('smart_settings.urls', namespace='settings')),
url(r'^sources/', include('sources.urls', namespace='sources')),
url(r'^statistics/', include('statistics.urls', namespace='statistics')),
url(r'^tags/', include('tags.urls', namespace='tags')),
) )