diff roundup/test/memorydb.py @ 6365:7f00fc5958ca

Make memorydb persistent across re-open This allows memorydb to be used for more tests, in particular re-opening with another user for checking permissions.
author Ralf Schlatterbeck <rsc@runtux.com>
date Wed, 31 Mar 2021 12:49:28 +0200
parents 58817c3bf471
children 087cae2fbcea
line wrap: on
line diff
--- a/roundup/test/memorydb.py	Tue Mar 30 21:04:53 2021 -0400
+++ b/roundup/test/memorydb.py	Wed Mar 31 12:49:28 2021 +0200
@@ -38,6 +38,9 @@
     return config
 
 def create(journaltag, create=True, debug=False, prefix=default_prefix):
+    # "Nuke" in-memory db
+    db_nuke('')
+
     db = Database(new_config(debug), journaltag)
 
     # load standard schema
@@ -214,12 +217,12 @@
 
     dbtype = "memorydb"
 
+    # Make it a little more persistent across re-open
+    memdb = {}
+
     def __init__(self, config, journaltag=None):
         self.config, self.journaltag = config, journaltag
         self.classes = {}
-        self.items = {}
-        self.ids = {}
-        self.journals = {}
         self.files = {}
         self.tx_files = {}
         self.security = security.Security(self)
@@ -236,6 +239,10 @@
         self.destroyednodes = {}# keep track of the destroyed nodes by class
         self.transactions = []
         self.tx_Source = None
+        # persistence across re-open
+        self.items = self.__class__.memdb.get('items', {})
+        self.ids = self.__class__.memdb.get('ids', {})
+        self.journals = self.__class__.memdb.get('journals', {})
 
     def filename(self, classname, nodeid, property=None, create=0):
         shutil.copyfile(__file__, __file__+'.dummy')
@@ -290,6 +297,10 @@
         # kill the schema too
         self.classes = {}
         # just keep the .items
+        # persistence across re-open
+        self.__class__.memdb['items'] = self.items
+        self.__class__.memdb['ids'] = self.ids
+        self.__class__.memdb['journals'] = self.journals
 
     #
     # Classes
@@ -472,4 +483,13 @@
             properties['superseder'] = hyperdb.Multilink(classname)
         Class.__init__(self, db, classname, **properties)
 
+# Methods to check for existence and nuke the db
+# We don't support multiple named databases
+
+def db_exists(name):
+    return bool(Database.memdb)
+
+def db_nuke(name):
+    Database.memdb = {}
+
 # vim: set et sts=4 sw=4 :

Roundup Issue Tracker: http://roundup-tracker.org/