From 71f9ddb6f396ddbed730155dea6adbb83d2df841 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 24 Apr 2017 01:00:29 +0100 Subject: [PATCH] config: Abolish use of ConfigParser's DEFAULT feature ConfigParser provides no way to find out which sections a key is _really_ in: in all of its views, keys in DEFAULT appear aliased in all sections. So instead we use a COMMON section, and implement the defaulting ourselves. This involves: * Changing the cfg.get[int] calls to use cfg_search (these are the things which implictly use DEFAULT and now need to be explicit). * Changing all our explicit references to and definitions of DEFAULT options to COMMON. Signed-off-by: Ian Jackson --- README.config | 6 +++--- hippotatd | 2 +- hippotatlib/__init__.py | 17 +++++++++-------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/README.config b/README.config index 81f791d..2b58512 100644 --- a/README.config +++ b/README.config @@ -5,7 +5,7 @@ Sections [ - ] [] [] often [SERVER] - [DEFAULT] + [COMMON] Keys are looked up in that order, unless otherwise specified. is the client's virtual address. @@ -15,7 +15,7 @@ Exceptional settings: server Specifies . - Is looked up in [SERVER] and [DEFAULT] only. + Is looked up in [SERVER] and [COMMON] only. If not specified there, it is SERVER. Used by server to select the appropriate parts of the @@ -54,7 +54,7 @@ Exceptional settings: Capped settings: Values in [ LIMIT] and [LIMIT] are a cap (maximum) on - those from the other sections (including DEFAULT). + those from the other sections (including COMMON). max_batch_down Size limit for response payloads (used by server only) diff --git a/hippotatd b/hippotatd index c03ae48..0482876 100755 --- a/hippotatd +++ b/hippotatd @@ -325,7 +325,7 @@ def process_cfg(_opts, putative_servers, putative_clients): except NoOptionError: pass cfg_process_ipif(c, - [c.server, 'DEFAULT'], + [c.server, 'COMMON'], (('local','vaddr'), ('peer', 'vrelay'), ('rnets','vnetwork'))) diff --git a/hippotatlib/__init__.py b/hippotatlib/__init__.py index ce94a86..8e00c15 100644 --- a/hippotatlib/__init__.py +++ b/hippotatlib/__init__.py @@ -126,7 +126,7 @@ class LogNotBoringTwisted: #---------- default config ---------- defcfg = ''' -[DEFAULT] +[COMMON] max_batch_down = 65536 max_queue_time = 10 target_requests_outstanding = 3 @@ -389,8 +389,8 @@ def _cfg_process_putatives(): serverclient_re = regexp.compile(server_pat + r' ' + client_pat) for cs in cfg.sections(): - if cs == 'LIMIT': - # plan A "[LIMIT]" + if cs == 'LIMIT' or cs == 'COMMON': + # plan A "[LIMIT]" or "[COMMON]" continue try: @@ -492,11 +492,12 @@ def cfg_search(getter,key,sections): section = cfg_search_section(key,sections) return getter(section, key) -def cfg1get(*args, **kwargs): - return cfg.get(*args, **kwargs) +def cfg1get(section,key, getter=cfg.get,**kwargs): + section = cfg_search_section(key,[section,'COMMON']) + return getter(section,key,**kwargs) -def cfg1getint(*args, **kwargs): - return cfg.getint(*args, **kwargs) +def cfg1getint(section,key, **kwargs): + return cfg1get(section,key, getter=cfg.getint,**kwargs); def cfg_process_client_limited(cc,ss,sections,key): val = cfg_search(cfg1getint, key, sections) @@ -510,7 +511,7 @@ def cfg_process_client_common(cc,ss,cs,ci): sections = ['%s %s' % (ss,cs), cs, ss, - 'DEFAULT'] + 'COMMON'] try: pwsection = cfg_search_section('password', sections) except NoOptionError: return None -- 2.11.0