Factor-out common code for helper classes.

This commit is contained in:
Raymond Hettinger 2011-02-22 01:55:36 +00:00
parent 16fe75e4e0
commit c9423109f5
2 changed files with 4 additions and 20 deletions

View File

@ -633,7 +633,7 @@ class Counter(dict):
########################################################################
### ChainMap (helper for configparser)
### ChainMap (helper for configparser and string.Template)
########################################################################
class _ChainMap(MutableMapping):

View File

@ -46,23 +46,7 @@ def capwords(s, sep=None):
####################################################################
import re as _re
class _multimap:
"""Helper class for combining multiple mappings.
Used by .{safe_,}substitute() to combine the mapping and keyword
arguments.
"""
def __init__(self, primary, secondary):
self._primary = primary
self._secondary = secondary
def __getitem__(self, key):
try:
return self._primary[key]
except KeyError:
return self._secondary[key]
from collections import _ChainMap
class _TemplateMetaclass(type):
pattern = r"""
@ -116,7 +100,7 @@ class Template(metaclass=_TemplateMetaclass):
if not args:
mapping = kws
elif kws:
mapping = _multimap(kws, args[0])
mapping = _ChainMap(kws, args[0])
else:
mapping = args[0]
# Helper function for .sub()
@ -142,7 +126,7 @@ class Template(metaclass=_TemplateMetaclass):
if not args:
mapping = kws
elif kws:
mapping = _multimap(kws, args[0])
mapping = _ChainMap(kws, args[0])
else:
mapping = args[0]
# Helper function for .sub()