Overhaul initdb
command a bit.
Not sure it's done yet, need to commit for further testing.
This commit is contained in:
parent
1302e9e207
commit
e7e5908615
|
@ -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):
|
||||||
|
|
Loading…
Reference in a new issue