def document_field_detection_failed_impl(sender, signal, document: Document, document_field: DocumentField, message: str, document_initial_load: bool): if document_initial_load: # WS notifications for failed detection are disabled when # document is being processed for the first time return project_id = document.project_id data = { 'document': { 'id': document.pk, 'name': document.name, 'project_id': project_id, 'project_name': document.project.name, }, 'field': { 'id': document_field.uid, 'code': document_field.code, 'title': document_field.title }, 'message': message } chan_msg = ChannelMessage(message_types.CHANNEL_MSG_TYPE_DETECTION_FAILED, data) users = User.get_users_for_object(object_pk=project_id, object_model=Project, perm_name='add_project_document') Websockets().send_to_users(qs_users=users, message_obj=chan_msg)
def notify_on_document_changes(doc_id: int, message: ChannelMessage): """ Send the websocket message to the users allowed to read the specified document. :param doc_id: ID of the document. :param message: Message to send. :return: """ project_id = Document.objects.get(pk=doc_id).project_id users_with_project_perm = User.get_users_for_object( object_pk=project_id, object_model=Project, perm_name='change_document_field_values') users_with_document_perm = User.get_users_for_object( object_pk=doc_id, object_model=Document, perm_name='change_document_field_values') Websockets().send_to_users(qs_users=users_with_project_perm.union( users_with_document_perm).distinct(), message_obj=message)
def notify_cancelled_upload_session(session, user_id): """ Notify users about cancelled upload session """ cancelled_by_user = User.objects.get(pk=user_id) data = {'session_id': session.pk, 'project_id': session.project_id, 'cancelled_by_user_id': cancelled_by_user.pk if cancelled_by_user else None, 'cancelled_by_user_name': cancelled_by_user.name if cancelled_by_user else None} message = ChannelMessage(message_types.CHANNEL_MSG_TYPE_CANCELLED_UPLOAD_SESSION, data) users = User.get_users_for_object( object_pk=session.project_id, object_model=Project, perm_name='add_project_document') Websockets().send_to_users(qs_users=users, message_obj=message)
def notify_failed_load_document(file_name, session_id, directory_path): """ Notify users about failed LoadDocument tasks """ project_id = UploadSession.objects.get(pk=session_id).project_id data = dict( file_name=file_name, project_id=project_id, upload_session_id=session_id, directory_path=directory_path ) message = ChannelMessage(message_types.CHANNEL_MSG_TYPE_FAILED_LOAD_DOCUMENT, data) users = User.get_users_for_object( object_pk=project_id, object_model=Project, perm_name='add_project_document').values_list('pk', flat=True) Websockets().send_to_users(qs_users=users, message_obj=message)