Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
JSON based schema migration tool
Python
branch: master

This branch is 4 commits ahead, 2 commits behind dreverri:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
evolve
tests
.gitignore
README
TODO
setup.cfg
setup.py

README

Evolve is a python schema migration tool that uses JSON and JSON-Schema to describe tables and changes.

Example:
import evolve

self.repo = evolve.Repository()
change = {
	"change":"create",
	"schema":{
		"id":"person",
		"type":"object",
		"properties":{
			"id":{"type":"string"}
		}
	}
}

# declare a new branch
branch = self.repo.branch('master')

# add the change
branch.add(change)

# commit the change
branch.commit('create person table')

# branch master to b3
b3 = self.repo.branch('b3','master')
change2 = {
	"change":"alter.add",
	"schema":{
		"id":"person",
		"type":"object",
		"properties":{
			"name":{"type":"string"}
		}
	}
}
b3.add(change2)
b3.commit('added name field')

# branch master to b4
b4 = self.repo.branch('b4','master')
change3 = {
	"change":"alter.add",
	"schema":{
		"id":"person",
		"type":"object",
		"properties":{
			"last_name":{"type":"string"}
		}
	}
}
b4.add(change3)
b4.commit('added last name field')

# generate a migration path from b3 to b4 (roll back to master, roll forward to b4)
migration = self.repo.migrate(b3.parent.commit_id,b4.parent.commit_id)


TODO:
initialize repository from database
-setup a schema table in the database to track versioning

generate SQL statements from sqlalchemy and migrate

merge migrations
-no need to perform multiple modifications to a field during roll back if the field if dropped at the end of the roll back

verify changes with jsonschema

verify records with jsonschema
Something went wrong with that request. Please try again.