Пример #1
0
def view_filter_created(sender, view_filter, user, **kwargs):
    table_page_type = page_registry.get('table')
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            'type': 'view_filter_created',
            'view_filter': ViewFilterSerializer(view_filter).data
        },
        getattr(user, 'web_socket_id', None),
        table_id=view_filter.view.table_id))
Пример #2
0
def row_deleted(sender, row_id, row, user, table, model, **kwargs):
    table_page_type = page_registry.get('table')
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            'type': 'row_deleted',
            'table_id': table.id,
            'row_id': row_id
        },
        getattr(user, 'web_socket_id', None),
        table_id=table.id))
Пример #3
0
def view_filter_created(sender, view_filter, user, **kwargs):
    table_page_type = page_registry.get("table")
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            "type": "view_filter_created",
            "view_filter": ViewFilterSerializer(view_filter).data,
        },
        getattr(user, "web_socket_id", None),
        table_id=view_filter.view.table_id,
    ))
Пример #4
0
def field_deleted(sender, field_id, field, user, **kwargs):
    table_page_type = page_registry.get('table')
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            'type': 'field_deleted',
            'table_id': field.table_id,
            'field_id': field_id
        },
        getattr(user, 'web_socket_id', None),
        table_id=field.table_id))
Пример #5
0
def view_sort_updated(sender, view_sort, user, **kwargs):
    table_page_type = page_registry.get('table')
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            'type': 'view_sort_updated',
            'view_sort_id': view_sort.id,
            'view_sort': ViewSortSerializer(view_sort).data
        },
        getattr(user, 'web_socket_id', None),
        table_id=view_sort.view.table_id))
Пример #6
0
def view_filter_deleted(sender, view_filter_id, view_filter, user, **kwargs):
    table_page_type = page_registry.get('table')
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            'type': 'view_filter_deleted',
            'view_id': view_filter.view_id,
            'view_filter_id': view_filter_id
        },
        getattr(user, 'web_socket_id', None),
        table_id=view_filter.view.table_id))
Пример #7
0
def field_deleted(sender, field_id, field, user, **kwargs):
    table_page_type = page_registry.get("table")
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            "type": "field_deleted",
            "table_id": field.table_id,
            "field_id": field_id
        },
        getattr(user, "web_socket_id", None),
        table_id=field.table_id,
    ))
Пример #8
0
def view_deleted(sender, view_id, view, user, **kwargs):
    table_page_type = page_registry.get("table")
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            "type": "view_deleted",
            "table_id": view.table_id,
            "view_id": view_id
        },
        getattr(user, "web_socket_id", None),
        table_id=view.table_id,
    ))
Пример #9
0
def field_created(sender, field, user, **kwargs):
    table_page_type = page_registry.get('table')
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            'type':
            'field_created',
            'field':
            field_type_registry.get_serializer(field, FieldSerializer).data
        },
        getattr(user, 'web_socket_id', None),
        table_id=field.table_id))
Пример #10
0
def views_reordered(sender, table, order, user, **kwargs):
    table_page_type = page_registry.get("table")
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            "type": "views_reordered",
            "table_id": table.id,
            "order": order
        },
        getattr(user, "web_socket_id", None),
        table_id=table.id,
    ))
Пример #11
0
def view_sort_updated(sender, view_sort, user, **kwargs):
    table_page_type = page_registry.get("table")
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            "type": "view_sort_updated",
            "view_sort_id": view_sort.id,
            "view_sort": ViewSortSerializer(view_sort).data,
        },
        getattr(user, "web_socket_id", None),
        table_id=view_sort.view.table_id,
    ))
Пример #12
0
def field_created(sender, field, user, **kwargs):
    table_page_type = page_registry.get("table")
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            "type":
            "field_created",
            "field":
            field_type_registry.get_serializer(field, FieldSerializer).data,
        },
        getattr(user, "web_socket_id", None),
        table_id=field.table_id,
    ))
Пример #13
0
def view_created(sender, view, user, **kwargs):
    table_page_type = page_registry.get('table')
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            'type':
            'view_created',
            'view':
            view_type_registry.get_serializer(
                view, ViewSerializer, filters=True, sortings=True).data
        },
        getattr(user, 'web_socket_id', None),
        table_id=view.table_id))
Пример #14
0
def view_created(sender, view, user, **kwargs):
    table_page_type = page_registry.get("table")
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            "type":
            "view_created",
            "view":
            view_type_registry.get_serializer(
                view, ViewSerializer, filters=True, sortings=True).data,
        },
        getattr(user, "web_socket_id", None),
        table_id=view.table_id,
    ))
Пример #15
0
def grid_view_field_options_updated(sender, grid_view, user, **kwargs):
    table_page_type = page_registry.get('table')
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            'type':
            'grid_view_field_options_updated',
            'grid_view_id':
            grid_view.id,
            'grid_view_field_options':
            GridViewSerializer(grid_view).data['field_options']
        },
        getattr(user, 'web_socket_id', None),
        table_id=grid_view.table_id))
Пример #16
0
def row_updated(sender, row, user, table, model, **kwargs):
    table_page_type = page_registry.get('table')
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            'type':
            'row_updated',
            'table_id':
            table.id,
            'row':
            get_row_serializer_class(model, RowSerializer, is_response=True)
            (row).data
        },
        getattr(user, 'web_socket_id', None),
        table_id=table.id))
Пример #17
0
def grid_view_field_options_updated(sender, grid_view, user, **kwargs):
    table_page_type = page_registry.get("table")
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            "type":
            "grid_view_field_options_updated",
            "grid_view_id":
            grid_view.id,
            "grid_view_field_options":
            GridViewSerializer(grid_view).data["field_options"],
        },
        getattr(user, "web_socket_id", None),
        table_id=grid_view.table_id,
    ))
Пример #18
0
    async def add_to_page(self, content):
        """
        Subscribes the connection to a page abstraction. Based on the provided the page
        type we can figure out to which page the connection wants to subscribe to. This
        is for example used when the users visits a page that he might want to
        receive real time updates for.

        :param content: The provided payload by the user. This should contain the page
            type and additional parameters.
        :type content: dict
        """

        user = self.scope['user']
        web_socket_id = self.scope['web_socket_id']

        if not user:
            return

        # If the user has already joined another page we need to discard that
        # page first before we can join a new one.
        await self.discard_current_page()

        try:
            page_type = page_registry.get(content['page'])
        except page_registry.does_not_exist_exception_class:
            return

        parameters = {
            parameter: content.get(parameter)
            for parameter in page_type.parameters
        }

        can_add = await database_sync_to_async(page_type.can_add
                                               )(user, web_socket_id,
                                                 **parameters)

        if not can_add:
            return

        group_name = page_type.get_group_name(**parameters)
        await self.channel_layer.group_add(group_name, self.channel_name)
        self.scope['page'] = page_type
        self.scope['page_parameters'] = parameters

        await self.send_json({
            'type': 'page_add',
            'page': page_type.type,
            'parameters': parameters
        })
Пример #19
0
def row_created(sender, row, before, user, table, model, **kwargs):
    table_page_type = page_registry.get("table")
    transaction.on_commit(
        lambda: table_page_type.broadcast(
            {
                "type": "row_created",
                "table_id": table.id,
                "row": get_row_serializer_class(model, RowSerializer, is_response=True)(
                    row
                ).data,
                "before_row_id": before.id if before else None,
            },
            getattr(user, "web_socket_id", None),
            table_id=table.id,
        )
    )
Пример #20
0
def row_deleted(sender, row_id, row, user, table, model, before_return, **kwargs):
    table_page_type = page_registry.get("table")
    transaction.on_commit(
        lambda: table_page_type.broadcast(
            {
                "type": "row_deleted",
                "table_id": table.id,
                "row_id": row_id,
                # The web-frontend expects a serialized version of the row that is
                # deleted in order the estimate what position the row had in the view.
                "row": dict(before_return)[before_row_delete],
            },
            getattr(user, "web_socket_id", None),
            table_id=table.id,
        )
    )
Пример #21
0
def test_broadcast(mock_broadcast, data_fixture):
    table_page = page_registry.get("table")

    table_page.broadcast({"message": "test"}, table_id=1)
    mock_broadcast.delay.assert_called_once()
    args = mock_broadcast.delay.call_args
    assert args[0][0] == "table-1"
    assert args[0][1]["message"] == "test"
    assert args[0][2] is None

    table_page.broadcast({"message": "test2"},
                         ignore_web_socket_id="123",
                         table_id=2)
    args = mock_broadcast.delay.call_args
    assert args[0][0] == "table-2"
    assert args[0][1]["message"] == "test2"
    assert args[0][2] == "123"
Пример #22
0
def row_updated(sender, row, user, table, model, before_return, **kwargs):
    table_page_type = page_registry.get("table")
    transaction.on_commit(
        lambda: table_page_type.broadcast(
            {
                "type": "row_updated",
                "table_id": table.id,
                # The web-frontend expects a serialized version of the row before it
                # was updated in order the estimate what position the row had in the
                # view.
                "row_before_update": dict(before_return)[before_row_update],
                "row": get_row_serializer_class(model, RowSerializer, is_response=True)(
                    row
                ).data,
            },
            getattr(user, "web_socket_id", None),
            table_id=table.id,
        )
    )
Пример #23
0
def view_updated(sender, view, user, **kwargs):
    table_page_type = page_registry.get('table')
    transaction.on_commit(lambda: table_page_type.broadcast(
        {
            'type':
            'view_updated',
            'view_id':
            view.id,
            'view':
            view_type_registry.get_serializer(
                view,
                ViewSerializer,
                # We do not want to broad cast the filters and sortings every time
                # the view changes. There are separate views and handlers for them
                # each will broad cast their own message.
                filters=False,
                sortings=False).data
        },
        getattr(user, 'web_socket_id', None),
        table_id=view.table_id))