##// END OF EJS Templates
Finished fixing InteractiveShell.instance().
Brian Granger -
Show More
@@ -138,6 +138,7 b' class MultipleInstanceError(Exception):'
138 138 class InteractiveShell(Configurable, Magic):
139 139 """An enhanced, interactive shell for Python."""
140 140
141 _instance = None
141 142 autocall = Enum((0,1,2), default_value=1, config=True)
142 143 # TODO: remove all autoindent logic and put into frontends.
143 144 # We can't do this yet because even runlines uses the autoindent.
@@ -269,20 +270,22 b' class InteractiveShell(Configurable, Magic):'
269 270 @classmethod
270 271 def instance(cls, *args, **kwargs):
271 272 """Returns a global InteractiveShell instance."""
272 if not hasattr(cls, "_instance"):
273 cls._instance = cls(*args, **kwargs)
273 if cls._instance is None:
274 inst = cls(*args, **kwargs)
274 275 # Now make sure that the instance will also be returned by
275 276 # the subclasses instance attribute.
276 for subclass in cls.mro()[1:]:
277 if issubclass(subclass, InteractiveShell):
278 if not hasattr(subclass, '_instance'):
279 subclass._instance = cls._instance
280 else:
281 raise MultipleInstanceError(
282 'Multiple conflicting subclass of '
283 'InteractiveShell have been created.'
284 )
285 return cls._instance
277 for subclass in cls.mro():
278 if issubclass(cls, subclass) and issubclass(subclass, InteractiveShell):
279 subclass._instance = inst
280 else:
281 break
282 if isinstance(cls._instance, cls):
283 return cls._instance
284 else:
285 raise MultipleInstanceError(
286 'Multiple incompatible subclass instances of '
287 'InteractiveShell are being created.'
288 )
286 289
287 290 @classmethod
288 291 def initialized(cls):
General Comments 0
You need to be logged in to leave comments. Login now