bdragon300 / mongoengine-migrate

Migrations for MongoEngine inspired by Django
Apache License 2.0
17 stars 5 forks source link

MongoDB error while unsetting `allow_inheritance` in Document #38

Open bdragon300 opened 3 years ago

bdragon300 commented 3 years ago

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.