A simple utility for migrations for cozo db
Project description
cozo-migrate
A simple utility for migrations for cozo db
Features
- It uses typer and
pycozo
as its only dependencies. - Loosely modeled after hasura-migrate which is one of the simplest migration tools I have used.
- Auto-rollback if something goes wrong during the migrations
- Has a programmatic API for using inside tests etc.
CLI Usage
Example
$ # Install cozo-migrate
$ pip install cozo-migrate
$ # Let's start a cozo server in the background
$ cozo server -e rocksdb &
$ # Let's create a migration
$ cozo-migrate -e http -d ./migrations create demo
Writing 'migrations/migrate_1704803704_demo.py' Confirm? [y/N]: y
✔ Created migration at: migrations/migrate_1704803704_demo.py
$ cat migrations/migrate_1704803704_demo.py
#/usr/bin/env python3
MIGRATION_ID = "demo"
CREATED_AT = 1704803704.762879
def up(client):
pass
def down(client):
pass
$ # Edit the migration to add schema change queries and then apply!
$ cozo-migrate -e http -d ./migrations apply -a
• Migrate path: [NONE] → demo
Are you sure you want to apply these migrations? [y/N]: y
✔ Database migrated.
Core options
Usage: cozo-migrate [OPTIONS] COMMAND [ARGS]...
A simple migration tool for Cozo databases.
╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --migrations-dir -d PATH Directory to use for looking up migration files. [env var: COZO_MIGRATIONS_DIR] [default: migrations] │
│ --engine -e [sqlite|rocksdb|http|mem] Engine to use [env var: COZO_ENGINE] [default: EngineType.sqlite] │
│ --path -f PATH Database file (not applicable for mem or http engines) [env var: COZO_PATH] [default: None] │
│ --host -h TEXT Host to connect to (http engine only) [env var: COZO_HOST] [default: http://127.0.0.1:9070] │
│ --auth TEXT Auth header (http engine only) [default: None] │
│ --verbose -v │
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy it or customize the installation. │
│ --help Show this message and exit. │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ apply Apply migrations to the database. You can specify the number of steps to apply and the direction. │
│ create Create a new migration file in the migrations directory. Format: {migration_dir}/migrate_<timestamp>_<id>.py │
│ history Display the migration history in the database as a pretty table. │
│ init Initialize the database with the migration manager table. │
│ status Display the current migration status. │
│ version Display the current version. │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Init
Usage: cozo-migrate init [OPTIONS]
Initialize the database with the migration manager table.
╭─ Options ───────────────────────────────────╮
│ --help Show this message and exit. │
╰─────────────────────────────────────────────╯
Create
Usage: cozo-migrate create [OPTIONS] ID
Create a new migration file in the migrations directory. Format: {migration_dir}/migrate_<timestamp>_<id>.py
╭─ Arguments ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ * id TEXT A short, descriptive, alphanumeric id for the migration. Only letters, numbers, and underscores are allowed. [required]│
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --yes -y │
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Apply
Usage: cozo-migrate apply [OPTIONS] [STEPS]
Apply migrations to the database. You can specify the number of steps to apply and the direction.
╭─ Arguments ────────────────────────╮
│ steps [STEPS] [default: 1] │
╰────────────────────────────────────╯
╭─ Options ──────────────────────────────────────╮
│ --down │
│ --all -a │
│ --yes -y │
│ --help Show this message and exit. │
╰────────────────────────────────────────────────╯
Show
Usage: cozo-migrate show
Show the current schema in the database.
╭─ Options ────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────╯
Status
Usage: cozo-migrate status [OPTIONS]
Display the current migration status.
╭─ Options ────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────╯
History
Usage: cozo-migrate history [OPTIONS]
Display the migration history in the database as a pretty table.
╭─ Options ────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────╯
API Usage
from cozo_migrate.api import init, apply
from pycozo import Client
migrations_dir: str = "./migrations"
# Create a new client for testing
# and initialize the schema.
client = Client()
# Initialize the migration schema
init(client)
# Apply migrations from the migration directory
apply(client, migrations_dir=migrations_dir, all_=True)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cozo_migrate-0.2.4.tar.gz
(14.3 kB
view details)
Built Distribution
File details
Details for the file cozo_migrate-0.2.4.tar.gz
.
File metadata
- Download URL: cozo_migrate-0.2.4.tar.gz
- Upload date:
- Size: 14.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.11.7 Linux/5.15.0-91-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ccb852f00bb25ff7c431dc8fa8a81e8f9f10198ad76aa34d1239d67f1613b899 |
|
MD5 | 0a8a0fc53619ea4cf8cf692a34e3abea |
|
BLAKE2b-256 | b13af66a88c50c5dd7bb7cb98d84f4d3e45bb2cfe1dba524f775f88b065b563b |
File details
Details for the file cozo_migrate-0.2.4-py3-none-any.whl
.
File metadata
- Download URL: cozo_migrate-0.2.4-py3-none-any.whl
- Upload date:
- Size: 21.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.11.7 Linux/5.15.0-91-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 518151d65c81968e42402470418f42c8580e972f0b949df6c5c499cc2b098c1b |
|
MD5 | f10bf5f7feaee2da4c7870524d16e7df |
|
BLAKE2b-256 | 26ce2dc5dc2be88ab79ed24b1412b7745c690e7f684e1665eb4feeb6300056bd |