Overhaul initdb command a bit.

Not sure it's done yet, need to commit for further testing.
This commit is contained in:
Lance Edgar 2015-11-15 18:53:48 -06:00
parent 1302e9e207
commit e7e5908615

View file

@ -34,6 +34,7 @@ import argparse
import datetime import datetime
import socket import socket
import shutil import shutil
import subprocess
import warnings import warnings
import logging import logging
from getpass import getpass from getpass import getpass
@ -849,18 +850,31 @@ class InitializeDatabase(Subcommand):
description = "Create initial tables in a database." description = "Create initial tables in a database."
def add_parser_args(self, parser): def add_parser_args(self, parser):
parser.add_argument('url', metavar='URL', parser.add_argument('--with-admin', action='store_true',
help="Database engine URL") help="Create an 'admin' user account if none exists.")
def run(self, args): def run(self, args):
from sqlalchemy import create_engine
from alembic.util import obfuscate_url_pw from alembic.util import obfuscate_url_pw
from rattail.db import model from rattail.db import model, auth
engine = create_engine(args.url) # Bring database current per Alembic migrations.
model.Base.metadata.create_all(engine) config_path = os.path.abspath(self.config.files_read[-1])
print("Created initial tables for database:") subprocess.call(['{0}/bin/alembic'.format(sys.prefix), '--config', config_path, 'upgrade', 'heads'])
print(" {0}".format(obfuscate_url_pw(engine.url)))
# Maybe create 'admin' user with 'admin' password.
if args.with_admin:
session = self.db_session_factory()
if not session.query(model.User).filter_by(username='admin').count():
admin = model.User(username='admin')
auth.set_user_password(admin, 'admin')
admin.roles.append(auth.administrator_role(session))
session.add(admin)
self.stdout.write("[rattail] created 'admin' user with password 'admin'\n")
session.commit()
session.close()
self.stdout.write("[rattail] initialized schema for database: {0}\n".format(
obfuscate_url(self.config.rattail_engine.url)))
class LoadHostDataCommand(Subcommand): class LoadHostDataCommand(Subcommand):