1.1.0 breaks compatibility with SQLAlchemy 1.3
kevinvalk opened this issue · 1 comments
kevinvalk commented
Hi, great work!
After updating SQLAlchemy-18n to 1.1.0 without updating SQLAlchemy itself (still at 1.3.22), I got the following error when running flask db upgrade
.
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/sqlalchemy/sql/elements.py", line 747, in __getattr__
return getattr(self.comparator, key)
AttributeError: 'Comparator' object has no attribute '_copy'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/bin/flask", line 8, in <module>
sys.exit(main())
File "/home/app/.local/lib/python3.9/site-packages/flask/cli.py", line 967, in main
cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None)
File "/home/app/.local/lib/python3.9/site-packages/flask/cli.py", line 586, in main
return super(FlaskGroup, self).main(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.9/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/click/decorators.py", line 21, in new_func
return f(get_current_context(), *args, **kwargs)
File "/home/app/.local/lib/python3.9/site-packages/flask/cli.py", line 425, in decorator
with __ctx.ensure_object(ScriptInfo).load_app().app_context():
File "/home/app/.local/lib/python3.9/site-packages/flask/cli.py", line 392, in load_app
app = locate_app(self, import_name, None, raise_if_not_found=False)
File "/home/app/.local/lib/python3.9/site-packages/flask/cli.py", line 240, in locate_app
__import__(module_name)
File "/app/app.py", line 3, in <module>
app = lballet.create_app()
File "/app/lballet/__init__.py", line 87, in create_app
lballet.email.init_app(app)
File "/app/lballet/email.py", line 53, in init_app
from lballet.models import Newsletter, User
File "/app/lballet/models.py", line 196, in <module>
class LessonTranslation(translation_base(Lesson)):
File "/home/app/.local/lib/python3.9/site-packages/sqlalchemy_i18n/manager.py", line 54, in translation_base
column_copy = column._copy()
File "/usr/local/lib/python3.9/site-packages/sqlalchemy/sql/elements.py", line 749, in __getattr__
util.raise_(
File "/usr/local/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute '_copy'
Updating SQLAlchemy to 1.4.18 resolved the issue. However, it would be best to not break compatibility on a minor version bump like 1.1.0.
marksteward commented
There are also people who won't be able to upgrade to 1.4 yet due to other dependencies. .copy
is deprecated in 1.4 but works for now. I'd suggest reverting the change and releasing 1.1.1.
Alternatively:
The :meth:
_schema.Table.tometadata
method is the public API that provides copying for :class:_schema.Table
objects.
Happy to look into this but it won't be immediately.