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 |
""" |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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