--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pvl/verkko/db.py Wed Oct 10 21:39:54 2012 +0300
@@ -0,0 +1,60 @@
+import sqlalchemy
+from sqlalchemy import *
+
+import logging; log = logging.getLogger('pvl.verkko.db')
+
+DATABASE = 'sqlite:///var/verkko.db'
+
+# schema
+metadata = MetaData()
+
+dhcp_hosts = Table('dhcp_hosts', metadata,
+ Column('rowid', Integer, primary_key=True),
+
+ # unique
+ Column('ip', String),
+ Column('mac', String),
+ Column('gw', String),
+
+ # updated
+ Column('name', String),
+ Column('first_seen', DateTime),
+ Column('last_seen', DateTime),
+)
+
+# for ORM models
+from sqlalchemy.orm import mapper, sessionmaker
+
+Session = sessionmaker()
+
+
+class Database (object) :
+ """
+ Our underlying database.
+ """
+
+ # XXX: alias Tables in?
+ dhcp_hosts = dhcp_hosts
+
+ def __init__ (self, database=DATABASE) :
+ self.engine = create_engine(database,
+ echo = (log.isEnabledFor(logging.DEBUG)),
+ )
+ self.session = Session(bind=self.engine)
+
+ # ORM
+ def query (self, cls) :
+ return self.session.query(cls)
+
+ # SQL
+ def select (self, query) :
+ return self.engine.connect().execute(query)
+
+ def get (self, query) :
+ """
+ Fetch a single row.
+
+ XXX: returning None if not found
+ """
+
+ return self.select(query).fetchone()