def configure_dogpile_cache(settings): # This is somewhat inspired by pyramid_dogpile_cache.includeme() # and build_dogpile_region_from_dict(). _parse_dogpile_cache_settings(settings) _, region_settings = build_dogpile_region_settings_from_settings(settings) for name, settings in region_settings.items(): # XXX Type conversion for all sorts of settings is woefully incomplete. settings['expiration_time'] = int(settings['expiration_time']) settings.setdefault( 'arguments.memcached_expire_time', settings['expiration_time'] + int(settings.get( 'memcache_expire_time_interval', 30))) region = get_region(name) # XXX kludgy: Remove any existing backend configuration, so # configure_dogpile_cache() may be called multiple times (which # should only happen in tests). region.__dict__.pop('backend', None) region.configure_from_config(settings, prefix='') # Since get_region() returns an unconfigured region for *any* name you # pass in, we make sure that all used regions are configured now. for region in CACHE_REGIONS.values(): if 'backend' not in region.__dict__: raise dogpile.cache.exception.RegionNotConfigured( 'Region %r used in python code, but not configured' % region.name)
def test_build_dogpile_region_settings_from_settings(self): from pyramid_dogpile_cache import build_dogpile_region_settings_from_settings default_settings, region_settings_dict = \ build_dogpile_region_settings_from_settings({ 'dogpile_cache.backend': 'memory', 'dogpile_cache.expire': 10, }) self.assertEqual(default_settings['backend'], 'memory') self.assertEqual(default_settings['expire'], 10) self.assertEqual(len(region_settings_dict), 0) default_settings, region_settings_dict = \ build_dogpile_region_settings_from_settings({ 'dogpile_cache.regions': 'aaa, bbb', 'dogpile_cache.backend': 'memory', 'dogpile_cache.expire': 10, }) self.assertEqual(default_settings['backend'], 'memory') self.assertEqual(default_settings['expire'], 10) self.assertEqual(len(region_settings_dict), 2) self.assertEqual(region_settings_dict['aaa']['backend'], 'memory') self.assertEqual(region_settings_dict['aaa']['expire'], 10) self.assertEqual(region_settings_dict['bbb']['backend'], 'memory') self.assertEqual(region_settings_dict['bbb']['expire'], 10) default_settings, region_settings_dict = \ build_dogpile_region_settings_from_settings({ 'dogpile_cache.regions': 'aaa', 'dogpile_cache.backend': 'memory', 'dogpile_cache.expire': 10, 'dogpile_cache.bbb.foo': 'foo', 'dogpile_cache.bbb.foo.bar': 'foo.bar', 'dogpile_cache.ccc.backend': 'file', }) self.assertEqual(default_settings['backend'], 'memory') self.assertEqual(default_settings['expire'], 10) self.assertEqual(len(region_settings_dict), 3) self.assertEqual(region_settings_dict['aaa']['backend'], 'memory') self.assertEqual(region_settings_dict['aaa']['expire'], 10) self.assertEqual(region_settings_dict['bbb']['backend'], 'memory') self.assertEqual(region_settings_dict['bbb']['expire'], 10) self.assertEqual(region_settings_dict['bbb']['foo'], 'foo') self.assertEqual(region_settings_dict['bbb']['foo.bar'], 'foo.bar') self.assertEqual(region_settings_dict['ccc']['backend'], 'file') self.assertEqual(region_settings_dict['ccc']['expire'], 10)