def ready(self): super(LinkingApp, self).ready() APIEndPoint(app=self, version_string='1') 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: two_state_template(context['object'].enabled)) SourceColumn( source=SmartLinkCondition, label=_('Enabled'), func=lambda context: two_state_template(context['object'].enabled)) 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(DocumentCommentsApp, self).ready() Document = apps.get_model(app_label='documents', model_name='Document') Comment = self.get_model('Comment') ModelPermission.register(model=Document, permissions=(permission_comment_create, permission_comment_delete, permission_comment_view)) SourceColumn(source=Comment, label=_('Date'), attribute='submit_date') SourceColumn( source=Comment, label=_('User'), func=lambda context: context['object'].user.get_full_name() if context['object'].user.get_full_name() else context['object' ].user) SourceColumn(source=Comment, label=_('Comment'), attribute='comment') menu_sidebar.bind_links(links=(link_comment_add, ), sources=('comments:comments_for_document', 'comments:comment_add', 'comments:comment_delete', 'comments:comment_multiple_delete')) menu_object.bind_links(links=(link_comment_delete, ), sources=(Comment, )) menu_facet.bind_links(links=(link_comments_for_document, ), sources=(Document, ))
def ready(self): super(MailerApp, self).ready() SourceColumn(source=LogEntry, label=_('Date and time'), attribute='datetime') SourceColumn(source=LogEntry, label=_('Message'), attribute='message') ModelPermission.register( model=Document, permissions=(permission_mailing_link, permission_mailing_send_document)) 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_object.bind_links(links=(link_send_document_link, link_send_document), sources=(Document, )) menu_tools.bind_links(links=(link_document_mailing_error_log, ))
def ready(self): super(DocumentCommentsApp, self).ready() ModelPermission.register( model=Document, permissions=( permission_comment_create, permission_comment_delete, permission_comment_view ) ) SourceColumn(source=Comment, label=_('Date'), attribute='submit_date') SourceColumn( source=Comment, label=_('User'), func=lambda context: context['object'].user.get_full_name() if context['object'].user.get_full_name() else context['object'].user ) SourceColumn(source=Comment, label=_('Comment'), attribute='comment') menu_sidebar.bind_links( links=(link_comment_add,), sources=( 'comments:comments_for_document', 'comments:comment_add', 'comments:comment_delete', 'comments:comment_multiple_delete' ) ) menu_object.bind_links( links=(link_comment_delete,), sources=(Comment,) ) menu_facet.bind_links( links=(link_comments_for_document,), sources=(Document,) )
def ready(self): super(MOTDApp, self).ready() Message = self.get_model('Message') ModelPermission.register( model=Message, permissions=( permission_acl_edit, permission_acl_view, permission_message_delete, permission_message_edit, permission_message_view ) ) SourceColumn( source=Message, label=_('Enabled'), attribute='enabled' ) SourceColumn( source=Message, label=_('Start date time'), func=lambda context: context['object'].start_datetime or _('None') ) SourceColumn( source=Message, label=_('End date time'), func=lambda context: context['object'].end_datetime or _('None') ) menu_object.bind_links( links=( link_message_edit, link_acl_list, link_message_delete ), sources=(Message,) ) menu_secondary.bind_links( links=(link_message_create,), sources=(Message, 'motd:message_list', 'motd:message_create') ) menu_setup.bind_links( links=(link_message_list,) )
def ready(self): super(PermissionsApp, self).ready() Role = self.get_model('Role') Group = apps.get_model(app_label='auth', model_name='Group') ModelPermission.register( model=Role, permissions=(permission_acl_edit, permission_acl_view, permission_permission_grant, permission_permission_revoke, permission_role_delete, permission_role_edit, permission_role_view)) menu_object.bind_links(links=(link_group_roles, ), position=98, sources=(Group, )) menu_object.bind_links(links=(link_role_edit, link_role_groups, link_role_permissions, link_acl_list, link_role_delete), sources=(Role, )) menu_multi_item.bind_links(links=(link_permission_grant, link_permission_revoke), sources=('permissions:role_permissions', )) menu_secondary.bind_links(links=(link_role_list, link_role_create), sources=(Role, 'permissions:role_create', 'permissions:role_list')) menu_setup.bind_links(links=(link_role_list, )) perform_upgrade.connect(purge_permissions, dispatch_uid='purge_permissions')
def ready(self): super(MOTDApp, self).ready() Message = self.get_model('Message') ModelPermission.register( model=Message, permissions=( permission_message_delete, permission_message_edit, permission_message_view ) ) SourceColumn( source=Message, label=_('Enabled'), attribute='enabled' ) SourceColumn( source=Message, label=_('Start date time'), func=lambda context: context['object'].start_datetime or _('None') ) SourceColumn( source=Message, label=_('End date time'), func=lambda context: context['object'].end_datetime or _('None') ) menu_object.bind_links( links=( link_message_edit, link_message_delete ), sources=(Message,) ) menu_secondary.bind_links( links=(link_message_create,), sources=(Message, 'motd:message_list', 'motd:message_create') ) menu_setup.bind_links( links=(link_message_list,) )
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) ModelPermission.register(model=Document, permissions=( permission_document_verify, permission_signature_delete, permission_signature_download, permission_signature_upload, )) menu_facet.bind_links(links=(link_document_verify, ), sources=(Document, )) menu_sidebar.bind_links( links=(link_document_signature_upload, link_document_signature_download, link_document_signature_delete), sources=('signatures:document_verify', 'signatures:document_signature_upload', 'signatures:document_signature_download', 'signatures:document_signature_delete'))
def _create_error_log_entry(self): ModelPermission.register(model=get_user_model(), permissions=(permission_error_log_view, )) ErrorLogEntry.objects.register(model=get_user_model()) self.error_log_entry = self.user.error_logs.create( result=TEST_ERROR_LOG_ENTRY_RESULT)
def _create_error_log_entry(self): ModelPermission.register( model=get_user_model(), permissions=(permission_error_log_view,) ) ErrorLogEntry.objects.register(model=get_user_model()) self.error_log_entry = self.user.error_logs.create( result=TEST_ERROR_LOG_ENTRY_RESULT )
def ready(self): super(CheckoutsApp, self).ready() APIEndPoint(app=self, version_string='1') Document = apps.get_model(app_label='documents', model_name='Document') DocumentCheckout = self.get_model('DocumentCheckout') 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_state', lambda document: DocumentCheckout.objects. document_checkout_state(document)) Document.add_to_class( 'is_checked_out', lambda document: DocumentCheckout.objects. is_document_checked_out(document)) ModelPermission.register( model=Document, permissions=(permission_document_checkout, permission_document_checkin, permission_document_checkin_override, permission_document_checkout_detail_view)) app.conf.CELERYBEAT_SCHEDULE.update({ 'task_check_expired_check_outs': { 'task': 'checkouts.tasks.task_check_expired_check_outs', 'schedule': timedelta(seconds=CHECK_EXPIRED_CHECK_OUTS_INTERVAL), }, }) app.conf.CELERY_QUEUES.append( Queue('checkouts_periodic', Exchange('checkouts_periodic'), routing_key='checkouts_periodic', delivery_mode=1), ) app.conf.CELERY_ROUTES.update({ 'checkouts.tasks.task_check_expired_check_outs': { 'queue': 'checkouts_periodic' }, }) menu_facet.bind_links(links=(link_checkout_info, ), sources=(Document, )) menu_main.bind_links(links=(link_checkout_list, )) menu_sidebar.bind_links(links=(link_checkout_document, link_checkin_document), sources=('checkouts:checkout_info', 'checkouts:checkout_document', 'checkouts:checkin_document'))
def ready(self): super(DjangoGPGApp, self).ready() APIEndPoint(app=self, version_string='1') Key = self.get_model('Key') ModelPermission.register( model=Key, permissions=( permission_acl_edit, permission_acl_view, permission_key_delete, permission_key_download, permission_key_sign, permission_key_view ) ) SourceColumn(source=Key, label=_('Key ID'), attribute='key_id') SourceColumn(source=Key, label=_('User ID'), attribute='user_id') SourceColumn(source=KeyStub, label=_('Key ID'), attribute='key_id') SourceColumn(source=KeyStub, label=_('Type'), attribute='key_type') SourceColumn( source=KeyStub, label=_('Creation date'), attribute='date' ) SourceColumn( source=KeyStub, label=_('Expiration date'), func=lambda context: context['object'].expires or _('No expiration') ) SourceColumn(source=KeyStub, label=_('Length'), attribute='length') SourceColumn( source=KeyStub, label=_('User ID'), func=lambda context: ', '.join(context['object'].user_id) ) menu_object.bind_links(links=(link_key_detail,), sources=(Key,)) menu_object.bind_links(links=(link_key_receive,), sources=(KeyStub,)) menu_object.bind_links( links=(link_acl_list, link_key_delete, link_key_download,), sources=(Key,) ) menu_setup.bind_links(links=(link_key_setup,)) menu_facet.bind_links( links=(link_private_keys, link_public_keys), sources=( 'django_gpg:key_public_list', 'django_gpg:key_private_list', 'django_gpg:key_query', 'django_gpg:key_query_results', Key, KeyStub ) ) menu_sidebar.bind_links( links=(link_key_query, link_key_upload), sources=( 'django_gpg:key_public_list', 'django_gpg:key_private_list', 'django_gpg:key_query', 'django_gpg:key_query_results', Key, KeyStub ) )
def ready(self): super(DjangoGPGApp, self).ready() Key = self.get_model('Key') ModelPermission.register( model=Key, permissions=( permission_acl_edit, permission_acl_view, permission_key_delete, permission_key_download, permission_key_sign, permission_key_view ) ) SourceColumn(source=Key, label=_('Key ID'), attribute='key_id') SourceColumn(source=Key, label=_('User ID'), attribute='user_id') SourceColumn(source=KeyStub, label=_('Key ID'), attribute='key_id') SourceColumn(source=KeyStub, label=_('Type'), attribute='key_type') SourceColumn( source=KeyStub, label=_('Creation date'), attribute='date' ) SourceColumn( source=KeyStub, label=_('Expiration date'), func=lambda context: context['object'].expires or _('No expiration') ) SourceColumn(source=KeyStub, label=_('Length'), attribute='length') SourceColumn( source=KeyStub, label=_('User ID'), func=lambda context: ', '.join(context['object'].user_id) ) menu_object.bind_links(links=(link_key_detail,), sources=(Key,)) menu_object.bind_links(links=(link_key_receive,), sources=(KeyStub,)) menu_object.bind_links( links=(link_acl_list, link_key_delete, link_key_download,), sources=(Key,) ) menu_setup.bind_links(links=(link_key_setup,)) menu_facet.bind_links( links=(link_private_keys, link_public_keys), sources=( 'django_gpg:key_public_list', 'django_gpg:key_private_list', 'django_gpg:key_query', 'django_gpg:key_query_results', 'django_gpg:key_upload', Key, KeyStub ) ) menu_sidebar.bind_links( links=(link_key_query, link_key_upload), sources=( 'django_gpg:key_public_list', 'django_gpg:key_private_list', 'django_gpg:key_query', 'django_gpg:key_query_results', 'django_gpg:key_upload', Key, KeyStub ) )
def ready(self, *args, **kwargs): super(QuotasApp, self).ready(*args, **kwargs) Quota = self.get_model('Quota') QuotaBackend.initialize() try: for quota in Quota.objects.all(): quota.update_receiver() except (OperationalError, ProgrammingError): # Ignore errors during migration pass ModelPermission.register( model=Quota, permissions=(permission_acl_edit, permission_acl_view, permission_quota_delete, permission_quota_edit, permission_quota_view)) SourceColumn(source=Quota, label=_('Backend'), attribute='backend_label') SourceColumn(source=Quota, label=_('Display'), attribute='backend_display') SourceColumn(source=Quota, label=_('Usage'), attribute='backend_usage') SourceColumn( source=Quota, label=_('Enabled?'), func=lambda context: two_state_template(context['object'].enabled)) SourceColumn(source=Quota, label=_('Editable?'), func=lambda context: two_state_template(context['object']. editable)) menu_object.bind_links(links=( link_quota_edit, link_acl_list, link_quota_delete, ), sources=(Quota, )) menu_secondary.bind_links(links=( link_quota_list, link_quota_create, ), sources=( Quota, 'quotas:quota_backend_selection', 'quotas:quota_create', 'quotas:quota_list', )) menu_setup.bind_links(links=(link_quota_setup, ))
def ready(self): super(DocumentCommentsApp, self).ready() APIEndPoint(app=self, version_string='1') Document = apps.get_model( app_label='documents', model_name='Document' ) Comment = self.get_model('Comment') ModelEventType.register( model=Document, event_types=( event_document_comment_create, event_document_comment_delete ) ) ModelPermission.register( model=Document, permissions=( permission_comment_create, permission_comment_delete, permission_comment_view ) ) SourceColumn(source=Comment, label=_('Date'), attribute='submit_date') SourceColumn( source=Comment, label=_('User'), func=lambda context: context['object'].user.get_full_name() if context['object'].user.get_full_name() else context['object'].user ) SourceColumn(source=Comment, label=_('Comment'), attribute='comment') document_page_search.add_model_field( field='document_version__document__comments__comment', label=_('Comments') ) document_search.add_model_field( field='comments__comment', label=_('Comments') ) menu_sidebar.bind_links( links=(link_comment_add,), sources=( 'comments:comments_for_document', 'comments:comment_add', 'comments:comment_delete', 'comments:comment_multiple_delete' ) ) menu_object.bind_links( links=(link_comment_delete,), sources=(Comment,) ) menu_facet.bind_links( links=(link_comments_for_document,), sources=(Document,) )
def ready(self): super(FoldersApp, self).ready() Document = apps.get_model(app_label='documents', model_name='Document') DocumentFolder = self.get_model('DocumentFolder') Folder = self.get_model('Folder') APIEndPoint(app=self, version_string='1') Document.add_to_class( 'document_folders', lambda document: DocumentFolder.objects.filter(documents=document)) ModelPermission.register( model=Document, permissions=(permission_folder_add_document, permission_folder_remove_document)) ModelPermission.register( model=Folder, permissions=(permission_acl_edit, permission_acl_view, permission_folder_delete, permission_folder_edit, permission_folder_view)) SourceColumn(source=Folder, label=_('Created'), attribute='datetime_created') SourceColumn(source=Folder, label=_('Documents'), func=lambda context: context['object'].get_document_count( user=context['request'].user)) menu_facet.bind_links(links=(link_document_folder_list, ), sources=(Document, )) menu_folders.bind_links(links=(link_folder_list, link_folder_create)) menu_main.bind_links(links=(menu_folders, ), position=98) menu_multi_item.bind_links( links=(link_folder_add_multiple_documents, link_multiple_document_folder_remove), sources=(Document, )) menu_object.bind_links(links=(link_folder_view, ), sources=(DocumentFolder, )) menu_object.bind_links(links=(link_folder_view, link_folder_edit, link_acl_list, link_folder_delete), sources=(Folder, )) menu_sidebar.bind_links(links=(link_folder_add_document, link_document_folder_remove), sources=('folders:document_folder_list', 'folders:folder_add_document', 'folders:document_folder_remove'))
def ready(self): super(DocumentCommentsApp, self).ready() Document = apps.get_model( app_label='documents', model_name='Document' ) Comment = self.get_model('Comment') ModelEventType.register( model=Document, event_types=( event_document_comment_create, event_document_comment_delete ) ) ModelPermission.register( model=Document, permissions=( permission_comment_create, permission_comment_delete, permission_comment_view ) ) SourceColumn(source=Comment, label=_('Date'), attribute='submit_date') SourceColumn( source=Comment, label=_('User'), func=lambda context: context['object'].user.get_full_name() if context['object'].user.get_full_name() else context['object'].user ) SourceColumn(source=Comment, label=_('Comment'), attribute='comment') document_page_search.add_model_field( field='document_version__document__comments__comment', label=_('Comments') ) document_search.add_model_field( field='comments__comment', label=_('Comments') ) menu_sidebar.bind_links( links=(link_comment_add,), sources=( 'comments:comments_for_document', 'comments:comment_add', 'comments:comment_delete', 'comments:comment_multiple_delete' ) ) menu_object.bind_links( links=(link_comment_delete,), sources=(Comment,) ) menu_facet.bind_links( links=(link_comments_for_document,), sources=(Document,) )
def ready(self): super(CabinetsApp, self).ready() Document = apps.get_model(app_label='documents', model_name='Document') DocumentCabinet = self.get_model('DocumentCabinet') Cabinet = self.get_model('Cabinet') APIEndPoint(app=self, version_string='1') Document.add_to_class( 'document_cabinets', lambda document: DocumentCabinet.objects. filter(documents=document)) ModelPermission.register( model=Document, permissions=(permission_cabinet_add_document, permission_cabinet_remove_document)) ModelPermission.register( model=Cabinet, permissions=(permission_acl_edit, permission_acl_view, permission_cabinet_delete, permission_cabinet_edit, permission_cabinet_view)) menu_facet.bind_links(links=(link_document_cabinet_list, ), sources=(Document, )) menu_cabinets.bind_links(links=(link_cabinet_list, link_cabinet_create)) menu_main.bind_links(links=(menu_cabinets, ), position=98) menu_multi_item.bind_links( links=(link_cabinet_add_multiple_documents, link_multiple_document_cabinet_remove), sources=(Document, )) menu_object.bind_links(links=(link_cabinet_view, ), sources=(DocumentCabinet, )) menu_object.bind_links(links=(link_cabinet_view, link_cabinet_edit, link_custom_acl_list, link_cabinet_delete), sources=(Cabinet, )) menu_sidebar.bind_links(links=(link_cabinet_child_add, ), sources=(Cabinet, )) menu_sidebar.bind_links(links=(link_cabinet_add_document, link_document_cabinet_remove), sources=('cabinets:document_cabinet_list', 'cabinets:cabinet_add_document', 'cabinets:document_cabinet_remove'))
def ready(self): super(RegisterApp, self).ready() Document = apps.get_model(app_label='documents', model_name='Document') DocumentVersion = apps.get_model(app_label='documents', model_name='DocumentVersion') DocumentRegister = self.get_model('DocumentRegister') Document.add_to_class('check_in', lambda document, user=None: DocumentRegister. objects.check_in_document(document, user)) Document.add_to_class( 'checkout_info', lambda document: DocumentRegister.objects. document_register_out_info(document)) ModelPermission.register( model=Document, permissions=(permission_document_register_out, permission_document_register_in, permission_document_register_in_override, permission_document_register_out_detail_view))
def ready(self): super(PermissionsApp, self).ready() Role = self.get_model('Role') Group = apps.get_model(app_label='auth', model_name='Group') ModelPermission.register( model=Role, permissions=( permission_acl_edit, permission_acl_view, permission_permission_grant, permission_permission_revoke, permission_role_delete, permission_role_edit, permission_role_view ) ) menu_object.bind_links( links=(link_group_roles,), position=98, sources=(Group,) ) menu_object.bind_links( links=( link_role_edit, link_role_groups, link_role_permissions, link_acl_list, link_role_delete ), sources=(Role,) ) menu_multi_item.bind_links( links=(link_permission_grant, link_permission_revoke), sources=('permissions:role_permissions',) ) menu_secondary.bind_links( links=(link_role_list, link_role_create), sources=(Role, 'permissions:role_create', 'permissions:role_list') ) menu_setup.bind_links(links=(link_role_list,)) perform_upgrade.connect( purge_permissions, dispatch_uid='purge_permissions' )
def ready(self): super(MailerApp, self).ready() SourceColumn( source=LogEntry, label=_('Date and time'), attribute='datetime' ) SourceColumn( source=LogEntry, label=_('Message'), attribute='message' ) ModelPermission.register( model=Document, permissions=( permission_mailing_link, permission_mailing_send_document ) ) 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_object.bind_links( links=( link_send_document_link, link_send_document ), sources=(Document,) ) menu_tools.bind_links(links=(link_document_mailing_error_log,))
def ready(self): super(CabinetsApp, self).ready() from actstream import registry Document = apps.get_model( app_label='documents', model_name='Document' ) DocumentCabinet = self.get_model('DocumentCabinet') Cabinet = self.get_model('Cabinet') APIEndPoint(app=self, version_string='1') # Add explicit order_by as DocumentCabinet ordering Meta option has no # effect. Document.add_to_class( 'document_cabinets', lambda document: DocumentCabinet.objects.filter(documents=document).order_by('parent__label', 'label') ) ModelPermission.register( model=Document, permissions=( permission_cabinet_add_document, permission_cabinet_remove_document ) ) ModelPermission.register( model=Cabinet, permissions=( permission_acl_edit, permission_acl_view, permission_cabinet_delete, permission_cabinet_edit, permission_cabinet_view, permission_cabinet_add_document, permission_cabinet_remove_document ) ) ModelPermission.register_inheritance( model=Cabinet, related='get_root', ) SourceColumn( source=Document, label=_('Cabinets'), func=lambda context: widget_document_cabinets( document=context['object'], user=context['request'].user ), order=1 ) document_page_search.add_model_field( field='document_version__document__cabinets__label', label=_('Cabinets') ) document_search.add_model_field( field='cabinets__label', label=_('Cabinets') ) menu_facet.bind_links( links=(link_document_cabinet_list,), sources=(Document,) ) menu_cabinets.bind_links( links=( link_cabinet_list, link_cabinet_create ) ) menu_main.bind_links(links=(menu_cabinets,), position=98) menu_multi_item.bind_links( links=( link_cabinet_add_multiple_documents, link_multiple_document_cabinet_remove ), sources=(Document,) ) menu_object.bind_links( links=( link_cabinet_view, ), sources=(DocumentCabinet, ) ) menu_object.bind_links( links=( link_cabinet_view, link_cabinet_edit, link_custom_acl_list, link_cabinet_delete ), sources=(Cabinet,) ) menu_sidebar.bind_links( links=(link_cabinet_child_add,), sources=(Cabinet,) ) menu_sidebar.bind_links( links=(link_cabinet_add_document, link_document_cabinet_remove), sources=( 'cabinets:document_cabinet_list', 'cabinets:cabinet_add_document', 'cabinets:document_cabinet_remove' ) ) registry.register(Cabinet)
def ready(self): super(DocumentSignaturesApp, self).ready() Document = apps.get_model( app_label='documents', model_name='Document' ) DocumentVersion = apps.get_model( app_label='documents', model_name='DocumentVersion' ) Key = apps.get_model( app_label='django_gpg', model_name='Key' ) EmbeddedSignature = self.get_model('EmbeddedSignature') SignatureBaseModel = self.get_model('SignatureBaseModel') DocumentVersion.register_post_save_hook( order=1, func=EmbeddedSignature.objects.create ) DocumentVersion.register_pre_open_hook( order=1, func=EmbeddedSignature.objects.open_signed ) ModelPermission.register( model=Document, permissions=( permission_document_version_sign_detached, permission_document_version_sign_embedded, permission_document_version_signature_delete, permission_document_version_signature_download, permission_document_version_signature_view, permission_document_version_signature_upload, ) ) SourceColumn( source=SignatureBaseModel, label=_('Date'), attribute='date' ) SourceColumn( source=SignatureBaseModel, label=_('Key ID'), attribute='get_key_id' ) SourceColumn( source=SignatureBaseModel, label=_('Signature ID'), func=lambda context: context['object'].signature_id or _('None') ) SourceColumn( source=SignatureBaseModel, label=_('Type'), func=lambda context: SignatureBaseModel.objects.get_subclass( pk=context['object'].pk ).get_signature_type_display() ) app.conf.CELERY_QUEUES.append( Queue( 'signatures', Exchange('signatures'), routing_key='signatures' ), ) app.conf.CELERY_ROUTES.update( { 'document_signatures.tasks.task_verify_key_signatures': { 'queue': 'signatures' }, 'document_signatures.tasks.task_unverify_key_signatures': { 'queue': 'signatures' }, 'document_signatures.tasks.task_verify_document_version': { 'queue': 'signatures' }, 'document_signatures.tasks.task_verify_missing_embedded_signature': { 'queue': 'tools' }, } ) menu_facet.bind_links( links=(link_document_signature_list,), sources=(Document,) ) menu_facet.bind_links( links=( link_document_version_signature_list, ), position=9, sources=(DocumentVersion,) ) menu_object.bind_links( links=( link_document_version_signature_detached_create, link_document_version_signature_embedded_create ), sources=(DocumentVersion,) ) menu_object.bind_links( links=( link_document_version_signature_details, link_document_version_signature_download, link_document_version_signature_delete, ), sources=(SignatureBaseModel,) ) menu_sidebar.bind_links( links=( link_document_version_signature_upload, ), sources=(DocumentVersion,) ) menu_tools.bind_links( links=(link_all_document_version_signature_verify,) ) post_delete.connect( unverify_key_signatures, dispatch_uid='unverify_key_signatures', sender=Key ) post_upgrade.connect( verify_missing_embedded_signature, dispatch_uid='verify_missing_embedded_signature', ) post_save.connect( verify_key_signatures, dispatch_uid='verify_key_signatures', sender=Key )
def ready(self): super(LinkingApp, self).ready() APIEndPoint(app=self, version_string='1') 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: two_state_template(context['object'].enabled) ) SourceColumn( source=SmartLinkCondition, label=_('Enabled'), func=lambda context: two_state_template(context['object'].enabled) ) 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(DocumentIndexingApp, self).ready() Document = apps.get_model(app_label='documents', model_name='Document') DocumentType = apps.get_model(app_label='documents', model_name='DocumentType') DocumentMetadata = apps.get_model(app_label='metadata', model_name='DocumentMetadata') 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') APIEndPoint(app=self, version_string='1') 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_view, )) Package(label='Django MPTT', license_text=''' Django MPTT ----------- Copyright (c) 2007, Jonathan Buchanan Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ''') Package(label='djangorestframework-recursive', license_text=''' Copyright (c) 2015, Warren Jin <*****@*****.**> Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ''') SourceColumn(source=Index, label=_('Label'), attribute='label') SourceColumn(source=Index, label=_('Slug'), attribute='slug') SourceColumn( source=Index, label=_('Enabled'), func=lambda context: two_state_template(context['object'].enabled)) SourceColumn(source=IndexInstance, label=_('Items'), func=lambda context: context['object'].get_item_count( user=context['request'].user)) SourceColumn(source=IndexInstance, label=_('Document types'), attribute='get_document_types_names') SourceColumn(source=IndexTemplateNode, label=_('Level'), func=lambda context: node_level(context['object'])) SourceColumn( source=IndexTemplateNode, label=_('Enabled'), func=lambda context: two_state_template(context['object'].enabled)) SourceColumn(source=IndexTemplateNode, label=_('Has document links?'), func=lambda context: two_state_template(context['object']. link_documents)) SourceColumn( source=IndexInstanceNode, label=_('Node'), func=lambda context: index_instance_item_link(context['object'])) SourceColumn(source=IndexInstanceNode, label=_('Items'), func=lambda context: context['object'].get_item_count( user=context['request'].user)) SourceColumn(source=DocumentIndexInstanceNode, label=_('Node'), func=lambda context: get_instance_link( index_instance_node=context['object'], )) SourceColumn(source=DocumentIndexInstanceNode, label=_('Items'), func=lambda context: context['object'].get_item_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_index_nodes': { 'queue': 'indexing' }, 'document_indexing.tasks.task_index_document': { 'queue': 'indexing' }, 'document_indexing.tasks.task_do_rebuild_all_indexes': { '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, )) 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(document_index_delete, dispatch_uid='document_index_delete', sender=Document) post_delete.connect(document_metadata_index_post_delete, dispatch_uid='document_metadata_index_post_delete', sender=DocumentMetadata) post_document_created.connect( document_created_index_update, dispatch_uid='document_created_index_update', sender=Document) post_initial_document_type.connect( create_default_document_index, dispatch_uid='create_default_document_index', sender=DocumentType) post_save.connect(document_metadata_index_update, dispatch_uid='document_metadata_index_update', sender=DocumentMetadata)
def ready(self): super(TagsApp, self).ready() from actstream import registry from .wizard_steps import WizardStepTags # NOQA Document = apps.get_model( app_label='documents', model_name='Document' ) DocumentPageResult = apps.get_model( app_label='documents', model_name='DocumentPageResult' ) DocumentTag = self.get_model('DocumentTag') Tag = self.get_model('Tag') Document.add_to_class( 'attached_tags', lambda document: DocumentTag.objects.filter(documents=document) ) ModelEventType.register( model=Tag, event_types=( event_tag_attach, event_tag_created, event_tag_edited, event_tag_remove ) ) ModelField( Document, name='tags__label' ) ModelField( Document, name='tags__color' ) ModelPermission.register( model=Document, permissions=( permission_tag_attach, permission_tag_remove, permission_tag_view ) ) ModelPermission.register( model=Tag, permissions=( permission_acl_edit, permission_acl_view, permission_events_view, permission_tag_attach, permission_tag_delete, permission_tag_edit, permission_tag_remove, permission_tag_view, ) ) SourceColumn( source=DocumentTag, attribute='label' ) SourceColumn( source=DocumentTag, attribute='get_preview_widget' ) SourceColumn( source=Document, label=_('Tags'), func=lambda context: widget_document_tags( document=context['object'], user=context['request'].user ) ) SourceColumn( source=DocumentPageResult, label=_('Tags'), func=lambda context: widget_document_tags( document=context['object'].document, user=context['request'].user ) ) SourceColumn( source=Tag, attribute='label' ) SourceColumn( source=Tag, attribute='get_preview_widget' ) SourceColumn( source=Tag, label=_('Documents'), func=lambda context: context['object'].get_document_count( user=context['request'].user ) ) document_page_search.add_model_field( field='document_version__document__tags__label', label=_('Tags') ) document_search.add_model_field(field='tags__label', label=_('Tags')) menu_facet.bind_links( links=(link_tag_document_list,), sources=(Document,) ) menu_tags.bind_links( links=( link_tag_list, link_tag_create ) ) menu_main.bind_links(links=(menu_tags,), position=98) menu_multi_item.bind_links( links=( link_multiple_documents_attach_tag, link_multiple_documents_tag_remove ), sources=(Document,) ) menu_multi_item.bind_links( links=(link_tag_multiple_delete,), sources=(Tag,) ) menu_object.bind_links( links=( link_tag_tagged_item_list, link_tag_edit, link_acl_list, link_events_for_object, link_object_event_types_user_subcriptions_list, link_tag_delete ), sources=(Tag,) ) menu_sidebar.bind_links( links=(link_tag_attach, link_single_document_multiple_tag_remove), sources=( 'tags:tag_attach', 'tags:document_tags', 'tags:single_document_multiple_tag_remove' ) ) registry.register(Tag) # Index update m2m_changed.connect( handler_index_document, dispatch_uid='tags_handler_index_document', sender=Tag.documents.through ) pre_delete.connect( handler_tag_pre_delete, dispatch_uid='tags_handler_tag_pre_delete', sender=Tag )
def ready(self): super(MetadataApp, self).ready() 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') APIEndPoint(app=self, version_string='2') Document.add_to_class( 'metadata_value_of', DocumentMetadataHelper.constructor ) Filter( label=_('Documents missing required metadata'), slug='documents-no-required-metadata', filter_kwargs=[ { 'document_type__metadata__required': True, }, { 'metadata__value__isnull': True }, { 'is_stub': False } ], model=Document, object_permission=permission_document_view, hide_links=True ) Filter( label=_('Documents missing optional metadata'), slug='documents-no-optional-metadata', filter_kwargs=[ { 'document_type__metadata__required': False, }, { 'metadata__value__isnull': True }, { 'is_stub': False } ], model=Document, object_permission=permission_document_view, hide_links=True ) ModelAttribute( Document, 'metadata', type_name='related', description=_( 'Queryset containing a MetadataType instance reference and a ' 'value for that metadata type' ) ) ModelAttribute( Document, 'metadata__metadata_type__name', label=_('Metadata type name'), type_name='query' ) ModelAttribute( Document, 'metadata__value', label=_('Metadata type value'), type_name='query' ) ModelAttribute( Document, 'metadata_value_of', label=_('Value of a metadata'), description=_( 'Return the value of a specific document metadata' ), type_name=['property', 'indexing'] ) ModelPermission.register( model=Document, permissions=( permission_metadata_document_add, permission_metadata_document_edit, permission_metadata_document_remove, permission_metadata_document_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: two_state_template( context['object'].is_required ) ) 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_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 )
def ready(self): super(CabinetsApp, self).ready() from actstream import registry Document = apps.get_model(app_label='documents', model_name='Document') DocumentCabinet = self.get_model('DocumentCabinet') Cabinet = self.get_model('Cabinet') APIEndPoint(app=self, version_string='1') # Add explicit order_by as DocumentCabinet ordering Meta option has no # effect. Document.add_to_class( 'document_cabinets', lambda document: DocumentCabinet.objects. filter(documents=document).order_by('parent__label', 'label')) ModelPermission.register( model=Document, permissions=(permission_cabinet_add_document, permission_cabinet_remove_document)) ModelPermission.register( model=Cabinet, permissions=(permission_acl_edit, permission_acl_view, permission_cabinet_delete, permission_cabinet_edit, permission_cabinet_view, permission_cabinet_add_document, permission_cabinet_remove_document)) ModelPermission.register_inheritance( model=Cabinet, related='get_root', ) SourceColumn( source=Document, label=_('Cabinets'), func=lambda context: widget_document_cabinets( document=context['object'], user=context['request'].user), order=1) document_page_search.add_model_field( field='document_version__document__cabinets__label', label=_('Cabinets')) document_search.add_model_field(field='cabinets__label', label=_('Cabinets')) menu_facet.bind_links(links=(link_document_cabinet_list, ), sources=(Document, )) menu_cabinets.bind_links(links=(link_cabinet_list, link_cabinet_create)) menu_main.bind_links(links=(menu_cabinets, ), position=98) menu_multi_item.bind_links( links=(link_cabinet_add_multiple_documents, link_multiple_document_cabinet_remove), sources=(Document, )) menu_object.bind_links(links=(link_cabinet_view, ), sources=(DocumentCabinet, )) menu_object.bind_links(links=(link_cabinet_view, link_cabinet_edit, link_custom_acl_list, link_cabinet_delete), sources=(Cabinet, )) menu_sidebar.bind_links(links=(link_cabinet_child_add, ), sources=(Cabinet, )) menu_sidebar.bind_links(links=(link_cabinet_add_document, link_document_cabinet_remove), sources=('cabinets:document_cabinet_list', 'cabinets:cabinet_add_document', 'cabinets:document_cabinet_remove')) registry.register(Cabinet)
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: two_state_template(context['object']. is_active)) SourceColumn(source=User, label=_('Has usable password?'), func=lambda context: two_state_template(context[ 'object'].has_usable_password())) 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_acl_list, link_user_delete), sources=(User, )) menu_secondary.bind_links( links=(link_group_list, link_group_add), sources=('user_management:group_multiple_delete', 'user_management:group_list', 'user_management:group_add', Group)) menu_secondary.bind_links( links=(link_user_list, link_user_add), sources=(User, 'user_management:user_multiple_set_password', 'user_management:user_multiple_delete', 'user_management:user_list', 'user_management:user_add')) menu_setup.bind_links(links=(link_user_setup, link_group_setup)) registry.register(Group) registry.register(User)
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(TagsApp, self).ready() from actstream import registry Document = apps.get_model( app_label='documents', model_name='Document' ) DocumentPageResult = apps.get_model( app_label='documents', model_name='DocumentPageResult' ) DocumentTag = self.get_model('DocumentTag') Tag = self.get_model('Tag') APIEndPoint(app=self, version_string='1') Document.add_to_class( 'attached_tags', lambda document: DocumentTag.objects.filter(documents=document) ) ModelPermission.register( model=Document, permissions=( permission_tag_attach, permission_tag_remove, permission_tag_view ) ) ModelPermission.register( model=Tag, permissions=( permission_acl_edit, permission_acl_view, permission_tag_attach, permission_tag_delete, permission_tag_edit, permission_tag_remove, permission_tag_view ) ) SourceColumn( source=DocumentTag, label=_('Preview'), func=lambda context: widget_single_tag(context['object']) ) SourceColumn( source=Document, label=_('Tags'), func=lambda context: widget_document_tags( document=context['object'], user=context['request'].user ) ) SourceColumn( source=DocumentPageResult, label=_('Tags'), func=lambda context: widget_document_tags( document=context['object'].document, user=context['request'].user ) ) SourceColumn( source=Tag, label=_('Preview'), func=lambda context: widget_single_tag(context['object']) ) SourceColumn( source=Tag, label=_('Documents'), func=lambda context: context['object'].get_document_count( user=context['request'].user ) ) document_page_search.add_model_field( field='document_version__document__tags__label', label=_('Tags') ) document_search.add_model_field(field='tags__label', label=_('Tags')) menu_facet.bind_links( links=(link_tag_document_list,), sources=(Document,) ) menu_tags.bind_links( links=( link_tag_list, link_tag_create ) ) menu_main.bind_links(links=(menu_tags,), position=98) menu_multi_item.bind_links( links=( link_multiple_documents_attach_tag, link_multiple_documents_tag_remove ), sources=(Document,) ) menu_multi_item.bind_links( links=(link_tag_multiple_delete,), sources=(Tag,) ) menu_object.bind_links( links=( link_tag_tagged_item_list, link_tag_edit, link_acl_list, link_tag_delete ), sources=(Tag,) ) menu_sidebar.bind_links( links=(link_tag_attach, link_single_document_multiple_tag_remove), sources=( 'tags:tag_attach', 'tags:document_tags', 'tags:single_document_multiple_tag_remove' ) ) registry.register(Tag)
def ready(self): super(DocumentStatesApp, self).ready() APIEndPoint(app=self, version_string='1') Document = apps.get_model( app_label='documents', model_name='Document' ) Document.add_to_class( 'workflow', DocumentStateHelper.constructor ) 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') WorkflowStateRuntimeProxy = self.get_model('WorkflowStateRuntimeProxy') WorkflowTransition = self.get_model('WorkflowTransition') ModelAttribute( Document, 'workflow.< workflow internal name >.get_current_state', label=_('Current state of a workflow'), description=_( 'Return the current state of the selected workflow' ), type_name=['property', 'indexing'] ) ModelAttribute( Document, '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' ), type_name=['property', 'indexing'] ) ModelPermission.register( model=Workflow, permissions=(permission_workflow_transition,) ) ModelPermission.register( model=WorkflowTransition, permissions=(permission_workflow_transition,) ) 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: two_state_template(context['object'].initial) ) SourceColumn( source=WorkflowState, label=_('Completion'), attribute='completion' ) SourceColumn( source=WorkflowTransition, label=_('Origin state'), attribute='origin_state' ) SourceColumn( source=WorkflowTransition, label=_('Destination state'), attribute='destination_state' ) 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_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_transition_edit, 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_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_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 )
def ready(self): super(TagsApp, self).ready() Document = apps.get_model(app_label='documents', model_name='Document') DocumentTag = self.get_model('DocumentTag') Tag = self.get_model('Tag') APIEndPoint(app=self, version_string='1') Document.add_to_class( 'attached_tags', lambda document: DocumentTag.objects.filter(documents=document)) ModelPermission.register(model=Document, permissions=(permission_tag_attach, permission_tag_remove, permission_tag_view)) ModelPermission.register(model=Tag, permissions=( permission_acl_edit, permission_acl_view, permission_tag_delete, permission_tag_edit, permission_tag_view, )) SourceColumn(source=DocumentTag, label=_('Preview'), func=lambda context: widget_single_tag(context['object'])) SourceColumn( source=Document, label=_('Tags'), func=lambda context: widget_document_tags( document=context['object'], user=context['request'].user)) SourceColumn(source=Tag, label=_('Preview'), func=lambda context: widget_single_tag(context['object'])) SourceColumn(source=Tag, label=_('Documents'), func=lambda context: context['object'].get_document_count( user=context['request'].user)) document_search.add_model_field(field='tags__label', label=_('Tags')) menu_facet.bind_links(links=(link_tag_document_list, ), sources=(Document, )) menu_main.bind_links(links=(link_tag_list, )) menu_multi_item.bind_links(links=(link_multiple_documents_attach_tag, link_multiple_documents_tag_remove), sources=(Document, )) menu_multi_item.bind_links(links=(link_tag_multiple_delete, ), sources=(Tag, )) menu_multi_item.bind_links( links=(link_single_document_multiple_tag_remove, ), sources=(DocumentTag, )) menu_object.bind_links(links=(link_tag_tagged_item_list, link_tag_edit, link_acl_list, link_tag_delete), sources=(Tag, )) menu_secondary.bind_links(links=(link_tag_list, link_tag_create), sources=(Tag, 'tags:tag_list', 'tags:tag_create')) menu_sidebar.bind_links( links=(link_tag_attach, ), sources=('tags:document_tags', 'tags:tag_remove', 'tags:tag_multiple_remove', 'tags:tag_attach'))
def ready(self): super(DocumentIndexingApp, self).ready() APIEndPoint(app=self, version_string='1') 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_view, ) ) SourceColumn(source=Index, label=_('Label'), attribute='label') SourceColumn(source=Index, label=_('Slug'), attribute='slug') SourceColumn( source=Index, label=_('Enabled'), func=lambda context: two_state_template(context['object'].enabled) ) 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=IndexInstance, label=_('Document types'), attribute='get_document_types_names' ) SourceColumn( source=IndexTemplateNode, label=_('Level'), func=lambda context: node_level(context['object']) ) SourceColumn( source=IndexTemplateNode, label=_('Enabled'), func=lambda context: two_state_template(context['object'].enabled) ) SourceColumn( source=IndexTemplateNode, label=_('Has document links?'), func=lambda context: two_state_template( context['object'].link_documents ) ) 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( handler_delete_empty, dispatch_uid='handler_delete_empty', sender=Document ) pre_delete.connect( handler_remove_document, dispatch_uid='handler_remove_document', sender=Document ) post_document_created.connect( handler_index_document, dispatch_uid='handler_index_document', sender=Document ) post_initial_document_type.connect( create_default_document_index, dispatch_uid='create_default_document_index', sender=DocumentType )
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(MetadataApp, self).ready() 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', type_name='related', description=_( 'Queryset containing a MetadataType instance reference and a ' 'value for that metadata type')) ModelAttribute(Document, 'metadata__metadata_type__name', label=_('Metadata type name'), type_name='query') ModelAttribute(Document, 'metadata__value', label=_('Metadata type value'), type_name='query') ModelAttribute( Document, 'metadata_value_of', label=_('Value of a metadata'), description=_('Return the value of a specific document metadata'), type_name=['property', 'indexing']) 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_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: two_state_template(context['object']. is_required)) 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_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)
def ready(self): super(DocumentSignaturesApp, self).ready() Document = apps.get_model(app_label='documents', model_name='Document') DocumentVersion = apps.get_model(app_label='documents', model_name='DocumentVersion') Key = apps.get_model(app_label='django_gpg', model_name='Key') EmbeddedSignature = self.get_model('EmbeddedSignature') SignatureBaseModel = self.get_model('SignatureBaseModel') DocumentVersion.register_post_save_hook( order=1, func=EmbeddedSignature.objects.create) DocumentVersion.register_pre_open_hook( order=1, func=EmbeddedSignature.objects.open_signed) ModelPermission.register( model=Document, permissions=( permission_document_version_sign_detached, permission_document_version_sign_embedded, permission_document_version_signature_delete, permission_document_version_signature_download, permission_document_version_signature_view, permission_document_version_signature_upload, )) SourceColumn(source=SignatureBaseModel, label=_('Date'), attribute='date') SourceColumn(source=SignatureBaseModel, label=_('Key ID'), attribute='get_key_id') SourceColumn( source=SignatureBaseModel, label=_('Signature ID'), func=lambda context: context['object'].signature_id or _('None')) SourceColumn( source=SignatureBaseModel, label=_('Type'), func=lambda context: SignatureBaseModel.objects.get_subclass( pk=context['object'].pk).get_signature_type_display()) app.conf.CELERY_QUEUES.append( Queue('signatures', Exchange('signatures'), routing_key='signatures'), ) app.conf.CELERY_ROUTES.update({ 'document_signatures.tasks.task_verify_key_signatures': { 'queue': 'signatures' }, 'document_signatures.tasks.task_unverify_key_signatures': { 'queue': 'signatures' }, 'document_signatures.tasks.task_verify_document_version': { 'queue': 'signatures' }, 'document_signatures.tasks.task_verify_missing_embedded_signature': { 'queue': 'tools' }, }) menu_facet.bind_links(links=(link_document_signature_list, ), sources=(Document, )) menu_object.bind_links( links=(link_document_version_signature_list, link_document_version_signature_detached_create, link_document_version_signature_embedded_create), sources=(DocumentVersion, )) menu_object.bind_links(links=( link_document_version_signature_details, link_document_version_signature_download, link_document_version_signature_delete, ), sources=(SignatureBaseModel, )) menu_sidebar.bind_links( links=(link_document_version_signature_upload, ), sources=(DocumentVersion, )) menu_tools.bind_links( links=(link_all_document_version_signature_verify, )) post_delete.connect(unverify_key_signatures, dispatch_uid='unverify_key_signatures', sender=Key) post_upgrade.connect( verify_missing_embedded_signature, dispatch_uid='verify_missing_embedded_signature', ) post_save.connect(verify_key_signatures, dispatch_uid='verify_key_signatures', sender=Key)
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(CheckoutsApp, self).ready() APIEndPoint(app=self, version_string='1') Document = apps.get_model( app_label='documents', model_name='Document' ) DocumentVersion = apps.get_model( app_label='documents', model_name='DocumentVersion' ) DocumentCheckout = self.get_model('DocumentCheckout') 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_state', lambda document: DocumentCheckout.objects.document_checkout_state( document ) ) Document.add_to_class( 'is_checked_out', lambda document: DocumentCheckout.objects.is_document_checked_out( document ) ) ModelPermission.register( model=Document, permissions=( permission_document_checkout, permission_document_checkin, permission_document_checkin_override, permission_document_checkout_detail_view ) ) app.conf.CELERYBEAT_SCHEDULE.update( { 'task_check_expired_check_outs': { 'task': 'checkouts.tasks.task_check_expired_check_outs', 'schedule': timedelta( seconds=CHECK_EXPIRED_CHECK_OUTS_INTERVAL ), }, } ) app.conf.CELERY_QUEUES.append( Queue( 'checkouts_periodic', Exchange('checkouts_periodic'), routing_key='checkouts_periodic', delivery_mode=1 ), ) app.conf.CELERY_ROUTES.update( { 'checkouts.tasks.task_check_expired_check_outs': { 'queue': 'checkouts_periodic' }, } ) dashboard_main.add_widget(order=-1, widget=widget_checkouts) menu_facet.bind_links(links=(link_checkout_info,), sources=(Document,)) menu_main.bind_links(links=(link_checkout_list,), position=98) 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_new_version_creation, dispatch_uid='check_new_version_creation', sender=DocumentVersion )
def ready(self): super(DocumentStatesApp, self).ready() APIEndPoint(app=self, version_string='1') Document = apps.get_model(app_label='documents', model_name='Document') Workflow = self.get_model('Workflow') WorkflowInstance = self.get_model('WorkflowInstance') WorkflowInstanceLogEntry = self.get_model('WorkflowInstanceLogEntry') WorkflowState = self.get_model('WorkflowState') WorkflowTransition = self.get_model('WorkflowTransition') ModelPermission.register( model=Workflow, permissions=(permission_workflow_transition, )) ModelPermission.register( model=WorkflowTransition, permissions=(permission_workflow_transition, )) 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: two_state_template(context['object'].initial)) SourceColumn(source=WorkflowState, label=_('Completion'), attribute='completion') SourceColumn(source=WorkflowTransition, label=_('Origin state'), attribute='origin_state') SourceColumn(source=WorkflowTransition, label=_('Destination state'), attribute='destination_state') 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_acl_list, 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_transition_edit, 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_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_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, )) post_save.connect(launch_workflow, dispatch_uid='launch_workflow', sender=Document)
def ready(self): super(OCRApp, self).ready() Document = apps.get_model( app_label='documents', model_name='Document' ) DocumentPage = apps.get_model( app_label='documents', model_name='DocumentPage' ) DocumentType = apps.get_model( app_label='documents', model_name='DocumentType' ) DocumentTypeSettings = self.get_model( model_name='DocumentTypeSettings' ) DocumentVersion = apps.get_model( app_label='documents', model_name='DocumentVersion' ) DocumentVersionOCRError = self.get_model('DocumentVersionOCRError') Document.add_to_class('submit_for_ocr', document_ocr_submit) DocumentVersion.add_to_class( 'ocr_content', get_document_ocr_content ) DocumentVersion.add_to_class( 'submit_for_ocr', document_version_ocr_submit ) ModelField( Document, name='versions__pages__ocr_content__content' ) ModelPermission.register( model=Document, permissions=( permission_ocr_document, permission_ocr_content_view ) ) ModelPermission.register( model=DocumentType, permissions=( permission_document_type_ocr_setup, ) ) ModelPermission.register_inheritance( model=DocumentTypeSettings, related='document_type', ) SourceColumn( source=DocumentVersionOCRError, label=_('Document'), func=lambda context: document_link(context['object'].document_version.document) ) SourceColumn( source=DocumentVersionOCRError, label=_('Added'), attribute='datetime_submitted' ) SourceColumn( source=DocumentVersionOCRError, label=_('Result'), attribute='result' ) app.conf.CELERY_QUEUES.append( Queue('ocr', Exchange('ocr'), routing_key='ocr'), ) app.conf.CELERY_ROUTES.update( { 'ocr.tasks.task_do_ocr': { 'queue': 'ocr' }, } ) document_search.add_model_field( field='versions__pages__ocr_content__content', label=_('OCR') ) document_page_search.add_model_field( field='ocr_content__content', label=_('OCR') ) menu_facet.bind_links( links=(link_document_ocr_content,), sources=(Document,) ) menu_facet.bind_links( links=(link_document_page_ocr_content,), sources=(DocumentPage,) ) menu_multi_item.bind_links( links=(link_document_submit_multiple,), sources=(Document,) ) menu_object.bind_links( links=(link_document_submit,), sources=(Document,) ) menu_object.bind_links( links=(link_document_page_ocr_content,), sources=(DocumentPage,) ) menu_object.bind_links( links=(link_document_type_ocr_settings,), sources=(DocumentType,) ) menu_secondary.bind_links( links=( link_document_ocr_content, link_document_ocr_errors_list, link_document_ocr_download ), sources=( 'ocr:document_content', 'ocr:document_ocr_error_list', 'ocr:document_ocr_download', ) ) menu_secondary.bind_links( links=(link_entry_list,), sources=( 'ocr:entry_list', 'ocr:entry_delete_multiple', 'ocr:entry_re_queue_multiple', DocumentVersionOCRError ) ) menu_tools.bind_links( links=( link_document_type_submit, link_entry_list ) ) post_document_version_ocr.connect( dispatch_uid='ocr_handler_index_document', receiver=handler_index_document, sender=DocumentVersion ) post_save.connect( dispatch_uid='ocr_handler_initialize_new_ocr_settings', receiver=handler_initialize_new_ocr_settings, sender=DocumentType ) post_version_upload.connect( dispatch_uid='ocr_handler_ocr_document_version', receiver=handler_ocr_document_version, sender=DocumentVersion )
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(DocumentsApp, self).ready() from actstream import registry APIEndPoint(app=self, version_string='1') 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') Collection( label=_('Recent documents'), link=link_document_list_recent, order=1 ) Collection( label=_('Document types'), model=DocumentType, icon='fa fa-book' ) Collection( label=_('All documents'), link=link_document_list, order=99 ) Collection( label=_('Trash'), link=link_document_list_deleted, order=100 ) 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' ) ModelAttribute( Document, label=_('Label'), name='label', type_name='field' ) ModelAttribute( Document, description=_('The MIME type of any of the versions of a document'), label=_('MIME type'), name='versions__mimetype', type_name='field' ) 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', ) 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_thumbnail_widget = DocumentThumbnailWidget() document_version_thumbnail_widget = DocumentVersionThumbnailWidget() # Document SourceColumn( source=Document, label=_('Thumbnail'), func=lambda context: document_thumbnail_widget.render( instance=context['object'] ) ) SourceColumn( source=Document, label=_('Type'), attribute='document_type' ) # 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: two_state_template(context['object'].enabled) ) # DeletedDocument SourceColumn( source=DeletedDocument, label=_('Thumbnail'), func=lambda context: document_thumbnail_widget.render( instance=context['object'] ) ) SourceColumn( source=DeletedDocument, label=_('Type'), attribute='document_type' ) SourceColumn( source=DeletedDocument, label=_('Date time trashed'), attribute='deleted_date_time' ) # DocumentVersion SourceColumn( source=DocumentVersion, label=_('Time and date'), attribute='timestamp' ) SourceColumn( source=DocumentVersion, label=_('MIME type'), attribute='mimetype' ) SourceColumn( source=DocumentVersion, label=_('Encoding'), attribute='encoding' ) SourceColumn( source=DocumentVersion, label=_('Comment'), attribute='comment' ) SourceColumn( source=DocumentVersion, label=_('Thumbnail'), func=lambda context: document_version_thumbnail_widget.render( instance=context['object'] ) ) # DuplicatedDocument SourceColumn( source=DuplicatedDocument, label=_('Thumbnail'), func=lambda context: document_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_delete_stubs': { 'queue': 'documents_periodic' }, 'documents.tasks.task_clear_image_cache': { 'queue': 'tools' }, 'documents.tasks.task_generate_document_page_image': { 'queue': 'converter' }, 'documents.tasks.task_update_page_count': { 'queue': 'uploads' }, 'documents.tasks.task_upload_new_version': { 'queue': 'uploads' }, 'documents.tasks.task_scan_duplicates_all': { 'queue': 'tools' }, 'documents.tasks.task_scan_duplicates_for': { 'queue': 'uploads' }, 'documents.tasks.task_delete_document': { 'queue': 'documents' }, } ) dashboard_main.add_widget(widget=widget_document_types) dashboard_main.add_widget(widget=widget_documents_in_trash) dashboard_main.add_widget(widget=widget_new_documents_this_month) dashboard_main.add_widget(widget=widget_pages_per_month) dashboard_main.add_widget(widget=widget_total_documents) menu_documents.bind_links( links=( link_document_list_recent, 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_document_type_delete ), 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_edit, link_document_document_type_edit, link_document_print, link_document_trash, 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_with_icon,), 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_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_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.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,) ) namespace = StatisticNamespace(slug='documents', label=_('Documents')) namespace.add_statistic( slug='new-documents-per-month', label=_('New documents per month'), func=new_documents_per_month, renderer=CharJSLine, minute='0' ) namespace.add_statistic( slug='new-document-versions-per-month', label=_('New document versions per month'), func=new_document_versions_per_month, renderer=CharJSLine, minute='0' ) namespace.add_statistic( slug='new-document-pages-per-month', label=_('New document pages per month'), func=new_document_pages_per_month, renderer=CharJSLine, minute='0' ) namespace.add_statistic( slug='total-documents-at-each-month', label=_('Total documents at each month'), func=total_document_per_month, renderer=CharJSLine, minute='0' ) namespace.add_statistic( slug='total-document-versions-at-each-month', label=_('Total document versions at each month'), func=total_document_version_per_month, renderer=CharJSLine, minute='0' ) namespace.add_statistic( slug='total-document-pages-at-each-month', label=_('Total document pages at each month'), func=total_document_page_per_month, renderer=CharJSLine, minute='0' ) 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(FoldersApp, self).ready() APIEndPoint(app=self, version_string='1') Document.add_to_class( 'document_folders', lambda document: DocumentFolder.objects.filter(documents=document) ) ModelPermission.register( model=Document, permissions=( permission_folder_add_document, permission_folder_remove_document ) ) ModelPermission.register( model=Folder, permissions=( permission_acl_edit, permission_acl_view, permission_folder_delete, permission_folder_edit, permission_folder_view ) ) SourceColumn( source=Folder, label=_('Created'), attribute='datetime_created' ) SourceColumn(source=Folder, label=_('User'), attribute='user') SourceColumn( source=Folder, label=_('Documents'), func=lambda context: context['object'].get_document_count( user=context['request'].user ) ) menu_facet.bind_links( links=(link_document_folder_list,), sources=(Document,) ) menu_main.bind_links(links=(link_folder_list,)) menu_multi_item.bind_links( links=(link_folder_add_multiple_documents,), sources=(Document,) ) menu_multi_item.bind_links( links=(link_folder_document_multiple_remove,), sources=('folders:folder_view',) ) menu_object.bind_links( links=( link_folder_view, ), sources=(DocumentFolder, ) ) menu_object.bind_links( links=( link_folder_view, link_folder_edit, link_acl_list, link_folder_delete ), sources=(Folder,) ) menu_secondary.bind_links( links=(link_folder_list, link_folder_create), sources=(Folder, 'folders:folder_list', 'folders:folder_create') ) menu_sidebar.bind_links( links=(link_folder_add_document,), sources=( 'folders:document_folder_list', 'folders:folder_add_document' ) )
def ready(self): super(MetadataApp, self).ready() 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') APIEndPoint(app=self, version_string='2') Document.add_to_class('metadata_value_of', DocumentMetadataHelper.constructor) Filter(label=_('Documents missing required metadata'), slug='documents-no-required-metadata', filter_kwargs=[{ 'document_type__metadata__required': True, }, { 'metadata__value__isnull': True }, { 'is_stub': False }], model=Document, object_permission=permission_document_view, hide_links=True) Filter(label=_('Documents missing optional metadata'), slug='documents-no-optional-metadata', filter_kwargs=[{ 'document_type__metadata__required': False, }, { 'metadata__value__isnull': True }, { 'is_stub': False }], model=Document, object_permission=permission_document_view, hide_links=True) ModelAttribute( Document, 'metadata', type_name='related', description=_( 'Queryset containing a MetadataType instance reference and a ' 'value for that metadata type')) ModelAttribute(Document, 'metadata__metadata_type__name', label=_('Metadata type name'), type_name='query') ModelAttribute(Document, 'metadata__value', label=_('Metadata type value'), type_name='query') ModelAttribute( Document, 'metadata_value_of', label=_('Value of a metadata'), description=_('Return the value of a specific document metadata'), type_name=['property', 'indexing']) ModelPermission.register(model=Document, permissions=( permission_metadata_document_add, permission_metadata_document_edit, permission_metadata_document_remove, permission_metadata_document_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: two_state_template(context['object']. is_required)) 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, link_setup_document_type_metadata_required), sources=(DocumentType, )) menu_object.bind_links(links=(link_setup_metadata_type_edit, 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='post_document_type_metadata_type_delete', sender=DocumentTypeMetadataType) post_document_type_change.connect( post_post_document_type_change_metadata, dispatch_uid='post_post_document_type_change_metadata', sender=Document) post_save.connect(post_document_type_metadata_type_add, dispatch_uid='post_document_type_metadata_type_add', sender=DocumentTypeMetadataType)
def ready(self): super(TagsApp, self).ready() from actstream import registry from .wizard_steps import WizardStepTags # NOQA Document = apps.get_model(app_label='documents', model_name='Document') DocumentPageResult = apps.get_model(app_label='documents', model_name='DocumentPageResult') DocumentTag = self.get_model('DocumentTag') Tag = self.get_model('Tag') Document.add_to_class( 'attached_tags', lambda document: DocumentTag.objects.filter(documents=document)) ModelPermission.register(model=Document, permissions=(permission_tag_attach, permission_tag_remove, permission_tag_view)) ModelPermission.register( model=Tag, permissions=(permission_acl_edit, permission_acl_view, permission_tag_attach, permission_tag_delete, permission_tag_edit, permission_tag_remove, permission_tag_view)) SourceColumn(source=DocumentTag, attribute='label') SourceColumn(source=DocumentTag, attribute='get_preview_widget') SourceColumn( source=Document, label=_('Tags'), func=lambda context: widget_document_tags( document=context['object'], user=context['request'].user)) SourceColumn(source=DocumentPageResult, label=_('Tags'), func=lambda context: widget_document_tags( document=context['object'].document, user=context['request'].user)) SourceColumn(source=Tag, attribute='label') SourceColumn(source=Tag, attribute='get_preview_widget') SourceColumn(source=Tag, label=_('Documents'), func=lambda context: context['object'].get_document_count( user=context['request'].user)) document_page_search.add_model_field( field='document_version__document__tags__label', label=_('Tags')) document_search.add_model_field(field='tags__label', label=_('Tags')) menu_facet.bind_links(links=(link_tag_document_list, ), sources=(Document, )) menu_tags.bind_links(links=(link_tag_list, link_tag_create)) menu_main.bind_links(links=(menu_tags, ), position=98) menu_multi_item.bind_links(links=(link_multiple_documents_attach_tag, link_multiple_documents_tag_remove), sources=(Document, )) menu_multi_item.bind_links(links=(link_tag_multiple_delete, ), sources=(Tag, )) menu_object.bind_links(links=(link_tag_tagged_item_list, link_tag_edit, link_acl_list, link_tag_delete), sources=(Tag, )) menu_sidebar.bind_links( links=(link_tag_attach, link_single_document_multiple_tag_remove), sources=('tags:tag_attach', 'tags:document_tags', 'tags:single_document_multiple_tag_remove')) registry.register(Tag) # Index update m2m_changed.connect(handler_index_document, dispatch_uid='tags_handler_index_document', sender=Tag.documents.through) pre_delete.connect(handler_tag_pre_delete, dispatch_uid='tags_handler_tag_pre_delete', sender=Tag)
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(OCRApp, self).ready() Document = apps.get_model(app_label='documents', model_name='Document') DocumentPage = apps.get_model(app_label='documents', model_name='DocumentPage') DocumentType = apps.get_model(app_label='documents', model_name='DocumentType') DocumentTypeSettings = self.get_model( model_name='DocumentTypeSettings') DocumentVersion = apps.get_model(app_label='documents', model_name='DocumentVersion') DocumentVersionOCRError = self.get_model('DocumentVersionOCRError') Document.add_to_class('submit_for_ocr', document_ocr_submit) DocumentVersion.add_to_class('ocr_content', get_document_ocr_content) DocumentVersion.add_to_class('submit_for_ocr', document_version_ocr_submit) ModelField(Document, name='versions__pages__ocr_content__content') ModelPermission.register(model=Document, permissions=(permission_ocr_document, permission_ocr_content_view)) ModelPermission.register( model=DocumentType, permissions=(permission_document_type_ocr_setup, )) ModelPermission.register_inheritance( model=DocumentTypeSettings, related='document_type', ) SourceColumn(source=DocumentVersionOCRError, label=_('Document'), func=lambda context: document_link(context[ 'object'].document_version.document)) SourceColumn(source=DocumentVersionOCRError, label=_('Added'), attribute='datetime_submitted') SourceColumn(source=DocumentVersionOCRError, label=_('Result'), attribute='result') app.conf.CELERY_QUEUES.append( Queue('ocr', Exchange('ocr'), routing_key='ocr'), ) app.conf.CELERY_ROUTES.update({ 'ocr.tasks.task_do_ocr': { 'queue': 'ocr' }, }) document_search.add_model_field( field='versions__pages__ocr_content__content', label=_('OCR')) document_page_search.add_model_field(field='ocr_content__content', label=_('OCR')) menu_facet.bind_links(links=(link_document_ocr_content, ), sources=(Document, )) menu_facet.bind_links(links=(link_document_page_ocr_content, ), sources=(DocumentPage, )) menu_multi_item.bind_links(links=(link_document_submit_multiple, ), sources=(Document, )) menu_object.bind_links(links=(link_document_submit, ), sources=(Document, )) menu_object.bind_links(links=(link_document_page_ocr_content, ), sources=(DocumentPage, )) menu_object.bind_links(links=(link_document_type_ocr_settings, ), sources=(DocumentType, )) menu_secondary.bind_links(links=(link_document_ocr_content, link_document_ocr_errors_list, link_document_ocr_download), sources=( 'ocr:document_content', 'ocr:document_ocr_error_list', 'ocr:document_ocr_download', )) menu_secondary.bind_links( links=(link_entry_list, ), sources=('ocr:entry_list', 'ocr:entry_delete_multiple', 'ocr:entry_re_queue_multiple', DocumentVersionOCRError)) menu_tools.bind_links(links=(link_document_type_submit, link_entry_list)) post_save.connect( dispatch_uid='ocr_handler_initialize_new_ocr_settings', receiver=handler_initialize_new_ocr_settings, sender=DocumentType) post_version_upload.connect( dispatch_uid='ocr_handler_ocr_document_version', receiver=handler_ocr_document_version, sender=DocumentVersion)
def ready(self): super(OCRApp, self).ready() APIEndPoint(app=self, version_string='1') Document.add_to_class('submit_for_ocr', document_ocr_submit) DocumentVersion.add_to_class( 'submit_for_ocr', document_version_ocr_submit ) ModelPermission.register( model=Document, permissions=( permission_ocr_document, permission_ocr_content_view ) ) SourceColumn( source=DocumentVersionOCRError, label=_('Document'), func=lambda context: document_link(context['object'].document_version.document) ) SourceColumn( source=DocumentVersionOCRError, label=_('Added'), attribute='datetime_submitted' ) SourceColumn( source=DocumentVersionOCRError, label=_('Result'), attribute='result' ) app.conf.CELERY_QUEUES.append( Queue('ocr', Exchange('ocr'), routing_key='ocr'), ) app.conf.CELERY_ROUTES.update( { 'ocr.tasks.task_do_ocr': { 'queue': 'ocr' }, } ) document_search.add_model_field( field='versions__pages__ocr_content__content', label=_('Content') ) menu_facet.bind_links( links=(link_document_content,), sources=(Document,) ) menu_multi_item.bind_links( links=(link_document_submit_multiple,), sources=(Document,) ) menu_object.bind_links( links=(link_document_submit,), sources=(Document,) ) menu_object.bind_links( links=(link_document_type_ocr_settings,), sources=(DocumentType,) ) menu_secondary.bind_links( links=(link_entry_list,), sources=( 'ocr:entry_list', 'ocr:entry_delete_multiple', 'ocr:entry_re_queue_multiple', DocumentVersionOCRError ) ) menu_tools.bind_links( links=( link_document_submit_all, link_document_type_submit, link_entry_list ) ) post_save.connect( initialize_new_ocr_settings, dispatch_uid='initialize_new_ocr_settings', sender=DocumentType ) post_version_upload.connect( post_version_upload_ocr, dispatch_uid='post_version_upload_ocr', sender=DocumentVersion ) namespace = PropertyNamespace('ocr', _('OCR')) try: pdftotext = sh.Command(setting_pdftotext_path.value) except sh.CommandNotFound: namespace.add_property( 'pdftotext', _('pdftotext version'), _('not found'), report=True ) except Exception: namespace.add_property( 'pdftotext', _('pdftotext version'), _('error getting version'), report=True ) else: namespace.add_property( 'pdftotext', _('pdftotext version'), pdftotext('-v').stderr, report=True ) try: tesseract = sh.Command(setting_tesseract_path.value) except sh.CommandNotFound: namespace.add_property( 'tesseract', _('tesseract version'), _('not found'), report=True ) except Exception: namespace.add_property( 'tesseract', _('tesseract version'), _('error getting version'), report=True ) else: namespace.add_property( 'tesseract', _('tesseract version'), tesseract('-v').stderr, report=True )
def ready(self): super(DocumentParsingApp, self).ready() APIEndPoint(app=self, version_string='1') Document = apps.get_model( app_label='documents', model_name='Document' ) DocumentVersion = apps.get_model( app_label='documents', model_name='DocumentVersion' ) DocumentVersionParseError = self.get_model('DocumentVersionParseError') Document.add_to_class('submit_for_parsing', document_parsing_submit) DocumentVersion.add_to_class( 'content', get_document_content ) DocumentVersion.add_to_class( 'submit_for_parsing', document_version_parsing_submit ) ModelPermission.register( model=Document, permissions=(permission_content_view,) ) SourceColumn( source=DocumentVersionParseError, label=_('Document'), func=lambda context: document_link(context['object'].document_version.document) ) SourceColumn( source=DocumentVersionParseError, label=_('Added'), attribute='datetime_submitted' ) SourceColumn( source=DocumentVersionParseError, label=_('Result'), attribute='result' ) app.conf.CELERY_QUEUES.append( Queue('parsing', Exchange('parsing'), routing_key='parsing'), ) app.conf.CELERY_ROUTES.update( { 'document_parsing.tasks.task_parse_document_version': { 'queue': 'parsing' }, } ) document_search.add_model_field( field='versions__pages__content__content', label=_('Content') ) document_page_search.add_model_field( field='content__content', label=_('Content') ) menu_facet.bind_links( links=(link_document_content,), sources=(Document,) ) menu_multi_item.bind_links( links=(link_document_submit_multiple,), sources=(Document,) ) menu_object.bind_links( links=(link_document_submit,), sources=(Document,) ) menu_secondary.bind_links( links=( link_document_content, link_document_parsing_errors_list, link_document_content_download ), sources=( 'document_parsing:document_content', 'document_parsing:document_content_download', 'document_parsing:document_parsing_error_list', ) ) menu_tools.bind_links( links=( link_document_type_submit, link_error_list, ) ) post_version_upload.connect( dispatch_uid='document_parsing_handler_parse_document_version', receiver=handler_parse_document_version, sender=DocumentVersion )
def ready(self): super(TagsApp, self).ready() APIEndPoint(app=self, version_string='1') Document.add_to_class( 'attached_tags', lambda document: DocumentTag.objects.filter(documents=document) ) ModelPermission.register( model=Document, permissions=( permission_tag_attach, permission_tag_remove, permission_tag_view ) ) ModelPermission.register( model=Tag, permissions=( permission_acl_edit, permission_acl_view, permission_tag_delete, permission_tag_edit, permission_tag_view, ) ) SourceColumn( source=DocumentTag, label=_('Preview'), func=lambda context: widget_single_tag(context['object']) ) SourceColumn( source=Document, label=_('Tags'), func=lambda context: widget_document_tags( document=context['object'], user=context['request'].user ) ) SourceColumn( source=Tag, label=_('Preview'), func=lambda context: widget_single_tag(context['object']) ) SourceColumn( source=Tag, label=_('Documents'), func=lambda context: context['object'].get_document_count( user=context['request'].user ) ) document_search.add_model_field(field='tags__label', label=_('Tags')) menu_facet.bind_links( links=(link_tag_document_list,), sources=(Document,) ) menu_main.bind_links(links=(link_tag_list,)) menu_multi_item.bind_links( links=( link_multiple_documents_attach_tag, link_multiple_documents_tag_remove ), sources=(Document,) ) menu_multi_item.bind_links( links=(link_tag_multiple_delete,), sources=(Tag,) ) menu_multi_item.bind_links( links=(link_single_document_multiple_tag_remove,), sources=(DocumentTag,) ) menu_object.bind_links( links=( link_tag_tagged_item_list, link_tag_edit, link_acl_list, link_tag_delete ), sources=(Tag,) ) menu_secondary.bind_links( links=(link_tag_list, link_tag_create), sources=(Tag, 'tags:tag_list', 'tags:tag_create') ) menu_sidebar.bind_links( links=(link_tag_attach,), sources=( 'tags:document_tags', 'tags:tag_remove', 'tags:tag_multiple_remove', 'tags:tag_attach' ) )
def ready(self): super(DocumentsApp, self).ready() APIEndPoint(app=self, version_string='1') DeletedDocument = self.get_model('DeletedDocument') Document = self.get_model('Document') DocumentPage = self.get_model('DocumentPage') DocumentType = self.get_model('DocumentType') DocumentTypeFilename = self.get_model('DocumentTypeFilename') DocumentVersion = self.get_model('DocumentVersion') 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' ) ModelAttribute( Document, label=_('Label'), name='label', type_name='field' ) ModelAttribute( Document, description=_('The MIME type of any of the versions of a document'), label=_('MIME type'), name='versions__mimetype', type_name='field' ) 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_view, permission_events_view, permission_transformation_create, permission_transformation_delete, permission_transformation_edit, permission_transformation_view, ) ) ModelPermission.register( model=DocumentType, permissions=(permission_document_create,) ) ModelPermission.register_proxy( source=Document, model=DocumentType, ) ModelPermission.register_inheritance( model=Document, related='document_type', ) ModelPermission.register_inheritance( model=DocumentVersion, related='document', ) ModelPermission.register_inheritance( model=DocumentPage, related='document', ) SourceColumn( source=Document, label=_('Thumbnail'), func=lambda context: document_thumbnail( context['object'], gallery_name='documents:document_list', size=setting_thumbnail_size.value, title=getattr(context['object'], 'label', None), ) ) SourceColumn( source=Document, label=_('Type'), attribute='document_type' ) 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: two_state_template(context['object'].enabled) ) SourceColumn( source=DeletedDocument, label=_('Thumbnail'), func=lambda context: document_thumbnail( context['object'], gallery_name='documents:delete_document_list', size=setting_thumbnail_size.value, title=getattr(context['object'], 'label', None), disable_title_link=True ) ) SourceColumn( source=DeletedDocument, label=_('Type'), attribute='document_type' ) SourceColumn( source=DeletedDocument, label=_('Date time trashed'), attribute='deleted_date_time' ) SourceColumn( source=DocumentVersion, label=_('Time and date'), attribute='timestamp' ) SourceColumn( source=DocumentVersion, label=_('MIME type'), attribute='mimetype' ) SourceColumn( source=DocumentVersion, label=_('Encoding'), attribute='encoding' ) SourceColumn( source=DocumentVersion, label=_('Comment'), attribute='comment' ) 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'), ) ) 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_delete_stubs': { 'queue': 'documents_periodic' }, 'documents.tasks.task_clear_image_cache': { 'queue': 'tools' }, 'documents.tasks.task_get_document_page_image': { 'queue': 'converter' }, 'documents.tasks.task_update_page_count': { 'queue': 'uploads' }, 'documents.tasks.task_upload_new_version': { 'queue': 'uploads' }, } ) menu_front_page.bind_links( links=( link_document_list_recent, link_document_list, link_document_list_deleted ) ) menu_setup.bind_links(links=(link_document_type_setup,)) menu_tools.bind_links(links=(link_clear_image_cache,)) # Document type links menu_object.bind_links( links=( link_document_type_edit, link_document_type_filename_list, link_acl_list, link_document_type_delete ), 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_edit, link_document_document_type_edit, link_document_print, link_document_trash, link_document_download, link_document_clear_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_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_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_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.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,) ) namespace = StatisticNamespace(slug='documents', label=_('Documents')) namespace.add_statistic( slug='new-documents-per-month', label=_('New documents per month'), func=new_documents_per_month, renderer=CharJSLine, minute='0' ) namespace.add_statistic( slug='new-document-versions-per-month', label=_('New document versions per month'), func=new_document_versions_per_month, renderer=CharJSLine, minute='0' ) namespace.add_statistic( slug='new-document-pages-per-month', label=_('New document pages per month'), func=new_document_pages_per_month, renderer=CharJSLine, minute='0' ) namespace.add_statistic( slug='total-documents-at-each-month', label=_('Total documents at each month'), func=total_document_per_month, renderer=CharJSLine, minute='0' ) namespace.add_statistic( slug='total-document-versions-at-each-month', label=_('Total document versions at each month'), func=total_document_version_per_month, renderer=CharJSLine, minute='0' ) namespace.add_statistic( slug='total-document-pages-at-each-month', label=_('Total document pages at each month'), func=total_document_page_per_month, renderer=CharJSLine, minute='0' ) post_initial_setup.connect( create_default_document_type, dispatch_uid='create_default_document_type' ) registry.register(DeletedDocument) registry.register(Document)
def ready(self): super(CheckoutsApp, self).ready() APIEndPoint(app=self, version_string='1') 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_state', lambda document: DocumentCheckout.objects.document_checkout_state( document ) ) Document.add_to_class( 'is_checked_out', lambda document: DocumentCheckout.objects.is_document_checked_out( document ) ) ModelPermission.register( model=Document, permissions=( permission_document_checkout, permission_document_checkin, permission_document_checkin_override, ) ) app.conf.CELERYBEAT_SCHEDULE.update( { 'task_check_expired_check_outs': { 'task': 'checkouts.tasks.task_check_expired_check_outs', 'schedule': timedelta( seconds=CHECK_EXPIRED_CHECK_OUTS_INTERVAL ), }, } ) app.conf.CELERY_QUEUES.append( Queue( 'checkouts_periodic', Exchange('checkouts_periodic'), routing_key='checkouts_periodic', delivery_mode=1 ), ) app.conf.CELERY_ROUTES.update( { 'checkouts.tasks.task_check_expired_check_outs': { 'queue': 'checkouts_periodic' }, } ) menu_facet.bind_links(links=(link_checkout_info,), sources=(Document,)) menu_main.bind_links(links=(link_checkout_list,)) menu_sidebar.bind_links( links=(link_checkout_document, link_checkin_document), sources=( 'checkouts:checkout_info', 'checkouts:checkout_document', 'checkouts:checkin_document' ) )