| 181 | return None |
| 182 | |
| 183 | def determine_parent(self, caller, level=-1): |
| 184 | self.msgin(4, "determine_parent", caller, level) |
| 185 | if not caller or level == 0: |
| 186 | self.msgout(4, "determine_parent -> None") |
| 187 | return None |
| 188 | pname = caller.__name__ |
| 189 | if level >= 1: # relative import |
| 190 | if caller.__path__: |
| 191 | level -= 1 |
| 192 | if level == 0: |
| 193 | parent = self.modules[pname] |
| 194 | assert parent is caller |
| 195 | self.msgout(4, "determine_parent ->", parent) |
| 196 | return parent |
| 197 | if pname.count(".") < level: |
| 198 | raise ImportError("relative importpath too deep") |
| 199 | pname = ".".join(pname.split(".")[:-level]) |
| 200 | parent = self.modules[pname] |
| 201 | self.msgout(4, "determine_parent ->", parent) |
| 202 | return parent |
| 203 | if caller.__path__: |
| 204 | parent = self.modules[pname] |
| 205 | assert caller is parent |
| 206 | self.msgout(4, "determine_parent ->", parent) |
| 207 | return parent |
| 208 | if '.' in pname: |
| 209 | i = pname.rfind('.') |
| 210 | pname = pname[:i] |
| 211 | parent = self.modules[pname] |
| 212 | assert parent.__name__ == pname |
| 213 | self.msgout(4, "determine_parent ->", parent) |
| 214 | return parent |
| 215 | self.msgout(4, "determine_parent -> None") |
| 216 | return None |
| 217 | |
| 218 | def find_head_package(self, parent, name): |
| 219 | self.msgin(4, "find_head_package", parent, name) |