##// END OF EJS Templates
Adding iteration to ProgressBar to make it a more useful utility
Henry Fredrick Schreiner -
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
@@ -196,11 +196,18 b' def test_displayobject_repr():'
196 196
197 197 def test_progress():
198 198 p = display.ProgressBar(10)
199 nt.assert_true('0/10' in repr(p))
199 nt.assert_in('0/10',repr(p))
200 200 p.html_width = '100%'
201 201 p.progress = 5
202 202 nt.assert_equal(p._repr_html_(), "<progress style='width:100%' max='10' value='5'></progress>")
203 203
204 def test_progress_iter(capsys):
205 for i in display.ProgressBar(5):
206 out, err = capsys.readouterr()
207 nt.assert_in('{0}/5'.format(i), out)
208 out, err = capsys.readouterr()
209 nt.assert_in('5/5', out)
210
204 211 def test_json():
205 212 d = {'a': 5}
206 213 lis = [d]
@@ -21,10 +21,8 b''
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 b''
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 b''
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 b''
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 b''
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 b''
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 b''
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 b''
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 b''
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 b''
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 b''
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 b''
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 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