Re: autogenerate revision fails in a multi-db project generated with: `alembic init --template multidb alembic`

2018-08-13 Thread René-paul Debroize
Hello

Thank you for your answer.

The problem was that the entry db_name was missing from the alembic.ini
file. It is not how I configure the engine. However add something like:

config.set_main_option("databases", db_names)


rather than just fill the db_name var in the env.py file fixed the problem.

Thanks again!





2018-08-10 17:16 GMT+02:00 Mike Bayer :

> On Fri, Aug 10, 2018 at 6:47 AM,   wrote:
> > 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`:
>
> have you also received the alembic.ini from that run, or was there a
> previous alembic.ini present that prevented the new one from being
> genreated?   the alembic.ini for multidb requires a "databases"
> configuration:
>
> databases = engine1, engine2
>
> [engine1]
> sqlalchemy.url = driver://user:pass@localhost/dbname
>
> [engine2]
> sqlalchemy.url = driver://user:pass@localhost/dbname2
>
>
> I can reproduce your error if that section is missing.   Restore it,
> and also put valid URLs in there, and then it works.If this is not
> how you are configuring, then you need to alter the env.py to locate
> your database URLs somehow.
>
>
>
>
>
> >
> > [...]
> > 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
> > 
> > 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 
> > 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 

Re: autogenerate revision fails in a multi-db project generated with: `alembic init --template multidb alembic`

2018-08-10 Thread Mike Bayer
On Fri, Aug 10, 2018 at 6:47 AM,   wrote:
> 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`:

have you also received the alembic.ini from that run, or was there a
previous alembic.ini present that prevented the new one from being
genreated?   the alembic.ini for multidb requires a "databases"
configuration:

databases = engine1, engine2

[engine1]
sqlalchemy.url = driver://user:pass@localhost/dbname

[engine2]
sqlalchemy.url = driver://user:pass@localhost/dbname2


I can reproduce your error if that section is missing.   Restore it,
and also put valid URLs in there, and then it works.If this is not
how you are configuring, then you need to alter the env.py to locate
your database URLs somehow.





>
> [...]
> 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
> 
> 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 
> 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]()
>

autogenerate revision fails in a multi-db project generated with: `alembic init --template multidb alembic`

2018-08-10 Thread rdebroiz
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 
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_() / downgrade_()" 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.