Manages automatic updates and evolutions which are better suited outside schema migrations
Project description
About tgext.evolve
==================
tgext.evolve is a TurboGears2 extension for generic migrations and evolutions.
tgext.evolve *is safe to be used in multiprocessing and multithreading environments*
as it relies on a distributed lock on your database to perform evolutions.
During the evolution period the application will respond with a **503** status code,
feel free to configure TurboGears to trap it and use your ErrorController to provide
a custom page.
Installing
----------
tgext.evolve can be installed from pypi::
pip install tgext.evolve
should just work for most of the users.
Enabling
--------
To enable tgext.evolve put inside your application
``config/app_cfg.py`` the following::
import tgext.evolve
tgext.evolve.plugme(base_config, options={
'evolutions': [
# ... Your evolutions ...
]
})
or you can use ``tgext.pluggable`` when available::
from tgext.pluggable import plug
plug(base_config, 'tgext.evolve', evolutions=[
# ... Your evolutions ...
])
tgext.evolve can then be disabled using the ``tgext.evolve.enabled = false``
option in your configuration files. This is often the case during test suites.
Using Evolutions
----------------
Evolutions are a subclass of ``tgext.evolve.Evolution`` that
must provide an ``evolution_id`` property and an ``evolve()``
method.
Here is a sample evolution that does not much apart waiting for 10 seconds::
import time
from tgext.evolve import Evolution
class TestEvolution1(Evolution):
evolution_id = 'test_evolution_1'
def evolve(self):
time.sleep(10)
Please note that in case you modify data or touch the database
through ``model.DBSession`` or other manners you must ``flush``
and ``commit`` your UnitOfWork and Transaction yourself as evolutions
are performed outside the transaction manager in a separated thread.
Then you can register your evolution with something like::
from tgext.pluggable import plug
plug(base_config, 'tgext.evolve', evolutions=[
TestEvolution1
])
In case your evolution requires parameters you can register an
instance of it instead of registering the class.
.. note::
There is no opposite to the ``evolve()`` method as there is no
guarantee that evolutions are reversible. In case you need
reversible migrations for database schemas please use a
schema migration framework.
ChangeLog
---------
0.0.2
~~~~~
* Allow disabling tgext.evolve using ``tgext.evolve.enabled = False`` in *.ini files.
0.0.1
~~~~~
* First release with only MongoDB/Ming support.
==================
tgext.evolve is a TurboGears2 extension for generic migrations and evolutions.
tgext.evolve *is safe to be used in multiprocessing and multithreading environments*
as it relies on a distributed lock on your database to perform evolutions.
During the evolution period the application will respond with a **503** status code,
feel free to configure TurboGears to trap it and use your ErrorController to provide
a custom page.
Installing
----------
tgext.evolve can be installed from pypi::
pip install tgext.evolve
should just work for most of the users.
Enabling
--------
To enable tgext.evolve put inside your application
``config/app_cfg.py`` the following::
import tgext.evolve
tgext.evolve.plugme(base_config, options={
'evolutions': [
# ... Your evolutions ...
]
})
or you can use ``tgext.pluggable`` when available::
from tgext.pluggable import plug
plug(base_config, 'tgext.evolve', evolutions=[
# ... Your evolutions ...
])
tgext.evolve can then be disabled using the ``tgext.evolve.enabled = false``
option in your configuration files. This is often the case during test suites.
Using Evolutions
----------------
Evolutions are a subclass of ``tgext.evolve.Evolution`` that
must provide an ``evolution_id`` property and an ``evolve()``
method.
Here is a sample evolution that does not much apart waiting for 10 seconds::
import time
from tgext.evolve import Evolution
class TestEvolution1(Evolution):
evolution_id = 'test_evolution_1'
def evolve(self):
time.sleep(10)
Please note that in case you modify data or touch the database
through ``model.DBSession`` or other manners you must ``flush``
and ``commit`` your UnitOfWork and Transaction yourself as evolutions
are performed outside the transaction manager in a separated thread.
Then you can register your evolution with something like::
from tgext.pluggable import plug
plug(base_config, 'tgext.evolve', evolutions=[
TestEvolution1
])
In case your evolution requires parameters you can register an
instance of it instead of registering the class.
.. note::
There is no opposite to the ``evolve()`` method as there is no
guarantee that evolutions are reversible. In case you need
reversible migrations for database schemas please use a
schema migration framework.
ChangeLog
---------
0.0.2
~~~~~
* Allow disabling tgext.evolve using ``tgext.evolve.enabled = False`` in *.ini files.
0.0.1
~~~~~
* First release with only MongoDB/Ming support.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
tgext.evolve-0.0.2.tar.gz
(4.9 kB
view details)
File details
Details for the file tgext.evolve-0.0.2.tar.gz
.
File metadata
- Download URL: tgext.evolve-0.0.2.tar.gz
- Upload date:
- Size: 4.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e21a90901be47f2eedf83ffa48dfb5d7747e5070558d3093ec6b2fbb12e8b41f |
|
MD5 | 9126f119b23a2b5f8cee6c793f82ea92 |
|
BLAKE2b-256 | 32ac8dbb6a6e011d24437b5aeafaa547719e072a786008e45a523672c65e35d8 |