view pylons_app/lib/db_manage.py @ 263:c3aeb819d9ab

typo fix
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 06 Jun 2010 23:34:26 +0200
parents a4be1ebb214f
children 0d68a749db33
line wrap: on
line source

#!/usr/bin/env python
# encoding: utf-8
# database managment for hg app
# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
 
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2
# of the License or (at your opinion) any later version of the license.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA  02110-1301, USA.

"""
Created on April 10, 2010
database managment and creation for hg app
@author: marcink
"""

from os.path import dirname as dn, join as jn
import os
import sys
ROOT = dn(dn(dn(os.path.realpath(__file__))))
sys.path.append(ROOT)

from pylons_app.lib.auth import get_crypt_password
from pylons_app.model import init_model
from pylons_app.model.db import User, Permission
from pylons_app.model.meta import Session, Base
from sqlalchemy.engine import create_engine
import logging

log = logging.getLogger('db manage')
log.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter("%(asctime)s.%(msecs)03d" 
                                    " %(levelname)-5.5s [%(name)s] %(message)s"))
log.addHandler(console_handler)

class DbManage(object):
    def __init__(self, log_sql):
        self.dbname = 'hg_app.db'
        dburi = 'sqlite:////%s' % jn(ROOT, self.dbname)
        engine = create_engine(dburi, echo=log_sql) 
        init_model(engine)
        self.sa = Session()
        self.db_exists = False
    
    def check_for_db(self, override):
        log.info('checking for exisiting db')
        if os.path.isfile(jn(ROOT, self.dbname)):
            self.db_exists = True
            log.info('database exisist')
            if not override:
                raise Exception('database already exists')

    def create_tables(self, override=False):
        """
        Create a auth database
        """
        self.check_for_db(override)
        if override:
            log.info("database exisist and it's going to be destroyed")
            if self.db_exists:
                os.remove(jn(ROOT, self.dbname))
        Base.metadata.create_all(checkfirst=override)
        log.info('Created tables for %s', self.dbname)
    
    def admin_prompt(self):
        import getpass
        username = raw_input('Specify admin username:')
        password = getpass.getpass('Specify admin password:')
        self.create_user(username, password, True)
        
    def create_user(self, username, password, admin=False):
        log.info('creating administrator user %s', username)
        
        new_user = User()
        new_user.username = username
        new_user.password = get_crypt_password(password)
        new_user.username = 'Admin'
        new_user.lastname = 'Admin'
        new_user.email = 'admin@localhost'
        new_user.admin = admin
        new_user.active = True
        
        try:
            self.sa.add(new_user)
            self.sa.commit()
        except:
            self.sa.rollback()
            raise
    
    def create_permissions(self):
        #module.(access|create|change|delete)_[name]
        perms = [('admin.access_home', 'Access to admin user view'),
                 
                 ]
        
        for p in perms:
            new_perm = Permission()
            new_perm.permission_name = p[0]
            new_perm.permission_longname = p[1]
            try:
                self.sa.add(new_perm)
                self.sa.commit()
            except:
                self.sa.rollback()
                raise
        
        
        
if __name__ == '__main__':
    dbmanage = DbManage(log_sql=True)
    dbmanage.create_tables(override=True)
    dbmanage.admin_prompt()
    dbmanage.create_permissions()