Public
Snippet $53 authored by Owo Sugiana

Pyramid - Add user

add_user.py
import os
import sys
import transaction
from getpass import getpass
from ziggurat_foundations.models.services.user import UserService
from pyramid.paster import (
    get_appsettings,
    setup_logging,
    bootstrap,
    )
from ..models import (
    DBSession,
    Base,
    User,
    Group,
    UserGroup,
    GroupPermission,
    )


def usage(argv):
    cmd = os.path.basename(argv[0])
    print('usage: %s <config_uri> <username>\n'
          '(example: "%s development.ini sugiana")' % (cmd, cmd))
    sys.exit(1)


def ask_password(name):
    msg1 = f'Masukkan kata kunci untuk {name}: '
    msg2 = f'Ulangi kata kunci untuk {name}: '
    while True:
        pass1 = getpass(msg1)
        if not pass1:
            continue
        pass2 = getpass(msg2)
        if pass1 == pass2:
            return pass1
        print('Maaf, kata kunci tidak sama')


def main(argv=sys.argv):
    if len(argv) != 3:
        usage(argv)
    config_uri = argv[1]
    username = argv[2]
    setup_logging(config_uri)
    settings = get_appsettings(config_uri)
    bootstrap(config_uri)  # This make get_current_registry() works.
    q = DBSession.query(Group).filter_by(group_name='Admin')
    g_admin = q.first()
    q = DBSession.query(User).filter_by(user_name=username)
    user = q.first()
    password = ask_password(username)
    with transaction.manager:
        if not user:
            email = f'{username}@local'
            user = User(user_name=username, email=email)
            DBSession.add(user)
            DBSession.flush()
            ug = UserGroup(group_id=g_admin.id, user_id=user.id)
            DBSession.add(ug)
        UserService.set_password(user, password)