From 6c88dc5cde0cd00b85963d285166539063bcf592 Mon Sep 17 00:00:00 2001 From: Jim Fulton <jim@zope.com> Date: Thu, 30 Oct 2008 18:08:21 +0000 Subject: [PATCH] Updated DemoStorage ZConfig support. --- src/ZODB/DemoStorage.test | 49 +++++++++++++++++++++++++++++++++++++++ src/ZODB/component.xml | 3 +-- src/ZODB/config.py | 18 +++++++------- 3 files changed, 60 insertions(+), 10 deletions(-) diff --git a/src/ZODB/DemoStorage.test b/src/ZODB/DemoStorage.test index b0d7429c..537275b6 100644 --- a/src/ZODB/DemoStorage.test +++ b/src/ZODB/DemoStorage.test @@ -278,3 +278,52 @@ storage wrapped around it when necessary: >>> import os >>> os.path.exists(blobdir) False + +ZConfig support +=============== + +You can configure demo storages using ZConfig, using name, changes, +and base options: + + >>> import ZODB.config + >>> storage = ZODB.config.storageFromString(""" + ... <demostorage> + ... </demostorage> + ... """) + >>> storage.getName() + "DemoStorage('MappingStorage', 'MappingStorage')" + + >>> storage = ZODB.config.storageFromString(""" + ... <demostorage> + ... <filestorage base> + ... path base.fs + ... </filestorage> + ... + ... <filestorage changes> + ... path changes.fs + ... </filestorage> + ... </demostorage> + ... """) + >>> storage.getName() + "DemoStorage('base.fs', 'changes.fs')" + + >>> storage.close() + + >>> storage = ZODB.config.storageFromString(""" + ... <demostorage> + ... name bob + ... <filestorage> + ... path base.fs + ... </filestorage> + ... + ... <filestorage changes> + ... path changes.fs + ... </filestorage> + ... </demostorage> + ... """) + >>> storage.getName() + 'bob' + >>> storage.base.getName() + 'base.fs' + + >>> storage.close() diff --git a/src/ZODB/component.xml b/src/ZODB/component.xml index 72b70d28..705d08b7 100644 --- a/src/ZODB/component.xml +++ b/src/ZODB/component.xml @@ -175,8 +175,7 @@ <sectiontype name="demostorage" datatype=".DemoStorage" implements="ZODB.storage"> <key name="name" /> - <section type="ZODB.storage" name="*" attribute="base" /> - <section type="ZODB.storage" name="changes" attribute="changes" /> + <multisection type="ZODB.storage" name="*" attribute="factories" /> </sectiontype> diff --git a/src/ZODB/config.py b/src/ZODB/config.py index 51c5448e..a0b176f1 100644 --- a/src/ZODB/config.py +++ b/src/ZODB/config.py @@ -120,15 +120,17 @@ class MappingStorage(BaseConfig): class DemoStorage(BaseConfig): def open(self): + base = changes = None + for factory in self.config.factories: + if factory.name == 'changes': + changes = factory.open() + else: + if base is None: + base = factory.open() + else: + raise ValueError("Too many base storages defined!") + from ZODB.DemoStorage import DemoStorage - if self.config.base: - base = self.config.base.open() - else: - base = None - if self.config.changes: - changes = self.config.changes.open() - else: - changes = None return DemoStorage(self.config.name, base=base, changes=changes) class FileStorage(BaseConfig): -- 2.30.9