##// END OF EJS Templates
for code review
Barry Wark -
Show More
@@ -1,15 +1,15 b''
1 1 # encoding: utf-8
2 2 """
3 FrontEndBase: Base classes for frontends.
3 frontendbase provides an interface and base class for GUI frontends for IPython.kernel/IPython.kernel.core.
4 4
5 Todo:
6 - synchronous and asynchronous interfaces
7 - adapter to add async to FrontEndBase
5 Frontend implementations will likely want to subclass FrontEndBase.
6
7 Author: Barry Wark
8 8 """
9 9 __docformat__ = "restructuredtext en"
10 10
11 11 #-------------------------------------------------------------------------------
12 # Copyright (C) 2008 Barry Wark <barrywark at gmail _dot_ com>
12 # Copyright (C) 2008 The IPython Development Team
13 13 #
14 14 # Distributed under the terms of the BSD License. The full license is in
15 15 # the file COPYING, distributed as part of this software.
@@ -42,26 +42,32 b" rc.prompt_out = r'Out [$number]: '"
42 42
43 43 ##############################################################################
44 44
45 class IFrontEnd(zi.Interface):
46 """Interface for frontends. All methods return t.i.d.Deferred"""
45 class IFrontEndFactory(zi.Interface):
46 """Factory interface for frontends."""
47 47
48 zi.Attribute("input_prompt_template", "string.Template instance substituteable with execute result.")
49 zi.Attribute("output_prompt_template", "string.Template instance substituteable with execute result.")
50 zi.Attribute("continuation_prompt_template", "string.Template instance substituteable with execute result.")
51
52 def __init__(engine=None, history=None):
48 def __call__(engine=None, history=None):
53 49 """
54 50 Parameters:
55 51 interpreter : IPython.kernel.engineservice.IEngineCore
56 52 """
53
57 54 pass
55
56
57
58 class IFrontEnd(zi.Interface):
59 """Interface for frontends. All methods return t.i.d.Deferred"""
60
61 zi.Attribute("input_prompt_template", "string.Template instance substituteable with execute result.")
62 zi.Attribute("output_prompt_template", "string.Template instance substituteable with execute result.")
63 zi.Attribute("continuation_prompt_template", "string.Template instance substituteable with execute result.")
58 64
59 65 def update_cell_prompt(self, result):
60 66 """Subclass may override to update the input prompt for a block.
61 67 Since this method will be called as a twisted.internet.defer.Deferred's callback,
62 68 implementations should return result when finished."""
63 69
64 return result
70 pass
65 71
66 72 def render_result(self, result):
67 73 """Render the result of an execute call. Implementors may choose the method of rendering.
@@ -74,16 +80,50 b' class IFrontEnd(zi.Interface):'
74 80 Output of frontend rendering
75 81 """
76 82
77 return result
83 pass
78 84
79 85 def render_error(self, failure):
80 86 """Subclasses must override to render the failure. Since this method will be called as a
81 87 twisted.internet.defer.Deferred's callback, implementations should return result
82 88 when finished."""
83 89
84 return failure
90 pass
91
92
93 def inputPrompt(result={}):
94 """Returns the input prompt by subsituting into self.input_prompt_template"""
95 pass
96
97 def outputPrompt(result):
98 """Returns the output prompt by subsituting into self.output_prompt_template"""
99
100 pass
101
102 def continuationPrompt():
103 """Returns the continuation prompt by subsituting into self.continuation_prompt_template"""
104
105 pass
106
107 def is_complete(block):
108 """Returns True if block is complete, False otherwise."""
109
110 pass
111
112 def compile_ast(block):
113 """Compiles block to an _ast.AST"""
114
115 pass
116
117
118 def get_history_item_previous(currentBlock):
119 """Returns the block previous in the history."""
120 pass
121
122 def get_history_item_next(currentBlock):
123 """Returns the next block in the history."""
124
125 pass
85 126
86 # TODO: finish interface
87 127
88 128 class FrontEndBase(object):
89 129 """
@@ -97,6 +137,7 b' class FrontEndBase(object):'
97 137 """
98 138
99 139 zi.implements(IFrontEnd)
140 zi.classProvides(IFrontEndFactory)
100 141
101 142 history_cursor = 0
102 143
@@ -204,22 +245,22 b' class FrontEndBase(object):'
204 245 return result
205 246
206 247
207 def get_history_item_previous(self, current_block):
248 def get_history_item_previous(self, currentBlock):
208 249 """ Returns previous history string and decrement history cursor.
209 250 """
210 251 command = self.history.get_history_item(self.history_cursor - 1)
211 252 if command is not None:
212 self.history.input_cache[self.history_cursor] = current_block
253 self.history.input_cache[self.history_cursor] = currentBlock
213 254 self.history_cursor -= 1
214 255 return command
215 256
216 257
217 def get_history_item_next(self, current_block):
258 def get_history_item_next(self, currentBlock):
218 259 """ Returns next history string and increment history cursor.
219 260 """
220 261 command = self.history.get_history_item(self.history_cursor + 1)
221 262 if command is not None:
222 self.history.input_cache[self.history_cursor] = current_block
263 self.history.input_cache[self.history_cursor] = currentBlock
223 264 self.history_cursor += 1
224 265 return command
225 266
General Comments 0
You need to be logged in to leave comments. Login now