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