##// END OF EJS Templates
Merge pull request #10813 from henryiii/master...
Matthias Bussonnier -
r23985:36ab971d merge
parent child Browse files
Show More
@@ -774,6 +774,19 class ProgressBar(DisplayObject):
774 self._progress = value
774 self._progress = value
775 self.update()
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 class JSON(DisplayObject):
790 class JSON(DisplayObject):
778 """JSON expects a JSON-able dict or list
791 """JSON expects a JSON-able dict or list
779
792
@@ -11,6 +11,7 import nose.tools as nt
11
11
12 from IPython.core import display
12 from IPython.core import display
13 from IPython.core.getipython import get_ipython
13 from IPython.core.getipython import get_ipython
14 from IPython.utils.io import capture_output
14 from IPython.utils.tempdir import NamedFileInTemporaryDirectory
15 from IPython.utils.tempdir import NamedFileInTemporaryDirectory
15 from IPython import paths as ipath
16 from IPython import paths as ipath
16 from IPython.testing.tools import AssertPrints, AssertNotPrints
17 from IPython.testing.tools import AssertPrints, AssertNotPrints
@@ -196,11 +197,19 def test_displayobject_repr():
196
197
197 def test_progress():
198 def test_progress():
198 p = display.ProgressBar(10)
199 p = display.ProgressBar(10)
199 nt.assert_true('0/10' in repr(p))
200 nt.assert_in('0/10',repr(p))
200 p.html_width = '100%'
201 p.html_width = '100%'
201 p.progress = 5
202 p.progress = 5
202 nt.assert_equal(p._repr_html_(), "<progress style='width:100%' max='10' value='5'></progress>")
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 def test_json():
213 def test_json():
205 d = {'a': 5}
214 d = {'a': 5}
206 lis = [d]
215 lis = [d]
@@ -21,10 +21,8
21 },
21 },
22 {
22 {
23 "cell_type": "code",
23 "cell_type": "code",
24 "execution_count": 10,
24 "execution_count": 1,
25 "metadata": {
25 "metadata": {},
26 "collapsed": true
27 },
28 "outputs": [],
26 "outputs": [],
29 "source": [
27 "source": [
30 "from IPython.display import display, update_display"
28 "from IPython.display import display, update_display"
@@ -32,7 +30,7
32 },
30 },
33 {
31 {
34 "cell_type": "code",
32 "cell_type": "code",
35 "execution_count": 13,
33 "execution_count": 2,
36 "metadata": {},
34 "metadata": {},
37 "outputs": [
35 "outputs": [
38 {
36 {
@@ -50,7 +48,7
50 "<DisplayHandle display_id=update-me>"
48 "<DisplayHandle display_id=update-me>"
51 ]
49 ]
52 },
50 },
53 "execution_count": 13,
51 "execution_count": 2,
54 "metadata": {},
52 "metadata": {},
55 "output_type": "execute_result"
53 "output_type": "execute_result"
56 }
54 }
@@ -70,7 +68,7
70 },
68 },
71 {
69 {
72 "cell_type": "code",
70 "cell_type": "code",
73 "execution_count": 14,
71 "execution_count": 3,
74 "metadata": {},
72 "metadata": {},
75 "outputs": [
73 "outputs": [
76 {
74 {
@@ -97,10 +95,8
97 },
95 },
98 {
96 {
99 "cell_type": "code",
97 "cell_type": "code",
100 "execution_count": 15,
98 "execution_count": 4,
101 "metadata": {
99 "metadata": {},
102 "collapsed": true
103 },
104 "outputs": [],
100 "outputs": [],
105 "source": [
101 "source": [
106 "handle.update('z')"
102 "handle.update('z')"
@@ -116,7 +112,7
116 },
112 },
117 {
113 {
118 "cell_type": "code",
114 "cell_type": "code",
119 "execution_count": 16,
115 "execution_count": 5,
120 "metadata": {},
116 "metadata": {},
121 "outputs": [
117 "outputs": [
122 {
118 {
@@ -131,10 +127,10
131 {
127 {
132 "data": {
128 "data": {
133 "text/plain": [
129 "text/plain": [
134 "<DisplayHandle display_id=07fc47b2ef652ccb70addeee3eb0981a>"
130 "<DisplayHandle display_id=118a56127f42348f8893440da7181c57>"
135 ]
131 ]
136 },
132 },
137 "execution_count": 16,
133 "execution_count": 5,
138 "metadata": {},
134 "metadata": {},
139 "output_type": "execute_result"
135 "output_type": "execute_result"
140 }
136 }
@@ -154,7 +150,7
154 },
150 },
155 {
151 {
156 "cell_type": "code",
152 "cell_type": "code",
157 "execution_count": 17,
153 "execution_count": 6,
158 "metadata": {},
154 "metadata": {},
159 "outputs": [
155 "outputs": [
160 {
156 {
@@ -173,7 +169,7
173 },
169 },
174 {
170 {
175 "cell_type": "code",
171 "cell_type": "code",
176 "execution_count": 18,
172 "execution_count": 7,
177 "metadata": {},
173 "metadata": {},
178 "outputs": [
174 "outputs": [
179 {
175 {
@@ -200,10 +196,8
200 },
196 },
201 {
197 {
202 "cell_type": "code",
198 "cell_type": "code",
203 "execution_count": 19,
199 "execution_count": 8,
204 "metadata": {
200 "metadata": {},
205 "collapsed": true
206 },
207 "outputs": [],
201 "outputs": [],
208 "source": [
202 "source": [
209 "update_display('z', display_id='here')"
203 "update_display('z', display_id='here')"
@@ -222,16 +216,16
222 },
216 },
223 {
217 {
224 "cell_type": "code",
218 "cell_type": "code",
225 "execution_count": 14,
219 "execution_count": 9,
226 "metadata": {},
220 "metadata": {},
227 "outputs": [
221 "outputs": [
228 {
222 {
229 "data": {
223 "data": {
230 "text/html": [
224 "text/html": [
231 "<progress style='width:100%' max='10' value='10'></progress>"
225 "<progress style='width:60ex' max='10' value='10'></progress>"
232 ],
226 ],
233 "text/plain": [
227 "text/plain": [
234 "<IPython.core.display.ProgressBar object>"
228 "[============================================================] 10/10"
235 ]
229 ]
236 },
230 },
237 "metadata": {},
231 "metadata": {},
@@ -254,16 +248,16
254 },
248 },
255 {
249 {
256 "cell_type": "code",
250 "cell_type": "code",
257 "execution_count": 15,
251 "execution_count": 10,
258 "metadata": {},
252 "metadata": {},
259 "outputs": [
253 "outputs": [
260 {
254 {
261 "data": {
255 "data": {
262 "text/html": [
256 "text/html": [
263 "<progress style='width:100%' max='10' value='10'></progress>"
257 "<progress style='width:60ex' max='10' value='10'></progress>"
264 ],
258 ],
265 "text/plain": [
259 "text/plain": [
266 "<IPython.core.display.ProgressBar object>"
260 "[============================================================] 10/10"
267 ]
261 ]
268 },
262 },
269 "metadata": {},
263 "metadata": {},
@@ -285,6 +279,36
285 "cell_type": "markdown",
279 "cell_type": "markdown",
286 "metadata": {},
280 "metadata": {},
287 "source": [
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 "We would encourage any updatable-display objects that track their own display_ids to follow-suit with `.display()` and `.update()` or `.update_display()` methods."
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