Exemple #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))
Exemple #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))
Exemple #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,
    ))
Exemple #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))
Exemple #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))
Exemple #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))
Exemple #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,
    ))
Exemple #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,
    ))
Exemple #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))
Exemple #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,
    ))
Exemple #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,
    ))
Exemple #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,
    ))
Exemple #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))
Exemple #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,
    ))
Exemple #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))
Exemple #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))
Exemple #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,
    ))
Exemple #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
        })
Exemple #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,
        )
    )
Exemple #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,
        )
    )
Exemple #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"
Exemple #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,
        )
    )
Exemple #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))