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 socket
import shutil
import subprocess
import warnings
import logging
from getpass import getpass
@ -849,18 +850,31 @@ class InitializeDatabase(Subcommand):
description = "Create initial tables in a database."
def add_parser_args(self, parser):
parser.add_argument('url', metavar='URL',
help="Database engine URL")
parser.add_argument('--with-admin', action='store_true',
help="Create an 'admin' user account if none exists.")
def run(self, args):
from sqlalchemy import create_engine
from alembic.util import obfuscate_url_pw
from rattail.db import model
from rattail.db import model, auth
engine = create_engine(args.url)
model.Base.metadata.create_all(engine)
print("Created initial tables for database:")
print(" {0}".format(obfuscate_url_pw(engine.url)))
# Bring database current per Alembic migrations.
config_path = os.path.abspath(self.config.files_read[-1])
subprocess.call(['{0}/bin/alembic'.format(sys.prefix), '--config', config_path, 'upgrade', 'heads'])
# 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):