pvl.verkko.db: support command-line parser/apply
authorTero Marttila <terom@paivola.fi>
Fri, 05 Jul 2013 00:59:36 +0300
changeset 237 3534d31282b3
parent 236 7b37f84b17cc
child 238 9702bfb124f6
pvl.verkko.db: support command-line parser/apply
pvl/verkko/db.py
--- a/pvl/verkko/db.py	Thu Jul 04 03:49:55 2013 +0300
+++ b/pvl/verkko/db.py	Fri Jul 05 00:59:36 2013 +0300
@@ -48,6 +48,23 @@
     Column('next',          String,     nullable=True),
 )
 
+wlan_sta = Table('wlan_sta', metadata,
+    Column('id',            Integer,    primary_key=True),
+    
+    Column('ap',            String,     nullable=False),
+    Column('wlan',          String,     nullable=False),
+    Column('sta',           String,     nullable=False),
+    
+    # updated
+    Column('first_seen',    DateTime,   nullable=False),
+    Column('last_seen',     DateTime,   nullable=False),
+
+    Column('count',         Integer,    default=1),
+    Column('msg',           String,     nullable=True),
+           
+    UniqueConstraint('ap', 'wlan', 'sta'),
+)
+
 # for ORM models
 from sqlalchemy.orm import mapper, sessionmaker
 
@@ -116,3 +133,35 @@
         
         return result.rowcount
 
+# command-line
+import optparse
+import sys
+
+def parser (parser, table=None) :
+    parser.set_defaults(
+            create_table    = table,
+    )
+    parser = optparse.OptionGroup(parser, "Verkko Database")
+    parser.add_option('--database',             metavar='URI',
+            help="Connect to given database")
+
+    if table is not None :
+        parser.add_option('--create',               action='store_true',
+                help="Initialize database")
+    
+    return parser
+
+def apply (options, required=True) :
+    # db
+    if not options.database and required :
+        log.error("No database given")
+        sys.exit(1)
+
+    log.info("Open up database: %s", options.database)
+    db = Database(options.database)
+
+    if options.create_table is not None and options.create :
+        log.info("Creating database tables: %s", options.create_table)
+        options.create_table.create(db.engine, checkfirst=True)
+
+    return db