inveniosoftware / invenio-vocabularies

Invenio module for managing vocabularies.
https://invenio-vocabularies.readthedocs.io
MIT License
2 stars 42 forks source link

datastreams: `vocabularies update` crash #292

Closed tmorrell closed 6 months ago

tmorrell commented 7 months ago

Package version (if known): v12

Describe the bug

The datastream vocabularies update command crashes. Changing a working vocabularies install command to update doesn't work as expected.

Steps to Reproduce

  1. Set up a names vocabulary with pipenv run invenio vocabularies import --vocabulary names --filepath ./vocabularies-future.yaml

and

`names: readers:

site-packages/invenio_vocabularies/datastreams/writers.py", line 71, in write
    return StreamEntry(self._service.create(self._identity, entry))
  File "site-packages/invenio_records_resources/services/uow.py", line 350, in inner
    res = f(self, *args, **kwargs)
  File "site-packages/invenio_records_resources/services/records/service.py", line 320, in create
    return self._create(self.record_cls, identity, data, uow=uow, expand=expand)
  File "site-packages/invenio_records_resources/services/uow.py", line 354, in inner
    return f(self, *args, **kwargs)
  File "site-packages/invenio_records_resources/services/records/service.py", line 347, in _create
    self.run_components(
  File "site-packages/invenio_records_resources/services/base/service.py", line 72, in run_components
    getattr(component, action)(*args, **kwargs)
  File "site-packages/invenio_vocabularies/services/components.py", line 49, in create
    self.service.record_cls.pid.create(record)
  File "site-packages/invenio_records_resources/records/systemfields/pid.py", line 233, in create
    self.field._provider.create(pid_value, record, self.field.model_field_name)
  File "site-packages/invenio_records_resources/records/providers.py", line 31, in create
    raise PIDAlreadyExists(
invenio_pidstore.errors.PIDAlreadyExists
site-packages/invenio_vocabularies/cli.py", line 136, in update
    success, errored, filtered = _process_vocab(config)
  File "site-packages/invenio_vocabularies/cli.py", line 69, in _process_vocab
    for result in ds.process():
  File "site-packages/invenio_vocabularies/datastreams/datastreams.py", line 61, in process
    yield self.write(transformed_entry)
  File "site-packages/invenio_vocabularies/datastreams/datastreams.py", line 104, in write
    writer.write(stream_entry)
  File "site-packages/invenio_vocabularies/datastreams/writers.py", line 75, in write
    vocab_id = self._entry_id(entry)
  File "site-packages/invenio_vocabularies/datastreams/writers.py", line 61, in _entry_id
    return (entry["type"], entry["id"])
KeyError: 'type'

Expected behavior

Vocabulary gets updated