def ready(self): super(LinkingApp, self).ready() Document = apps.get_model(app_label='documents', model_name='Document') ResolvedSmartLink = self.get_model('ResolvedSmartLink') SmartLink = self.get_model('SmartLink') SmartLinkCondition = self.get_model('SmartLinkCondition') ModelPermission.register(model=SmartLink, permissions=(permission_acl_edit, permission_acl_view, permission_smart_link_delete, permission_smart_link_edit, permission_smart_link_view)) SourceColumn(source=ResolvedSmartLink, label=_('Label'), func=lambda context: context['object'].get_dynamic_label( context['document'])) SourceColumn(source=SmartLink, label=_('Dynamic label'), attribute='dynamic_label') SourceColumn(source=SmartLink, label=_('Enabled'), func=lambda context: TwoStateWidget(state=context[ 'object'].enabled).render()) SourceColumn(source=SmartLinkCondition, label=_('Enabled'), func=lambda context: TwoStateWidget(state=context[ 'object'].enabled).render()) menu_facet.bind_links(links=(link_smart_link_instances_for_document, ), sources=(Document, )) menu_object.bind_links(links=(link_smart_link_condition_edit, link_smart_link_condition_delete), sources=(SmartLinkCondition, )) menu_object.bind_links(links=(link_smart_link_edit, link_smart_link_document_types, link_smart_link_condition_list, link_acl_list, link_smart_link_delete), sources=(SmartLink, )) menu_object.bind_links(links=(link_smart_link_instance_view, ), sources=(ResolvedSmartLink, )) menu_secondary.bind_links(links=(link_smart_link_list, link_smart_link_create), sources=(SmartLink, 'linking:smart_link_list', 'linking:smart_link_create')) menu_setup.bind_links(links=(link_smart_link_setup, )) menu_sidebar.bind_links( links=(link_smart_link_condition_create, ), sources=('linking:smart_link_condition_list', 'linking:smart_link_condition_create', 'linking:smart_link_condition_edit', 'linking:smart_link_condition_delete'))
def ready(self): super(EventsApp, self).ready() Action = apps.get_model(app_label='actstream', model_name='Action') Notification = self.get_model(model_name='Notification') StoredEventType = self.get_model(model_name='StoredEventType') User = get_user_model() SourceColumn(source=Action, label=_('Timestamp'), attribute='timestamp') SourceColumn(source=Action, label=_('Actor'), func=lambda context: event_user_link(context['object'])) SourceColumn(source=Action, label=_('Event'), func=lambda context: event_type_link(context['object'])) SourceColumn(source=Action, label=_('Action object'), func=lambda context: event_object_link( entry=context['object'], attribute='action_object')) SourceColumn(source=StoredEventType, label=_('Namespace'), attribute='namespace') SourceColumn(source=StoredEventType, label=_('Label'), attribute='label') SourceColumn(source=Notification, label=_('Timestamp'), attribute='action.timestamp') SourceColumn(source=Notification, label=_('Actor'), attribute='action.actor') SourceColumn( source=Notification, label=_('Event'), func=lambda context: event_type_link(context['object'].action)) SourceColumn( source=Notification, label=_('Target'), func=lambda context: event_object_link(context['object'].action)) SourceColumn(source=Notification, label=_('Seen'), func=lambda context: TwoStateWidget(state=context[ 'object'].read).render()) menu_main.bind_links(links=(link_user_notifications_list, ), position=99) menu_object.bind_links(links=(link_notification_mark_read, ), sources=(Notification, )) menu_object.bind_links(links=(link_user_events, ), sources=(User, )) menu_secondary.bind_links(links=(link_notification_mark_read_all, ), sources=('events:user_notifications_list', )) menu_tools.bind_links(links=(link_events_list, )) menu_user.bind_links(links=(link_event_types_subscriptions_list, ))
def get_extra_context(self): return { 'extra_columns': ( { 'name': _('Type'), 'attribute': encapsulate(lambda entry: entry.class_fullname()) }, { 'name': _('Enabled'), 'attribute': encapsulate(lambda entry: TwoStateWidget(state=entry. enabled).render()) }, ), 'hide_link': True, 'no_results_icon': icon_setup_sources, 'no_results_secondary_links': [ link_setup_source_create_webform.resolve( context=RequestContext(request=self.request)), link_setup_source_create_imap_email.resolve( context=RequestContext(request=self.request)), link_setup_source_create_pop3_email.resolve( context=RequestContext(request=self.request)), link_setup_source_create_sane_scanner.resolve( context=RequestContext(request=self.request)), link_setup_source_create_staging_folder.resolve( context=RequestContext(request=self.request)), link_setup_source_create_watch_folder.resolve( context=RequestContext(request=self.request)), ], 'no_results_text': _('Sources provide the means to upload documents. ' 'Some sources like the webform, are interactive and require ' 'user input to operate. Others like the email sources, are ' 'automatic and run on the background without user intervention.' ), 'no_results_title': _('No sources available'), 'title': _('Sources'), }
def ready(self): super(DocumentStatesApp, self).ready() Action = apps.get_model(app_label='actstream', model_name='Action') Document = apps.get_model(app_label='documents', model_name='Document') ErrorLogEntry = apps.get_model(app_label='common', model_name='ErrorLogEntry') Workflow = self.get_model('Workflow') WorkflowInstance = self.get_model('WorkflowInstance') WorkflowInstanceLogEntry = self.get_model('WorkflowInstanceLogEntry') WorkflowRuntimeProxy = self.get_model('WorkflowRuntimeProxy') WorkflowState = self.get_model('WorkflowState') WorkflowStateAction = self.get_model('WorkflowStateAction') WorkflowStateRuntimeProxy = self.get_model('WorkflowStateRuntimeProxy') WorkflowTransition = self.get_model('WorkflowTransition') WorkflowTransitionTriggerEvent = self.get_model( 'WorkflowTransitionTriggerEvent') Document.add_to_class('workflow', DocumentStateHelper.constructor) ErrorLogEntry.objects.register(model=WorkflowStateAction) WorkflowAction.initialize() ModelAttribute( model=Document, name='workflow.< workflow internal name >.get_current_state', label=_('Current state of a workflow'), description=_('Return the current state of the selected workflow')) ModelAttribute( model=Document, name= 'workflow.< workflow internal name >.get_current_state.completion', label=_('Current state of a workflow'), description=_( 'Return the completion value of the current state of the ' 'selected workflow')) ModelPermission.register(model=Document, permissions=(permission_workflow_view, )) ModelPermission.register(model=Workflow, permissions=( permission_error_log_view, permission_workflow_delete, permission_workflow_edit, permission_workflow_transition, permission_workflow_view, )) ModelPermission.register_inheritance( model=WorkflowInstance, related='workflow', ) ModelPermission.register_inheritance( model=WorkflowInstanceLogEntry, related='workflow_instance__workflow', ) ModelPermission.register( model=WorkflowTransition, permissions=(permission_workflow_transition, )) ModelPermission.register_inheritance( model=WorkflowState, related='workflow', ) ModelPermission.register_inheritance( model=WorkflowStateAction, related='state__workflow', ) ModelPermission.register_inheritance( model=WorkflowTransition, related='workflow', ) ModelPermission.register_inheritance( model=WorkflowTransitionTriggerEvent, related='transition__workflow', ) SourceColumn(source=Workflow, label=_('Label'), attribute='label') SourceColumn(source=Workflow, label=_('Internal name'), attribute='internal_name') SourceColumn(source=Workflow, label=_('Initial state'), func=lambda context: context['object'].get_initial_state( ) or _('None')) SourceColumn(source=WorkflowInstance, label=_('Current state'), attribute='get_current_state') SourceColumn( source=WorkflowInstance, label=_('User'), func=lambda context: getattr( context['object'].get_last_log_entry(), 'user', _('None'))) SourceColumn(source=WorkflowInstance, label=_('Last transition'), attribute='get_last_transition') SourceColumn( source=WorkflowInstance, label=_('Date and time'), func=lambda context: getattr( context['object'].get_last_log_entry(), 'datetime', _('None'))) SourceColumn( source=WorkflowInstance, label=_('Completion'), func=lambda context: getattr(context['object'].get_current_state(), 'completion', _('None'))) SourceColumn(source=WorkflowInstanceLogEntry, label=_('Date and time'), attribute='datetime') SourceColumn(source=WorkflowInstanceLogEntry, label=_('User'), attribute='user') SourceColumn(source=WorkflowInstanceLogEntry, label=_('Transition'), attribute='transition') SourceColumn(source=WorkflowInstanceLogEntry, label=_('Comment'), attribute='comment') SourceColumn(source=WorkflowState, label=_('Is initial state?'), func=lambda context: TwoStateWidget(state=context[ 'object'].initial).render()) SourceColumn(source=WorkflowState, label=_('Completion'), attribute='completion') SourceColumn(source=WorkflowStateAction, label=_('Label'), attribute='label') SourceColumn(source=WorkflowStateAction, label=_('Enabled?'), func=lambda context: TwoStateWidget(state=context[ 'object'].enabled).render()) SourceColumn(source=WorkflowStateAction, label=_('When?'), attribute='get_when_display') SourceColumn(source=WorkflowStateAction, label=_('Action type'), attribute='get_class_label') SourceColumn(source=WorkflowTransition, label=_('Origin state'), attribute='origin_state') SourceColumn(source=WorkflowTransition, label=_('Destination state'), attribute='destination_state') SourceColumn(source=WorkflowTransition, label=_('Triggers'), func=lambda context: widget_transition_events( transition=context['object'])) app.conf.CELERY_QUEUES.extend((Queue('document_states', Exchange('document_states'), routing_key='document_states'), )) app.conf.CELERY_ROUTES.update({ 'document_states.tasks.task_launch_all_workflows': { 'queue': 'document_states' }, }) menu_facet.bind_links(links=(link_document_workflow_instance_list, ), sources=(Document, )) menu_main.bind_links(links=(link_workflow_list, ), position=10) menu_object.bind_links( links=(link_setup_workflow_states, link_setup_workflow_transitions, link_setup_workflow_document_types, link_setup_workflow_edit, link_acl_list, link_workflow_preview, link_setup_workflow_delete), sources=(Workflow, )) menu_object.bind_links(links=(link_setup_workflow_state_edit, link_setup_workflow_state_action_list, link_setup_workflow_state_delete), sources=(WorkflowState, )) menu_object.bind_links(links=(link_setup_workflow_transition_edit, link_workflow_instance_transition_events, link_acl_list, link_setup_workflow_transition_delete), sources=(WorkflowTransition, )) menu_object.bind_links(links=(link_workflow_instance_detail, link_workflow_instance_transition), sources=(WorkflowInstance, )) menu_object.bind_links(links=( link_workflow_document_list, link_workflow_state_list, ), sources=(WorkflowRuntimeProxy, )) menu_object.bind_links(links=(link_workflow_state_document_list, ), sources=(WorkflowStateRuntimeProxy, )) menu_object.bind_links(links=( link_setup_workflow_state_action_edit, link_object_error_list, link_setup_workflow_state_action_delete, ), sources=(WorkflowStateAction, )) menu_secondary.bind_links( links=(link_setup_workflow_list, link_setup_workflow_create), sources=(Workflow, 'document_states:setup_workflow_create', 'document_states:setup_workflow_list')) menu_secondary.bind_links(links=(link_workflow_list, ), sources=(WorkflowRuntimeProxy, )) menu_secondary.bind_links( links=(link_setup_workflow_state_action_selection, ), sources=(WorkflowState, )) menu_setup.bind_links(links=(link_setup_workflow_list, )) menu_sidebar.bind_links(links=(link_setup_workflow_state_create, link_setup_workflow_transition_create), sources=(Workflow, )) menu_tools.bind_links(links=(link_tool_launch_all_workflows, )) post_save.connect(launch_workflow, dispatch_uid='launch_workflow', sender=Document) # Index updating post_save.connect(handler_index_document, dispatch_uid='handler_index_document_save', sender=WorkflowInstanceLogEntry) post_save.connect( handler_trigger_transition, dispatch_uid='document_states_handler_trigger_transition', sender=Action)
def ready(self): super(MailerApp, self).ready() Document = apps.get_model( app_label='documents', model_name='Document' ) LogEntry = self.get_model('LogEntry') UserMailer = self.get_model('UserMailer') MailerBackend.initialize() SourceColumn( source=LogEntry, label=_('Date and time'), attribute='datetime' ) SourceColumn( source=LogEntry, label=_('Message'), attribute='message' ) SourceColumn( source=UserMailer, label=_('Label'), attribute='label' ) SourceColumn( source=UserMailer, label=_('Default?'), func=lambda context: TwoStateWidget( state=context['object'].default ).render() ) SourceColumn( source=UserMailer, label=_('Enabled?'), func=lambda context: TwoStateWidget( state=context['object'].enabled ).render() ) SourceColumn( source=UserMailer, label=_('Label'), attribute='backend_label' ) ModelPermission.register( model=Document, permissions=( permission_mailing_link, permission_mailing_send_document ) ) ModelPermission.register( model=UserMailer, permissions=( permission_acl_edit, permission_acl_view, permission_user_mailer_delete, permission_user_mailer_edit, permission_user_mailer_view, permission_user_mailer_use ) ) app.conf.CELERY_QUEUES.append( Queue('mailing', Exchange('mailing'), routing_key='mailing'), ) app.conf.CELERY_ROUTES.update( { 'mailer.tasks.task_send_document': { 'queue': 'mailing' }, } ) menu_multi_item.bind_links( links=( link_send_multiple_document, link_send_multiple_document_link ), sources=(Document,) ) menu_object.bind_links( links=( link_send_document_link, link_send_document ), sources=(Document,) ) menu_object.bind_links( links=( link_user_mailer_edit, link_user_mailer_log_list, link_user_mailer_test, link_acl_list, link_user_mailer_delete, ), sources=(UserMailer,) ) menu_secondary.bind_links( links=( link_user_mailer_list, link_user_mailer_create, ), sources=( UserMailer, 'mailer:user_mailer_list', 'mailer:user_mailer_create' ) ) menu_tools.bind_links(links=(link_system_mailer_error_log,)) menu_setup.bind_links(links=(link_user_mailer_setup,))
def ready(self): super(DocumentIndexingApp, self).ready() Document = apps.get_model(app_label='documents', model_name='Document') DocumentType = apps.get_model(app_label='documents', model_name='DocumentType') DocumentIndexInstanceNode = self.get_model('DocumentIndexInstanceNode') Index = self.get_model('Index') IndexInstance = self.get_model('IndexInstance') IndexInstanceNode = self.get_model('IndexInstanceNode') IndexTemplateNode = self.get_model('IndexTemplateNode') ModelPermission.register( model=Index, permissions=( permission_acl_edit, permission_acl_view, permission_document_indexing_create, permission_document_indexing_delete, permission_document_indexing_edit, permission_document_indexing_instance_view, permission_document_indexing_rebuild, permission_document_indexing_view, )) SourceColumn(source=Index, label=_('Label'), attribute='label') SourceColumn(source=Index, label=_('Slug'), attribute='slug') SourceColumn(source=Index, label=_('Enabled'), func=lambda context: TwoStateWidget(state=context[ 'object'].enabled).render()) SourceColumn(source=IndexInstance, label=_('Total levels'), func=lambda context: context['object'].instance_root. get_descendants_count()) SourceColumn( source=IndexInstance, label=_('Total documents'), func=lambda context: context['object'].instance_root. get_descendants_document_count(user=context['request'].user)) SourceColumn(source=IndexTemplateNode, label=_('Level'), func=lambda context: node_level(context['object'])) SourceColumn(source=IndexTemplateNode, label=_('Enabled'), func=lambda context: TwoStateWidget(state=context[ 'object'].enabled).render()) SourceColumn(source=IndexTemplateNode, label=_('Has document links?'), func=lambda context: TwoStateWidget(state=context[ 'object'].link_documents).render()) SourceColumn( source=IndexInstanceNode, label=_('Level'), func=lambda context: index_instance_item_link(context['object'])) SourceColumn( source=IndexInstanceNode, label=_('Levels'), func=lambda context: context['object'].get_descendants_count()) SourceColumn( source=IndexInstanceNode, label=_('Documents'), func=lambda context: context['object']. get_descendants_document_count(user=context['request'].user)) SourceColumn(source=DocumentIndexInstanceNode, label=_('Level'), func=lambda context: get_instance_link( index_instance_node=context['object'], )) SourceColumn( source=DocumentIndexInstanceNode, label=_('Levels'), func=lambda context: context['object'].get_descendants_count()) SourceColumn( source=DocumentIndexInstanceNode, label=_('Documents'), func=lambda context: context['object']. get_descendants_document_count(user=context['request'].user)) app.conf.CELERY_QUEUES.append( Queue('indexing', Exchange('indexing'), routing_key='indexing'), ) app.conf.CELERY_ROUTES.update({ 'document_indexing.tasks.task_delete_empty': { 'queue': 'indexing' }, 'document_indexing.tasks.task_remove_document': { 'queue': 'indexing' }, 'document_indexing.tasks.task_index_document': { 'queue': 'indexing' }, 'document_indexing.tasks.task_rebuild_index': { 'queue': 'tools' }, }) menu_facet.bind_links(links=(link_document_index_list, ), sources=(Document, )) menu_object.bind_links(links=(link_index_setup_edit, link_index_setup_view, link_index_setup_document_types, link_acl_list, link_index_setup_delete), sources=(Index, )) menu_object.bind_links(links=(link_template_node_create, link_template_node_edit, link_template_node_delete), sources=(IndexTemplateNode, )) menu_main.bind_links(links=(link_index_main_menu, ), position=98) menu_secondary.bind_links(links=(link_index_setup_list, link_index_setup_create), sources=(Index, 'indexing:index_setup_list', 'indexing:index_setup_create')) menu_setup.bind_links(links=(link_index_setup, )) menu_tools.bind_links(links=(link_rebuild_index_instances, )) post_delete.connect( dispatch_uid='document_indexing_handler_delete_empty', receiver=handler_delete_empty, sender=Document) pre_delete.connect( dispatch_uid='document_indexing_handler_remove_document', receiver=handler_remove_document, sender=Document) post_document_created.connect( dispatch_uid='document_indexing_handler_index_document', receiver=handler_index_document, sender=Document) post_initial_document_type.connect( dispatch_uid='document_indexing_create_default_document_index', receiver=create_default_document_index, sender=DocumentType)
def ready(self): super(MetadataApp, self).ready() from actstream import registry from .wizard_steps import WizardStepMetadata # NOQA Document = apps.get_model(app_label='documents', model_name='Document') DocumentPageResult = apps.get_model(app_label='documents', model_name='DocumentPageResult') DocumentType = apps.get_model(app_label='documents', model_name='DocumentType') DocumentMetadata = self.get_model('DocumentMetadata') DocumentTypeMetadataType = self.get_model('DocumentTypeMetadataType') MetadataType = self.get_model('MetadataType') Document.add_to_class('metadata_value_of', DocumentMetadataHelper.constructor) ModelAttribute( Document, 'metadata_value_of', description=_('Return the value of a specific document metadata'), ) ModelField(Document, 'metadata__metadata_type__name', label=_('Metadata type name')) ModelField( Document, 'metadata__value', label=_('Metadata type value'), ) ModelEventType.register(model=Document, event_types=( event_document_metadata_added, event_document_metadata_edited, event_document_metadata_removed, )) ModelEventType.register(model=MetadataType, event_types=( event_document_metadata_added, event_document_metadata_edited, event_document_metadata_removed, event_metadata_type_edited, event_metadata_type_relationship, )) ModelEventType.register( model=DocumentType, event_types=(event_metadata_type_relationship, )) ModelPermission.register(model=Document, permissions=( permission_metadata_document_add, permission_metadata_document_edit, permission_metadata_document_remove, permission_metadata_document_view, )) ModelPermission.register(model=MetadataType, permissions=(permission_acl_edit, permission_acl_view, permission_events_view, permission_metadata_type_delete, permission_metadata_type_edit, permission_metadata_type_view)) SourceColumn( source=Document, label=_('Metadata'), func=lambda context: get_metadata_string(context['object'])) SourceColumn(source=DocumentPageResult, label=_('Metadata'), func=lambda context: get_metadata_string(context['object'] .document)) SourceColumn(source=DocumentMetadata, label=_('Value'), attribute='value') SourceColumn(source=DocumentMetadata, label=_('Required'), func=lambda context: TwoStateWidget(state=context[ 'object'].is_required).render()) app.conf.CELERY_QUEUES.append( Queue('metadata', Exchange('metadata'), routing_key='metadata'), ) app.conf.CELERY_ROUTES.update({ 'metadata.tasks.task_remove_metadata_type': { 'queue': 'metadata' }, 'metadata.tasks.task_add_required_metadata_type': { 'queue': 'metadata' }, }) document_search.add_model_field(field='metadata__metadata_type__name', label=_('Metadata type')) document_search.add_model_field(field='metadata__value', label=_('Metadata value')) document_page_search.add_model_field( field='document_version__document__metadata__metadata_type__name', label=_('Metadata type')) document_page_search.add_model_field( field='document_version__document__metadata__value', label=_('Metadata value')) menu_facet.bind_links(links=(link_metadata_view, ), sources=(Document, )) menu_multi_item.bind_links(links=(link_metadata_multiple_add, link_metadata_multiple_edit, link_metadata_multiple_remove), sources=(Document, )) menu_object.bind_links( links=(link_setup_document_type_metadata_types, ), sources=(DocumentType, )) menu_object.bind_links(links=( link_setup_metadata_type_edit, link_setup_metadata_type_document_types, link_acl_list, link_object_event_types_user_subcriptions_list, link_events_for_object, link_setup_metadata_type_delete, ), sources=(MetadataType, )) menu_secondary.bind_links( links=(link_setup_metadata_type_list, link_setup_metadata_type_create), sources=(MetadataType, 'metadata:setup_metadata_type_list', 'metadata:setup_metadata_type_create')) menu_setup.bind_links(links=(link_setup_metadata_type_list, )) menu_sidebar.bind_links( links=(link_metadata_add, link_metadata_edit, link_metadata_remove), sources=('metadata:metadata_add', 'metadata:metadata_edit', 'metadata:metadata_remove', 'metadata:metadata_view')) post_delete.connect( post_document_type_metadata_type_delete, dispatch_uid='metadata_post_document_type_metadata_type_delete', sender=DocumentTypeMetadataType) post_document_type_change.connect( post_document_type_change_metadata, dispatch_uid='metadata_post_document_type_change_metadata', sender=Document) post_save.connect( post_document_type_metadata_type_add, dispatch_uid='metadata_post_document_type_metadata_type_add', sender=DocumentTypeMetadataType) # Index updating post_delete.connect( handler_index_document, dispatch_uid='metadata_handler_index_document_delete', sender=DocumentMetadata) post_save.connect(handler_index_document, dispatch_uid='metadata_handler_index_document_save', sender=DocumentMetadata) registry.register(MetadataType) registry.register(DocumentTypeMetadataType)
def ready(self): super(UserManagementApp, self).ready() from actstream import registry Group = apps.get_model(app_label='auth', model_name='Group') User = get_user_model() DynamicSerializerField.add_serializer( klass=get_user_model(), serializer_class='user_management.serializers.UserSerializer') MetadataLookup(description=_('All the groups.'), name='groups', value=get_groups) MetadataLookup(description=_('All the users.'), name='users', value=get_users) ModelPermission.register(model=Group, permissions=( permission_acl_edit, permission_acl_view, permission_group_delete, permission_group_edit, permission_group_view, )) ModelPermission.register( model=User, permissions=(permission_acl_edit, permission_acl_view, permission_user_delete, permission_user_edit, permission_user_view)) SourceColumn(source=Group, label=_('Users'), attribute='user_set.count') SourceColumn(source=User, label=_('Full name'), attribute='get_full_name') SourceColumn(source=User, label=_('Email'), attribute='email') SourceColumn(source=User, label=_('Active'), func=lambda context: TwoStateWidget(state=context[ 'object'].is_active).render()) SourceColumn(source=User, label=_('Has usable password?'), func=lambda context: TwoStateWidget(state=context[ 'object'].has_usable_password()).render()) menu_multi_item.bind_links(links=(link_user_multiple_set_password, link_user_multiple_delete), sources=('user_management:user_list', )) menu_object.bind_links(links=( link_group_edit, link_group_members, ), sources=(Group, )) menu_object.bind_links(links=( link_acl_list, link_group_delete, ), position=99, sources=(Group, )) menu_object.bind_links(links=(link_user_edit, link_user_set_password, link_user_groups, link_user_set_options, link_acl_list, link_user_delete), sources=(User, )) menu_secondary.bind_links( links=(link_group_list, link_group_create), sources=('user_management:group_multiple_delete', 'user_management:group_list', 'user_management:group_create', Group)) menu_secondary.bind_links( links=(link_user_list, link_user_create), sources=(User, 'user_management:user_multiple_set_password', 'user_management:user_multiple_delete', 'user_management:user_list', 'user_management:user_create')) menu_setup.bind_links(links=(link_user_setup, link_group_setup)) post_save.connect( dispatch_uid='user_management_handler_initialize_new_user_options', receiver=handler_initialize_new_user_options, sender=User) registry.register(Group) registry.register(User)
def ready(self): super(DocumentsApp, self).ready() from actstream import registry DeletedDocument = self.get_model('DeletedDocument') Document = self.get_model('Document') DocumentPage = self.get_model('DocumentPage') DocumentPageResult = self.get_model('DocumentPageResult') DocumentType = self.get_model('DocumentType') DocumentTypeFilename = self.get_model('DocumentTypeFilename') DocumentVersion = self.get_model('DocumentVersion') DuplicatedDocument = self.get_model('DuplicatedDocument') DynamicSerializerField.add_serializer( klass=Document, serializer_class='documents.serializers.DocumentSerializer' ) MissingItem( label=_('Create a document type'), description=_( 'Every uploaded document must be assigned a document type, ' 'it is the basic way Mayan EDMS categorizes documents.' ), condition=lambda: not DocumentType.objects.exists(), view='documents:document_type_list' ) ModelField(Document, name='description') ModelField(Document, name='date_added') ModelField(Document, name='deleted_date_time') ModelField(Document, name='document_type__label') ModelField(Document, name='in_trash') ModelField(Document, name='is_stub') ModelField(Document, name='label') ModelField(Document, name='language') ModelField(Document, name='uuid') ModelField( Document, name='versions__checksum' ) ModelField( Document, label=_('Versions comment'), name='versions__comment' ) ModelField( Document, label=_('Versions encoding'), name='versions__encoding' ) ModelField( Document, label=_('Versions mime type'), name='versions__mimetype' ) ModelField( Document, label=_('Versions timestamp'), name='versions__timestamp' ) ModelEventType.register( model=DocumentType, event_types=( event_document_create, event_document_type_created, event_document_type_edited, ) ) ModelEventType.register( model=Document, event_types=( event_document_download, event_document_properties_edit, event_document_type_change, event_document_new_version, event_document_version_revert, event_document_view ) ) ModelPermission.register( model=Document, permissions=( permission_acl_edit, permission_acl_view, permission_document_delete, permission_document_download, permission_document_edit, permission_document_new_version, permission_document_print, permission_document_properties_edit, permission_document_restore, permission_document_trash, permission_document_version_revert, permission_document_version_view, permission_document_view, permission_events_view, permission_transformation_create, permission_transformation_delete, permission_transformation_edit, permission_transformation_view, ) ) ModelPermission.register( model=DocumentType, permissions=( permission_document_create, permission_document_type_delete, permission_document_type_edit, permission_document_type_view ) ) ModelPermission.register_proxy( source=Document, model=DocumentType, ) ModelPermission.register_inheritance( model=Document, related='document_type', ) ModelPermission.register_inheritance( model=DocumentPage, related='document_version__document', ) ModelPermission.register_inheritance( model=DocumentPageResult, related='document_version__document', ) ModelPermission.register_inheritance( model=DocumentTypeFilename, related='document_type', ) ModelPermission.register_inheritance( model=DocumentVersion, related='document', ) # Document and document page thumbnail widget document_page_thumbnail_widget = DocumentPageThumbnailWidget() # Document SourceColumn( source=Document, label=_('Thumbnail'), func=lambda context: document_page_thumbnail_widget.render( instance=context['object'] ) ) SourceColumn( source=Document, attribute='document_type' ) SourceColumn( source=Document, label=_('Pages'), func=lambda context: widget_document_page_number( document=context['object'] ) ) # DocumentPage SourceColumn( source=DocumentPage, label=_('Thumbnail'), func=lambda context: document_page_thumbnail_widget.render( instance=context['object'] ) ) SourceColumn( source=DocumentPageResult, label=_('Thumbnail'), func=lambda context: document_page_thumbnail_widget.render( instance=context['object'] ) ) SourceColumn( source=DocumentPageResult, label=_('Type'), attribute='document_version.document.document_type' ) # DocumentType SourceColumn( source=DocumentType, label=_('Documents'), func=lambda context: context['object'].get_document_count( user=context['request'].user ) ) SourceColumn( source=DocumentTypeFilename, label=_('Enabled'), func=lambda context: TwoStateWidget( state=context['object'].enabled ).render() ) # DeletedDocument SourceColumn( source=DeletedDocument, label=_('Thumbnail'), func=lambda context: document_page_thumbnail_widget.render( instance=context['object'] ) ) SourceColumn( source=DeletedDocument, attribute='document_type' ) SourceColumn( source=DeletedDocument, attribute='deleted_date_time' ) # DocumentVersion SourceColumn( source=DocumentVersion, label=_('Thumbnail'), func=lambda context: document_page_thumbnail_widget.render( instance=context['object'] ) ) SourceColumn( source=DocumentVersion, attribute='timestamp' ) SourceColumn( source=DocumentVersion, label=_('Pages'), func=lambda context: widget_document_version_page_number( document_version=context['object'] ) ) SourceColumn( source=DocumentVersion, attribute='mimetype' ) SourceColumn( source=DocumentVersion, attribute='encoding' ) SourceColumn( source=DocumentVersion, attribute='comment' ) # DuplicatedDocument SourceColumn( source=DuplicatedDocument, label=_('Thumbnail'), func=lambda context: document_page_thumbnail_widget.render( instance=context['object'].document ) ) SourceColumn( source=DuplicatedDocument, label=_('Duplicates'), func=lambda context: context['object'].documents.count() ) app.conf.CELERYBEAT_SCHEDULE.update( { 'task_check_delete_periods': { 'task': 'documents.tasks.task_check_delete_periods', 'schedule': timedelta( seconds=CHECK_DELETE_PERIOD_INTERVAL ), }, 'task_check_trash_periods': { 'task': 'documents.tasks.task_check_trash_periods', 'schedule': timedelta(seconds=CHECK_TRASH_PERIOD_INTERVAL), }, 'task_delete_stubs': { 'task': 'documents.tasks.task_delete_stubs', 'schedule': timedelta(seconds=DELETE_STALE_STUBS_INTERVAL), }, } ) app.conf.CELERY_QUEUES.extend( ( Queue( 'converter', Exchange('converter'), routing_key='converter', delivery_mode=1 ), Queue( 'documents_periodic', Exchange('documents_periodic'), routing_key='documents_periodic', delivery_mode=1 ), Queue('uploads', Exchange('uploads'), routing_key='uploads'), Queue( 'documents', Exchange('documents'), routing_key='documents' ), ) ) app.conf.CELERY_ROUTES.update( { 'documents.tasks.task_check_delete_periods': { 'queue': 'documents_periodic' }, 'documents.tasks.task_check_trash_periods': { 'queue': 'documents_periodic' }, 'documents.tasks.task_clean_empty_duplicate_lists': { 'queue': 'documents' }, 'documents.tasks.task_clear_image_cache': { 'queue': 'tools' }, 'documents.tasks.task_delete_document': { 'queue': 'documents' }, 'documents.tasks.task_delete_stubs': { 'queue': 'documents_periodic' }, 'documents.tasks.task_generate_document_page_image': { 'queue': 'converter' }, 'documents.tasks.task_scan_duplicates_all': { 'queue': 'tools' }, 'documents.tasks.task_scan_duplicates_for': { 'queue': 'uploads' }, 'documents.tasks.task_update_page_count': { 'queue': 'uploads' }, 'documents.tasks.task_upload_new_version': { 'queue': 'uploads' }, } ) dashboard_main.add_widget( widget=DashboardWidgetDocumentsTotal, order=0 ) dashboard_main.add_widget( widget=DashboardWidgetDocumentPagesTotal, order=1 ) dashboard_main.add_widget( widget=DashboardWidgetDocumentsInTrash, order=2 ) dashboard_main.add_widget( widget=DashboardWidgetDocumentsTypesTotal, order=3 ) dashboard_main.add_widget( widget=DashboardWidgetDocumentsNewThisMonth, order=4 ) dashboard_main.add_widget( widget=DashboardWidgetDocumentsPagesNewThisMonth, order=5 ) menu_documents.bind_links( links=( link_document_list_recent_access, link_document_list_recent_added, link_document_list_favorites, link_document_list, link_document_list_deleted, link_duplicated_document_list, ) ) menu_main.bind_links(links=(menu_documents,), position=0) menu_setup.bind_links(links=(link_document_type_setup,)) menu_tools.bind_links( links=(link_clear_image_cache, link_duplicated_document_scan) ) # Document type links menu_object.bind_links( links=( link_document_type_edit, link_document_type_filename_list, link_acl_list, link_object_event_types_user_subcriptions_list, link_document_type_delete, link_events_for_object, ), sources=(DocumentType,) ) menu_object.bind_links( links=( link_document_type_filename_edit, link_document_type_filename_delete ), sources=(DocumentTypeFilename,) ) menu_secondary.bind_links( links=(link_document_type_list, link_document_type_create), sources=( DocumentType, 'documents:document_type_create', 'documents:document_type_list' ) ) menu_sidebar.bind_links( links=(link_document_type_filename_create,), sources=( DocumentTypeFilename, 'documents:document_type_filename_list', 'documents:document_type_filename_create' ) ) menu_sidebar.bind_links( links=(link_trash_can_empty,), sources=( 'documents:document_list_deleted', 'documents:trash_can_empty' ) ) # Document object links menu_object.bind_links( links=( link_document_favorites_add, link_document_favorites_remove, link_document_edit, link_document_document_type_edit, link_document_print, link_document_trash, link_document_quick_download, link_document_download, link_document_clear_transformations, link_document_clone_transformations, link_document_update_page_count, ), sources=(Document,) ) menu_object.bind_links( links=(link_document_restore, link_document_delete), sources=(DeletedDocument,) ) # Document facet links menu_facet.bind_links( links=(link_document_duplicates_list, link_acl_list,), sources=(Document,) ) menu_facet.bind_links( links=(link_document_preview,), sources=(Document,), position=0 ) menu_facet.bind_links( links=(link_document_properties,), sources=(Document,), position=2 ) menu_facet.bind_links( links=( link_events_for_object, link_object_event_types_user_subcriptions_list, link_document_version_list, ), sources=(Document,), position=2 ) menu_facet.bind_links(links=(link_document_pages,), sources=(Document,)) # Document actions menu_object.bind_links( links=( link_document_version_revert, link_document_version_download ), sources=(DocumentVersion,) ) menu_multi_item.bind_links( links=( link_document_multiple_favorites_add, link_document_multiple_favorites_remove, link_document_multiple_clear_transformations, link_document_multiple_trash, link_document_multiple_download, link_document_multiple_update_page_count, link_document_multiple_document_type_edit, ), sources=(Document,) ) menu_multi_item.bind_links( links=( link_document_multiple_restore, link_document_multiple_delete ), sources=(DeletedDocument,) ) # Document pages menu_facet.add_unsorted_source(source=DocumentPage) menu_facet.bind_links( links=( link_document_page_rotate_left, link_document_page_rotate_right, link_document_page_zoom_in, link_document_page_zoom_out, link_document_page_view_reset ), sources=('documents:document_page_view',) ) menu_facet.bind_links( links=(link_document_page_return, link_document_page_view), sources=(DocumentPage,) ) menu_facet.bind_links( links=( link_document_page_navigation_first, link_document_page_navigation_previous, link_document_page_navigation_next, link_document_page_navigation_last, link_transformation_list ), sources=(DocumentPage,) ) menu_object.bind_links( links=(link_transformation_list,), sources=(DocumentPage,) ) # Document versions menu_facet.bind_links( links=( link_document_version_return_document, link_document_version_return_list ), sources=(DocumentVersion,) ) menu_facet.bind_links( links=(link_document_version_view,), sources=(DocumentVersion,) ) post_delete.connect( dispatch_uid='handler_remove_empty_duplicates_lists', receiver=handler_remove_empty_duplicates_lists, sender=Document, ) post_initial_setup.connect( create_default_document_type, dispatch_uid='create_default_document_type' ) post_version_upload.connect( handler_scan_duplicates_for, dispatch_uid='handler_scan_duplicates_for', ) registry.register(DeletedDocument) registry.register(Document) registry.register(DocumentType) registry.register(DocumentVersion)
def ready(self): super(TaskManagerApp, self).ready() SourceColumn( source=CeleryQueue, label=_('Label'), attribute='label' ) SourceColumn( source=CeleryQueue, label=_('Name'), attribute='name' ) SourceColumn( source=CeleryQueue, label=_('Default queue?'), func=lambda context: TwoStateWidget( state=context['object'].is_default_queue ).render() ) SourceColumn( source=CeleryQueue, label=_('Is transient?'), func=lambda context: TwoStateWidget( state=context['object'].is_transient ).render() ) SourceColumn( source=Task, label=_('Type'), attribute='task_type' ) SourceColumn( source=Task, label=_('Start time'), attribute='get_time_started' ) SourceColumn( source=Task, label=_('Host'), func=lambda context: context['object'].kwargs['hostname'] ) SourceColumn( source=Task, label=_('Acknowledged'), func=lambda context: TwoStateWidget( state=context['object'].kwargs['acknowledged'] ).render() ) SourceColumn( source=Task, label=_('Arguments'), func=lambda context: context['object'].kwargs['args'] ) SourceColumn( source=Task, label=_('Keyword arguments'), func=lambda context: context['object'].kwargs['kwargs'] ) SourceColumn( source=Task, label=_('Worker process ID'), func=lambda context: context['object'].kwargs['worker_pid'] ) menu_object.bind_links( links=( link_queue_active_task_list, link_queue_scheduled_task_list, link_queue_reserved_task_list, ), sources=(CeleryQueue,) ) menu_secondary.bind_links( links=(link_queue_list,), sources=(CeleryQueue, Task, 'task_manager:queue_list') ) menu_tools.bind_links(links=(link_task_manager,))