Martin von Löwis committed d1669af

Patch #443337: Fix incompatibilities in imputil's behavior.

Comments (0)

Files changed (1)

         if importer:
             return importer._finish_import(top_module, parts[1:], fromlist)
+        # Grrr, some people "import os.path"
+        if len(parts) == 2 and hasattr(top_module, parts[1]):
+            return top_module
         # If the importer does not exist, then we have to bail. A missing
         # importer means that something else imported the module, and we have
         # no knowledge of how to get sub-modules out of the thing.
             exec code in module.__dict__
         # fetch from sys.modules instead of returning module directly.
-        return sys.modules[fqname]
+        # also make module's __name__ agree with fqname, in case
+        # the "exec code in module.__dict__" played games on us.
+        module = sys.modules[fqname]
+        module.__name__ = fqname
+        return module
     def _load_tail(self, m, parts):
         """Import the rest of the modules, down from the top-level module.
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.