A library used in Open Permissions Platform services for accessing registry data stored in CouchDB.
NOTE: To use this library CouchDB must be configured to support Python views. See https://pythonhosted.org/CouchDB/views.html
There is support for simple migrations when schemas change.
To create an empty migration using the command line interface, run:
# create an initial migration file for the perch.Organisation document
perch migrations create perch.Organisation
This will create a file in perch/migrations
containing a function that will
be applied to each perch.Organisation
document in the database.
For example, this migration will add a key "test" with value 1 to each organisation:
import perch
VERSION = '36d0e91bf63d479597bb1fccec30a3b0'
PREVIOUS_VERSION = ''
@perch.migrate.migration(perch.Organisation, VERSION, PREVIOUS_VERSION)
def migrate_organisation(instance):
instance.test = 1
return instance
NOTE: Versions are simply UUIDs, the graph of migrations is calculated by chaining together the version and previous version.
After a migration has been applied the doc_version
will be updated to match
the last migration
To run migrations:
perch migrations run
Subresource can be migrated the same way as documents (e.g.
perch migrations create perch.Service
), however the migration version refers
to the document not the subresource.
If a subresource and document migration have the same previous version the subresources are migrated before the rest of the document. For example, if the following migrations are created:
perch create perch.Organisation --previous=36d0e91bf63d479597bb1fccec30a3b0
perch create perch.Service --previous=36d0e91bf63d479597bb1fccec30a3b0
then the perch.Service
migration will run first and the final doc_version
will match the perch.Organisation
version.