New submission from Aaron Meurer:

The rlcompleter module does not work if __main__ cannot be imported, even 
though it can be used without it.  For example, on the App Engine, __main__ is 
not usable.  

If one creates the example app described at 
https://developers.google.com/appengine/docs/python/gettingstartedpython27/helloworld,
 and adds "import rlcompleter" to the top of helloworld.py, you get the 
following error in the AppEngine

Traceback (most recent call last):
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py",
 line 196, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py",
 line 255, in _LoadHandler
    handler = __import__(path[0])
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 692, in Decorate
    return func(self, *args, **kwargs)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 1766, in load_module
    return self.FindAndLoadModule(submodule, fullname, search_path)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 692, in Decorate
    return func(self, *args, **kwargs)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 1630, in FindAndLoadModule
    description)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 692, in Decorate
    return func(self, *args, **kwargs)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 1577, in LoadModuleRestricted
    description)
  File "/Users/aaronmeurer/Desktop/helloworld/helloworld.py", line 2, in 
<module>
    import rlcompleter
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 692, in Decorate
    return func(self, *args, **kwargs)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 1766, in load_module
    return self.FindAndLoadModule(submodule, fullname, search_path)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 692, in Decorate
    return func(self, *args, **kwargs)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 1630, in FindAndLoadModule
    description)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 692, in Decorate
    return func(self, *args, **kwargs)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 1577, in LoadModuleRestricted
    description)
  File "/sw/lib/python2.7/rlcompleter.py", line 43, in <module>
    import __main__
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 692, in Decorate
    return func(self, *args, **kwargs)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 1766, in load_module
    return self.FindAndLoadModule(submodule, fullname, search_path)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 692, in Decorate
    return func(self, *args, **kwargs)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 1630, in FindAndLoadModule
    description)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 692, in Decorate
    return func(self, *args, **kwargs)
  File 
"/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py",
 line 1577, in LoadModuleRestricted
    description)
ImportError: Cannot re-init internal module __main__

Now, I don't really understand what the issue is here.  I don't really get how 
__main__ is supposed to work, whether this is something that might be expected 
to happen in an environment that isn't highly modded like the App Engine's.  
Probably this should at least be considered an App Engine bug. 

My point is that it's possible to use the rlcompleter module completely without 
__main__, if one passes the optional argument to Completer.  

My suggestion is to catch ImportError when importing __main__, and if it isn't 
importable, make the argument to Completer required. It should be a minimal 
code change.

----------
components: Library (Lib)
messages: 179917
nosy: Aaron.Meurer
priority: normal
severity: normal
status: open
title: rlcompleter doesn't work if __main__ can't be imported
type: behavior

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue16959>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to