From 0b39b2324bdc696bf6d27f7050292d3dddb3cca2 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Thu, 20 Jul 2017 01:30:56 +0400 Subject: [PATCH] webpyapp: les variables de server.conf sont configurables --- lib/pyulib/src/ulib/web/pages.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/lib/pyulib/src/ulib/web/pages.py b/lib/pyulib/src/ulib/web/pages.py index 31d19e0..62a5746 100644 --- a/lib/pyulib/src/ulib/web/pages.py +++ b/lib/pyulib/src/ulib/web/pages.py @@ -13,7 +13,7 @@ from ulib.base.args import get_args from ulib.base.dates import rfc2822 from ulib.base.functions import apply_args from ulib.base.words import plural -from ulib.formats import unicodeF, booleanF, integerF, floatF +from ulib.formats import unicodeF, strF, booleanF, integerF, floatF from ulib.ext import web def checked(b): @@ -307,8 +307,13 @@ class Page(object): def index(self): return self.render() class ShConfig(dict): - def __init__(self, config, **defaults): - super(ShConfig, self).__init__(**defaults) + _formats = None + def __init__(self, config, formats): + super(ShConfig, self).__init__() + self._formats = formats + for name in formats.keys(): + self[name] = None + inf = open(config, 'rb') try: s = inf.read() finally: inf.close() @@ -321,7 +326,8 @@ class ShConfig(dict): mo = self.RE_NAMEVALUE.match(part) if mo is None: continue #XXX ignorer pour le moment name, value = mo.groups() - self[name] = value + format = self._formats.get(name, unicodeF) + self[name] = format.parse(value) class Application(object): # si ce fichier existe dans basedir, alors forcer le mode développement: la @@ -329,7 +335,8 @@ class Application(object): DEVEL_SF = '.devel' # nom du fichier de configuration à charger automatiquement à partir de # basedir. pour désactiver cette fonctionnalité, utiliser la valeur None - CONFIG = 'server.conf' + CONFIG_FILE = 'server.conf' + CONFIG_VARS = dict(HOST=strF, PORT=integerF, DEBUG=booleanF) # configuration par défaut HOST = '0.0.0.0' PORT = 12345 @@ -371,14 +378,14 @@ class Application(object): devel = path.exists(path.join(self.basedir, self.DEVEL_SF)) if devel: einfo("Mode developpement activé") - if self.CONFIG is not None: - config = path.join(self.basedir, self.CONFIG) + if self.CONFIG_FILE is not None: + config = path.join(self.basedir, self.CONFIG_FILE) if path.exists(config): - c = ShConfig(config, HOST=None, PORT=None, DEBUG=None) - if host is None and not devel: host = c['HOST'] - if port is None: port = integerF.parse((c['PORT'])) - if debug is None: debug = booleanF.parse(c['DEBUG']) - if debug is None and devel: debug = True + c = ShConfig(config, self.CONFIG_VARS) + for name, value in c.items(): + if devel and name == 'HOST': continue + if devel and name == 'DEBUG' and value is None: value = True + if value is not None: setattr(self, name, value) if host is not None: self.HOST = host if port is not None: self.PORT = port