BuildStream crashes when trying to push a non-build artifact

Summary

When trying to push elements and at least an element is not 'cached', BuildStream crashes horribly

Steps to reproduce

  • create a new bst element
  • bst push your_element

A test has been pushed to trigger the bug: 52f140d3

What is the current bug behavior?

We get a stacktrace with AttributeError

What is the expected correct behavior?

A nice error message/silence

Relevant logs and/or screenshots

(venv) me@myhost $ bst --config user.conf artifact push --remote http://localhost:8000
[--:--:--][        ][    main:core activity                 ] START   Push
[--:--:--][        ][    main:core activity                 ] START   Loading elements
[00:00:04][        ][    main:core activity                 ] SUCCESS Loading elements

    29 subtasks processed

[--:--:--][        ][    main:core activity                 ] START   Resolving elements
[00:00:00][        ][    main:core activity                 ] SUCCESS Resolving elements

    29 of 29 subtasks processed

[--:--:--][        ][    main:core activity                 ] START   Initializing remote caches
[00:00:00][        ][    main:core activity                 ] SUCCESS Initializing remote caches
[--:--:--][        ][    main:core activity                 ] START   Resolving cached state
[00:00:05][        ][    main:core activity                 ] SUCCESS Resolving cached state
[--:--:--][        ][    main:core activity                 ] START   Checking sources
[00:00:00][        ][    main:core activity                 ] SUCCESS Checking sources
[--:--:--][        ][    main:core activity                 ] BUG     'NoneType' object has no attribute 'was_workspaced'

    Traceback (most recent call last):
      File "/usr/bin/bst", line 8, in <module>
        sys.exit(cli())
      File "/usr/lib/python3.6/site-packages/click/core.py", line 764, in __call__
        return self.main(*args, **kwargs)
      File "/home/tellendil/buildstreamgit/re/buildstream/src/buildstream/_frontend/cli.py", line 223, in override_main
        standalone_mode=standalone_mode, **extra)
      File "/usr/lib/python3.6/site-packages/click/core.py", line 717, in main
        rv = self.invoke(ctx)
      File "/usr/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/usr/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/usr/lib/python3.6/site-packages/click/core.py", line 956, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/usr/lib/python3.6/site-packages/click/core.py", line 555, in invoke
        return callback(*args, **kwargs)
      File "/usr/lib/python3.6/site-packages/click/decorators.py", line 27, in new_func
        return f(get_current_context().obj, *args, **kwargs)
      File "/home/tellendil//buildstream/src/buildstream/_frontend/cli.py", line 1155, in artifact_push
        ignore_junction_targets=ignore_junction_targets)
      File "/home/tellendil//buildstream/src/buildstream/_stream.py", line 490, in push
        self._enqueue_plan(elements, queue=push_queue)
      File "/home/tellendil/buildstream/src/buildstream/_stream.py", line 1265, in _enqueue_plan
        queue.enqueue(plan)
      File "/home/tellendil/buildstream/src/buildstream/_scheduler/queues/queue.py", line 183, in enqueue
        self._enqueue_element(elt)
      File "/home/tellendil/buildstream/src/buildstream/_scheduler/queues/queue.py", line 367, in _enqueue_element
        status = self.status(element)
      File "/home/tellendil/buildstream/src/buildstream/_scheduler/queues/artifactpushqueue.py", line 39, in status
        if element._skip_push():
      File "/home/tellendil/buildstream/src/buildstream/element.py", line 1869, in _skip_push
        if self.__get_tainted():
      File "/home/tellendil/buildstream/src/buildstream/element.py", line 2507, in __get_tainted
        workspaced = self.__artifact.get_metadata_workspaced()
      File "/home/tellendil/buildstream/src/buildstream/_artifact.py", line 311, in get_metadata_workspaced
        self._metadata_workspaced = artifact.was_workspaced
    AttributeError: 'NoneType' object has no attribute 'was_workspaced'