100 def __init__(self, modulename, root=None):
101 """
102 @param modulename: name of the module
103 @param root: name of the root modules (that pointing to the root C++
104 namespace), None is ewuivalent to pass modulename as root
105 """
106 self._log = logging.getLogger(modulename)
107 self._log.debug("initializing module %r (with root %r)", modulename, root)
108
109 self.__name__ = modulename
110 self.__loader__ = None
111 self._root = root or modulename
112 assert (not root) or modulename.startswith(
113 root + "."
114 ), "modulename should be (indirect submodule of root)"
115
116 self._namespace = modulename[len(root) + 1 :].replace(".", "::") if root else ""
117 self._log.debug("%r mapping namespace %r", modulename, self._namespace or "::")
118
119 self._namespaces, self._classes = self._getEntries()
120 self._alt_names = {}
121 for cname in self._classes:
122 alt_name = _normalize_cpp_type_name(cname)
123 if alt_name != cname:
124 self._alt_names[alt_name] = cname
125 if " " in cname:
126 self._alt_names[cname.replace(" ", "")] = cname
127 self.__all__ = list(
128 self._namespaces.union(self._classes).union(self._alt_names)
129 )
130
131 sys.modules[modulename] = self
132
133 for submodule in self._namespaces:
134 setattr(
135 self,
136 submodule,
137 ConfigurablesDB(".".join([self.__name__, submodule]), self._root),
138 )
139