mongoengine-migrate
mongoengine-migrate copied to clipboard
MongoDB error while unsetting `allow_inheritance` in Document
When we have unset allow_inheritance
in Document meta
dict, we get an error while running migration:
[DEBUG] >> Change 'inherit': True => <UNSET>
Traceback (most recent call last):
File "mongoengine_migrate/cli.py", line 180, in <module>
cli()
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/click-7.1.2-py3.8.egg/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/click-7.1.2-py3.8.egg/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/click-7.1.2-py3.8.egg/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/click-7.1.2-py3.8.egg/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/click-7.1.2-py3.8.egg/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "mongoengine_migrate/cli.py", line 154, in migrate
mongoengine_migrate.migrate(migration)
File "/home/gosha/proj/mongoengine-migrate/mongoengine_migrate/loader.py", line 540, in migrate
self.upgrade(migration_name, graph)
File "/home/gosha/proj/mongoengine-migrate/mongoengine_migrate/loader.py", line 423, in upgrade
action_object.run_forward()
File "/home/gosha/proj/mongoengine-migrate/mongoengine_migrate/actions/base.py", line 475, in run_forward
self._run_migration(self._run_ctx['left_schema'][self.document_type],
File "/home/gosha/proj/mongoengine-migrate/mongoengine_migrate/actions/base.py", line 515, in _run_migration
method(updater, diff)
File "/home/gosha/proj/mongoengine-migrate/mongoengine_migrate/actions/document.py", line 143, in change_inherit
updater.update_by_path(by_path)
File "/home/gosha/proj/mongoengine-migrate/mongoengine_migrate/updater.py", line 187, in update_by_path
self._update_by_path(callback, collection, [], [])
File "/home/gosha/proj/mongoengine-migrate/mongoengine_migrate/updater.py", line 291, in _update_by_path
callback(ctx)
File "/home/gosha/proj/mongoengine-migrate/mongoengine_migrate/actions/document.py", line 133, in by_path
ctx.collection.update_many(
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/pymongo-3.10.1-py3.8-linux-x86_64.egg/pymongo/collection.py", line 1071, in update_many
self._update_retryable(
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/pymongo-3.10.1-py3.8-linux-x86_64.egg/pymongo/collection.py", line 854, in _update_retryable
return self.__database.client._retryable_write(
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/pymongo-3.10.1-py3.8-linux-x86_64.egg/pymongo/mongo_client.py", line 1491, in _retryable_write
return self._retry_with_session(retryable, func, s, None)
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/pymongo-3.10.1-py3.8-linux-x86_64.egg/pymongo/mongo_client.py", line 1384, in _retry_with_session
return func(session, sock_info, retryable)
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/pymongo-3.10.1-py3.8-linux-x86_64.egg/pymongo/collection.py", line 846, in _update
return self._update(
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/pymongo-3.10.1-py3.8-linux-x86_64.egg/pymongo/collection.py", line 823, in _update
_check_write_command_response(result)
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/pymongo-3.10.1-py3.8-linux-x86_64.egg/pymongo/helpers.py", line 221, in _check_write_command_response
_raise_last_write_error(write_errors)
File "/home/gosha/proj/mongoengine-migrate/venv/lib/python3.8/site-packages/pymongo-3.10.1-py3.8-linux-x86_64.egg/pymongo/helpers.py", line 203, in _raise_last_write_error
raise WriteError(error.get("errmsg"), error.get("code"), error)
pymongo.errors.WriteError: The update path '._cls' contains an empty field name, which is not allowed.
This is because of incorrect AlterDocument.change_inherit.by_path
implementation. It's needed to fix it.