/
config.py
70 lines (50 loc) · 2 KB
/
config.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import logging, json, base64, time
from model import Site, Settings
from google.appengine.ext import ndb
from google.appengine.api import memcache, namespace_manager
default_settings = {
'cache_enabled': False,
'editors': '',
'sender': 'alex.prudencio@gmail.com',
'webadmin': 'alex@primefactorsolutions.com',
'mapping': '{}'
}
def ensure_global_settings():
current_namespace = namespace_manager.get_namespace()
namespace_manager.set_namespace('global')
settings = ndb.Key(Settings, '_settings').get()
settings_updated = False
if not settings:
logging.debug('Settings not found. Init.')
settings = Settings(id='_settings')
for s, v in default_settings.items():
if not hasattr(settings, s):
setattr(settings, s, v)
settings_updated = True
if settings_updated:
settings.put()
namespace_manager.set_namespace(current_namespace)
logging.info('Running with settings %s', settings)
ensure_global_settings()
_last_config_refreshes = {}
class SettingsProxy(object):
def __init__(self):
self.settings = None
def __getattr__(self, name):
namespace = namespace_manager.get_namespace()
now = time.time()
if not self.settings or now >= _last_config_refreshes.get(namespace, now - 300) + 300:
self.settings = ndb.Key(Settings, '_settings').get(use_cache=False, use_memcache=False)
if not self.settings:
self.settings = Settings(id='_settings')
settings_updated = False
for s, v in default_settings.items():
if not hasattr(self.settings, s):
setattr(self.settings, s, v)
settings_updated = True
if settings_updated:
self.settings.put()
logging.info('Settings refreshed.')
_last_config_refreshes[namespace] = now
return getattr(self.settings, name)
settings = SettingsProxy()