FakeModule.py
51 lines
| 1.7 KiB
| text/x-python
|
PythonLexer
/ IPython / FakeModule.py
fperez
|
r0 | # -*- coding: utf-8 -*- | ||
""" | ||||
Class which mimics a module. | ||||
Needed to allow pickle to correctly resolve namespaces during IPython | ||||
sessions. | ||||
vivainio
|
r363 | $Id: FakeModule.py 1625 2006-08-12 10:34:44Z vivainio $""" | ||
fperez
|
r0 | |||
#***************************************************************************** | ||||
# Copyright (C) 2002-2004 Fernando Perez. <fperez@colorado.edu> | ||||
# | ||||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#***************************************************************************** | ||||
vivainio
|
r363 | class FakeModule: | ||
fperez
|
r0 | """Simple class with attribute access to fake a module. | ||
This is not meant to replace a module, but to allow inserting a fake | ||||
module in sys.modules so that systems which rely on run-time module | ||||
importing (like shelve and pickle) work correctly in interactive IPython | ||||
sessions. | ||||
Do NOT use this code for anything other than this IPython private hack.""" | ||||
def __init__(self,adict): | ||||
vivainio
|
r363 | |||
fperez
|
r0 | # It seems pydoc (and perhaps others) needs any module instance to | ||
# implement a __nonzero__ method, so we add it if missing: | ||||
if '__nonzero__' not in adict: | ||||
def __nonzero__(): | ||||
return 1 | ||||
adict['__nonzero__'] = __nonzero__ | ||||
vivainio
|
r363 | self.__dict__ = adict | ||
fperez
|
r292 | # modules should have a __file__ attribute | ||
adict['__file__'] = __file__ | ||||
fperez
|
r0 | def __getattr__(self,key): | ||
vivainio
|
r363 | try: | ||
return self.__dict__[key] | ||||
except KeyError, e: | ||||
raise AttributeError("FakeModule object has no attribute %s" % e) | ||||
fperez
|
r0 | def __str__(self): | ||
return "<IPython.FakeModule instance>" | ||||
def __repr__(self): | ||||
return str(self) | ||||