def get(self, request, field_id): """Selects a single field and responds with a serialized version.""" field = FieldHandler().get_field(field_id) field.table.database.group.has_user(request.user, raise_error=True) serializer = field_type_registry.get_serializer(field, FieldSerializer) return Response(serializer.data)
def patch(self, request, field_id): """Updates the field if the user belongs to the group.""" field = (FieldHandler().get_field( field_id, base_queryset=Field.objects.select_for_update()).specific) type_name = type_from_data_or_registry(request.data, field_type_registry, field) field_type = field_type_registry.get(type_name) data = validate_data_custom_fields( type_name, field_type_registry, request.data, base_serializer_class=UpdateFieldSerializer, ) # Because each field type can raise custom exceptions at while updating the # field we need to be able to map those to the correct API exceptions which are # defined in the type. with field_type.map_api_exceptions(): field = FieldHandler().update_field(request.user, field, type_name, **data) serializer = field_type_registry.get_serializer(field, FieldSerializer) return Response(serializer.data)
def post(self, request, data, table_id): """Creates a new field for a table.""" type_name = data.pop('type') table = TableHandler().get_table(request.user, table_id) field = FieldHandler().create_field(request.user, table, type_name, **data) serializer = field_type_registry.get_serializer(field, FieldSerializer) return Response(serializer.data)
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 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 get(self, request, table_id): """ Responds with a list of serialized fields that belong to the table if the user has access to that group. """ table = TableHandler().get_table(request.user, table_id) fields = Field.objects.filter(table=table).select_related('content_type') data = [ field_type_registry.get_serializer(field, FieldSerializer).data for field in fields ] return Response(data)
def post(self, request, data, table_id): """Creates a new field for a table.""" type_name = data.pop('type') field_type = field_type_registry.get(type_name) table = TableHandler().get_table(request.user, table_id) # Because each field type can raise custom exceptions while creating the # field we need to be able to map those to the correct API exceptions which are # defined in the type. with field_type.map_api_exceptions(): field = FieldHandler().create_field(request.user, table, type_name, **data) serializer = field_type_registry.get_serializer(field, FieldSerializer) return Response(serializer.data)
def get(self, request, table_id): """ Responds with a list of serialized fields 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) fields = Field.objects.filter( table=table).select_related("content_type") data = [ field_type_registry.get_serializer(field, FieldSerializer).data for field in fields ] return Response(data)
def patch(self, request, field_id): """Updates the field if the user belongs to the group.""" field = FieldHandler().get_field( request.user, field_id, base_queryset=Field.objects.select_for_update()).specific type_name = type_from_data_or_registry(request.data, field_type_registry, field) data = validate_data_custom_fields( type_name, field_type_registry, request.data, base_serializer_class=UpdateFieldSerializer) field = FieldHandler().update_field(request.user, field, type_name, **data) serializer = field_type_registry.get_serializer(field, FieldSerializer) return Response(serializer.data)
def get(self, request, field_id): """Selects a single field and responds with a serialized version.""" field = FieldHandler().get_field(request.user, field_id) serializer = field_type_registry.get_serializer(field, FieldSerializer) return Response(serializer.data)