Skip to content

Suboptimal error message for creating a bad workflow

When creating a workflow without specifying a workspace and using a non-existent template name (bad), the error message is not very helpful.

printf "{}" | debusine --server debusine.freexian.com create-workflow bad

results in

---
result: failure
error:
  title: Error

The error log has more (after wrapping it):

ERROR: Server exception. status_code: 400 detail: None traceback: Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/debusine/server/views/workflows.py", line 125, in post
    serializer.is_valid(raise_exception=True)
  File "/usr/lib/python3/dist-packages/rest_framework/serializers.py", line 227, in is_valid  
    self._validated_data = self.run_validation(self.initial_data)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rest_framework/serializers.py", line 426, in run_validation
    value = self.to_internal_value(data)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rest_framework/serializers.py", line 483, in to_internal_value
    validated_value = field.run_validation(primitive_value)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rest_framework/relations.py", line 153, in run_validation
    return super().run_validation(data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rest_framework/fields.py", line 544, in run_validation
    (is_empty_value, data) = self.validate_empty_values(data)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rest_framework/fields.py", line 520, in validate_empty_values
    return (True, self.get_default())
                  ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rest_framework/fields.py", line 497, in get_default
    return self.default()
           ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/debusine/db/models/workspaces.py", line 218, in default_workspace
    return Workspace.objects.get(
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/models/manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 637, in get
    raise self.model.DoesNotExist(
debusine.db.models.workspaces.Workspace.DoesNotExist: Workspace matching query does not exist.

If we do the same with a valid --workflow, the workflow actually gets created despite its data being invalid. A work request is generated and it can be viewed. The web view will then show the validation failure. Ideally, the workflow is being validated before allocating and returning a work request.

Edited by Helmut Grohne
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information