bdragon300 / mongoengine-migrate

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

Error when changing reference field to generic reference field #50

Closed prihoda closed 2 years ago

prihoda commented 2 years ago

This action fails:

[DEBUG] >> Change 'type_key': 'ReferenceField' => 'GenericReferenceField'

Due to this condition: https://github.com/bdragon300/mongoengine-migrate/blob/master/mongoengine_migrate/fields/converters/common.py#L209

We should use if ctx.collection is not None instead of just if ctx.collection

[DEBUG] >> Change 'type_key': 'ReferenceField' => 'GenericReferenceField'
Traceback (most recent call last):
  File "bin/mongoengine_migrate", line 8, in <module>
    sys.exit(cli())
  File "/opt/miniforge/lib/python3.8/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/opt/miniforge/lib/python3.8/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/opt/miniforge/lib/python3.8/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/opt/miniforge/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/opt/miniforge/lib/python3.8/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/cli.py", line 36, in w
    return func(*args, **kwargs)
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/cli.py", line 160, in migrate
    mongoengine_migrate.migrate(migration)
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/loader.py", line 540, in migrate
    self.upgrade(migration_name, graph)
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/loader.py", line 423, in upgrade
    action_object.run_forward()
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/actions/fields.py", line 263, in run_forward
    self._run_migration(self._run_ctx['left_field_schema'], self.parameters, swap=False)
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/actions/fields.py", line 288, in _run_migration
    field_handler.change_param(db_field, 'type_key')
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/fields/base.py", line 166, in change_param
    return method(updater, diff)
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/fields/base.py", line 304, in change_type_key
    new_handler.convert_type(updater, *field_classes)
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/fields/base.py", line 345, in convert_type
    type_converter(updater)
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/fields/converters/common.py", line 261, in to_dynamic_ref
    updater.update_by_document(by_doc)
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/updater.py", line 213, in update_by_document
    self._update_by_document(callback, collection, [], [])
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/updater.py", line 363, in _update_by_document
    callback(ctx)
  File "/opt/miniforge/lib/python3.8/site-packages/mongoengine_migrate/fields/converters/common.py", line 236, in by_doc
    collection_name = ctx.collection.name if ctx.collection else None
  File "/opt/miniforge/lib/python3.8/site-packages/pymongo/collection.py", line 348, in __bool__
    raise NotImplementedError(
NotImplementedError: Collection objects do not implement truth value testing or bool(). Please compare with None instead: collection is not None
bdragon300 commented 2 years ago

Merged, thanks