Skip to content

Commit

Permalink
feat: add database migrations up to 1.2.0
Browse files Browse the repository at this point in the history
including database migrations for 0.6.7 (None) -> 0.6.8, 0.6.8 -> 1.0.0, 1.0.0 -> 1.2.0
  • Loading branch information
kentbull committed Oct 8, 2024
1 parent 41ce1ad commit 7a04d15
Show file tree
Hide file tree
Showing 13 changed files with 691 additions and 170 deletions.
163 changes: 0 additions & 163 deletions src/keri/app/cli/commands/migrate.py

This file was deleted.

Empty file.
66 changes: 66 additions & 0 deletions src/keri/app/cli/commands/migrate/list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# -*- encoding: utf-8 -*-
"""
keri.kli.commands module
"""
import argparse
import logging

from keri import help
from hio.base import doing
from prettytable import PrettyTable

from keri.app.cli.common import existing

logger = help.ogler.getLogger()
help.ogler.resetLevel(level=logging.DEBUG)


def handler(args):
"""
Launch KERI database initialization
Args:
args(Namespace): arguments object from command line
"""
lister = ListDoer(args)
return [lister]


parser = argparse.ArgumentParser(description='Cleans and migrates a database and keystore')
parser.set_defaults(handler=handler,
transferable=True)

# Parameters for basic structure of database
parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
required=False, default="")
parser.add_argument('--temp', '-t', help='create a temporary keystore, used for testing', default=False)

# Parameters for Manager creation
# passcode => bran
parser.add_argument('--passcode', '-p', help='21 character encryption passcode for keystore (is not saved)',
dest="bran", default=None)


class ListDoer(doing.Doer):

def __init__(self, args):
self.args = args
super(ListDoer, self).__init__()

def recur(self, tyme):
tab = PrettyTable()
tab.field_names = ["Num", "Name", "Date Completed"]
tab.align["Name"] = "l"

hby = existing.setupHby(name=self.args.name, base=self.args.base,
bran=self.args.bran if self.args.bran else None, temp=self.args.temp)

for idx, (name, dater) in enumerate(hby.db.complete()):
print(name, dater)
date = dater.datetime.strftime("%Y-%m-%d %H:%M") if dater is not None else "Not Run"
tab.add_row((f"{idx + 1}", f"{name}", date))

print(tab)
return True
72 changes: 72 additions & 0 deletions src/keri/app/cli/commands/migrate/run.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# -*- encoding: utf-8 -*-
"""
keri.kli.commands module
"""
import argparse
import logging

import keri
from keri import help
from hio.base import doing
from keri import kering

from keri.app.cli.common import existing
from keri.db import basing
from keri.vdr import viring

logger = help.ogler.getLogger("keri")
help.ogler.resetLevel(level=logging.DEBUG)

def handler(args):
"""
Launch KERI database initialization
Args:
args(Namespace): arguments object from command line
"""
clean = MigrateDoer(args)
return [clean]


parser = argparse.ArgumentParser(description='Cleans and migrates a database and keystore')
parser.set_defaults(handler=handler,
transferable=True)

# Parameters for basic structure of database
parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
required=False, default="")
parser.add_argument('--temp', '-t', help='create a temporary keystore, used for testing', default=False)

# Parameters for Manager creation
# passcode => bran
parser.add_argument('--passcode', '-p', help='21 character encryption passcode for keystore (is not saved)',
dest="bran", default=None)


class MigrateDoer(doing.Doer):

def __init__(self, args):
self.args = args
super(MigrateDoer, self).__init__()

def recur(self, tyme):
name=self.args.name
base=self.args.base
temp=self.args.temp
hab_db = basing.Baser(name=name,
base=base,
temp=temp,
reopen=False)

try:
hab_db.reopen()
except kering.DatabaseError as ex:
pass

logger.info("Migrating...")
hab_db.migrate(name=name, base=base, temp=temp)
logger.info("Finished")

return True
60 changes: 60 additions & 0 deletions src/keri/app/cli/commands/migrate/show.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# -*- encoding: utf-8 -*-
"""
keri.kli.commands module
"""
import argparse

from hio import help
from hio.base import doing

from keri.app.cli.common import existing

logger = help.ogler.getLogger()


def handler(args):
"""
Launch KERI database initialization
Args:
args(Namespace): arguments object from command line
"""
clean = CleanDoer(args)
return [clean]


parser = argparse.ArgumentParser(description='Cleans and migrates a database and keystore')
parser.set_defaults(handler=handler,
transferable=True)

# Parameters for basic structure of database
parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
required=False, default="")
parser.add_argument('--temp', '-t', help='create a temporary keystore, used for testing', default=False)
parser.add_argument('--migration', '-m', help='migration name', required=True)


# Parameters for Manager creation
# passcode => bran
parser.add_argument('--passcode', '-p', help='21 character encryption passcode for keystore (is not saved)',
dest="bran", default=None)


class CleanDoer(doing.Doer):

def __init__(self, args):
self.args = args
super(CleanDoer, self).__init__()

def recur(self, tyme):
hby = existing.setupHby(name=self.args.name, base=self.args.base,
bran=self.args.bran, temp=self.args.temp)

[(name, dater)] = hby.db.complete(name=self.args.migration)
date = dater.datetime.strftime("%Y-%m-%d %H:%M") if dater is not None else "Not Run"

print(f"{self.args.migration} -> {date}")

return True
Loading

0 comments on commit 7a04d15

Please sign in to comment.