##// END OF EJS Templates
implement pre_runcode_hook, make ipy_autoreload use that instead of monkeypatching
vivainio2 -
Show More
@@ -129,21 +129,26 b' reloader = ModuleReloader()'
129
129
130 import IPython.iplib
130 import IPython.iplib
131
131
132 if 'runcode_old' not in globals():
132 autoreload_enabled = False
133 # safeguard against reloading *this* module
133
134 runcode_old = IPython.iplib.InteractiveShell.runcode
134 def runcode_hook(self):
135 if not autoreload_enabled:
136 raise IPython.ipapi.TryNext
137 try:
138 reloader.check()
139 except:
140 pass
135
141
136 def runcode_new(*a, **kw):
137 try: reloader.check()
138 except: pass
139 return runcode_old(*a, **kw)
140
142
141 def enable_autoreload():
143 def enable_autoreload():
142 IPython.iplib.InteractiveShell.runcode = runcode_new
144 global autoreload_enabled
145 autoreload_enabled = True
146
143
147
144 def disable_autoreload():
148 def disable_autoreload():
145 IPython.iplib.InteractiveShell.runcode = runcode_old
149 global autoreload_enabled
146
150 autoreload_enabled = False
151
147 #------------------------------------------------------------------------------
152 #------------------------------------------------------------------------------
148 # IPython connectivity
153 # IPython connectivity
149 #------------------------------------------------------------------------------
154 #------------------------------------------------------------------------------
@@ -226,5 +231,9 b" def aimport_f(self, parameter_s=''):"
226 mod = __import__(modname)
231 mod = __import__(modname)
227 ip.to_user_ns({modname: mod})
232 ip.to_user_ns({modname: mod})
228
233
229 ip.expose_magic('autoreload', autoreload_f)
234 def init():
230 ip.expose_magic('aimport', aimport_f)
235 ip.expose_magic('autoreload', autoreload_f)
236 ip.expose_magic('aimport', aimport_f)
237 ip.set_hook('pre_runcode_hook', runcode_hook)
238
239 init() No newline at end of file
@@ -56,7 +56,7 b' from pprint import PrettyPrinter'
56 __all__ = ['editor', 'fix_error_editor', 'result_display',
56 __all__ = ['editor', 'fix_error_editor', 'result_display',
57 'input_prefilter', 'shutdown_hook', 'late_startup_hook',
57 'input_prefilter', 'shutdown_hook', 'late_startup_hook',
58 'generate_prompt', 'generate_output_prompt','shell_hook',
58 'generate_prompt', 'generate_output_prompt','shell_hook',
59 'show_in_pager','pre_prompt_hook']
59 'show_in_pager','pre_prompt_hook', 'pre_runcode_hook']
60
60
61 pformat = PrettyPrinter().pformat
61 pformat = PrettyPrinter().pformat
62
62
@@ -236,7 +236,8 b' def pre_prompt_hook(self):'
236
236
237 return None
237 return None
238
238
239 def post_command_hook(self,cmd):
239 def pre_runcode_hook(self):
240 """ Executed after executing a command """
240 """ Executed before running the (prefiltered) code in IPython """
241 return None
241
242
242
243
@@ -2056,6 +2056,7 b' want to merge them back into the new files.""" % locals()'
2056 outflag = 1 # happens in more places, so it's easier as default
2056 outflag = 1 # happens in more places, so it's easier as default
2057 try:
2057 try:
2058 try:
2058 try:
2059 self.hooks.pre_runcode_hook()
2059 # Embedded instances require separate global/local namespaces
2060 # Embedded instances require separate global/local namespaces
2060 # so they can see both the surrounding (local) namespace and
2061 # so they can see both the surrounding (local) namespace and
2061 # the module-level globals when called inside another function.
2062 # the module-level globals when called inside another function.
General Comments 0
You need to be logged in to leave comments. Login now