def get(self, request, table_id, filters, sortings): """ Responds with a list of serialized views that belong to the table if the user has access to that group. """ table = TableHandler().get_table(request.user, table_id) views = View.objects.filter(table=table).select_related('content_type') if filters: views = views.prefetch_related('viewfilter_set') if sortings: views = views.prefetch_related('viewsort_set') data = [ view_type_registry.get_serializer( view, ViewSerializer, filters=filters, sortings=sortings ).data for view in views ] return Response(data)
def get(self, request, table_id, filters, sortings): """ Responds with a list of serialized views that belong to the table if the user has access to that group. """ table = TableHandler().get_table(table_id) table.database.group.has_user( request.user, raise_error=True, allow_if_template=True ) views = View.objects.filter(table=table).select_related("content_type") if filters: views = views.prefetch_related("viewfilter_set") if sortings: views = views.prefetch_related("viewsort_set") data = [ view_type_registry.get_serializer( view, ViewSerializer, filters=filters, sortings=sortings ).data for view in views ] return Response(data)
def post(self, request, data, table_id): """Creates a new view for a user.""" table = TableHandler().get_table(request.user, table_id) view = ViewHandler().create_view( request.user, table, data.pop('type'), **data) serializer = view_type_registry.get_serializer(view, ViewSerializer) return Response(serializer.data)
def get(self, request, view_id, filters, sortings): """Selects a single view and responds with a serialized version.""" view = ViewHandler().get_view(request.user, view_id) serializer = view_type_registry.get_serializer(view, ViewSerializer, filters=filters, sortings=sortings) return Response(serializer.data)
def get(self, request, view_id, filters, sortings): """Selects a single view and responds with a serialized version.""" view = ViewHandler().get_view(view_id) view.table.database.group.has_user(request.user, raise_error=True) serializer = view_type_registry.get_serializer( view, ViewSerializer, filters=filters, sortings=sortings ) return Response(serializer.data)
def post(self, request, data, table_id, filters, sortings): """Creates a new view for a user.""" table = TableHandler().get_table(table_id) view = ViewHandler().create_view(request.user, table, data.pop("type"), **data) serializer = view_type_registry.get_serializer( view, ViewSerializer, filters=filters, sortings=sortings ) return Response(serializer.data)
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 patch(self, request, view_id): """Updates the view if the user belongs to the group.""" view = ViewHandler().get_view(request.user, view_id).specific view_type = view_type_registry.get_by_model(view) data = validate_data_custom_fields( view_type.type, view_type_registry, request.data, base_serializer_class=UpdateViewSerializer ) view = ViewHandler().update_view(request.user, view, **data) serializer = view_type_registry.get_serializer(view, ViewSerializer) return Response(serializer.data)
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))