diff pylons_app/lib/db_manage.py @ 226:c6526b7531e9

rewritten db manage script to use sqlalchemy. Fixed sqlalchemy models to more generic.
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 26 May 2010 23:55:20 +0200
parents 911dab498eb2
children c49ebe560af2
line wrap: on
line diff
--- a/pylons_app/lib/db_manage.py	Wed May 26 00:20:03 2010 +0200
+++ b/pylons_app/lib/db_manage.py	Wed May 26 23:55:20 2010 +0200
@@ -1,72 +1,63 @@
 import logging
-import sqlite3 
-
+from os.path import dirname as dn
+from sqlalchemy.engine import create_engine
 import os
-import crypt
-from os.path import dirname as dn
-ROOT = dn(dn(dn(os.path.realpath(__file__))))
-logging.basicConfig(level=logging.DEBUG)
+from pylons_app.model.db import Users
+from pylons_app.model.meta import Session
 
-def get_sqlite_conn_cur():
-    conn = sqlite3.connect(os.path.join(ROOT, 'hg_app.db'))
-    cur = conn.cursor()
-    return conn, cur
+from pylons_app.lib.auth import get_crypt_password
+from pylons_app.model import init_model
 
-def check_for_db(override):
-    if not override:
-        if os.path.isfile(os.path.join(ROOT, 'hg_app.db')):
-            raise Exception('database already exists')
+ROOT = dn(dn(dn(os.path.realpath(__file__))))
+logging.basicConfig(level=logging.DEBUG, format='%(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s')
+from pylons_app.model.meta import Base
 
-def create_tables(override=False):
-    """
-    Create a auth database
-    """
-    check_for_db(override)
-    conn, cur = get_sqlite_conn_cur()
-    try:
-        logging.info('creating table %s', 'users')
-        cur.execute("""DROP TABLE IF EXISTS users """)
-        cur.execute("""CREATE TABLE users
-                        (user_id INTEGER PRIMARY KEY AUTOINCREMENT, 
-                         username TEXT, 
-                         password TEXT,
-                         active INTEGER,
-                         admin INTEGER)""")
-        logging.info('creating table %s', 'user_logs')
-        cur.execute("""DROP TABLE IF EXISTS user_logs """)
-        cur.execute("""CREATE TABLE user_logs
-                        (id INTEGER PRIMARY KEY AUTOINCREMENT,
-                            user_id INTEGER,
-                            repository TEXT,
-                            action TEXT, 
-                            action_date DATETIME)""")
-        conn.commit()
-    except:
-        conn.rollback()
-        raise
+class DbManage(object):
+    def __init__(self):
+        dburi = 'sqlite:////%s' % os.path.join(ROOT, 'hg_app.db')
+        engine = create_engine(dburi) 
+        init_model(engine)
+        self.sa = Session()
+    
+    def check_for_db(self, override):
+        if not override:
+            if os.path.isfile(os.path.join(ROOT, 'hg_app.db')):
+                raise Exception('database already exists')
+    
+    def create_tables(self, override=False):
+        """
+        Create a auth database
+        """
+        self.check_for_db(override)
+                
+        Base.metadata.create_all(checkfirst=override)
+        logging.info('Created tables')
     
-    cur.close()
-
-def admin_prompt():
-    import getpass
-    username = raw_input('give username:')
-    password = getpass.getpass('Specify admin password:')
-    create_user(username, password, True)
-    
-def create_user(username, password, admin=False):
-    conn, cur = get_sqlite_conn_cur()    
-    password_crypt = crypt.crypt(password, '6a')
-    logging.info('creating user %s', username)
-    try:
-        cur.execute("""INSERT INTO users values (?,?,?,?,?) """,
-                    (None, username, password_crypt, 1, admin))     
-        conn.commit()
-    except:
-        conn.rollback()
-        raise
+    def admin_prompt(self):
+        import getpass
+        username = raw_input('give admin username:')
+        password = getpass.getpass('Specify admin password:')
+        self.create_user(username, password, True)
+        
+    def create_user(self, username, password, admin=False):
+        logging.info('creating user %s', username)
+        
+        new_user = Users()
+        new_user.username = username
+        new_user.password = get_crypt_password(password)
+        new_user.admin = admin
+        new_user.active = True
+        
+        try:
+            self.sa.add(new_user)
+            self.sa.commit()
+        except:
+            self.sa.rollback()
+            raise
     
 if __name__ == '__main__':
-    create_tables(True)
-    admin_prompt()  
+    dbmanage = DbManage()
+    dbmanage.create_tables(override=True)
+    dbmanage.admin_prompt()