Hello

I'm trying to use alembic to generate a migration file in a multi-db 
environment. I first created the project using *`alembic init --template 
multidb alembic`*
and then hack the `env.py` script *(didn't touch to `run_migration_online`)* 
to suit my needs.

Here is the error I got after invoking *`alembic --raiseerr revision 
--autogenerate -m 'First revision`*:

[...]
Generating /home/rdebroiz/Quantivly/services/alembic/versions/201808-10-T12-
30-48-first_revision-cb8c6da27574.py ... FAILED
Traceback (most recent call last):
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/util/pyfiles.py",
 
line 15, in template_to_file
output = template.render_unicode(**kw).encode(output_encoding)
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/template.py",
 
line 471, in render_unicode
as_unicode=True)
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/runtime.py",
 
line 838, in _render
**_kwargs_for_callable(callable_, data))
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/runtime.py",
 
line 873, in _render_context
_exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/mako/runtime.py",
 
line 899, in _exec_template
callable_(context, *args, **kwargs)
File "alembic_script_py_mako", line 62, in render_body
File "/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/re.py", line 212, 
in split
return _compile(pattern, flags).split(string, maxsplit)
TypeError: expected string or bytes-like object

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/rdebroiz/.virtualenvs/quantivly/bin/alembic", line 11, in <
module>
sys.exit(main())
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/config.py",
 
line 486, in main
CommandLine(prog=prog).main(argv=argv)
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/config.py",
 
line 480, in main
self.run_cmd(cfg, options)
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/config.py",
 
line 463, in run_cmd
**dict((k, getattr(options, k, None)) for k in kwarg)
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/command.py",
 
line 180, in revision
revision_context.generate_scripts()
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/command.py",
 
line 179, in <listcomp>
script for script in
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/autogenerate/api.py",
 
line 480, in generate_scripts
yield self._to_script(generated_revision)
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/autogenerate/api.py",
 
line 412, in _to_script
**template_args)
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/script/base.py",
 
line 574, in generate_revision
**kw
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/script/base.py",
 
line 439, in _generate_template
**kw
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/util/messaging.py",
 
line 47, in status
ret = fn(*arg, **kw)
File 
"/home/rdebroiz/.virtualenvs/quantivly/lib/python3.6/site-packages/alembic/util/pyfiles.py",
 
line 24, in template_to_file
"template-oriented traceback." % fname)
alembic.util.exc.CommandError: Template rendering failed; see 
/tmp/tmph4dvwm5j.txt 
for a template-oriented traceback.


I kept the original `script.py.mako` template:

<%!
import re

%>"""${message}

Revision ID: ${up_revision}
Revises: ${down_revision | comma,n}
Create Date: ${create_date}

"""
from alembic import op
import sqlalchemy as sa
${imports if imports else ""}

# revision identifiers, used by Alembic.
revision = ${repr(up_revision)}
down_revision = ${repr(down_revision)}
branch_labels = ${repr(branch_labels)}
depends_on = ${repr(depends_on)}


def upgrade(engine_name):
globals()["upgrade_%s" % engine_name]()


def downgrade(engine_name):
globals()["downgrade_%s" % engine_name]()

<%
db_names = config.get_main_option("databases")
%>

## generate an "upgrade_<xyz>() / downgrade_<xyz>()" function
## for each database name in the ini file.

% for db_name in re.split(r',\s*', db_names):

def upgrade_${db_name}():
${context.get("%s_upgrades" % db_name, "pass")}


def downgrade_${db_name}():
${context.get("%s_downgrades" % db_name, "pass")}

% endfor



I tested it with alembic provided by PyPi and the bitbucket master.
Any help would be greatly appreciate.

Thanks!
RP.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy-alembic" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy-alembic+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to