I observed that I repeat myself in upgrade modules.
So I concluded that it would be good to put that code into separate python module and then just import it in upgrade modules.
I put my code in alembic/common.py just beside env.py.
Unfortunately it is not so easy.
Current working directory is 2 levels up regarding alembic/versions and to import anything from alembic/common.py
I have to tweak sys,path and I cannot just add "../.." due to compelxity of my project.
$ alembic history
Traceback (most recent call last):
File "/usr/bin/alembic", line 9, in <module>
load_entry_point('alembic==0.4.1', 'console_scripts', 'alembic')()
File "/usr/lib/python2.7/dist-packages/alembic/config.py", line 255, in main
CommandLine(prog=prog).main(argv=argv)
File "/usr/lib/python2.7/dist-packages/alembic/config.py", line 250, in main
self.run_cmd(cfg, options)
File "/usr/lib/python2.7/dist-packages/alembic/config.py", line 241, in run_cmd
**dict((k, getattr(options, k)) for k in kwarg)
File "/usr/lib/python2.7/dist-packages/alembic/command.py", line 156, in history
for sc in script.walk_revisions():
File "/usr/lib/python2.7/dist-packages/alembic/script.py", line 72, in walk_revisions
heads = set(self.get_heads())
File "/usr/lib/python2.7/dist-packages/alembic/script.py", line 269, in get_heads
for script in self._revision_map.values():
File "/usr/lib/python2.7/dist-packages/alembic/util.py", line 220, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "/usr/lib/python2.7/dist-packages/alembic/script.py", line 201, in _revision_map
script = Script._from_filename(self.versions, file_)
File "/usr/lib/python2.7/dist-packages/alembic/script.py", line 422, in _from_filename
module = util.load_python_file(dir_, filename)
File "/usr/lib/python2.7/dist-packages/alembic/util.py", line 186, in load_python_file
module = imp.load_source(module_id, path, open(path, 'rb'))
File "alembic/versions/31802014a5db_create_product_recor.py", line 18, in <module>
sys.path.append(context.config.get_main_option("script_location"))
AttributeError: 'module' object has no attribute 'config'