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