Handle namespacing issues in merger.

Move from using the inbuilt type names (str, dict) as module names
which is a bad thing to use it appears due to naming conflicts
in the __init__ module and reduce the chances of these conflicts
by enforcing a m_ prefix for merging modules.
This commit is contained in:
Scott Moser
2013-04-17 10:53:47 -07:00
4 changed files with 8 additions and 3 deletions

View File

@@ -26,6 +26,8 @@ NAME_MTCH = re.compile(r"(^[a-zA-Z_][A-Za-z0-9_]*)\((.*?)\)$")
LOG = logging.getLogger(__name__)
DEF_MERGE_TYPE = "list()+dict()+str()"
MERGER_PREFIX = 'm_'
MERGER_ATTR = 'Merger'
class UnknownMerger(object):
@@ -136,15 +138,18 @@ def default_mergers():
def construct(parsed_mergers):
mergers_to_be = []
for (m_name, m_ops) in parsed_mergers:
if not m_name.startswith(MERGER_PREFIX):
m_name = MERGER_PREFIX + str(m_name)
merger_locs = importer.find_module(m_name,
[__name__],
['Merger'])
[MERGER_ATTR])
if not merger_locs:
msg = "Could not find merger named '%s'" % (m_name)
msg = ("Could not find merger module named '%s' "
"with attribute '%s'") % (m_name, MERGER_ATTR)
raise ImportError(msg)
else:
mod = importer.import_module(merger_locs[0])
mod_attr = getattr(mod, 'Merger')
mod_attr = getattr(mod, MERGER_ATTR)
mergers_to_be.append((mod_attr, m_ops))
# Now form them...
mergers = []