work in progress: separate settings for different types of databases

This commit is contained in:
Helmut Merz 2024-03-09 08:03:53 +01:00
parent 23f9b1c384
commit fbe8d99d74
5 changed files with 52 additions and 20 deletions

View file

@ -27,10 +27,33 @@ def commit(conn):
IdType = Integer IdType = Integer
JsonType = JSON JsonType = JSON
# put something like this in code before first creating a Storage object
#engine = getEngine('postgresql+psycopg', 'testdb', 'testuser', 'secret') class StorageFactory(object):
#scopes.storage.common.engine = engine
#scopes.storage.common.Session = sessionFactory(engine) engine = Session = None
sessionFactory = sessionFactory
getEngine = getEngine
mark_changed = mark_changed
commit = commit
IdType = IdType
JsonType = JsonType
def __call__(self, schema=None):
st = Storage(schema=schema)
st.setup(self)
return st
def setup(self, config):
self.engine = self.getEngine(config.dbengine, config.dbname,
config.dbuser, config.dbpassword)
self.Session = self.sessionFactory
# you may put something like this in your code:
#scopes.storage.common.factory = StorageFactory(config)
# and then call at appropriate places:
#storage = scopes.storage.common.factory(schema=...)
class Storage(object): class Storage(object):

View file

@ -24,6 +24,7 @@ def commit(conn):
# patch `common` module # patch `common` module
import scopes.storage.common import scopes.storage.common
def init():
scopes.storage.common.IdType = BigInteger scopes.storage.common.IdType = BigInteger
scopes.storage.common.JsonType = JSONB scopes.storage.common.JsonType = JSONB
scopes.storage.common.sessionFactory = sessionFactory scopes.storage.common.sessionFactory = sessionFactory

View file

@ -2,11 +2,8 @@
"""Tests for the 'scopes.storage' package - using PostgreSQL.""" """Tests for the 'scopes.storage' package - using PostgreSQL."""
from datetime import datetime
import unittest import unittest
# PostgreSQL-specific settings
import scopes.storage.db.postgres
import config import config
config.dbengine = 'postgresql+psycopg' config.dbengine = 'postgresql+psycopg'
config.dbname = 'testdb' config.dbname = 'testdb'
@ -14,7 +11,14 @@ config.dbuser = 'testuser'
config.dbpassword = 'secret' config.dbpassword = 'secret'
config.dbschema = 'testing' config.dbschema = 'testing'
# PostgreSQL-specific settings
from scopes.storage.db import postgres
postgres.init()
import tlib import tlib
tlib.init(config)
#factory = postgres.StorageFactory(config)
#storage = factory(schema='testing')
class Test(unittest.TestCase): class Test(unittest.TestCase):

View file

@ -2,10 +2,14 @@
"""Tests for the 'scopes.storage' package.""" """Tests for the 'scopes.storage' package."""
from datetime import datetime
import unittest import unittest
import config
import tlib import tlib
tlib.init(config)
#from scopes.storage.common import StorageFactory
#factory = StorageFactory(config)
#storage = factory(schema=None)
class Test(unittest.TestCase): class Test(unittest.TestCase):

View file

@ -1,16 +1,16 @@
"""The real test implementations""" """The real test implementations"""
import config
from datetime import datetime from datetime import datetime
from scopes.storage import folder, tracking from scopes.storage import folder, tracking
import scopes.storage.common import scopes.storage.common
from scopes.storage.common import commit, Storage, getEngine, sessionFactory from scopes.storage.common import commit, Storage, getEngine, sessionFactory
def init(config):
global storage
engine = getEngine(config.dbengine, config.dbname, config.dbuser, config.dbpassword) engine = getEngine(config.dbengine, config.dbname, config.dbuser, config.dbpassword)
scopes.storage.common.engine = engine scopes.storage.common.engine = engine
scopes.storage.common.Session = sessionFactory(engine) scopes.storage.common.Session = sessionFactory(engine)
storage = Storage(schema=config.dbschema) storage = Storage(schema=config.dbschema)