Show More
@@ -774,6 +774,19 b' class ProgressBar(DisplayObject):' | |||
|
774 | 774 | self._progress = value |
|
775 | 775 | self.update() |
|
776 | 776 | |
|
777 | def __iter__(self): | |
|
778 | self.display() | |
|
779 | self._progress = -1 # First iteration is 0 | |
|
780 | return self | |
|
781 | ||
|
782 | def __next__(self): | |
|
783 | """Returns current value and increments display by one.""" | |
|
784 | self.progress += 1 | |
|
785 | if self.progress < self.total: | |
|
786 | return self.progress | |
|
787 | else: | |
|
788 | raise StopIteration() | |
|
789 | ||
|
777 | 790 | class JSON(DisplayObject): |
|
778 | 791 | """JSON expects a JSON-able dict or list |
|
779 | 792 |
@@ -11,6 +11,7 b' import nose.tools as nt' | |||
|
11 | 11 | |
|
12 | 12 | from IPython.core import display |
|
13 | 13 | from IPython.core.getipython import get_ipython |
|
14 | from IPython.utils.io import capture_output | |
|
14 | 15 | from IPython.utils.tempdir import NamedFileInTemporaryDirectory |
|
15 | 16 | from IPython import paths as ipath |
|
16 | 17 | from IPython.testing.tools import AssertPrints, AssertNotPrints |
@@ -196,11 +197,19 b' def test_displayobject_repr():' | |||
|
196 | 197 | |
|
197 | 198 | def test_progress(): |
|
198 | 199 | p = display.ProgressBar(10) |
|
199 |
nt.assert_ |
|
|
200 | nt.assert_in('0/10',repr(p)) | |
|
200 | 201 | p.html_width = '100%' |
|
201 | 202 | p.progress = 5 |
|
202 | 203 | nt.assert_equal(p._repr_html_(), "<progress style='width:100%' max='10' value='5'></progress>") |
|
203 | 204 | |
|
205 | def test_progress_iter(): | |
|
206 | with capture_output(display=False) as captured: | |
|
207 | for i in display.ProgressBar(5): | |
|
208 | out = captured.stdout | |
|
209 | nt.assert_in('{0}/5'.format(i), out) | |
|
210 | out = captured.stdout | |
|
211 | nt.assert_in('5/5', out) | |
|
212 | ||
|
204 | 213 | def test_json(): |
|
205 | 214 | d = {'a': 5} |
|
206 | 215 | lis = [d] |
@@ -21,10 +21,8 b'' | |||
|
21 | 21 | }, |
|
22 | 22 | { |
|
23 | 23 | "cell_type": "code", |
|
24 |
"execution_count": 1 |
|
|
25 | "metadata": { | |
|
26 | "collapsed": true | |
|
27 | }, | |
|
24 | "execution_count": 1, | |
|
25 | "metadata": {}, | |
|
28 | 26 | "outputs": [], |
|
29 | 27 | "source": [ |
|
30 | 28 | "from IPython.display import display, update_display" |
@@ -32,7 +30,7 b'' | |||
|
32 | 30 | }, |
|
33 | 31 | { |
|
34 | 32 | "cell_type": "code", |
|
35 |
"execution_count": |
|
|
33 | "execution_count": 2, | |
|
36 | 34 | "metadata": {}, |
|
37 | 35 | "outputs": [ |
|
38 | 36 | { |
@@ -50,7 +48,7 b'' | |||
|
50 | 48 | "<DisplayHandle display_id=update-me>" |
|
51 | 49 | ] |
|
52 | 50 | }, |
|
53 |
"execution_count": |
|
|
51 | "execution_count": 2, | |
|
54 | 52 | "metadata": {}, |
|
55 | 53 | "output_type": "execute_result" |
|
56 | 54 | } |
@@ -70,7 +68,7 b'' | |||
|
70 | 68 | }, |
|
71 | 69 | { |
|
72 | 70 | "cell_type": "code", |
|
73 |
"execution_count": |
|
|
71 | "execution_count": 3, | |
|
74 | 72 | "metadata": {}, |
|
75 | 73 | "outputs": [ |
|
76 | 74 | { |
@@ -97,10 +95,8 b'' | |||
|
97 | 95 | }, |
|
98 | 96 | { |
|
99 | 97 | "cell_type": "code", |
|
100 |
"execution_count": |
|
|
101 | "metadata": { | |
|
102 | "collapsed": true | |
|
103 | }, | |
|
98 | "execution_count": 4, | |
|
99 | "metadata": {}, | |
|
104 | 100 | "outputs": [], |
|
105 | 101 | "source": [ |
|
106 | 102 | "handle.update('z')" |
@@ -116,7 +112,7 b'' | |||
|
116 | 112 | }, |
|
117 | 113 | { |
|
118 | 114 | "cell_type": "code", |
|
119 |
"execution_count": |
|
|
115 | "execution_count": 5, | |
|
120 | 116 | "metadata": {}, |
|
121 | 117 | "outputs": [ |
|
122 | 118 | { |
@@ -131,10 +127,10 b'' | |||
|
131 | 127 | { |
|
132 | 128 | "data": { |
|
133 | 129 | "text/plain": [ |
|
134 |
"<DisplayHandle display_id= |
|
|
130 | "<DisplayHandle display_id=118a56127f42348f8893440da7181c57>" | |
|
135 | 131 | ] |
|
136 | 132 | }, |
|
137 |
"execution_count": |
|
|
133 | "execution_count": 5, | |
|
138 | 134 | "metadata": {}, |
|
139 | 135 | "output_type": "execute_result" |
|
140 | 136 | } |
@@ -154,7 +150,7 b'' | |||
|
154 | 150 | }, |
|
155 | 151 | { |
|
156 | 152 | "cell_type": "code", |
|
157 |
"execution_count": |
|
|
153 | "execution_count": 6, | |
|
158 | 154 | "metadata": {}, |
|
159 | 155 | "outputs": [ |
|
160 | 156 | { |
@@ -173,7 +169,7 b'' | |||
|
173 | 169 | }, |
|
174 | 170 | { |
|
175 | 171 | "cell_type": "code", |
|
176 |
"execution_count": |
|
|
172 | "execution_count": 7, | |
|
177 | 173 | "metadata": {}, |
|
178 | 174 | "outputs": [ |
|
179 | 175 | { |
@@ -200,10 +196,8 b'' | |||
|
200 | 196 | }, |
|
201 | 197 | { |
|
202 | 198 | "cell_type": "code", |
|
203 |
"execution_count": |
|
|
204 | "metadata": { | |
|
205 | "collapsed": true | |
|
206 | }, | |
|
199 | "execution_count": 8, | |
|
200 | "metadata": {}, | |
|
207 | 201 | "outputs": [], |
|
208 | 202 | "source": [ |
|
209 | 203 | "update_display('z', display_id='here')" |
@@ -222,16 +216,16 b'' | |||
|
222 | 216 | }, |
|
223 | 217 | { |
|
224 | 218 | "cell_type": "code", |
|
225 |
"execution_count": |
|
|
219 | "execution_count": 9, | |
|
226 | 220 | "metadata": {}, |
|
227 | 221 | "outputs": [ |
|
228 | 222 | { |
|
229 | 223 | "data": { |
|
230 | 224 | "text/html": [ |
|
231 |
"<progress style='width: |
|
|
225 | "<progress style='width:60ex' max='10' value='10'></progress>" | |
|
232 | 226 | ], |
|
233 | 227 | "text/plain": [ |
|
234 | "<IPython.core.display.ProgressBar object>" | |
|
228 | "[============================================================] 10/10" | |
|
235 | 229 | ] |
|
236 | 230 | }, |
|
237 | 231 | "metadata": {}, |
@@ -254,16 +248,16 b'' | |||
|
254 | 248 | }, |
|
255 | 249 | { |
|
256 | 250 | "cell_type": "code", |
|
257 |
"execution_count": 1 |
|
|
251 | "execution_count": 10, | |
|
258 | 252 | "metadata": {}, |
|
259 | 253 | "outputs": [ |
|
260 | 254 | { |
|
261 | 255 | "data": { |
|
262 | 256 | "text/html": [ |
|
263 |
"<progress style='width: |
|
|
257 | "<progress style='width:60ex' max='10' value='10'></progress>" | |
|
264 | 258 | ], |
|
265 | 259 | "text/plain": [ |
|
266 | "<IPython.core.display.ProgressBar object>" | |
|
260 | "[============================================================] 10/10" | |
|
267 | 261 | ] |
|
268 | 262 | }, |
|
269 | 263 | "metadata": {}, |
@@ -285,6 +279,36 b'' | |||
|
285 | 279 | "cell_type": "markdown", |
|
286 | 280 | "metadata": {}, |
|
287 | 281 | "source": [ |
|
282 | "The ProgressBar also has an update built into iteration:" | |
|
283 | ] | |
|
284 | }, | |
|
285 | { | |
|
286 | "cell_type": "code", | |
|
287 | "execution_count": 11, | |
|
288 | "metadata": {}, | |
|
289 | "outputs": [ | |
|
290 | { | |
|
291 | "data": { | |
|
292 | "text/html": [ | |
|
293 | "<progress style='width:60ex' max='10' value='10'></progress>" | |
|
294 | ], | |
|
295 | "text/plain": [ | |
|
296 | "[============================================================] 10/10" | |
|
297 | ] | |
|
298 | }, | |
|
299 | "metadata": {}, | |
|
300 | "output_type": "display_data" | |
|
301 | } | |
|
302 | ], | |
|
303 | "source": [ | |
|
304 | "for i in ProgressBar(10):\n", | |
|
305 | " time.sleep(0.25)" | |
|
306 | ] | |
|
307 | }, | |
|
308 | { | |
|
309 | "cell_type": "markdown", | |
|
310 | "metadata": {}, | |
|
311 | "source": [ | |
|
288 | 312 | "We would encourage any updatable-display objects that track their own display_ids to follow-suit with `.display()` and `.update()` or `.update_display()` methods." |
|
289 | 313 | ] |
|
290 | 314 | } |
General Comments 0
You need to be logged in to leave comments.
Login now