10 from psycopg2.extensions
import ISOLATION_LEVEL_AUTOCOMMIT
13 class DB(shellish.Command):
14 """ Perform DB management. """ 18 def setup_args(self, parser):
19 self.add_subcommand(Create)
20 self.add_subcommand(Remove)
21 self.add_subcommand(Migrate)
22 self.add_subcommand(Rollback)
23 self.add_subcommand(Status)
28 def setup_args(self, parser):
29 self.add_argument(
'--host', env=
'DATABASE_HOST',
30 help=
"Database server host or IP.")
31 self.add_argument(
'--port', type=int, env=
'DATABASE_PORT',
32 help=
"Database server port.")
33 self.add_argument(
'--user', env=
'DATABASE_USER',
34 help=
"Database username.")
35 self.add_argument(
'--password', env=
'DATABASE_PASSWORD',
36 help=
"Database password.")
37 self.add_argument(
'--dbname', env=
'DATABASE_NAME',
38 help=
"Database name to create.")
40 def sqlexec(self, args, statement):
41 with psycopg2.connect(host=args.host, port=args.port, user=args.user,
42 password=args.password, dbname=
'postgres')
as db:
43 db.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
44 with db.cursor()
as c:
49 """ Create a new database for this stack. """ 54 raise ValueError(
"DEPRECATED COMMAND")
55 shellish.vtmlprint(
"<b>Creating database:</b> <blue>%s</blue>" %
58 self.
sqlexec(args,
'CREATE DATABASE %s;' % args.dbname)
59 except psycopg2.ProgrammingError
as e:
60 if 'already exists' in str(e):
61 shellish.vtmlprint(
"<b>WARNING:</b> <yellow>Database already exists")
67 """ Create a new database for this stack. """ 71 def setup_args(self, parser):
72 super().setup_args(parser)
73 self.add_argument(
'--force',
'-f', action=
'store_true',
74 help=
"Do not prompt for removal")
77 raise ValueError(
"DEPRECATED COMMAND")
79 confirm = input(
"Type name of db (%s) to confirm removal: " %
81 if confirm != args.dbname:
82 raise SystemExit(
"Aborted database removal")
83 shellish.vtmlprint(
"<b>WARNING:</b> <red>Removing database <b>%s</b>" 85 self.
sqlexec(args,
'DROP DATABASE %s;' % args.dbname)
92 def setup_args(self, parser):
93 self.add_argument(
'args', nargs=argparse.REMAINDER,
94 help=
'Args for phinx command.')
98 '%s/bin/phinx' % os.environ[
'COMPOSER_VENDOR_DIR'],
101 cmd.extend(args.args)
102 raise SystemExit(subprocess.call(cmd, cwd=
'/db'))
106 """ Perform DB migrations with Phinx. """ 109 phinx_command =
'migrate' 112 """ Perform DB migrations with Phinx. """ 115 phinx_command =
'rollback' 119 """ Show DB schema status from Phinx. """ 122 phinx_command =
'status'
def sqlexec(self, args, statement)