diff --git a/mayan/apps/acls/apps.py b/mayan/apps/acls/apps.py index 49b937b5ef..9f9cc2958f 100644 --- a/mayan/apps/acls/apps.py +++ b/mayan/apps/acls/apps.py @@ -1,11 +1,11 @@ from __future__ import unicode_literals -from django import apps from django.db.models.signals import post_migrate from django.utils.translation import ugettext_lazy as _ -from common.menus import ( - menu_multi_item, menu_object, menu_secondary, menu_setup, menu_sidebar +from common import ( + MayanAppConfig, menu_multi_item, menu_object, menu_secondary, menu_setup, + menu_sidebar ) from .classes import ( @@ -25,11 +25,13 @@ def create_creator_user(sender, **kwargs): CreatorSingleton.objects.get_or_create() -class ACLsApp(apps.AppConfig): +class ACLsApp(MayanAppConfig): name = 'acls' verbose_name = _('ACLs') 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_grant, link_acl_revoke], sources=['acls:acl_detail']) menu_object.bind_links(links=[link_acl_class_acl_detail], sources=[ClassAccessHolder]) diff --git a/mayan/apps/authentication/apps.py b/mayan/apps/authentication/apps.py index 790c840417..1af08c8a11 100644 --- a/mayan/apps/authentication/apps.py +++ b/mayan/apps/authentication/apps.py @@ -3,7 +3,6 @@ from __future__ import absolute_import, unicode_literals import logging import tempfile -from django import apps from django.conf import settings from django.contrib.auth import models as auth_models 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.utils.translation import ugettext_lazy as _ -from common.menus import ( - menu_facet, menu_main, menu_secondary, menu_setup, menu_tools -) +from common import MayanAppConfig, menu_secondary from .links import link_logout, link_password_change logger = logging.getLogger(__name__) -class AuthenticationApp(apps.AppConfig): +class AuthenticationApp(MayanAppConfig): name = 'authentication' verbose_name = _('Authentication') def ready(self): + super(AuthenticationApp, self).ready() + menu_secondary.bind_links( links=[ link_password_change, link_logout diff --git a/mayan/apps/checkouts/apps.py b/mayan/apps/checkouts/apps.py index a295339a19..ad53433507 100644 --- a/mayan/apps/checkouts/apps.py +++ b/mayan/apps/checkouts/apps.py @@ -2,12 +2,11 @@ from __future__ import absolute_import, unicode_literals from datetime import timedelta -from django import apps from django.db.models.signals import pre_save from django.utils.translation import ugettext_lazy as _ 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 mayan.celery import app from rest_api.classes import APIEndPoint @@ -26,11 +25,15 @@ from .permissions import ( CHECK_EXPIRED_CHECK_OUTS_INTERVAL = 60 # Lowest check out expiration allowed -class CheckoutsApp(apps.AppConfig): +class CheckoutsApp(MayanAppConfig): name = 'checkouts' verbose_name = _('Checkouts') 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('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)) @@ -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']) pre_save.connect(check_if_new_versions_allowed, dispatch_uid='document_index_delete', sender=DocumentVersion) - - APIEndPoint('checkouts') diff --git a/mayan/apps/common/__init__.py b/mayan/apps/common/__init__.py index 3f583c9a4a..d870c605a4 100644 --- a/mayan/apps/common/__init__.py +++ b/mayan/apps/common/__init__.py @@ -1,2 +1,3 @@ +from .apps import MayanAppConfig # NOQA from .classes import MissingItem # NOQA from .menus import * # NOQA diff --git a/mayan/apps/common/apps.py b/mayan/apps/common/apps.py index cbd09140a2..27f9c836ea 100644 --- a/mayan/apps/common/apps.py +++ b/mayan/apps/common/apps.py @@ -5,6 +5,7 @@ import tempfile from django import apps from django.conf import settings +from django.conf.urls import include, patterns, url from django.contrib.auth.signals import user_logged_in from django.db.models.signals import post_migrate, post_save from django.utils.translation import ugettext_lazy as _ @@ -34,11 +35,32 @@ def create_anonymous_user(sender, **kwargs): 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' verbose_name = _('Common') 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_main.bind_links(links=[link_about], position=-1) menu_secondary.bind_links( diff --git a/mayan/apps/converter/apps.py b/mayan/apps/converter/apps.py index f0b2642be3..b63938aea7 100644 --- a/mayan/apps/converter/apps.py +++ b/mayan/apps/converter/apps.py @@ -1,9 +1,8 @@ from __future__ import unicode_literals -from django import apps 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 ( link_transformation_create, link_transformation_delete, @@ -12,11 +11,13 @@ from .links import ( from .models import Transformation -class ConverterApp(apps.AppConfig): +class ConverterApp(MayanAppConfig): name = 'converter' verbose_name = _('Converter') 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=['converter:transformation_create', 'converter:transformation_list']) menu_object.bind_links(links=[link_transformation_edit, link_transformation_delete], sources=[Transformation]) diff --git a/mayan/apps/django_gpg/apps.py b/mayan/apps/django_gpg/apps.py index 603e6f0434..5fa4499be0 100644 --- a/mayan/apps/django_gpg/apps.py +++ b/mayan/apps/django_gpg/apps.py @@ -1,9 +1,8 @@ from __future__ import unicode_literals -from django import apps 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 .links import ( @@ -12,11 +11,14 @@ from .links import ( ) -class DjangoGPGApp(apps.AppConfig): +class DjangoGPGApp(MayanAppConfig): + app_url = 'gpg' name = 'django_gpg' verbose_name = _('Django GPG') def ready(self): + super(DjangoGPGApp, self).ready() + menu_object.bind_links(links=[link_key_delete], sources=[Key]) menu_object.bind_links(links=[link_key_receive], sources=[KeyStub]) menu_setup.bind_links(links=[link_key_setup]) diff --git a/mayan/apps/document_comments/apps.py b/mayan/apps/document_comments/apps.py index 6bef8815ed..9e64b34349 100644 --- a/mayan/apps/document_comments/apps.py +++ b/mayan/apps/document_comments/apps.py @@ -1,12 +1,11 @@ from __future__ import absolute_import, unicode_literals -from django import apps from django.contrib.comments.models import Comment from django.contrib.contenttypes import generic from django.utils.translation import ugettext_lazy as _ 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.utils import encapsulate 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' verbose_name = _('Document comments') def ready(self): + super(DocumentCommentsApp, self).ready() + Document.add_to_class( 'comments', generic.GenericRelation( diff --git a/mayan/apps/document_indexing/apps.py b/mayan/apps/document_indexing/apps.py index 67fede3060..a4e795e70d 100644 --- a/mayan/apps/document_indexing/apps.py +++ b/mayan/apps/document_indexing/apps.py @@ -5,7 +5,8 @@ from django.db.models.signals import post_save, post_delete from django.utils.translation import ugettext_lazy as _ 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 documents.models import Document @@ -27,11 +28,15 @@ from .links import ( from .models import Index, IndexTemplateNode, IndexInstanceNode -class DocumentIndexingApp(apps.AppConfig): +class DocumentIndexingApp(MayanAppConfig): + app_namespace = 'indexing' + app_url = 'indexing' name = 'document_indexing' verbose_name = _('Document indexing') def ready(self): + super(DocumentIndexingApp, self).ready() + APIEndPoint('indexes', app_name='document_indexing') menu_facet.bind_links(links=[link_document_index_list], sources=[Document]) diff --git a/mayan/apps/document_signatures/apps.py b/mayan/apps/document_signatures/apps.py index 3bf7425fbc..79db370dcd 100644 --- a/mayan/apps/document_signatures/apps.py +++ b/mayan/apps/document_signatures/apps.py @@ -7,11 +7,10 @@ try: except ImportError: from StringIO import StringIO -from django import apps from django.utils.translation import ugettext_lazy as _ 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.runtime import gpg from documents.models import Document, DocumentVersion @@ -56,11 +55,15 @@ def document_version_post_save_hook(instance): document_signature.check_for_embedded_signature() -class DocumentSignaturesApp(apps.AppConfig): +class DocumentSignaturesApp(MayanAppConfig): + app_namespace = 'signatures' + app_url = 'signatures' name = 'document_signatures' verbose_name = _('Document signatures') def ready(self): + super(DocumentSignaturesApp, self).ready() + DocumentVersion.register_post_save_hook(1, document_version_post_save_hook) DocumentVersion.register_pre_open_hook(1, document_pre_open_hook) diff --git a/mayan/apps/document_states/apps.py b/mayan/apps/document_states/apps.py index e822232f0f..87df29138c 100644 --- a/mayan/apps/document_states/apps.py +++ b/mayan/apps/document_states/apps.py @@ -1,11 +1,11 @@ from __future__ import unicode_literals -from django import apps from django.db.models.signals import post_save from django.utils.translation import ugettext_lazy as _ 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 documents.models import Document @@ -28,11 +28,13 @@ from .links import ( ) -class DocumentStatesApp(apps.AppConfig): +class DocumentStatesApp(MayanAppConfig): + app_url = 'states' name = 'document_states' verbose_name = _('Document states') def ready(self): + super(DocumentStatesApp, self).ready() 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_state_edit, link_setup_workflow_state_delete], sources=[WorkflowState]) diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 09e9934c15..c393d2739f 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals import tempfile -from django import apps from django.utils.translation import ugettext_lazy as _ from actstream import registry @@ -10,8 +9,8 @@ from actstream import registry from acls.api import class_permissions from acls.permissions import ACLS_VIEW_ACL, ACLS_EDIT_ACL from common import ( - MissingItem, menu_facet, menu_front_page, menu_object, menu_secondary, - menu_setup, menu_sidebar, menu_multi_item + MayanAppConfig, MissingItem, menu_facet, menu_front_page, menu_object, + menu_secondary, menu_setup, menu_sidebar, menu_multi_item ) from common.api import register_maintenance_links from common.classes import ModelAttribute @@ -70,11 +69,13 @@ from .statistics import DocumentStatistics, DocumentUsageStatistics from .widgets import document_thumbnail -class DocumentsApp(apps.AppConfig): +class DocumentsApp(MayanAppConfig): name = 'documents' verbose_name = _('Documents') def ready(self): + super(DocumentsApp, self).ready() + if (not validate_path(document_settings.CACHE_PATH)) or (not document_settings.CACHE_PATH): setattr(document_settings, 'CACHE_PATH', tempfile.mkdtemp()) diff --git a/mayan/apps/dynamic_search/apps.py b/mayan/apps/dynamic_search/apps.py index 28ce249969..41edab00c3 100644 --- a/mayan/apps/dynamic_search/apps.py +++ b/mayan/apps/dynamic_search/apps.py @@ -1,19 +1,22 @@ from __future__ import unicode_literals -from django import apps 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 .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' verbose_name = _('Dynamic search') def ready(self): + super(DynamicSearchApp, self).ready() + APIEndPoint('search', app_name='dynamic_search') menu_facet.bind_links(links=[link_search, link_search_advanced], sources=['search:search', 'search:search_advanced', 'search:results']) diff --git a/mayan/apps/events/apps.py b/mayan/apps/events/apps.py index d71e6d2a79..c150f5e93c 100644 --- a/mayan/apps/events/apps.py +++ b/mayan/apps/events/apps.py @@ -1,16 +1,17 @@ from __future__ import unicode_literals -from django import apps 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 -class EventsApp(apps.AppConfig): +class EventsApp(MayanAppConfig): name = 'events' verbose_name = _('Events') def ready(self): + super(EventsApp, self).ready() + menu_tools.bind_links(links=[link_events_list]) diff --git a/mayan/apps/folders/apps.py b/mayan/apps/folders/apps.py index 0f689309a9..770b149fef 100644 --- a/mayan/apps/folders/apps.py +++ b/mayan/apps/folders/apps.py @@ -1,11 +1,13 @@ from __future__ import unicode_literals -from django import apps from django.utils.translation import ugettext_lazy as _ from acls.api import class_permissions 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 documents.models import Document from navigation.api import register_model_list_columns @@ -27,11 +29,13 @@ from .permissions import ( ) -class FoldersApp(apps.AppConfig): +class FoldersApp(MayanAppConfig): name = 'folders' verbose_name = _('Folders') def ready(self): + super(FoldersApp, self).ready() + APIEndPoint('folders') class_permissions(Document, [ diff --git a/mayan/apps/installation/apps.py b/mayan/apps/installation/apps.py index f41c49e56a..3d06f80ad7 100644 --- a/mayan/apps/installation/apps.py +++ b/mayan/apps/installation/apps.py @@ -1,9 +1,8 @@ from __future__ import unicode_literals -from django import apps 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 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 -class InstallationApp(apps.AppConfig): +class InstallationApp(MayanAppConfig): name = 'installation' verbose_name = _('Installation') def ready(self): + super(InstallationApp, self).ready() + menu_object.bind_links(links=[link_namespace_details], sources=[PropertyNamespace]) menu_secondary.bind_links(links=[link_namespace_list], sources=['installation:namespace_list', PropertyNamespace]) menu_tools.bind_links(links=[link_menu_link]) diff --git a/mayan/apps/linking/apps.py b/mayan/apps/linking/apps.py index 020ce27eca..de1422c325 100644 --- a/mayan/apps/linking/apps.py +++ b/mayan/apps/linking/apps.py @@ -1,12 +1,12 @@ from __future__ import unicode_literals -from django import apps from django.utils.translation import ugettext_lazy as _ from acls.api import class_permissions from acls.permissions import ACLS_EDIT_ACL, ACLS_VIEW_ACL 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 @@ -27,11 +27,13 @@ from .permissions import ( ) -class LinkingApp(apps.AppConfig): +class LinkingApp(MayanAppConfig): name = 'linking' verbose_name = _('Linking') def ready(self): + super(LinkingApp, self).ready() + class_permissions(SmartLink, [ ACLS_EDIT_ACL, ACLS_VIEW_ACL, PERMISSION_SMART_LINK_DELETE, PERMISSION_SMART_LINK_EDIT, PERMISSION_SMART_LINK_VIEW diff --git a/mayan/apps/mailer/apps.py b/mayan/apps/mailer/apps.py index c09a6ba543..ac664297be 100644 --- a/mayan/apps/mailer/apps.py +++ b/mayan/apps/mailer/apps.py @@ -1,10 +1,9 @@ from __future__ import unicode_literals -from django import apps from django.utils.translation import ugettext_lazy as _ from acls.api import class_permissions -from common import menu_object +from common import MayanAppConfig, menu_object from documents.models import 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' verbose_name = _('Mailer') def ready(self): + super(MailerApp, self).ready() + class_permissions(Document, [ PERMISSION_MAILING_LINK, PERMISSION_MAILING_SEND_DOCUMENT ]) diff --git a/mayan/apps/metadata/apps.py b/mayan/apps/metadata/apps.py index d16370e700..cb550c827c 100644 --- a/mayan/apps/metadata/apps.py +++ b/mayan/apps/metadata/apps.py @@ -8,8 +8,8 @@ from django.utils.translation import ugettext_lazy as _ from acls.api import class_permissions from common import ( - menu_facet, menu_multi_item, menu_object, menu_secondary, menu_setup, - menu_sidebar, menu_tools + MayanAppConfig, menu_facet, menu_multi_item, menu_object, menu_secondary, + menu_setup, menu_sidebar, menu_tools ) from common.classes import ModelAttribute from common.utils import encapsulate @@ -42,11 +42,13 @@ from .permissions import ( logger = logging.getLogger(__name__) -class MetadataApp(apps.AppConfig): +class MetadataApp(MayanAppConfig): name = 'metadata' verbose_name = _('Metadata') def ready(self): + super(MetadataApp, self).ready() + APIEndPoint('metadata') Document.add_to_class('metadata_value_of', DocumentMetadataHelper.constructor) diff --git a/mayan/apps/ocr/apps.py b/mayan/apps/ocr/apps.py index d93490afd2..7866b15813 100644 --- a/mayan/apps/ocr/apps.py +++ b/mayan/apps/ocr/apps.py @@ -4,12 +4,12 @@ import logging import sh -from django import apps from django.utils.translation import ugettext_lazy as _ from acls.api import class_permissions 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.utils import encapsulate @@ -43,11 +43,13 @@ def document_version_ocr_submit(self): task_do_ocr.apply_async(args=[self.pk], queue='ocr') -class OCRApp(apps.AppConfig): +class OCRApp(MayanAppConfig): name = 'ocr' verbose_name = _('OCR') def ready(self): + super(OCRApp, self).ready() + APIEndPoint('ocr') Document.add_to_class('submit_for_ocr', document_ocr_submit) diff --git a/mayan/apps/permissions/apps.py b/mayan/apps/permissions/apps.py index 66e00d9ed3..d6b0264e70 100644 --- a/mayan/apps/permissions/apps.py +++ b/mayan/apps/permissions/apps.py @@ -1,12 +1,11 @@ from __future__ import unicode_literals -from django import apps from django.contrib.auth.models import User from django.db.models.signals import post_save from django.utils.translation import ugettext_lazy as _ -from common.menus import ( - menu_multi_item, menu_object, menu_secondary, menu_setup +from common import ( + MayanAppConfig, menu_multi_item, menu_object, menu_secondary, menu_setup ) from rest_api.classes import APIEndPoint @@ -19,11 +18,13 @@ from .links import ( ) -class PermissionsApp(apps.AppConfig): +class PermissionsApp(MayanAppConfig): name = 'permissions' verbose_name = _('Permissions') def ready(self): + super(PermissionsApp, self).ready() + APIEndPoint('permissions') menu_object.bind_links(links=[link_role_edit, link_role_members, link_role_permissions, link_role_delete], sources=[Role]) diff --git a/mayan/apps/smart_settings/apps.py b/mayan/apps/smart_settings/apps.py index 300159fc8a..ea7c0a951a 100644 --- a/mayan/apps/smart_settings/apps.py +++ b/mayan/apps/smart_settings/apps.py @@ -1,16 +1,19 @@ from __future__ import unicode_literals -from django import apps 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 -class SmartSettingsApp(apps.AppConfig): +class SmartSettingsApp(MayanAppConfig): + app_namespace = 'settings' + app_url = 'settings' name = 'smart_settings' verbose_name = _('Smart settings') def ready(self): + super(SmartSettingsApp, self).ready() + menu_setup.bind_links(links=[link_check_settings]) diff --git a/mayan/apps/sources/apps.py b/mayan/apps/sources/apps.py index a3294f6627..6a16cc11fa 100644 --- a/mayan/apps/sources/apps.py +++ b/mayan/apps/sources/apps.py @@ -1,11 +1,10 @@ from __future__ import absolute_import, unicode_literals -from django import apps from django.utils.translation import ugettext_lazy as _ from common import ( - MissingItem, menu_front_page, menu_object, menu_secondary, menu_sidebar, - menu_setup + MayanAppConfig, MissingItem, menu_front_page, menu_object, menu_secondary, + menu_sidebar, menu_setup ) from common.signals import post_initial_setup from common.utils import encapsulate @@ -29,11 +28,13 @@ from .models import Source from .widgets import staging_file_thumbnail -class SourcesApp(apps.AppConfig): +class SourcesApp(MayanAppConfig): name = 'sources' verbose_name = _('Sources') def ready(self): + super(SourcesApp, self).ready() + 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') diff --git a/mayan/apps/statistics/apps.py b/mayan/apps/statistics/apps.py index 80c4e5e99e..9970aeacae 100644 --- a/mayan/apps/statistics/apps.py +++ b/mayan/apps/statistics/apps.py @@ -1,9 +1,8 @@ from __future__ import unicode_literals -from django import apps 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 .links import ( @@ -12,11 +11,13 @@ from .links import ( ) -class StatisticsApp(apps.AppConfig): +class StatisticsApp(MayanAppConfig): name = 'statistics' verbose_name = _('Statistics') def ready(self): + super(StatisticsApp, self).ready() + menu_object.bind_links(links=[link_execute], sources=[Statistic]) menu_object.bind_links(links=[link_namespace_details], sources=[StatisticNamespace]) menu_secondary.bind_links(links=[link_namespace_list], sources=[StatisticNamespace, 'statistics:namespace_list']) diff --git a/mayan/apps/tags/apps.py b/mayan/apps/tags/apps.py index 658d288416..a1755c9ade 100644 --- a/mayan/apps/tags/apps.py +++ b/mayan/apps/tags/apps.py @@ -1,12 +1,11 @@ from __future__ import unicode_literals -from django import apps from django.utils.translation import ugettext_lazy as _ from acls.api import class_permissions -from common.menus import ( - menu_facet, menu_secondary, menu_object, menu_main, menu_multi_item, - menu_sidebar +from common import ( + MayanAppConfig, menu_facet, menu_secondary, menu_object, menu_main, + menu_multi_item, menu_sidebar ) from common.utils import encapsulate from documents.models import Document @@ -28,11 +27,13 @@ from .permissions import ( from .widgets import get_tags_inline_widget_simple, single_tag_widget -class TagsApp(apps.AppConfig): +class TagsApp(MayanAppConfig): name = 'tags' verbose_name = _('Tags') def ready(self): + super(TagsApp, self).ready() + APIEndPoint('tags') class_permissions(Document, [ diff --git a/mayan/apps/user_management/apps.py b/mayan/apps/user_management/apps.py index 5459e7db4d..df18f12659 100644 --- a/mayan/apps/user_management/apps.py +++ b/mayan/apps/user_management/apps.py @@ -1,12 +1,12 @@ from __future__ import unicode_literals -from django import apps from django.contrib.auth.models import User, Group from django.utils.translation import ugettext_lazy as _ from actstream import registry from common import menu_multi_item, menu_object, menu_secondary, menu_setup +from common.apps import MayanAppConfig from rest_api.classes import APIEndPoint from .links import ( @@ -18,11 +18,15 @@ from .links import ( ) -class UserManagementApp(apps.AppConfig): +class UserManagementApp(MayanAppConfig): + app_url = 'accounts' name = 'user_management' verbose_name = _('User management') + def ready(self): + super(UserManagementApp, self).ready() + APIEndPoint('users', app_name='user_management') menu_multi_item.bind_links(links=[link_group_multiple_delete], sources=['user_management:group_list']) diff --git a/mayan/urls.py b/mayan/urls.py index a8f444b44e..f0a71e9511 100644 --- a/mayan/urls.py +++ b/mayan/urls.py @@ -8,34 +8,9 @@ admin.autodiscover() 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'^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'^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')), )