Addon that provides evolutions/migrations to create or update objects in your Guillotina containers.
pip install guillotina_evolution
Add the following values in app_settings
:
app_settings = {
"applications": [
"guillotina_evolution",
],
"commands": {
"g-evolve": "guillotina_evolution.commands.evolve.EvolveCommand",
},
Configure your app addon to initialize guillotina_evolution when is installed:
from guillotina.component import get_utility
from guillotina_evolution.interfaces import IEvolutionUtility
@configure.addon(name="app", title="Your guillotina app")
class ManageAddon(Addon):
@classmethod
async def install(cls, container, request):
utility = get_utility(IEvolutionUtility)
utility.install() # initialize current generation with the greatest registered generation
# ...
Create a folder evolutions
inside your guillotina app that contains the following files:
app/evolutions/__init__.py
from .r20190118 import * # noqa
# Don't forget to add all rXXXXXXXX.py!
app/evolutions/r20190118.py
from guillotina_evolution.utils import register_evolution
@register_evolution(1)
async def evolver(container):
async for item in container.async_items():
item.title = item.title + ' (Migrated)'
item.register()
Update the includeme()
of your app:
app/__init__.py
def includeme(root):
# ...
configure.scan("app.evolutions")
Run guillotina command g-evolve
to run your migrations.
g -c config.yaml g-evolve