various tweaks around using records; the client-side is still broken
[sfa.git] / sfa / storage / alchemy.py
index dff6151..e83a0f1 100644 (file)
@@ -1,25 +1,23 @@
-from sqlalchemy import create_engine
+from types import StringTypes
 
+from sqlalchemy import create_engine
 from sqlalchemy.orm import sessionmaker
-Session=sessionmaker ()
-session=Session(bind=engine)
-#session.configure(bind=engine)
 
-from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy import Column, Integer, String
 from sqlalchemy.orm import relationship, backref
 from sqlalchemy import ForeignKey
 
-from sfa.util.sfalogger import logger
+from sfa.util.sfalogging import logger
 
-Base=declarative_base()
+# this module is designed to be loaded when the configured db server is reachable
+# OTOH persistentobjs can be loaded from anywhere including the client-side
 
-class DB:
+class Alchemy:
 
     def __init__ (self, config):
         dbname="sfa"
         # will be created lazily on-demand
-        self.session = None
+        self._session = None
         # the former PostgreSQL.py used the psycopg2 directly and was doing
         #self.connection.set_client_encoding("UNICODE")
         # it's unclear how to achieve this in sqlalchemy, nor if it's needed at all
@@ -32,7 +30,7 @@ class DB:
         # the TCP fallback method
         tcp_desc = "postgresql+psycopg2://%s:%s@%s:%s/%s"%\
             (config.SFA_DB_USER,config.SFA_DB_PASSWORD,config.SFA_DB_HOST,config.SFA_DB_PORT,dbname)
-        for desc in [ unix_desc, tcp_desc ] :
+        for engine_desc in [ unix_desc, tcp_desc ] :
             try:
                 self.engine = create_engine (engine_desc)
                 self.check()
@@ -50,14 +48,6 @@ class DB:
     def check (self):
         self.engine.execute ("select 1").scalar()
 
-    # create schema
-    def create_schema (self):
-        return Base.metadata.create_all(self.engine)
-
-    # does a complete wipe of the schema, use with care
-    def drop_schema (self):
-        return Base.metadata.drop_all(self.engine)
-
     def session (self):
         if self._session is None:
             Session=sessionmaker ()
@@ -85,3 +75,11 @@ class DB:
     def remove (self, record):
         del record
         self.commit()
+
+####################
+from sfa.util.config import Config
+
+alchemy=Alchemy (Config())
+engine=alchemy.engine
+dbsession=alchemy.session()
+