##// 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 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 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 def test_displayobject_repr():
196 197
197 198 def test_progress():
198 199 p = display.ProgressBar(10)
199 nt.assert_true('0/10' in repr(p))
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
21 21 },
22 22 {
23 23 "cell_type": "code",
24 "execution_count": 10,
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
32 30 },
33 31 {
34 32 "cell_type": "code",
35 "execution_count": 13,
33 "execution_count": 2,
36 34 "metadata": {},
37 35 "outputs": [
38 36 {
@@ -50,7 +48,7
50 48 "<DisplayHandle display_id=update-me>"
51 49 ]
52 50 },
53 "execution_count": 13,
51 "execution_count": 2,
54 52 "metadata": {},
55 53 "output_type": "execute_result"
56 54 }
@@ -70,7 +68,7
70 68 },
71 69 {
72 70 "cell_type": "code",
73 "execution_count": 14,
71 "execution_count": 3,
74 72 "metadata": {},
75 73 "outputs": [
76 74 {
@@ -97,10 +95,8
97 95 },
98 96 {
99 97 "cell_type": "code",
100 "execution_count": 15,
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
116 112 },
117 113 {
118 114 "cell_type": "code",
119 "execution_count": 16,
115 "execution_count": 5,
120 116 "metadata": {},
121 117 "outputs": [
122 118 {
@@ -131,10 +127,10
131 127 {
132 128 "data": {
133 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 134 "metadata": {},
139 135 "output_type": "execute_result"
140 136 }
@@ -154,7 +150,7
154 150 },
155 151 {
156 152 "cell_type": "code",
157 "execution_count": 17,
153 "execution_count": 6,
158 154 "metadata": {},
159 155 "outputs": [
160 156 {
@@ -173,7 +169,7
173 169 },
174 170 {
175 171 "cell_type": "code",
176 "execution_count": 18,
172 "execution_count": 7,
177 173 "metadata": {},
178 174 "outputs": [
179 175 {
@@ -200,10 +196,8
200 196 },
201 197 {
202 198 "cell_type": "code",
203 "execution_count": 19,
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
222 216 },
223 217 {
224 218 "cell_type": "code",
225 "execution_count": 14,
219 "execution_count": 9,
226 220 "metadata": {},
227 221 "outputs": [
228 222 {
229 223 "data": {
230 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 227 "text/plain": [
234 "<IPython.core.display.ProgressBar object>"
228 "[============================================================] 10/10"
235 229 ]
236 230 },
237 231 "metadata": {},
@@ -254,16 +248,16
254 248 },
255 249 {
256 250 "cell_type": "code",
257 "execution_count": 15,
251 "execution_count": 10,
258 252 "metadata": {},
259 253 "outputs": [
260 254 {
261 255 "data": {
262 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 259 "text/plain": [
266 "<IPython.core.display.ProgressBar object>"
260 "[============================================================] 10/10"
267 261 ]
268 262 },
269 263 "metadata": {},
@@ -285,6 +279,36
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