annotate pylons_app/lib/db_manage.py @ 171:52bbeb1e813f

Added universal cache invalidator for two cached functions. added invalidation when repository was added or deleted, and another invalidation when there was a mercurial command involved.
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 21 May 2010 02:44:40 +0200
parents 911dab498eb2
children c6526b7531e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
1 import logging
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
2 import sqlite3
66
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
3
59
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
4 import os
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
5 import crypt
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
6 from os.path import dirname as dn
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
7 ROOT = dn(dn(dn(os.path.realpath(__file__))))
66
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
8 logging.basicConfig(level=logging.DEBUG)
59
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
9
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
10 def get_sqlite_conn_cur():
66
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
11 conn = sqlite3.connect(os.path.join(ROOT, 'hg_app.db'))
59
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
12 cur = conn.cursor()
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
13 return conn, cur
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
14
88
911dab498eb2 Updated db manage
Marcin Kuzminski <marcin@python-works.com>
parents: 67
diff changeset
15 def check_for_db(override):
911dab498eb2 Updated db manage
Marcin Kuzminski <marcin@python-works.com>
parents: 67
diff changeset
16 if not override:
911dab498eb2 Updated db manage
Marcin Kuzminski <marcin@python-works.com>
parents: 67
diff changeset
17 if os.path.isfile(os.path.join(ROOT, 'hg_app.db')):
911dab498eb2 Updated db manage
Marcin Kuzminski <marcin@python-works.com>
parents: 67
diff changeset
18 raise Exception('database already exists')
66
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
19
88
911dab498eb2 Updated db manage
Marcin Kuzminski <marcin@python-works.com>
parents: 67
diff changeset
20 def create_tables(override=False):
59
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
21 """
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
22 Create a auth database
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
23 """
88
911dab498eb2 Updated db manage
Marcin Kuzminski <marcin@python-works.com>
parents: 67
diff changeset
24 check_for_db(override)
59
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
25 conn, cur = get_sqlite_conn_cur()
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
26 try:
66
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
27 logging.info('creating table %s', 'users')
59
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
28 cur.execute("""DROP TABLE IF EXISTS users """)
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
29 cur.execute("""CREATE TABLE users
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
30 (user_id INTEGER PRIMARY KEY AUTOINCREMENT,
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
31 username TEXT,
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
32 password TEXT,
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
33 active INTEGER,
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
34 admin INTEGER)""")
67
ffd9ff6e2f33 fixed name bug in create db script
Marcin Kuzminski <marcin@python-blog.com>
parents: 66
diff changeset
35 logging.info('creating table %s', 'user_logs')
ffd9ff6e2f33 fixed name bug in create db script
Marcin Kuzminski <marcin@python-blog.com>
parents: 66
diff changeset
36 cur.execute("""DROP TABLE IF EXISTS user_logs """)
ffd9ff6e2f33 fixed name bug in create db script
Marcin Kuzminski <marcin@python-blog.com>
parents: 66
diff changeset
37 cur.execute("""CREATE TABLE user_logs
59
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
38 (id INTEGER PRIMARY KEY AUTOINCREMENT,
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
39 user_id INTEGER,
66
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
40 repository TEXT,
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
41 action TEXT,
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
42 action_date DATETIME)""")
59
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
43 conn.commit()
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
44 except:
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
45 conn.rollback()
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
46 raise
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
47
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
48 cur.close()
66
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
49
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
50 def admin_prompt():
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
51 import getpass
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
52 username = raw_input('give username:')
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
53 password = getpass.getpass('Specify admin password:')
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
54 create_user(username, password, True)
59
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
55
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
56 def create_user(username, password, admin=False):
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
57 conn, cur = get_sqlite_conn_cur()
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
58 password_crypt = crypt.crypt(password, '6a')
66
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
59 logging.info('creating user %s', username)
59
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
60 try:
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
61 cur.execute("""INSERT INTO users values (?,?,?,?,?) """,
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
62 (None, username, password_crypt, 1, admin))
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
63 conn.commit()
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
64 except:
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
65 conn.rollback()
736078908f37 added db_manage script
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
66 raise
66
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
67
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
68 if __name__ == '__main__':
88
911dab498eb2 Updated db manage
Marcin Kuzminski <marcin@python-works.com>
parents: 67
diff changeset
69 create_tables(True)
66
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
70 admin_prompt()
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
71
163464441e0d updated db manage script for creating interactive admin account and db
Marcin Kuzminski <marcin@python-blog.com>
parents: 59
diff changeset
72