def load(_, fd):
''' Read from file object to enable reading from arbitrary data source and position.
returns global config
'''
title = None; section = dd() # this dict initializes any missing value with an empty list TODO make ordered default dict, but couldn't find any compatible solution
for line in xreadlines(fd):
line = line.strip() # just in case of incorrect formatting
if line.startswith('['): # new section detected: first store last section
if len(section) > 0: _.sections[title] = section # OLD: and title is not None
title = line[1:-1]; section = dd() # default-dictionary of (standard) type map
elif line != '':
try:
idx = line.index('=') # try to parse
key, value = line[:idx], line[idx+1:] # HINT: was .lower() and .rstrip(), but when reading/writing only via this script's API there's no need for that
if key in [TAG, FROM] and value != '':
section[intern(key)].append(intern(value)) # this dict allows several values per key
elif key in [IGNORE, SKIP] and key not in section:
section[intern(key)] = None # only keep key instead of default-appending empty string
elif title == "" and key in [SKIPD, IGNORED, GLOBAL] and value != '':
section[intern(key)].append(intern(value)) # global dir skip or ignore pattern, or global config setting
else: warn("Encountered illegal key <%s>. Skipping entry." % key)
except: warn("Key with no value for illegal key %s" % repr(line))
else: break # an empty line terminates file
if len(section) > 0: _.sections[title] = section # last store OLD: and title is not None
return { k.lower(): v if v.lower() not in ("true", "false") else v.lower().strip() == "true" for k, v in (wrapExc(lambda: kv.split("=")[:2], lambda: (kv, None)) for kv in _.sections.get("", {}).get(GLOBAL, [])) } # return global config map for convenience
评论列表
文章目录