##// END OF EJS Templates
Add arguments dirs and files to the ils() constructor....
walter.doerwald -
Show More
@@ -1,2119 +1,2130 b''
1 1 # -*- coding: iso-8859-1 -*-
2 2
3 3 """
4 4 ``ipipe`` provides classes to be used in an interactive Python session. Doing a
5 5 ``from ipipe import *`` is the preferred way to do this. The name of all
6 6 objects imported this way starts with ``i`` to minimize collisions.
7 7
8 8 ``ipipe`` supports "pipeline expressions", which is something resembling Unix
9 9 pipes. An example is:
10 10
11 11 >>> ienv | isort("key.lower()")
12 12
13 13 This gives a listing of all environment variables sorted by name.
14 14
15 15
16 16 There are three types of objects in a pipeline expression:
17 17
18 18 * ``Table``s: These objects produce items. Examples are ``ls`` (listing the
19 19 current directory, ``ienv`` (listing environment variables), ``ipwd`` (listing
20 20 user account) and ``igrp`` (listing user groups). A ``Table`` must be the
21 21 first object in a pipe expression.
22 22
23 23 * ``Pipe``s: These objects sit in the middle of a pipe expression. They
24 24 transform the input in some way (e.g. filtering or sorting it). Examples are:
25 25 ``ifilter`` (which filters the input pipe), ``isort`` (which sorts the input
26 26 pipe) and ``ieval`` (which evaluates a function or expression for each object
27 27 in the input pipe).
28 28
29 29 * ``Display``s: These objects can be put as the last object in a pipeline
30 30 expression. There are responsible for displaying the result of the pipeline
31 31 expression. If a pipeline expression doesn't end in a display object a default
32 32 display objects will be used. One example is ``browse`` which is a ``curses``
33 33 based browser.
34 34
35 35
36 36 Adding support for pipeline expressions to your own objects can be done through
37 37 three extensions points (all of them optional):
38 38
39 39 * An object that will be displayed as a row by a ``Display`` object should
40 40 implement the method ``__xattrs__(self, mode)``. This method must return a
41 41 sequence of attribute names. This sequence may also contain integers, which
42 42 will be treated as sequence indizes. Also supported is ``None``, which uses
43 43 the object itself and callables which will be called with the object as the
44 44 an argument. If ``__xattrs__()`` isn't implemented ``(None,)`` will be used as
45 45 the attribute sequence (i.e. the object itself (it's ``repr()`` format) will
46 46 be being displayed. The global function ``xattrs()`` implements this
47 47 functionality.
48 48
49 49 * When an object ``foo`` is displayed in the header, footer or table cell of the
50 50 browser ``foo.__xrepr__(mode)`` is called. Mode can be ``"header"`` or
51 51 ``"footer"`` for the header or footer line and ``"cell"`` for a table cell.
52 52 ``__xrepr__()```must return an iterable (e.g. by being a generator) which
53 53 produces the following items: The first item should be a tuple containing
54 54 the alignment (-1 left aligned, 0 centered and 1 right aligned) and whether
55 55 the complete output must be displayed or if the browser is allowed to stop
56 56 output after enough text has been produced (e.g. a syntax highlighted text
57 57 line would use ``True``, but for a large data structure (i.e. a nested list,
58 58 tuple or dictionary) ``False`` would be used). The other output ``__xrepr__()``
59 59 may produce is tuples of ``Style```objects and text (which contain the text
60 60 representation of the object; see the ``astyle`` module). If ``__xrepr__()``
61 61 recursively outputs a data structure the function ``xrepr(object, mode)`` can
62 62 be used and ``"default"`` must be passed as the mode in these calls. This in
63 63 turn calls the ``__xrepr__()`` method on ``object`` (or uses ``repr(object)``
64 64 as the string representation if ``__xrepr__()`` doesn't exist).
65 65
66 66 * Objects that can be iterated by ``Pipe``s must implement the method
67 67 ``__xiter__(self, mode)``. ``mode`` can take the following values:
68 68
69 69 - ``"default"``: This is the default value and ist always used by pipeline
70 70 expressions. Other values are only used in the browser.
71 71 - ``None``: This value is passed by the browser. The object must return an
72 72 iterable of ``XMode`` objects describing all modes supported by the object.
73 73 (This should never include ``"default"`` or ``None``).
74 74 - Any other value that the object supports.
75 75
76 76 The global function ``xiter()`` can be called to get such an iterator. If
77 77 the method ``_xiter__`` isn't implemented, ``xiter()`` falls back to
78 78 ``__iter__``. In addition to that, dictionaries and modules receive special
79 79 treatment (returning an iterator over ``(key, value)`` pairs). This makes it
80 80 possible to use dictionaries and modules in pipeline expressions, for example:
81 81
82 82 >>> import sys
83 83 >>> sys | ifilter("isinstance(value, int)") | idump
84 84 key |value
85 85 api_version| 1012
86 86 dllhandle | 503316480
87 87 hexversion | 33817328
88 88 maxint |2147483647
89 89 maxunicode | 65535
90 90 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
91 91 ...
92 92
93 93 Note: The expression strings passed to ``ifilter()`` and ``isort()`` can
94 94 refer to the object to be filtered or sorted via the variable ``_`` and to any
95 95 of the attributes of the object, i.e.:
96 96
97 97 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
98 98
99 99 does the same as
100 100
101 101 >>> sys.modules | ifilter("value is not None") | isort("key.lower()")
102 102
103 103 In addition to expression strings, it's possible to pass callables (taking
104 104 the object as an argument) to ``ifilter()``, ``isort()`` and ``ieval()``:
105 105
106 106 >>> sys | ifilter(lambda _:isinstance(_.value, int)) \
107 107 ... | ieval(lambda _: (_.key, hex(_.value))) | idump
108 108 0 |1
109 109 api_version|0x3f4
110 110 dllhandle |0x1e000000
111 111 hexversion |0x20402f0
112 112 maxint |0x7fffffff
113 113 maxunicode |0xffff
114 114 """
115 115
116 116 import sys, os, os.path, stat, glob, new, csv, datetime, types
117 117 import itertools, mimetypes
118 118
119 119 try: # Python 2.3 compatibility
120 120 import collections
121 121 except ImportError:
122 122 deque = list
123 123 else:
124 124 deque = collections.deque
125 125
126 126 try: # Python 2.3 compatibility
127 127 set
128 128 except NameError:
129 129 import sets
130 130 set = sets.Set
131 131
132 132 try: # Python 2.3 compatibility
133 133 sorted
134 134 except NameError:
135 135 def sorted(iterator, key=None, reverse=False):
136 136 items = list(iterator)
137 137 if key is not None:
138 138 items.sort(lambda i1, i2: cmp(key(i1), key(i2)))
139 139 else:
140 140 items.sort()
141 141 if reverse:
142 142 items.reverse()
143 143 return items
144 144
145 145 try:
146 146 import pwd
147 147 except ImportError:
148 148 pwd = None
149 149
150 150 try:
151 151 import grp
152 152 except ImportError:
153 153 grp = None
154 154
155 155 import path
156 156 try:
157 157 from IPython import genutils, ipapi
158 158 except ImportError:
159 159 genutils = None
160 160 ipapi = None
161 161
162 162 import astyle
163 163
164 164
165 165 __all__ = [
166 166 "ifile", "ils", "iglob", "iwalk", "ipwdentry", "ipwd", "igrpentry", "igrp",
167 167 "icsv", "ix", "ichain", "isort", "ifilter", "ieval", "ienum", "ienv",
168 168 "idump", "iless"
169 169 ]
170 170
171 171
172 172 os.stat_float_times(True) # enable microseconds
173 173
174 174
175 175 class AttrNamespace(object):
176 176 """
177 177 Helper class that is used for providing a namespace for evaluating
178 178 expressions containing attribute names of an object.
179 179 """
180 180 def __init__(self, wrapped):
181 181 self.wrapped = wrapped
182 182
183 183 def __getitem__(self, name):
184 184 if name == "_":
185 185 return self.wrapped
186 186 try:
187 187 return getattr(self.wrapped, name)
188 188 except AttributeError:
189 189 raise KeyError(name)
190 190
191 191 # Python 2.3 compatibility
192 192 # use eval workaround to find out which names are used in the
193 193 # eval string and put them into the locals. This works for most
194 194 # normal uses case, bizarre ones like accessing the locals()
195 195 # will fail
196 196 try:
197 197 eval("_", None, AttrNamespace(None))
198 198 except TypeError:
199 199 real_eval = eval
200 200 def eval(codestring, _globals, _locals):
201 201 """
202 202 eval(source[, globals[, locals]]) -> value
203 203
204 204 Evaluate the source in the context of globals and locals.
205 205 The source may be a string representing a Python expression
206 206 or a code object as returned by compile().
207 207 The globals must be a dictionary and locals can be any mappping.
208 208
209 209 This function is a workaround for the shortcomings of
210 210 Python 2.3's eval.
211 211 """
212 212
213 213 if isinstance(codestring, basestring):
214 214 code = compile(codestring, "_eval", "eval")
215 215 else:
216 216 code = codestring
217 217 newlocals = {}
218 218 for name in code.co_names:
219 219 try:
220 220 newlocals[name] = _locals[name]
221 221 except KeyError:
222 222 pass
223 223 return real_eval(code, _globals, newlocals)
224 224
225 225
226 226 noitem = object()
227 227
228 228 def item(iterator, index, default=noitem):
229 229 """
230 230 Return the ``index``th item from the iterator ``iterator``.
231 231 ``index`` must be an integer (negative integers are relative to the
232 232 end (i.e. the last item produced by the iterator)).
233 233
234 234 If ``default`` is given, this will be the default value when
235 235 the iterator doesn't contain an item at this position. Otherwise an
236 236 ``IndexError`` will be raised.
237 237
238 238 Note that using this function will partially or totally exhaust the
239 239 iterator.
240 240 """
241 241 i = index
242 242 if i>=0:
243 243 for item in iterator:
244 244 if not i:
245 245 return item
246 246 i -= 1
247 247 else:
248 248 i = -index
249 249 cache = deque()
250 250 for item in iterator:
251 251 cache.append(item)
252 252 if len(cache)>i:
253 253 cache.popleft()
254 254 if len(cache)==i:
255 255 return cache.popleft()
256 256 if default is noitem:
257 257 raise IndexError(index)
258 258 else:
259 259 return default
260 260
261 261
262 262 def getglobals(g):
263 263 if g is None:
264 264 if ipapi is not None:
265 265 api = ipapi.get()
266 266 if api is not None:
267 267 return api.user_ns
268 268 return globals()
269 269 return g
270 270
271 271
272 272 class Descriptor(object):
273 273 def __hash__(self):
274 274 return hash(self.__class__) ^ hash(self.key())
275 275
276 276 def __eq__(self, other):
277 277 return self.__class__ is other.__class__ and self.key() == other.key()
278 278
279 279 def __ne__(self, other):
280 280 return self.__class__ is not other.__class__ or self.key() != other.key()
281 281
282 282 def key(self):
283 283 pass
284 284
285 285 def name(self):
286 286 key = self.key()
287 287 if key is None:
288 288 return "_"
289 289 return str(key)
290 290
291 291 def attrtype(self, obj):
292 292 pass
293 293
294 294 def valuetype(self, obj):
295 295 pass
296 296
297 297 def value(self, obj):
298 298 pass
299 299
300 300 def doc(self, obj):
301 301 pass
302 302
303 303 def shortdoc(self, obj):
304 304 doc = self.doc(obj)
305 305 if doc is not None:
306 306 doc = doc.strip().splitlines()[0].strip()
307 307 return doc
308 308
309 309 def iter(self, obj):
310 310 return xiter(self.value(obj))
311 311
312 312
313 313 class SelfDescriptor(Descriptor):
314 314 def key(self):
315 315 return None
316 316
317 317 def attrtype(self, obj):
318 318 return "self"
319 319
320 320 def valuetype(self, obj):
321 321 return type(obj)
322 322
323 323 def value(self, obj):
324 324 return obj
325 325
326 326 def __repr__(self):
327 327 return "Self"
328 328
329 329 selfdescriptor = SelfDescriptor() # there's no need for more than one
330 330
331 331
332 332 class AttributeDescriptor(Descriptor):
333 333 __slots__ = ("_name", "_doc")
334 334
335 335 def __init__(self, name, doc=None):
336 336 self._name = name
337 337 self._doc = doc
338 338
339 339 def key(self):
340 340 return self._name
341 341
342 342 def doc(self, obj):
343 343 return self._doc
344 344
345 345 def attrtype(self, obj):
346 346 return "attr"
347 347
348 348 def valuetype(self, obj):
349 349 return type(getattr(obj, self._name))
350 350
351 351 def value(self, obj):
352 352 return getattr(obj, self._name)
353 353
354 354 def __repr__(self):
355 355 if self._doc is None:
356 356 return "Attribute(%r)" % self._name
357 357 else:
358 358 return "Attribute(%r, %r)" % (self._name, self._doc)
359 359
360 360
361 361 class IndexDescriptor(Descriptor):
362 362 __slots__ = ("_index",)
363 363
364 364 def __init__(self, index):
365 365 self._index = index
366 366
367 367 def key(self):
368 368 return self._index
369 369
370 370 def attrtype(self, obj):
371 371 return "item"
372 372
373 373 def valuetype(self, obj):
374 374 return type(obj[self._index])
375 375
376 376 def value(self, obj):
377 377 return obj[self._index]
378 378
379 379 def __repr__(self):
380 380 return "Index(%r)" % self._index
381 381
382 382
383 383 class MethodDescriptor(Descriptor):
384 384 __slots__ = ("_name", "_doc")
385 385
386 386 def __init__(self, name, doc=None):
387 387 self._name = name
388 388 self._doc = doc
389 389
390 390 def key(self):
391 391 return self._name
392 392
393 393 def doc(self, obj):
394 394 if self._doc is None:
395 395 return getattr(obj, self._name).__doc__
396 396 return self._doc
397 397
398 398 def attrtype(self, obj):
399 399 return "method"
400 400
401 401 def valuetype(self, obj):
402 402 return type(self.value(obj))
403 403
404 404 def value(self, obj):
405 405 return getattr(obj, self._name)()
406 406
407 407 def __repr__(self):
408 408 if self._doc is None:
409 409 return "Method(%r)" % self._name
410 410 else:
411 411 return "Method(%r, %r)" % (self._name, self._doc)
412 412
413 413
414 414 class IterAttributeDescriptor(Descriptor):
415 415 __slots__ = ("_name", "_doc")
416 416
417 417 def __init__(self, name, doc=None):
418 418 self._name = name
419 419 self._doc = doc
420 420
421 421 def key(self):
422 422 return self._name
423 423
424 424 def doc(self, obj):
425 425 return self._doc
426 426
427 427 def attrtype(self, obj):
428 428 return "iter"
429 429
430 430 def valuetype(self, obj):
431 431 return noitem
432 432
433 433 def value(self, obj):
434 434 return noitem
435 435
436 436 def iter(self, obj):
437 437 return xiter(getattr(obj, self._name))
438 438
439 439 def __repr__(self):
440 440 if self._doc is None:
441 441 return "IterAttribute(%r)" % self._name
442 442 else:
443 443 return "IterAttribute(%r, %r)" % (self._name, self._doc)
444 444
445 445
446 446 class IterMethodDescriptor(Descriptor):
447 447 __slots__ = ("_name", "_doc")
448 448
449 449 def __init__(self, name, doc=None):
450 450 self._name = name
451 451 self._doc = doc
452 452
453 453 def key(self):
454 454 return self._name
455 455
456 456 def doc(self, obj):
457 457 if self._doc is None:
458 458 return getattr(obj, self._name).__doc__
459 459 return self._doc
460 460
461 461 def attrtype(self, obj):
462 462 return "itermethod"
463 463
464 464 def valuetype(self, obj):
465 465 return noitem
466 466
467 467 def value(self, obj):
468 468 return noitem
469 469
470 470 def iter(self, obj):
471 471 return xiter(getattr(obj, self._name)())
472 472
473 473 def __repr__(self):
474 474 if self._doc is None:
475 475 return "IterMethod(%r)" % self._name
476 476 else:
477 477 return "IterMethod(%r, %r)" % (self._name, self._doc)
478 478
479 479
480 480 class FunctionDescriptor(Descriptor):
481 481 __slots__ = ("_function", "_name", "_doc")
482 482
483 483 def __init__(self, function, name=None, doc=None):
484 484 self._function = function
485 485 self._name = name
486 486 self._doc = doc
487 487
488 488 def key(self):
489 489 return self._function
490 490
491 491 def name(self):
492 492 if self._name is not None:
493 493 return self._name
494 494 return getattr(self._function, "__xname__", self._function.__name__)
495 495
496 496 def doc(self, obj):
497 497 if self._doc is None:
498 498 return self._function.__doc__
499 499 return self._doc
500 500
501 501 def attrtype(self, obj):
502 502 return "function"
503 503
504 504 def valuetype(self, obj):
505 505 return type(self._function(obj))
506 506
507 507 def value(self, obj):
508 508 return self._function(obj)
509 509
510 510 def __repr__(self):
511 511 if self._doc is None:
512 512 return "Function(%r)" % self._name
513 513 else:
514 514 return "Function(%r, %r)" % (self._name, self._doc)
515 515
516 516
517 517 class Table(object):
518 518 """
519 519 A ``Table`` is an object that produces items (just like a normal Python
520 520 iterator/generator does) and can be used as the first object in a pipeline
521 521 expression. The displayhook will open the default browser for such an object
522 522 (instead of simply printing the ``repr()`` result).
523 523 """
524 524
525 525 # We want to support ``foo`` and ``foo()`` in pipeline expression:
526 526 # So we implement the required operators (``|`` and ``+``) in the metaclass,
527 527 # instantiate the class and forward the operator to the instance
528 528 class __metaclass__(type):
529 529 def __iter__(self):
530 530 return iter(self())
531 531
532 532 def __or__(self, other):
533 533 return self() | other
534 534
535 535 def __add__(self, other):
536 536 return self() + other
537 537
538 538 def __radd__(self, other):
539 539 return other + self()
540 540
541 541 def __getitem__(self, index):
542 542 return self()[index]
543 543
544 544 def __getitem__(self, index):
545 545 return item(self, index)
546 546
547 547 def __contains__(self, item):
548 548 for haveitem in self:
549 549 if item == haveitem:
550 550 return True
551 551 return False
552 552
553 553 def __or__(self, other):
554 554 # autoinstantiate right hand side
555 555 if isinstance(other, type) and issubclass(other, (Table, Display)):
556 556 other = other()
557 557 # treat simple strings and functions as ``ieval`` instances
558 558 elif not isinstance(other, Display) and not isinstance(other, Table):
559 559 other = ieval(other)
560 560 # forward operations to the right hand side
561 561 return other.__ror__(self)
562 562
563 563 def __add__(self, other):
564 564 # autoinstantiate right hand side
565 565 if isinstance(other, type) and issubclass(other, Table):
566 566 other = other()
567 567 return ichain(self, other)
568 568
569 569 def __radd__(self, other):
570 570 # autoinstantiate left hand side
571 571 if isinstance(other, type) and issubclass(other, Table):
572 572 other = other()
573 573 return ichain(other, self)
574 574
575 575 def __iter__(self):
576 576 return xiter(self, "default")
577 577
578 578
579 579 class Pipe(Table):
580 580 """
581 581 A ``Pipe`` is an object that can be used in a pipeline expression. It
582 582 processes the objects it gets from its input ``Table``/``Pipe``. Note that
583 583 a ``Pipe`` object can't be used as the first object in a pipeline
584 584 expression, as it doesn't produces items itself.
585 585 """
586 586 class __metaclass__(Table.__metaclass__):
587 587 def __ror__(self, input):
588 588 return input | self()
589 589
590 590 def __ror__(self, input):
591 591 # autoinstantiate left hand side
592 592 if isinstance(input, type) and issubclass(input, Table):
593 593 input = input()
594 594 self.input = input
595 595 return self
596 596
597 597
598 598 def xrepr(item, mode="default"):
599 599 try:
600 600 func = item.__xrepr__
601 601 except AttributeError:
602 602 pass
603 603 else:
604 604 try:
605 605 for x in func(mode):
606 606 yield x
607 607 except (KeyboardInterrupt, SystemExit):
608 608 raise
609 609 except Exception:
610 610 yield (astyle.style_default, repr(item))
611 611 return
612 612 if item is None:
613 613 yield (astyle.style_type_none, repr(item))
614 614 elif isinstance(item, bool):
615 615 yield (astyle.style_type_bool, repr(item))
616 616 elif isinstance(item, str):
617 617 if mode == "cell":
618 618 yield (astyle.style_default, repr(item.expandtabs(tab))[1:-1])
619 619 else:
620 620 yield (astyle.style_default, repr(item))
621 621 elif isinstance(item, unicode):
622 622 if mode == "cell":
623 623 yield (astyle.style_default, repr(item.expandtabs(tab))[2:-1])
624 624 else:
625 625 yield (astyle.style_default, repr(item))
626 626 elif isinstance(item, (int, long, float)):
627 627 yield (1, True)
628 628 yield (astyle.style_type_number, repr(item))
629 629 elif isinstance(item, complex):
630 630 yield (astyle.style_type_number, repr(item))
631 631 elif isinstance(item, datetime.datetime):
632 632 if mode == "cell":
633 633 # Don't use strftime() here, as this requires year >= 1900
634 634 yield (astyle.style_type_datetime,
635 635 "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
636 636 (item.year, item.month, item.day,
637 637 item.hour, item.minute, item.second,
638 638 item.microsecond),
639 639 )
640 640 else:
641 641 yield (astyle.style_type_datetime, repr(item))
642 642 elif isinstance(item, datetime.date):
643 643 if mode == "cell":
644 644 yield (astyle.style_type_datetime,
645 645 "%04d-%02d-%02d" % (item.year, item.month, item.day))
646 646 else:
647 647 yield (astyle.style_type_datetime, repr(item))
648 648 elif isinstance(item, datetime.time):
649 649 if mode == "cell":
650 650 yield (astyle.style_type_datetime,
651 651 "%02d:%02d:%02d.%06d" % \
652 652 (item.hour, item.minute, item.second, item.microsecond))
653 653 else:
654 654 yield (astyle.style_type_datetime, repr(item))
655 655 elif isinstance(item, datetime.timedelta):
656 656 yield (astyle.style_type_datetime, repr(item))
657 657 elif isinstance(item, type):
658 658 if item.__module__ == "__builtin__":
659 659 yield (astyle.style_type_type, item.__name__)
660 660 else:
661 661 yield (astyle.style_type_type, "%s.%s" % (item.__module__, item.__name__))
662 662 elif isinstance(item, Exception):
663 663 if item.__class__.__module__ == "exceptions":
664 664 classname = item.__class__.__name__
665 665 else:
666 666 classname = "%s.%s" % \
667 667 (item.__class__.__module__, item.__class__.__name__)
668 668 if mode == "header" or mode == "footer":
669 669 yield (astyle.style_error, "%s: %s" % (classname, item))
670 670 else:
671 671 yield (astyle.style_error, classname)
672 672 elif isinstance(item, (list, tuple)):
673 673 if mode == "header" or mode == "footer":
674 674 if item.__class__.__module__ == "__builtin__":
675 675 classname = item.__class__.__name__
676 676 else:
677 677 classname = "%s.%s" % \
678 678 (item.__class__.__module__,item.__class__.__name__)
679 679 yield (astyle.style_default,
680 680 "<%s object with %d items at 0x%x>" % \
681 681 (classname, len(item), id(item)))
682 682 else:
683 683 yield (-1, False)
684 684 if isinstance(item, list):
685 685 yield (astyle.style_default, "[")
686 686 end = "]"
687 687 else:
688 688 yield (astyle.style_default, "(")
689 689 end = ")"
690 690 for (i, subitem) in enumerate(item):
691 691 if i:
692 692 yield (astyle.style_default, ", ")
693 693 for part in xrepr(subitem, "default"):
694 694 yield part
695 695 yield (astyle.style_default, end)
696 696 elif isinstance(item, (dict, types.DictProxyType)):
697 697 if mode == "header" or mode == "footer":
698 698 if item.__class__.__module__ == "__builtin__":
699 699 classname = item.__class__.__name__
700 700 else:
701 701 classname = "%s.%s" % \
702 702 (item.__class__.__module__,item.__class__.__name__)
703 703 yield (astyle.style_default,
704 704 "<%s object with %d items at 0x%x>" % \
705 705 (classname, len(item), id(item)))
706 706 else:
707 707 yield (-1, False)
708 708 if isinstance(item, dict):
709 709 yield (astyle.style_default, "{")
710 710 end = "}"
711 711 else:
712 712 yield (astyle.style_default, "dictproxy((")
713 713 end = "})"
714 714 for (i, (key, value)) in enumerate(item.iteritems()):
715 715 if i:
716 716 yield (astyle.style_default, ", ")
717 717 for part in xrepr(key, "default"):
718 718 yield part
719 719 yield (astyle.style_default, ": ")
720 720 for part in xrepr(value, "default"):
721 721 yield part
722 722 yield (astyle.style_default, end)
723 723 else:
724 724 yield (astyle.style_default, repr(item))
725 725
726 726
727 727 def upgradexattr(attr):
728 728 if attr is None:
729 729 return selfdescriptor
730 730 elif isinstance(attr, Descriptor):
731 731 return attr
732 732 elif isinstance(attr, str):
733 733 if attr.endswith("()"):
734 734 if attr.startswith("-"):
735 735 return IterMethodDescriptor(attr[1:-2])
736 736 else:
737 737 return MethodDescriptor(attr[:-2])
738 738 else:
739 739 if attr.startswith("-"):
740 740 return IterAttributeDescriptor(attr[1:])
741 741 else:
742 742 return AttributeDescriptor(attr)
743 743 elif isinstance(attr, (int, long)):
744 744 return IndexDescriptor(attr)
745 745 elif callable(attr):
746 746 return FunctionDescriptor(attr)
747 747 else:
748 748 raise TypeError("can't handle descriptor %r" % attr)
749 749
750 750
751 751 def xattrs(item, mode="default"):
752 752 try:
753 753 func = item.__xattrs__
754 754 except AttributeError:
755 755 if mode == "detail":
756 756 for attrname in dir(item):
757 757 yield AttributeDescriptor(attrname)
758 758 else:
759 759 yield selfdescriptor
760 760 else:
761 761 for attr in func(mode):
762 762 yield upgradexattr(attr)
763 763
764 764
765 765 def _isdict(item):
766 766 try:
767 767 itermeth = item.__class__.__iter__
768 768 except (AttributeError, TypeError):
769 769 return False
770 770 return itermeth is dict.__iter__ or itermeth is types.DictProxyType.__iter__
771 771
772 772
773 773 def _isstr(item):
774 774 if not isinstance(item, basestring):
775 775 return False
776 776 try:
777 777 itermeth = item.__class__.__iter__
778 778 except AttributeError:
779 779 return True
780 780 return False # ``__iter__`` has been redefined
781 781
782 782
783 783 def xiter(item, mode="default"):
784 784 try:
785 785 func = item.__xiter__
786 786 except AttributeError:
787 787 if _isdict(item):
788 788 def items(item):
789 789 fields = ("key", "value")
790 790 for (key, value) in item.iteritems():
791 791 yield Fields(fields, key=key, value=value)
792 792 return items(item)
793 793 elif isinstance(item, new.module):
794 794 def items(item):
795 795 fields = ("key", "value")
796 796 for key in sorted(item.__dict__):
797 797 yield Fields(fields, key=key, value=getattr(item, key))
798 798 return items(item)
799 799 elif _isstr(item):
800 800 if not item:
801 801 raise ValueError("can't enter empty string")
802 802 lines = item.splitlines()
803 803 if len(lines) <= 1:
804 804 raise ValueError("can't enter one line string")
805 805 return iter(lines)
806 806 return iter(item)
807 807 else:
808 808 return iter(func(mode)) # iter() just to be safe
809 809
810 810
811 811 class ichain(Pipe):
812 812 """
813 813 Chains multiple ``Table``s into one.
814 814 """
815 815
816 816 def __init__(self, *iters):
817 817 self.iters = iters
818 818
819 819 def __iter__(self):
820 820 return itertools.chain(*self.iters)
821 821
822 822 def __xrepr__(self, mode):
823 823 if mode == "header" or mode == "footer":
824 824 for (i, item) in enumerate(self.iters):
825 825 if i:
826 826 yield (astyle.style_default, "+")
827 827 if isinstance(item, Pipe):
828 828 yield (astyle.style_default, "(")
829 829 for part in xrepr(item, mode):
830 830 yield part
831 831 if isinstance(item, Pipe):
832 832 yield (astyle.style_default, ")")
833 833 else:
834 834 yield (astyle.style_default, repr(self))
835 835
836 836 def __repr__(self):
837 837 args = ", ".join([repr(it) for it in self.iters])
838 838 return "%s.%s(%s)" % \
839 839 (self.__class__.__module__, self.__class__.__name__, args)
840 840
841 841
842 842 class ifile(path.path):
843 843 """
844 844 file (or directory) object.
845 845 """
846 846
847 847 def __add_(self, other):
848 848 return ifile(path._base(self) + other)
849 849
850 850 def __radd_(self, other):
851 851 return ifile(other + path._base(self))
852 852
853 853 def __div_(self, other):
854 854 return ifile(path.__div__(self, other))
855 855
856 856 def getcwd():
857 857 return ifile(path.path.getcwd())
858 858 getcwd.__doc__ = path.path.getcwd.__doc__
859 859 getcwd = staticmethod(getcwd)
860 860
861 861 def abspath(self):
862 862 return ifile(path.path.abspath(self))
863 863 abspath.__doc__ = path.path.abspath.__doc__
864 864
865 865 def normcase(self):
866 866 return ifile(path.path.normcase(self))
867 867 normcase.__doc__ = path.path.normcase.__doc__
868 868
869 869 def normpath(self):
870 870 return ifile(path.path.normpath(self))
871 871 normpath.__doc__ = path.path.normpath.__doc__
872 872
873 873 def realpath(self):
874 874 return ifile(path.path.realpath(self))
875 875 realpath.__doc__ = path.path.realpath.__doc__
876 876
877 877 def expanduser(self):
878 878 return ifile(path.path.expanduser(self))
879 879 expanduser.__doc__ = path.path.expanduser.__doc__
880 880
881 881 def expandvars(self):
882 882 return ifile(path.path.expandvars(self))
883 883 expandvars.__doc__ = path.path.expandvars.__doc__
884 884
885 885 def dirname(self):
886 886 return ifile(path.path.dirname(self))
887 887 dirname.__doc__ = path.path.dirname.__doc__
888 888
889 889 parent = property(dirname, None, None, path.path.parent.__doc__)
890 890
891 891 def splitpath(self):
892 892 (parent, child) = path.path.splitpath(self)
893 893 return (ifile(parent), child)
894 894 splitpath.__doc__ = path.path.splitpath.__doc__
895 895
896 896 def splitdrive(self):
897 897 (drive, rel) = path.path.splitdrive(self)
898 898 return (ifile(drive), rel)
899 899 splitdrive.__doc__ = path.path.splitdrive.__doc__
900 900
901 901 def splitext(self):
902 902 (filename, ext) = path.path.splitext(self)
903 903 return (ifile(filename), ext)
904 904 splitext.__doc__ = path.path.splitext.__doc__
905 905
906 906 if hasattr(path.path, "splitunc"):
907 907 def splitunc(self):
908 908 (unc, rest) = path.path.splitunc(self)
909 909 return (ifile(unc), rest)
910 910 splitunc.__doc__ = path.path.splitunc.__doc__
911 911
912 912 def _get_uncshare(self):
913 913 unc, r = os.path.splitunc(self)
914 914 return ifile(unc)
915 915
916 916 uncshare = property(
917 917 _get_uncshare, None, None,
918 918 """ The UNC mount point for this path.
919 919 This is empty for paths on local drives. """)
920 920
921 921 def joinpath(self, *args):
922 922 return ifile(path.path.joinpath(self, *args))
923 923 joinpath.__doc__ = path.path.joinpath.__doc__
924 924
925 925 def splitall(self):
926 926 return map(ifile, path.path.splitall(self))
927 927 splitall.__doc__ = path.path.splitall.__doc__
928 928
929 929 def relpath(self):
930 930 return ifile(path.path.relpath(self))
931 931 relpath.__doc__ = path.path.relpath.__doc__
932 932
933 933 def relpathto(self, dest):
934 934 return ifile(path.path.relpathto(self, dest))
935 935 relpathto.__doc__ = path.path.relpathto.__doc__
936 936
937 937 def listdir(self, pattern=None):
938 938 return [ifile(child) for child in path.path.listdir(self, pattern)]
939 939 listdir.__doc__ = path.path.listdir.__doc__
940 940
941 941 def dirs(self, pattern=None):
942 942 return [ifile(child) for child in path.path.dirs(self, pattern)]
943 943 dirs.__doc__ = path.path.dirs.__doc__
944 944
945 945 def files(self, pattern=None):
946 946 return [ifile(child) for child in path.path.files(self, pattern)]
947 947 files.__doc__ = path.path.files.__doc__
948 948
949 949 def walk(self, pattern=None):
950 950 for child in path.path.walk(self, pattern):
951 951 yield ifile(child)
952 952 walk.__doc__ = path.path.walk.__doc__
953 953
954 954 def walkdirs(self, pattern=None):
955 955 for child in path.path.walkdirs(self, pattern):
956 956 yield ifile(child)
957 957 walkdirs.__doc__ = path.path.walkdirs.__doc__
958 958
959 959 def walkfiles(self, pattern=None):
960 960 for child in path.path.walkfiles(self, pattern):
961 961 yield ifile(child)
962 962 walkfiles.__doc__ = path.path.walkfiles.__doc__
963 963
964 964 def glob(self, pattern):
965 965 return map(ifile, path.path.glob(self, pattern))
966 966 glob.__doc__ = path.path.glob.__doc__
967 967
968 968 if hasattr(os, 'readlink'):
969 969 def readlink(self):
970 970 return ifile(path.path.readlink(self))
971 971 readlink.__doc__ = path.path.readlink.__doc__
972 972
973 973 def readlinkabs(self):
974 974 return ifile(path.path.readlinkabs(self))
975 975 readlinkabs.__doc__ = path.path.readlinkabs.__doc__
976 976
977 977 def getmode(self):
978 978 return self.stat().st_mode
979 979 mode = property(getmode, None, None, "Access mode")
980 980
981 981 def gettype(self):
982 982 data = [
983 983 (stat.S_ISREG, "file"),
984 984 (stat.S_ISDIR, "dir"),
985 985 (stat.S_ISCHR, "chardev"),
986 986 (stat.S_ISBLK, "blockdev"),
987 987 (stat.S_ISFIFO, "fifo"),
988 988 (stat.S_ISLNK, "symlink"),
989 989 (stat.S_ISSOCK,"socket"),
990 990 ]
991 991 lstat = self.lstat()
992 992 if lstat is not None:
993 993 types = set([text for (func, text) in data if func(lstat.st_mode)])
994 994 else:
995 995 types = set()
996 996 m = self.mode
997 997 types.update([text for (func, text) in data if func(m)])
998 998 return ", ".join(types)
999 999 type = property(gettype, None, None, "file type (file, directory, link, etc.)")
1000 1000
1001 1001 def getmodestr(self):
1002 1002 m = self.mode
1003 1003 data = [
1004 1004 (stat.S_IRUSR, "-r"),
1005 1005 (stat.S_IWUSR, "-w"),
1006 1006 (stat.S_IXUSR, "-x"),
1007 1007 (stat.S_IRGRP, "-r"),
1008 1008 (stat.S_IWGRP, "-w"),
1009 1009 (stat.S_IXGRP, "-x"),
1010 1010 (stat.S_IROTH, "-r"),
1011 1011 (stat.S_IWOTH, "-w"),
1012 1012 (stat.S_IXOTH, "-x"),
1013 1013 ]
1014 1014 return "".join([text[bool(m&bit)] for (bit, text) in data])
1015 1015
1016 1016 modestr = property(getmodestr, None, None, "Access mode as string")
1017 1017
1018 1018 def getblocks(self):
1019 1019 return self.stat().st_blocks
1020 1020 blocks = property(getblocks, None, None, "File size in blocks")
1021 1021
1022 1022 def getblksize(self):
1023 1023 return self.stat().st_blksize
1024 1024 blksize = property(getblksize, None, None, "Filesystem block size")
1025 1025
1026 1026 def getdev(self):
1027 1027 return self.stat().st_dev
1028 1028 dev = property(getdev)
1029 1029
1030 1030 def getnlink(self):
1031 1031 return self.stat().st_nlink
1032 1032 nlink = property(getnlink, None, None, "Number of links")
1033 1033
1034 1034 def getuid(self):
1035 1035 return self.stat().st_uid
1036 1036 uid = property(getuid, None, None, "User id of file owner")
1037 1037
1038 1038 def getgid(self):
1039 1039 return self.stat().st_gid
1040 1040 gid = property(getgid, None, None, "Group id of file owner")
1041 1041
1042 1042 def getowner(self):
1043 1043 stat = self.stat()
1044 1044 try:
1045 1045 return pwd.getpwuid(stat.st_uid).pw_name
1046 1046 except KeyError:
1047 1047 return stat.st_uid
1048 1048 owner = property(getowner, None, None, "Owner name (or id)")
1049 1049
1050 1050 def getgroup(self):
1051 1051 stat = self.stat()
1052 1052 try:
1053 1053 return grp.getgrgid(stat.st_gid).gr_name
1054 1054 except KeyError:
1055 1055 return stat.st_gid
1056 1056 group = property(getgroup, None, None, "Group name (or id)")
1057 1057
1058 1058 def getadate(self):
1059 1059 return datetime.datetime.utcfromtimestamp(self.atime)
1060 1060 adate = property(getadate, None, None, "Access date")
1061 1061
1062 1062 def getcdate(self):
1063 1063 return datetime.datetime.utcfromtimestamp(self.ctime)
1064 1064 cdate = property(getcdate, None, None, "Creation date")
1065 1065
1066 1066 def getmdate(self):
1067 1067 return datetime.datetime.utcfromtimestamp(self.mtime)
1068 1068 mdate = property(getmdate, None, None, "Modification date")
1069 1069
1070 1070 def mimetype(self):
1071 1071 """
1072 1072 Return MIME type guessed from the extension.
1073 1073 """
1074 1074 return mimetypes.guess_type(self.basename())[0]
1075 1075
1076 1076 def encoding(self):
1077 1077 """
1078 1078 Return guessed compression (like "compress" or "gzip").
1079 1079 """
1080 1080 return mimetypes.guess_type(self.basename())[1]
1081 1081
1082 1082 def __repr__(self):
1083 1083 return "ifile(%s)" % path._base.__repr__(self)
1084 1084
1085 1085 defaultattrs = (None, "type", "size", "modestr", "owner", "group", "mdate")
1086 1086
1087 1087 def __xattrs__(self, mode):
1088 1088 if mode == "detail":
1089 1089 return (
1090 1090 "name",
1091 1091 "basename()",
1092 1092 "abspath()",
1093 1093 "realpath()",
1094 1094 "type",
1095 1095 "mode",
1096 1096 "modestr",
1097 1097 "stat()",
1098 1098 "lstat()",
1099 1099 "uid",
1100 1100 "gid",
1101 1101 "owner",
1102 1102 "group",
1103 1103 "dev",
1104 1104 "nlink",
1105 1105 "ctime",
1106 1106 "mtime",
1107 1107 "atime",
1108 1108 "cdate",
1109 1109 "mdate",
1110 1110 "adate",
1111 1111 "size",
1112 1112 "blocks",
1113 1113 "blksize",
1114 1114 "isdir()",
1115 1115 "islink()",
1116 1116 "mimetype()",
1117 1117 "encoding()",
1118 1118 "-listdir()",
1119 1119 "-dirs()",
1120 1120 "-files()",
1121 1121 "-walk()",
1122 1122 "-walkdirs()",
1123 1123 "-walkfiles()",
1124 1124 )
1125 1125 else:
1126 1126 return self.defaultattrs
1127 1127
1128 1128 def __xrepr__(self, mode):
1129 1129 try:
1130 1130 if self.isdir():
1131 1131 name = "idir"
1132 1132 style = astyle.style_dir
1133 1133 else:
1134 1134 name = "ifile"
1135 1135 style = astyle.style_file
1136 1136 except IOError:
1137 1137 name = "ifile"
1138 1138 style = astyle.style_default
1139 1139 if mode == "cell" or mode in "header" or mode == "footer":
1140 1140 abspath = repr(path._base(self.normpath()))
1141 1141 if abspath.startswith("u"):
1142 1142 abspath = abspath[2:-1]
1143 1143 else:
1144 1144 abspath = abspath[1:-1]
1145 1145 if mode == "cell":
1146 1146 yield (style, abspath)
1147 1147 else:
1148 1148 yield (style, "%s(%s)" % (name, abspath))
1149 1149 else:
1150 1150 yield (style, repr(self))
1151 1151
1152 1152 def __iter__(self):
1153 1153 if self.isdir():
1154 1154 yield iparentdir(self / os.pardir)
1155 1155 for child in sorted(self.listdir()):
1156 1156 yield child
1157 1157 else:
1158 1158 f = self.open("rb")
1159 1159 for line in f:
1160 1160 yield line
1161 1161 f.close()
1162 1162
1163 1163
1164 1164 class iparentdir(ifile):
1165 1165 def __xrepr__(self, mode):
1166 1166 if mode == "cell":
1167 1167 yield (astyle.style_dir, os.pardir)
1168 1168 else:
1169 1169 for part in ifile.__xrepr__(self, mode):
1170 1170 yield part
1171 1171
1172 1172
1173 1173 class ils(Table):
1174 1174 """
1175 1175 List the current (or a specific) directory.
1176 1176
1177 1177 Examples:
1178 1178
1179 1179 >>> ils
1180 1180 >>> ils("/usr/local/lib/python2.4")
1181 1181 >>> ils("~")
1182 1182 """
1183 def __init__(self, base=os.curdir):
1183 def __init__(self, base=os.curdir, dirs=True, files=True):
1184 1184 self.base = os.path.expanduser(base)
1185 self.dirs = dirs
1186 self.files = files
1185 1187
1186 1188 def __iter__(self):
1187 return xiter(ifile(self.base))
1189 for child in ifile(self.base).listdir():
1190 if self.dirs:
1191 if self.files:
1192 yield child
1193 else:
1194 if child.isdir():
1195 yield child
1196 elif self.files:
1197 if not child.isdir():
1198 yield child
1188 1199
1189 1200 def __xrepr__(self, mode):
1190 1201 return ifile(self.base).__xrepr__(mode)
1191 1202
1192 1203 def __repr__(self):
1193 1204 return "%s.%s(%r)" % \
1194 1205 (self.__class__.__module__, self.__class__.__name__, self.base)
1195 1206
1196 1207
1197 1208 class iglob(Table):
1198 1209 """
1199 1210 List all files and directories matching a specified pattern.
1200 1211 (See ``glob.glob()`` for more info.).
1201 1212
1202 1213 Examples:
1203 1214
1204 1215 >>> iglob("*.py")
1205 1216 """
1206 1217 def __init__(self, glob):
1207 1218 self.glob = glob
1208 1219
1209 1220 def __iter__(self):
1210 1221 for name in glob.glob(self.glob):
1211 1222 yield ifile(name)
1212 1223
1213 1224 def __xrepr__(self, mode):
1214 1225 if mode == "header" or mode == "footer" or mode == "cell":
1215 1226 yield (astyle.style_default,
1216 1227 "%s(%r)" % (self.__class__.__name__, self.glob))
1217 1228 else:
1218 1229 yield (astyle.style_default, repr(self))
1219 1230
1220 1231 def __repr__(self):
1221 1232 return "%s.%s(%r)" % \
1222 1233 (self.__class__.__module__, self.__class__.__name__, self.glob)
1223 1234
1224 1235
1225 1236 class iwalk(Table):
1226 1237 """
1227 1238 List all files and directories in a directory and it's subdirectory.
1228 1239
1229 1240 >>> iwalk
1230 1241 >>> iwalk("/usr/local/lib/python2.4")
1231 1242 >>> iwalk("~")
1232 1243 """
1233 1244 def __init__(self, base=os.curdir, dirs=True, files=True):
1234 1245 self.base = os.path.expanduser(base)
1235 1246 self.dirs = dirs
1236 1247 self.files = files
1237 1248
1238 1249 def __iter__(self):
1239 1250 for (dirpath, dirnames, filenames) in os.walk(self.base):
1240 1251 if self.dirs:
1241 1252 for name in sorted(dirnames):
1242 1253 yield ifile(os.path.join(dirpath, name))
1243 1254 if self.files:
1244 1255 for name in sorted(filenames):
1245 1256 yield ifile(os.path.join(dirpath, name))
1246 1257
1247 1258 def __xrepr__(self, mode):
1248 1259 if mode == "header" or mode == "footer" or mode == "cell":
1249 1260 yield (astyle.style_default,
1250 1261 "%s(%r)" % (self.__class__.__name__, self.base))
1251 1262 else:
1252 1263 yield (astyle.style_default, repr(self))
1253 1264
1254 1265 def __repr__(self):
1255 1266 return "%s.%s(%r)" % \
1256 1267 (self.__class__.__module__, self.__class__.__name__, self.base)
1257 1268
1258 1269
1259 1270 class ipwdentry(object):
1260 1271 """
1261 1272 ``ipwdentry`` objects encapsulate entries in the Unix user account and
1262 1273 password database.
1263 1274 """
1264 1275 def __init__(self, id):
1265 1276 self._id = id
1266 1277 self._entry = None
1267 1278
1268 1279 def _getentry(self):
1269 1280 if self._entry is None:
1270 1281 if isinstance(self._id, basestring):
1271 1282 self._entry = pwd.getpwnam(self._id)
1272 1283 else:
1273 1284 self._entry = pwd.getpwuid(self._id)
1274 1285 return self._entry
1275 1286
1276 1287 def getname(self):
1277 1288 if isinstance(self._id, basestring):
1278 1289 return self._id
1279 1290 else:
1280 1291 return self._getentry().pw_name
1281 1292 name = property(getname, None, None, "User name")
1282 1293
1283 1294 def getpasswd(self):
1284 1295 return self._getentry().pw_passwd
1285 1296 passwd = property(getpasswd, None, None, "Password")
1286 1297
1287 1298 def getuid(self):
1288 1299 if isinstance(self._id, basestring):
1289 1300 return self._getentry().pw_uid
1290 1301 else:
1291 1302 return self._id
1292 1303 uid = property(getuid, None, None, "User id")
1293 1304
1294 1305 def getgid(self):
1295 1306 return self._getentry().pw_gid
1296 1307 gid = property(getgid, None, None, "Primary group id")
1297 1308
1298 1309 def getgroup(self):
1299 1310 return igrpentry(self.gid)
1300 1311 group = property(getgroup, None, None, "Group")
1301 1312
1302 1313 def getgecos(self):
1303 1314 return self._getentry().pw_gecos
1304 1315 gecos = property(getgecos, None, None, "Information (e.g. full user name)")
1305 1316
1306 1317 def getdir(self):
1307 1318 return self._getentry().pw_dir
1308 1319 dir = property(getdir, None, None, "$HOME directory")
1309 1320
1310 1321 def getshell(self):
1311 1322 return self._getentry().pw_shell
1312 1323 shell = property(getshell, None, None, "Login shell")
1313 1324
1314 1325 def __xattrs__(self, mode):
1315 1326 return ("name", "passwd", "uid", "gid", "gecos", "dir", "shell")
1316 1327
1317 1328 def __repr__(self):
1318 1329 return "%s.%s(%r)" % \
1319 1330 (self.__class__.__module__, self.__class__.__name__, self._id)
1320 1331
1321 1332
1322 1333 class ipwd(Table):
1323 1334 """
1324 1335 List all entries in the Unix user account and password database.
1325 1336
1326 1337 Example:
1327 1338
1328 1339 >>> ipwd | isort("uid")
1329 1340 """
1330 1341 def __iter__(self):
1331 1342 for entry in pwd.getpwall():
1332 1343 yield ipwdentry(entry.pw_name)
1333 1344
1334 1345 def __xrepr__(self, mode):
1335 1346 if mode == "header" or mode == "footer" or mode == "cell":
1336 1347 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1337 1348 else:
1338 1349 yield (astyle.style_default, repr(self))
1339 1350
1340 1351
1341 1352 class igrpentry(object):
1342 1353 """
1343 1354 ``igrpentry`` objects encapsulate entries in the Unix group database.
1344 1355 """
1345 1356 def __init__(self, id):
1346 1357 self._id = id
1347 1358 self._entry = None
1348 1359
1349 1360 def _getentry(self):
1350 1361 if self._entry is None:
1351 1362 if isinstance(self._id, basestring):
1352 1363 self._entry = grp.getgrnam(self._id)
1353 1364 else:
1354 1365 self._entry = grp.getgrgid(self._id)
1355 1366 return self._entry
1356 1367
1357 1368 def getname(self):
1358 1369 if isinstance(self._id, basestring):
1359 1370 return self._id
1360 1371 else:
1361 1372 return self._getentry().gr_name
1362 1373 name = property(getname, None, None, "Group name")
1363 1374
1364 1375 def getpasswd(self):
1365 1376 return self._getentry().gr_passwd
1366 1377 passwd = property(getpasswd, None, None, "Password")
1367 1378
1368 1379 def getgid(self):
1369 1380 if isinstance(self._id, basestring):
1370 1381 return self._getentry().gr_gid
1371 1382 else:
1372 1383 return self._id
1373 1384 gid = property(getgid, None, None, "Group id")
1374 1385
1375 1386 def getmem(self):
1376 1387 return self._getentry().gr_mem
1377 1388 mem = property(getmem, None, None, "Members")
1378 1389
1379 1390 def __xattrs__(self, mode):
1380 1391 return ("name", "passwd", "gid", "mem")
1381 1392
1382 1393 def __xrepr__(self, mode):
1383 1394 if mode == "header" or mode == "footer" or mode == "cell":
1384 1395 yield (astyle.style_default, "group ")
1385 1396 try:
1386 1397 yield (astyle.style_default, self.name)
1387 1398 except KeyError:
1388 1399 if isinstance(self._id, basestring):
1389 1400 yield (astyle.style_default, self.name_id)
1390 1401 else:
1391 1402 yield (astyle.style_type_number, str(self._id))
1392 1403 else:
1393 1404 yield (astyle.style_default, repr(self))
1394 1405
1395 1406 def __iter__(self):
1396 1407 for member in self.mem:
1397 1408 yield ipwdentry(member)
1398 1409
1399 1410 def __repr__(self):
1400 1411 return "%s.%s(%r)" % \
1401 1412 (self.__class__.__module__, self.__class__.__name__, self._id)
1402 1413
1403 1414
1404 1415 class igrp(Table):
1405 1416 """
1406 1417 This ``Table`` lists all entries in the Unix group database.
1407 1418 """
1408 1419 def __iter__(self):
1409 1420 for entry in grp.getgrall():
1410 1421 yield igrpentry(entry.gr_name)
1411 1422
1412 1423 def __xrepr__(self, mode):
1413 1424 if mode == "header" or mode == "footer":
1414 1425 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1415 1426 else:
1416 1427 yield (astyle.style_default, repr(self))
1417 1428
1418 1429
1419 1430 class Fields(object):
1420 1431 def __init__(self, fieldnames, **fields):
1421 1432 self.__fieldnames = [upgradexattr(fieldname) for fieldname in fieldnames]
1422 1433 for (key, value) in fields.iteritems():
1423 1434 setattr(self, key, value)
1424 1435
1425 1436 def __xattrs__(self, mode):
1426 1437 return self.__fieldnames
1427 1438
1428 1439 def __xrepr__(self, mode):
1429 1440 yield (-1, False)
1430 1441 if mode == "header" or mode == "cell":
1431 1442 yield (astyle.style_default, self.__class__.__name__)
1432 1443 yield (astyle.style_default, "(")
1433 1444 for (i, f) in enumerate(self.__fieldnames):
1434 1445 if i:
1435 1446 yield (astyle.style_default, ", ")
1436 1447 yield (astyle.style_default, f.name())
1437 1448 yield (astyle.style_default, "=")
1438 1449 for part in xrepr(getattr(self, f), "default"):
1439 1450 yield part
1440 1451 yield (astyle.style_default, ")")
1441 1452 elif mode == "footer":
1442 1453 yield (astyle.style_default, self.__class__.__name__)
1443 1454 yield (astyle.style_default, "(")
1444 1455 for (i, f) in enumerate(self.__fieldnames):
1445 1456 if i:
1446 1457 yield (astyle.style_default, ", ")
1447 1458 yield (astyle.style_default, f.name())
1448 1459 yield (astyle.style_default, ")")
1449 1460 else:
1450 1461 yield (astyle.style_default, repr(self))
1451 1462
1452 1463
1453 1464 class FieldTable(Table, list):
1454 1465 def __init__(self, *fields):
1455 1466 Table.__init__(self)
1456 1467 list.__init__(self)
1457 1468 self.fields = fields
1458 1469
1459 1470 def add(self, **fields):
1460 1471 self.append(Fields(self.fields, **fields))
1461 1472
1462 1473 def __xrepr__(self, mode):
1463 1474 yield (-1, False)
1464 1475 if mode == "header" or mode == "footer":
1465 1476 yield (astyle.style_default, self.__class__.__name__)
1466 1477 yield (astyle.style_default, "(")
1467 1478 for (i, f) in enumerate(self.__fieldnames):
1468 1479 if i:
1469 1480 yield (astyle.style_default, ", ")
1470 1481 yield (astyle.style_default, f)
1471 1482 yield (astyle.style_default, ")")
1472 1483 else:
1473 1484 yield (astyle.style_default, repr(self))
1474 1485
1475 1486 def __repr__(self):
1476 1487 return "<%s.%s object with fields=%r at 0x%x>" % \
1477 1488 (self.__class__.__module__, self.__class__.__name__,
1478 1489 ", ".join(map(repr, self.fields)), id(self))
1479 1490
1480 1491
1481 1492 class List(list):
1482 1493 def __xattrs__(self, mode):
1483 1494 return xrange(len(self))
1484 1495
1485 1496 def __xrepr__(self, mode):
1486 1497 yield (-1, False)
1487 1498 if mode == "header" or mode == "cell" or mode == "footer" or mode == "default":
1488 1499 yield (astyle.style_default, self.__class__.__name__)
1489 1500 yield (astyle.style_default, "(")
1490 1501 for (i, item) in enumerate(self):
1491 1502 if i:
1492 1503 yield (astyle.style_default, ", ")
1493 1504 for part in xrepr(item, "default"):
1494 1505 yield part
1495 1506 yield (astyle.style_default, ")")
1496 1507 else:
1497 1508 yield (astyle.style_default, repr(self))
1498 1509
1499 1510
1500 1511 class ienv(Table):
1501 1512 """
1502 1513 List environment variables.
1503 1514
1504 1515 Example:
1505 1516
1506 1517 >>> ienv
1507 1518 """
1508 1519
1509 1520 def __iter__(self):
1510 1521 fields = ("key", "value")
1511 1522 for (key, value) in os.environ.iteritems():
1512 1523 yield Fields(fields, key=key, value=value)
1513 1524
1514 1525 def __xrepr__(self, mode):
1515 1526 if mode == "header" or mode == "cell":
1516 1527 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1517 1528 else:
1518 1529 yield (astyle.style_default, repr(self))
1519 1530
1520 1531
1521 1532 class icsv(Pipe):
1522 1533 """
1523 1534 This ``Pipe`` lists turn the input (with must be a pipe outputting lines
1524 1535 or an ``ifile``) into lines of CVS columns.
1525 1536 """
1526 1537 def __init__(self, **csvargs):
1527 1538 """
1528 1539 Create an ``icsv`` object. ``cvsargs`` will be passed through as
1529 1540 keyword arguments to ``cvs.reader()``.
1530 1541 """
1531 1542 self.csvargs = csvargs
1532 1543
1533 1544 def __iter__(self):
1534 1545 input = self.input
1535 1546 if isinstance(input, ifile):
1536 1547 input = input.open("rb")
1537 1548 reader = csv.reader(input, **self.csvargs)
1538 1549 for line in reader:
1539 1550 yield List(line)
1540 1551
1541 1552 def __xrepr__(self, mode):
1542 1553 yield (-1, False)
1543 1554 if mode == "header" or mode == "footer":
1544 1555 input = getattr(self, "input", None)
1545 1556 if input is not None:
1546 1557 for part in xrepr(input, mode):
1547 1558 yield part
1548 1559 yield (astyle.style_default, " | ")
1549 1560 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1550 1561 for (i, (name, value)) in enumerate(self.csvargs.iteritems()):
1551 1562 if i:
1552 1563 yield (astyle.style_default, ", ")
1553 1564 yield (astyle.style_default, name)
1554 1565 yield (astyle.style_default, "=")
1555 1566 for part in xrepr(value, "default"):
1556 1567 yield part
1557 1568 yield (astyle.style_default, ")")
1558 1569 else:
1559 1570 yield (astyle.style_default, repr(self))
1560 1571
1561 1572 def __repr__(self):
1562 1573 args = ", ".join(["%s=%r" % item for item in self.csvargs.iteritems()])
1563 1574 return "<%s.%s %s at 0x%x>" % \
1564 1575 (self.__class__.__module__, self.__class__.__name__, args, id(self))
1565 1576
1566 1577
1567 1578 class ix(Table):
1568 1579 """
1569 1580 Execute a system command and list its output as lines
1570 1581 (similar to ``os.popen()``).
1571 1582
1572 1583 Examples:
1573 1584
1574 1585 >>> ix("ps x")
1575 1586 >>> ix("find .") | ifile
1576 1587 """
1577 1588 def __init__(self, cmd):
1578 1589 self.cmd = cmd
1579 1590 self._pipeout = None
1580 1591
1581 1592 def __iter__(self):
1582 1593 (_pipein, self._pipeout) = os.popen4(self.cmd)
1583 1594 _pipein.close()
1584 1595 for l in self._pipeout:
1585 1596 yield l.rstrip("\r\n")
1586 1597 self._pipeout.close()
1587 1598 self._pipeout = None
1588 1599
1589 1600 def __del__(self):
1590 1601 if self._pipeout is not None and not self._pipeout.closed:
1591 1602 self._pipeout.close()
1592 1603 self._pipeout = None
1593 1604
1594 1605 def __xrepr__(self, mode):
1595 1606 if mode == "header" or mode == "footer":
1596 1607 yield (astyle.style_default,
1597 1608 "%s(%r)" % (self.__class__.__name__, self.cmd))
1598 1609 else:
1599 1610 yield (astyle.style_default, repr(self))
1600 1611
1601 1612 def __repr__(self):
1602 1613 return "%s.%s(%r)" % \
1603 1614 (self.__class__.__module__, self.__class__.__name__, self.cmd)
1604 1615
1605 1616
1606 1617 class ifilter(Pipe):
1607 1618 """
1608 1619 Filter an input pipe. Only objects where an expression evaluates to true
1609 1620 (and doesn't raise an exception) are listed.
1610 1621
1611 1622 Examples:
1612 1623
1613 1624 >>> ils | ifilter("_.isfile() and size>1000")
1614 1625 >>> igrp | ifilter("len(mem)")
1615 1626 >>> sys.modules | ifilter(lambda _:_.value is not None)
1616 1627 """
1617 1628
1618 1629 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1619 1630 """
1620 1631 Create an ``ifilter`` object. ``expr`` can be a callable or a string
1621 1632 containing an expression. ``globals`` will be used as the global
1622 1633 namespace for calling string expressions (defaulting to IPython's
1623 1634 user namespace). ``errors`` specifies how exception during evaluation
1624 1635 of ``expr`` are handled:
1625 1636
1626 1637 * ``drop``: drop all items that have errors;
1627 1638
1628 1639 * ``keep``: keep all items that have errors;
1629 1640
1630 1641 * ``keeperror``: keep the exception of all items that have errors;
1631 1642
1632 1643 * ``raise``: raise the exception;
1633 1644
1634 1645 * ``raiseifallfail``: raise the first exception if all items have errors;
1635 1646 otherwise drop those with errors (this is the default).
1636 1647 """
1637 1648 self.expr = expr
1638 1649 self.globals = globals
1639 1650 self.errors = errors
1640 1651
1641 1652 def __iter__(self):
1642 1653 if callable(self.expr):
1643 1654 test = self.expr
1644 1655 else:
1645 1656 g = getglobals(self.globals)
1646 1657 expr = compile(self.expr, "ipipe-expression", "eval")
1647 1658 def test(item):
1648 1659 return eval(expr, g, AttrNamespace(item))
1649 1660
1650 1661 ok = 0
1651 1662 exc_info = None
1652 1663 for item in xiter(self.input):
1653 1664 try:
1654 1665 if test(item):
1655 1666 yield item
1656 1667 ok += 1
1657 1668 except (KeyboardInterrupt, SystemExit):
1658 1669 raise
1659 1670 except Exception, exc:
1660 1671 if self.errors == "drop":
1661 1672 pass # Ignore errors
1662 1673 elif self.errors == "keep":
1663 1674 yield item
1664 1675 elif self.errors == "keeperror":
1665 1676 yield exc
1666 1677 elif self.errors == "raise":
1667 1678 raise
1668 1679 elif self.errors == "raiseifallfail":
1669 1680 if exc_info is None:
1670 1681 exc_info = sys.exc_info()
1671 1682 if not ok and exc_info is not None:
1672 1683 raise exc_info[0], exc_info[1], exc_info[2]
1673 1684
1674 1685 def __xrepr__(self, mode):
1675 1686 if mode == "header" or mode == "footer":
1676 1687 input = getattr(self, "input", None)
1677 1688 if input is not None:
1678 1689 for part in xrepr(input, mode):
1679 1690 yield part
1680 1691 yield (astyle.style_default, " | ")
1681 1692 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1682 1693 for part in xrepr(self.expr, "default"):
1683 1694 yield part
1684 1695 yield (astyle.style_default, ")")
1685 1696 else:
1686 1697 yield (astyle.style_default, repr(self))
1687 1698
1688 1699 def __repr__(self):
1689 1700 return "<%s.%s expr=%r at 0x%x>" % \
1690 1701 (self.__class__.__module__, self.__class__.__name__,
1691 1702 self.expr, id(self))
1692 1703
1693 1704
1694 1705 class ieval(Pipe):
1695 1706 """
1696 1707 Evaluate an expression for each object in the input pipe.
1697 1708
1698 1709 Examples:
1699 1710
1700 1711 >>> ils | ieval("_.abspath()")
1701 1712 >>> sys.path | ieval(ifile)
1702 1713 """
1703 1714
1704 1715 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1705 1716 """
1706 1717 Create an ``ieval`` object. ``expr`` can be a callable or a string
1707 1718 containing an expression. For the meaning of ``globals`` and
1708 1719 ``errors`` see ``ifilter``.
1709 1720 """
1710 1721 self.expr = expr
1711 1722 self.globals = globals
1712 1723 self.errors = errors
1713 1724
1714 1725 def __iter__(self):
1715 1726 if callable(self.expr):
1716 1727 do = self.expr
1717 1728 else:
1718 1729 g = getglobals(self.globals)
1719 1730 expr = compile(self.expr, "ipipe-expression", "eval")
1720 1731 def do(item):
1721 1732 return eval(expr, g, AttrNamespace(item))
1722 1733
1723 1734 ok = 0
1724 1735 exc_info = None
1725 1736 for item in xiter(self.input):
1726 1737 try:
1727 1738 yield do(item)
1728 1739 except (KeyboardInterrupt, SystemExit):
1729 1740 raise
1730 1741 except Exception, exc:
1731 1742 if self.errors == "drop":
1732 1743 pass # Ignore errors
1733 1744 elif self.errors == "keep":
1734 1745 yield item
1735 1746 elif self.errors == "keeperror":
1736 1747 yield exc
1737 1748 elif self.errors == "raise":
1738 1749 raise
1739 1750 elif self.errors == "raiseifallfail":
1740 1751 if exc_info is None:
1741 1752 exc_info = sys.exc_info()
1742 1753 if not ok and exc_info is not None:
1743 1754 raise exc_info[0], exc_info[1], exc_info[2]
1744 1755
1745 1756 def __xrepr__(self, mode):
1746 1757 if mode == "header" or mode == "footer":
1747 1758 input = getattr(self, "input", None)
1748 1759 if input is not None:
1749 1760 for part in xrepr(input, mode):
1750 1761 yield part
1751 1762 yield (astyle.style_default, " | ")
1752 1763 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1753 1764 for part in xrepr(self.expr, "default"):
1754 1765 yield part
1755 1766 yield (astyle.style_default, ")")
1756 1767 else:
1757 1768 yield (astyle.style_default, repr(self))
1758 1769
1759 1770 def __repr__(self):
1760 1771 return "<%s.%s expr=%r at 0x%x>" % \
1761 1772 (self.__class__.__module__, self.__class__.__name__,
1762 1773 self.expr, id(self))
1763 1774
1764 1775
1765 1776 class ienum(Pipe):
1766 1777 """
1767 1778 Enumerate the input pipe (i.e. wrap each input object in an object
1768 1779 with ``index`` and ``object`` attributes).
1769 1780
1770 1781 Examples:
1771 1782
1772 1783 >>> xrange(20) | ieval("_,_*_") | ienum | ifilter("index % 2 == 0") | ieval("object")
1773 1784 """
1774 1785 def __iter__(self):
1775 1786 fields = ("index", "object")
1776 1787 for (index, object) in enumerate(xiter(self.input)):
1777 1788 yield Fields(fields, index=index, object=object)
1778 1789
1779 1790
1780 1791 class isort(Pipe):
1781 1792 """
1782 1793 Sorts the input pipe.
1783 1794
1784 1795 Examples:
1785 1796
1786 1797 >>> ils | isort("size")
1787 1798 >>> ils | isort("_.isdir(), _.lower()", reverse=True)
1788 1799 """
1789 1800
1790 1801 def __init__(self, key=None, globals=None, reverse=False):
1791 1802 """
1792 1803 Create an ``isort`` object. ``key`` can be a callable or a string
1793 1804 containing an expression (or ``None`` in which case the items
1794 1805 themselves will be sorted). If ``reverse`` is true the sort order
1795 1806 will be reversed. For the meaning of ``globals`` see ``ifilter``.
1796 1807 """
1797 1808 self.key = key
1798 1809 self.globals = globals
1799 1810 self.reverse = reverse
1800 1811
1801 1812 def __iter__(self):
1802 1813 if self.key is None:
1803 1814 items = sorted(xiter(self.input), reverse=self.reverse)
1804 1815 elif callable(self.key):
1805 1816 items = sorted(xiter(self.input), key=self.key, reverse=self.reverse)
1806 1817 else:
1807 1818 g = getglobals(self.globals)
1808 1819 key = compile(self.key, "ipipe-expression", "eval")
1809 1820 def realkey(item):
1810 1821 return eval(key, g, AttrNamespace(item))
1811 1822 items = sorted(xiter(self.input), key=realkey, reverse=self.reverse)
1812 1823 for item in items:
1813 1824 yield item
1814 1825
1815 1826 def __xrepr__(self, mode):
1816 1827 if mode == "header" or mode == "footer":
1817 1828 input = getattr(self, "input", None)
1818 1829 if input is not None:
1819 1830 for part in xrepr(input, mode):
1820 1831 yield part
1821 1832 yield (astyle.style_default, " | ")
1822 1833 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1823 1834 for part in xrepr(self.key, "default"):
1824 1835 yield part
1825 1836 if self.reverse:
1826 1837 yield (astyle.style_default, ", ")
1827 1838 for part in xrepr(True, "default"):
1828 1839 yield part
1829 1840 yield (astyle.style_default, ")")
1830 1841 else:
1831 1842 yield (astyle.style_default, repr(self))
1832 1843
1833 1844 def __repr__(self):
1834 1845 return "<%s.%s key=%r reverse=%r at 0x%x>" % \
1835 1846 (self.__class__.__module__, self.__class__.__name__,
1836 1847 self.key, self.reverse, id(self))
1837 1848
1838 1849
1839 1850 tab = 3 # for expandtabs()
1840 1851
1841 1852 def _format(field):
1842 1853 if isinstance(field, str):
1843 1854 text = repr(field.expandtabs(tab))[1:-1]
1844 1855 elif isinstance(field, unicode):
1845 1856 text = repr(field.expandtabs(tab))[2:-1]
1846 1857 elif isinstance(field, datetime.datetime):
1847 1858 # Don't use strftime() here, as this requires year >= 1900
1848 1859 text = "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
1849 1860 (field.year, field.month, field.day,
1850 1861 field.hour, field.minute, field.second, field.microsecond)
1851 1862 elif isinstance(field, datetime.date):
1852 1863 text = "%04d-%02d-%02d" % (field.year, field.month, field.day)
1853 1864 else:
1854 1865 text = repr(field)
1855 1866 return text
1856 1867
1857 1868
1858 1869 class Display(object):
1859 1870 class __metaclass__(type):
1860 1871 def __ror__(self, input):
1861 1872 return input | self()
1862 1873
1863 1874 def __ror__(self, input):
1864 1875 self.input = input
1865 1876 return self
1866 1877
1867 1878 def display(self):
1868 1879 pass
1869 1880
1870 1881
1871 1882 class iless(Display):
1872 1883 cmd = "less --quit-if-one-screen --LONG-PROMPT --LINE-NUMBERS --chop-long-lines --shift=8 --RAW-CONTROL-CHARS"
1873 1884
1874 1885 def display(self):
1875 1886 try:
1876 1887 pager = os.popen(self.cmd, "w")
1877 1888 try:
1878 1889 for item in xiter(self.input, "default"):
1879 1890 attrs = tuple(_upgradexattrs(item, "default"))
1880 1891 attrs = ["%s=%s" % (a.name(item), a.value(item)) for a in attrs]
1881 1892 pager.write(" ".join(attrs))
1882 1893 pager.write("\n")
1883 1894 finally:
1884 1895 pager.close()
1885 1896 except Exception, exc:
1886 1897 print "%s: %s" % (exc.__class__.__name__, str(exc))
1887 1898
1888 1899
1889 1900 def xformat(value, mode, maxlength):
1890 1901 align = None
1891 1902 full = True
1892 1903 width = 0
1893 1904 text = astyle.Text()
1894 1905 for (style, part) in xrepr(value, mode):
1895 1906 # only consider the first result
1896 1907 if align is None:
1897 1908 if isinstance(style, int):
1898 1909 # (style, text) really is (alignment, stop)
1899 1910 align = style
1900 1911 full = part
1901 1912 continue
1902 1913 else:
1903 1914 align = -1
1904 1915 full = True
1905 1916 if not isinstance(style, int):
1906 1917 text.append((style, part))
1907 1918 width += len(part)
1908 1919 if width >= maxlength and not full:
1909 1920 text.append((astyle.style_ellisis, "..."))
1910 1921 width += 3
1911 1922 break
1912 1923 if align is None: # default to left alignment
1913 1924 align = -1
1914 1925 return (align, width, text)
1915 1926
1916 1927
1917 1928 class idump(Display):
1918 1929 # The approximate maximum length of a column entry
1919 1930 maxattrlength = 200
1920 1931
1921 1932 # Style for column names
1922 1933 style_header = astyle.Style.fromstr("white:black:bold")
1923 1934
1924 1935 def __init__(self, *attrs):
1925 1936 self.attrs = [upgradexattr(attr) for attr in attrs]
1926 1937 self.headerpadchar = " "
1927 1938 self.headersepchar = "|"
1928 1939 self.datapadchar = " "
1929 1940 self.datasepchar = "|"
1930 1941
1931 1942 def display(self):
1932 1943 stream = genutils.Term.cout
1933 1944 allattrs = []
1934 1945 attrset = set()
1935 1946 colwidths = {}
1936 1947 rows = []
1937 1948 for item in xiter(self.input, "default"):
1938 1949 row = {}
1939 1950 attrs = self.attrs
1940 1951 if not attrs:
1941 1952 attrs = xattrs(item, "default")
1942 1953 for attr in attrs:
1943 1954 if attr not in attrset:
1944 1955 allattrs.append(attr)
1945 1956 attrset.add(attr)
1946 1957 colwidths[attr] = len(attr.name())
1947 1958 try:
1948 1959 value = attr.value(item)
1949 1960 except (KeyboardInterrupt, SystemExit):
1950 1961 raise
1951 1962 except Exception, exc:
1952 1963 value = exc
1953 1964 (align, width, text) = xformat(value, "cell", self.maxattrlength)
1954 1965 colwidths[attr] = max(colwidths[attr], width)
1955 1966 # remember alignment, length and colored parts
1956 1967 row[attr] = (align, width, text)
1957 1968 rows.append(row)
1958 1969
1959 1970 stream.write("\n")
1960 1971 for (i, attr) in enumerate(allattrs):
1961 1972 attrname = attr.name()
1962 1973 self.style_header(attrname).write(stream)
1963 1974 spc = colwidths[attr] - len(attrname)
1964 1975 if i < len(colwidths)-1:
1965 1976 stream.write(self.headerpadchar*spc)
1966 1977 stream.write(self.headersepchar)
1967 1978 stream.write("\n")
1968 1979
1969 1980 for row in rows:
1970 1981 for (i, attr) in enumerate(allattrs):
1971 1982 (align, width, text) = row[attr]
1972 1983 spc = colwidths[attr] - width
1973 1984 if align == -1:
1974 1985 text.write(stream)
1975 1986 if i < len(colwidths)-1:
1976 1987 stream.write(self.datapadchar*spc)
1977 1988 elif align == 0:
1978 1989 spc = colwidths[attr] - width
1979 1990 spc1 = spc//2
1980 1991 spc2 = spc-spc1
1981 1992 stream.write(self.datapadchar*spc1)
1982 1993 text.write(stream)
1983 1994 if i < len(colwidths)-1:
1984 1995 stream.write(self.datapadchar*spc2)
1985 1996 else:
1986 1997 stream.write(self.datapadchar*spc)
1987 1998 text.write(stream)
1988 1999 if i < len(colwidths)-1:
1989 2000 stream.write(self.datasepchar)
1990 2001 stream.write("\n")
1991 2002
1992 2003
1993 2004 class XMode(object):
1994 2005 """
1995 2006 An ``XMode`` object describes one enter mode available for an object
1996 2007 """
1997 2008 def __init__(self, object, mode, title=None, description=None):
1998 2009 """
1999 2010 Create a new ``XMode`` object for the object ``object``. This object
2000 2011 must support the enter mode ``mode`` (i.e. ``object.__xiter__(mode)``
2001 2012 must return an iterable). ``title`` and ``description`` will be
2002 2013 displayed in the browser when selecting among the available modes.
2003 2014 """
2004 2015 self.object = object
2005 2016 self.mode = mode
2006 2017 self.title = title
2007 2018 self.description = description
2008 2019
2009 2020 def __repr__(self):
2010 2021 return "<%s.%s object mode=%r at 0x%x>" % \
2011 2022 (self.__class__.__module__, self.__class__.__name__,
2012 2023 self.mode, id(self))
2013 2024
2014 2025 def __xrepr__(self, mode):
2015 2026 if mode == "header" or mode == "footer":
2016 2027 yield (astyle.style_default, self.title)
2017 2028 else:
2018 2029 yield (astyle.style_default, repr(self))
2019 2030
2020 2031 def __xattrs__(self, mode):
2021 2032 if mode == "detail":
2022 2033 return ("object", "mode")
2023 2034 else:
2024 2035 return ("object", "mode", "title", "description")
2025 2036
2026 2037 def __xiter__(self, mode):
2027 2038 return xiter(self.object, self.mode)
2028 2039
2029 2040
2030 2041 class AttributeDetail(Table):
2031 2042 def __init__(self, object, descriptor):
2032 2043 self.object = object
2033 2044 self.descriptor = descriptor
2034 2045
2035 2046 def __iter__(self):
2036 2047 return self.descriptor.iter(self.object)
2037 2048
2038 2049 def name(self):
2039 2050 return self.descriptor.name()
2040 2051
2041 2052 def attrtype(self):
2042 2053 return self.descriptor.attrtype(self.object)
2043 2054
2044 2055 def valuetype(self):
2045 2056 return self.descriptor.valuetype(self.object)
2046 2057
2047 2058 def doc(self):
2048 2059 return self.descriptor.doc(self.object)
2049 2060
2050 2061 def shortdoc(self):
2051 2062 return self.descriptor.shortdoc(self.object)
2052 2063
2053 2064 def value(self):
2054 2065 return self.descriptor.value(self.object)
2055 2066
2056 2067 def __xattrs__(self, mode):
2057 2068 attrs = ("name()", "attrtype()", "valuetype()", "value()", "shortdoc()")
2058 2069 if mode == "detail":
2059 2070 attrs += ("doc()",)
2060 2071 return attrs
2061 2072
2062 2073 def __xrepr__(self, mode):
2063 2074 yield (-1, True)
2064 2075 yield (astyle.style_default, self.attrtype())
2065 2076 yield (astyle.style_default, "(")
2066 2077 for part in xrepr(self.valuetype()):
2067 2078 yield part
2068 2079 yield (astyle.style_default, ") ")
2069 2080 yield (astyle.style_default, self.name())
2070 2081 yield (astyle.style_default, " of ")
2071 2082 for part in xrepr(self.object):
2072 2083 yield part
2073 2084
2074 2085
2075 2086 try:
2076 2087 from ibrowse import ibrowse
2077 2088 except ImportError:
2078 2089 # No curses (probably Windows) => use ``idump`` as the default display.
2079 2090 defaultdisplay = idump
2080 2091 else:
2081 2092 defaultdisplay = ibrowse
2082 2093 __all__.append("ibrowse")
2083 2094
2084 2095
2085 2096 # If we're running under IPython, install an IPython displayhook that
2086 2097 # returns the object from Display.display(), else install a displayhook
2087 2098 # directly as sys.displayhook
2088 2099 api = None
2089 2100 if ipapi is not None:
2090 2101 try:
2091 2102 api = ipapi.get()
2092 2103 except AttributeError:
2093 2104 pass
2094 2105
2095 2106 if api is not None:
2096 2107 def displayhook(self, obj):
2097 2108 if isinstance(obj, type) and issubclass(obj, Table):
2098 2109 obj = obj()
2099 2110 if isinstance(obj, Table):
2100 2111 obj = obj | defaultdisplay
2101 2112 if isinstance(obj, Display):
2102 2113 return obj.display()
2103 2114 else:
2104 2115 raise ipapi.TryNext
2105 2116 api.set_hook("result_display", displayhook)
2106 2117 else:
2107 2118 def installdisplayhook():
2108 2119 _originalhook = sys.displayhook
2109 2120 def displayhook(obj):
2110 2121 if isinstance(obj, type) and issubclass(obj, Table):
2111 2122 obj = obj()
2112 2123 if isinstance(obj, Table):
2113 2124 obj = obj | defaultdisplay
2114 2125 if isinstance(obj, Display):
2115 2126 return obj.display()
2116 2127 else:
2117 2128 _originalhook(obj)
2118 2129 sys.displayhook = displayhook
2119 2130 installdisplayhook()
@@ -1,5724 +1,5730 b''
1 2006-08-25 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
4 the constructor, this makes it possible to get a list of only directories
5 or only files.
6
1 7 2006-08-12 Ville Vainio <vivainio@gmail.com>
2 8
3 9 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
4 10 they broke unittest
5 11
6 12 2006-08-11 Ville Vainio <vivainio@gmail.com>
7 13
8 14 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
9 15 by resolving issue properly, i.e. by inheriting FakeModule
10 16 from types.ModuleType. Pickling ipython interactive data
11 17 should still work as usual (testing appreciated).
12 18
13 19 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
14 20
15 21 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
16 22 running under python 2.3 with code from 2.4 to fix a bug with
17 23 help(). Reported by the Debian maintainers, Norbert Tretkowski
18 24 <norbert-AT-tretkowski.de> and Alexandre Fayolle
19 25 <afayolle-AT-debian.org>.
20 26
21 27 2006-08-04 Walter Doerwald <walter@livinglogic.de>
22 28
23 29 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
24 30 (which was displaying "quit" twice).
25 31
26 32 2006-07-28 Walter Doerwald <walter@livinglogic.de>
27 33
28 34 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
29 35 the mode argument).
30 36
31 37 2006-07-27 Walter Doerwald <walter@livinglogic.de>
32 38
33 39 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
34 40 not running under IPython.
35 41
36 42 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
37 43 and make it iterable (iterating over the attribute itself). Add two new
38 44 magic strings for __xattrs__(): If the string starts with "-", the attribute
39 45 will not be displayed in ibrowse's detail view (but it can still be
40 46 iterated over). This makes it possible to add attributes that are large
41 47 lists or generator methods to the detail view. Replace magic attribute names
42 48 and _attrname() and _getattr() with "descriptors": For each type of magic
43 49 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
44 50 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
45 51 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
46 52 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
47 53 are still supported.
48 54
49 55 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
50 56 fails in ibrowse.fetch(), the exception object is added as the last item
51 57 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
52 58 a generator throws an exception midway through execution.
53 59
54 60 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
55 61 encoding into methods.
56 62
57 63 2006-07-26 Ville Vainio <vivainio@gmail.com>
58 64
59 65 * iplib.py: history now stores multiline input as single
60 66 history entries. Patch by Jorgen Cederlof.
61 67
62 68 2006-07-18 Walter Doerwald <walter@livinglogic.de>
63 69
64 70 * IPython/Extensions/ibrowse.py: Make cursor visible over
65 71 non existing attributes.
66 72
67 73 2006-07-14 Walter Doerwald <walter@livinglogic.de>
68 74
69 75 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
70 76 error output of the running command doesn't mess up the screen.
71 77
72 78 2006-07-13 Walter Doerwald <walter@livinglogic.de>
73 79
74 80 * IPython/Extensions/ipipe.py (isort): Make isort usable without
75 81 argument. This sorts the items themselves.
76 82
77 83 2006-07-12 Walter Doerwald <walter@livinglogic.de>
78 84
79 85 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
80 86 Compile expression strings into code objects. This should speed
81 87 up ifilter and friends somewhat.
82 88
83 89 2006-07-08 Ville Vainio <vivainio@gmail.com>
84 90
85 91 * Magic.py: %cpaste now strips > from the beginning of lines
86 92 to ease pasting quoted code from emails. Contributed by
87 93 Stefan van der Walt.
88 94
89 95 2006-06-29 Ville Vainio <vivainio@gmail.com>
90 96
91 97 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
92 98 mode, patch contributed by Darren Dale. NEEDS TESTING!
93 99
94 100 2006-06-28 Walter Doerwald <walter@livinglogic.de>
95 101
96 102 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
97 103 a blue background. Fix fetching new display rows when the browser
98 104 scrolls more than a screenful (e.g. by using the goto command).
99 105
100 106 2006-06-27 Ville Vainio <vivainio@gmail.com>
101 107
102 108 * Magic.py (_inspect, _ofind) Apply David Huard's
103 109 patch for displaying the correct docstring for 'property'
104 110 attributes.
105 111
106 112 2006-06-23 Walter Doerwald <walter@livinglogic.de>
107 113
108 114 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
109 115 commands into the methods implementing them.
110 116
111 117 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
112 118
113 119 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
114 120 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
115 121 autoindent support was authored by Jin Liu.
116 122
117 123 2006-06-22 Walter Doerwald <walter@livinglogic.de>
118 124
119 125 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
120 126 for keymaps with a custom class that simplifies handling.
121 127
122 128 2006-06-19 Walter Doerwald <walter@livinglogic.de>
123 129
124 130 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
125 131 resizing. This requires Python 2.5 to work.
126 132
127 133 2006-06-16 Walter Doerwald <walter@livinglogic.de>
128 134
129 135 * IPython/Extensions/ibrowse.py: Add two new commands to
130 136 ibrowse: "hideattr" (mapped to "h") hides the attribute under
131 137 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
132 138 attributes again. Remapped the help command to "?". Display
133 139 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
134 140 as keys for the "home" and "end" commands. Add three new commands
135 141 to the input mode for "find" and friends: "delend" (CTRL-K)
136 142 deletes to the end of line. "incsearchup" searches upwards in the
137 143 command history for an input that starts with the text before the cursor.
138 144 "incsearchdown" does the same downwards. Removed a bogus mapping of
139 145 the x key to "delete".
140 146
141 147 2006-06-15 Ville Vainio <vivainio@gmail.com>
142 148
143 149 * iplib.py, hooks.py: Added new generate_prompt hook that can be
144 150 used to create prompts dynamically, instead of the "old" way of
145 151 assigning "magic" strings to prompt_in1 and prompt_in2. The old
146 152 way still works (it's invoked by the default hook), of course.
147 153
148 154 * Prompts.py: added generate_output_prompt hook for altering output
149 155 prompt
150 156
151 157 * Release.py: Changed version string to 0.7.3.svn.
152 158
153 159 2006-06-15 Walter Doerwald <walter@livinglogic.de>
154 160
155 161 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
156 162 the call to fetch() always tries to fetch enough data for at least one
157 163 full screen. This makes it possible to simply call moveto(0,0,True) in
158 164 the constructor. Fix typos and removed the obsolete goto attribute.
159 165
160 166 2006-06-12 Ville Vainio <vivainio@gmail.com>
161 167
162 168 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
163 169 allowing $variable interpolation within multiline statements,
164 170 though so far only with "sh" profile for a testing period.
165 171 The patch also enables splitting long commands with \ but it
166 172 doesn't work properly yet.
167 173
168 174 2006-06-12 Walter Doerwald <walter@livinglogic.de>
169 175
170 176 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
171 177 input history and the position of the cursor in the input history for
172 178 the find, findbackwards and goto command.
173 179
174 180 2006-06-10 Walter Doerwald <walter@livinglogic.de>
175 181
176 182 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
177 183 implements the basic functionality of browser commands that require
178 184 input. Reimplement the goto, find and findbackwards commands as
179 185 subclasses of _CommandInput. Add an input history and keymaps to those
180 186 commands. Add "\r" as a keyboard shortcut for the enterdefault and
181 187 execute commands.
182 188
183 189 2006-06-07 Ville Vainio <vivainio@gmail.com>
184 190
185 191 * iplib.py: ipython mybatch.ipy exits ipython immediately after
186 192 running the batch files instead of leaving the session open.
187 193
188 194 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
189 195
190 196 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
191 197 the original fix was incomplete. Patch submitted by W. Maier.
192 198
193 199 2006-06-07 Ville Vainio <vivainio@gmail.com>
194 200
195 201 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
196 202 Confirmation prompts can be supressed by 'quiet' option.
197 203 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
198 204
199 205 2006-06-06 *** Released version 0.7.2
200 206
201 207 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
202 208
203 209 * IPython/Release.py (version): Made 0.7.2 final for release.
204 210 Repo tagged and release cut.
205 211
206 212 2006-06-05 Ville Vainio <vivainio@gmail.com>
207 213
208 214 * Magic.py (magic_rehashx): Honor no_alias list earlier in
209 215 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
210 216
211 217 * upgrade_dir.py: try import 'path' module a bit harder
212 218 (for %upgrade)
213 219
214 220 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
215 221
216 222 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
217 223 instead of looping 20 times.
218 224
219 225 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
220 226 correctly at initialization time. Bug reported by Krishna Mohan
221 227 Gundu <gkmohan-AT-gmail.com> on the user list.
222 228
223 229 * IPython/Release.py (version): Mark 0.7.2 version to start
224 230 testing for release on 06/06.
225 231
226 232 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
227 233
228 234 * scripts/irunner: thin script interface so users don't have to
229 235 find the module and call it as an executable, since modules rarely
230 236 live in people's PATH.
231 237
232 238 * IPython/irunner.py (InteractiveRunner.__init__): added
233 239 delaybeforesend attribute to control delays with newer versions of
234 240 pexpect. Thanks to detailed help from pexpect's author, Noah
235 241 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
236 242 correctly (it works in NoColor mode).
237 243
238 244 * IPython/iplib.py (handle_normal): fix nasty crash reported on
239 245 SAGE list, from improper log() calls.
240 246
241 247 2006-05-31 Ville Vainio <vivainio@gmail.com>
242 248
243 249 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
244 250 with args in parens to work correctly with dirs that have spaces.
245 251
246 252 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
247 253
248 254 * IPython/Logger.py (Logger.logstart): add option to log raw input
249 255 instead of the processed one. A -r flag was added to the
250 256 %logstart magic used for controlling logging.
251 257
252 258 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
253 259
254 260 * IPython/iplib.py (InteractiveShell.__init__): add check for the
255 261 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
256 262 recognize the option. After a bug report by Will Maier. This
257 263 closes #64 (will do it after confirmation from W. Maier).
258 264
259 265 * IPython/irunner.py: New module to run scripts as if manually
260 266 typed into an interactive environment, based on pexpect. After a
261 267 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
262 268 ipython-user list. Simple unittests in the tests/ directory.
263 269
264 270 * tools/release: add Will Maier, OpenBSD port maintainer, to
265 271 recepients list. We are now officially part of the OpenBSD ports:
266 272 http://www.openbsd.org/ports.html ! Many thanks to Will for the
267 273 work.
268 274
269 275 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
270 276
271 277 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
272 278 so that it doesn't break tkinter apps.
273 279
274 280 * IPython/iplib.py (_prefilter): fix bug where aliases would
275 281 shadow variables when autocall was fully off. Reported by SAGE
276 282 author William Stein.
277 283
278 284 * IPython/OInspect.py (Inspector.__init__): add a flag to control
279 285 at what detail level strings are computed when foo? is requested.
280 286 This allows users to ask for example that the string form of an
281 287 object is only computed when foo?? is called, or even never, by
282 288 setting the object_info_string_level >= 2 in the configuration
283 289 file. This new option has been added and documented. After a
284 290 request by SAGE to be able to control the printing of very large
285 291 objects more easily.
286 292
287 293 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
288 294
289 295 * IPython/ipmaker.py (make_IPython): remove the ipython call path
290 296 from sys.argv, to be 100% consistent with how Python itself works
291 297 (as seen for example with python -i file.py). After a bug report
292 298 by Jeffrey Collins.
293 299
294 300 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
295 301 nasty bug which was preventing custom namespaces with -pylab,
296 302 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
297 303 compatibility (long gone from mpl).
298 304
299 305 * IPython/ipapi.py (make_session): name change: create->make. We
300 306 use make in other places (ipmaker,...), it's shorter and easier to
301 307 type and say, etc. I'm trying to clean things before 0.7.2 so
302 308 that I can keep things stable wrt to ipapi in the chainsaw branch.
303 309
304 310 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
305 311 python-mode recognizes our debugger mode. Add support for
306 312 autoindent inside (X)emacs. After a patch sent in by Jin Liu
307 313 <m.liu.jin-AT-gmail.com> originally written by
308 314 doxgen-AT-newsmth.net (with minor modifications for xemacs
309 315 compatibility)
310 316
311 317 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
312 318 tracebacks when walking the stack so that the stack tracking system
313 319 in emacs' python-mode can identify the frames correctly.
314 320
315 321 * IPython/ipmaker.py (make_IPython): make the internal (and
316 322 default config) autoedit_syntax value false by default. Too many
317 323 users have complained to me (both on and off-list) about problems
318 324 with this option being on by default, so I'm making it default to
319 325 off. It can still be enabled by anyone via the usual mechanisms.
320 326
321 327 * IPython/completer.py (Completer.attr_matches): add support for
322 328 PyCrust-style _getAttributeNames magic method. Patch contributed
323 329 by <mscott-AT-goldenspud.com>. Closes #50.
324 330
325 331 * IPython/iplib.py (InteractiveShell.__init__): remove the
326 332 deletion of exit/quit from __builtin__, which can break
327 333 third-party tools like the Zope debugging console. The
328 334 %exit/%quit magics remain. In general, it's probably a good idea
329 335 not to delete anything from __builtin__, since we never know what
330 336 that will break. In any case, python now (for 2.5) will support
331 337 'real' exit/quit, so this issue is moot. Closes #55.
332 338
333 339 * IPython/genutils.py (with_obj): rename the 'with' function to
334 340 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
335 341 becomes a language keyword. Closes #53.
336 342
337 343 * IPython/FakeModule.py (FakeModule.__init__): add a proper
338 344 __file__ attribute to this so it fools more things into thinking
339 345 it is a real module. Closes #59.
340 346
341 347 * IPython/Magic.py (magic_edit): add -n option to open the editor
342 348 at a specific line number. After a patch by Stefan van der Walt.
343 349
344 350 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
345 351
346 352 * IPython/iplib.py (edit_syntax_error): fix crash when for some
347 353 reason the file could not be opened. After automatic crash
348 354 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
349 355 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
350 356 (_should_recompile): Don't fire editor if using %bg, since there
351 357 is no file in the first place. From the same report as above.
352 358 (raw_input): protect against faulty third-party prefilters. After
353 359 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
354 360 while running under SAGE.
355 361
356 362 2006-05-23 Ville Vainio <vivainio@gmail.com>
357 363
358 364 * ipapi.py: Stripped down ip.to_user_ns() to work only as
359 365 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
360 366 now returns None (again), unless dummy is specifically allowed by
361 367 ipapi.get(allow_dummy=True).
362 368
363 369 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
364 370
365 371 * IPython: remove all 2.2-compatibility objects and hacks from
366 372 everywhere, since we only support 2.3 at this point. Docs
367 373 updated.
368 374
369 375 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
370 376 Anything requiring extra validation can be turned into a Python
371 377 property in the future. I used a property for the db one b/c
372 378 there was a nasty circularity problem with the initialization
373 379 order, which right now I don't have time to clean up.
374 380
375 381 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
376 382 another locking bug reported by Jorgen. I'm not 100% sure though,
377 383 so more testing is needed...
378 384
379 385 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
380 386
381 387 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
382 388 local variables from any routine in user code (typically executed
383 389 with %run) directly into the interactive namespace. Very useful
384 390 when doing complex debugging.
385 391 (IPythonNotRunning): Changed the default None object to a dummy
386 392 whose attributes can be queried as well as called without
387 393 exploding, to ease writing code which works transparently both in
388 394 and out of ipython and uses some of this API.
389 395
390 396 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
391 397
392 398 * IPython/hooks.py (result_display): Fix the fact that our display
393 399 hook was using str() instead of repr(), as the default python
394 400 console does. This had gone unnoticed b/c it only happened if
395 401 %Pprint was off, but the inconsistency was there.
396 402
397 403 2006-05-15 Ville Vainio <vivainio@gmail.com>
398 404
399 405 * Oinspect.py: Only show docstring for nonexisting/binary files
400 406 when doing object??, closing ticket #62
401 407
402 408 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
403 409
404 410 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
405 411 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
406 412 was being released in a routine which hadn't checked if it had
407 413 been the one to acquire it.
408 414
409 415 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
410 416
411 417 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
412 418
413 419 2006-04-11 Ville Vainio <vivainio@gmail.com>
414 420
415 421 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
416 422 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
417 423 prefilters, allowing stuff like magics and aliases in the file.
418 424
419 425 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
420 426 added. Supported now are "%clear in" and "%clear out" (clear input and
421 427 output history, respectively). Also fixed CachedOutput.flush to
422 428 properly flush the output cache.
423 429
424 430 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
425 431 half-success (and fail explicitly).
426 432
427 433 2006-03-28 Ville Vainio <vivainio@gmail.com>
428 434
429 435 * iplib.py: Fix quoting of aliases so that only argless ones
430 436 are quoted
431 437
432 438 2006-03-28 Ville Vainio <vivainio@gmail.com>
433 439
434 440 * iplib.py: Quote aliases with spaces in the name.
435 441 "c:\program files\blah\bin" is now legal alias target.
436 442
437 443 * ext_rehashdir.py: Space no longer allowed as arg
438 444 separator, since space is legal in path names.
439 445
440 446 2006-03-16 Ville Vainio <vivainio@gmail.com>
441 447
442 448 * upgrade_dir.py: Take path.py from Extensions, correcting
443 449 %upgrade magic
444 450
445 451 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
446 452
447 453 * hooks.py: Only enclose editor binary in quotes if legal and
448 454 necessary (space in the name, and is an existing file). Fixes a bug
449 455 reported by Zachary Pincus.
450 456
451 457 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
452 458
453 459 * Manual: thanks to a tip on proper color handling for Emacs, by
454 460 Eric J Haywiser <ejh1-AT-MIT.EDU>.
455 461
456 462 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
457 463 by applying the provided patch. Thanks to Liu Jin
458 464 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
459 465 XEmacs/Linux, I'm trusting the submitter that it actually helps
460 466 under win32/GNU Emacs. Will revisit if any problems are reported.
461 467
462 468 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
463 469
464 470 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
465 471 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
466 472
467 473 2006-03-12 Ville Vainio <vivainio@gmail.com>
468 474
469 475 * Magic.py (magic_timeit): Added %timeit magic, contributed by
470 476 Torsten Marek.
471 477
472 478 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
473 479
474 480 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
475 481 line ranges works again.
476 482
477 483 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
478 484
479 485 * IPython/iplib.py (showtraceback): add back sys.last_traceback
480 486 and friends, after a discussion with Zach Pincus on ipython-user.
481 487 I'm not 100% sure, but after thinking about it quite a bit, it may
482 488 be OK. Testing with the multithreaded shells didn't reveal any
483 489 problems, but let's keep an eye out.
484 490
485 491 In the process, I fixed a few things which were calling
486 492 self.InteractiveTB() directly (like safe_execfile), which is a
487 493 mistake: ALL exception reporting should be done by calling
488 494 self.showtraceback(), which handles state and tab-completion and
489 495 more.
490 496
491 497 2006-03-01 Ville Vainio <vivainio@gmail.com>
492 498
493 499 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
494 500 To use, do "from ipipe import *".
495 501
496 502 2006-02-24 Ville Vainio <vivainio@gmail.com>
497 503
498 504 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
499 505 "cleanly" and safely than the older upgrade mechanism.
500 506
501 507 2006-02-21 Ville Vainio <vivainio@gmail.com>
502 508
503 509 * Magic.py: %save works again.
504 510
505 511 2006-02-15 Ville Vainio <vivainio@gmail.com>
506 512
507 513 * Magic.py: %Pprint works again
508 514
509 515 * Extensions/ipy_sane_defaults.py: Provide everything provided
510 516 in default ipythonrc, to make it possible to have a completely empty
511 517 ipythonrc (and thus completely rc-file free configuration)
512 518
513 519 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
514 520
515 521 * IPython/hooks.py (editor): quote the call to the editor command,
516 522 to allow commands with spaces in them. Problem noted by watching
517 523 Ian Oswald's video about textpad under win32 at
518 524 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
519 525
520 526 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
521 527 describing magics (we haven't used @ for a loong time).
522 528
523 529 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
524 530 contributed by marienz to close
525 531 http://www.scipy.net/roundup/ipython/issue53.
526 532
527 533 2006-02-10 Ville Vainio <vivainio@gmail.com>
528 534
529 535 * genutils.py: getoutput now works in win32 too
530 536
531 537 * completer.py: alias and magic completion only invoked
532 538 at the first "item" in the line, to avoid "cd %store"
533 539 nonsense.
534 540
535 541 2006-02-09 Ville Vainio <vivainio@gmail.com>
536 542
537 543 * test/*: Added a unit testing framework (finally).
538 544 '%run runtests.py' to run test_*.
539 545
540 546 * ipapi.py: Exposed runlines and set_custom_exc
541 547
542 548 2006-02-07 Ville Vainio <vivainio@gmail.com>
543 549
544 550 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
545 551 instead use "f(1 2)" as before.
546 552
547 553 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
548 554
549 555 * IPython/demo.py (IPythonDemo): Add new classes to the demo
550 556 facilities, for demos processed by the IPython input filter
551 557 (IPythonDemo), and for running a script one-line-at-a-time as a
552 558 demo, both for pure Python (LineDemo) and for IPython-processed
553 559 input (IPythonLineDemo). After a request by Dave Kohel, from the
554 560 SAGE team.
555 561 (Demo.edit): added an edit() method to the demo objects, to edit
556 562 the in-memory copy of the last executed block.
557 563
558 564 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
559 565 processing to %edit, %macro and %save. These commands can now be
560 566 invoked on the unprocessed input as it was typed by the user
561 567 (without any prefilters applied). After requests by the SAGE team
562 568 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
563 569
564 570 2006-02-01 Ville Vainio <vivainio@gmail.com>
565 571
566 572 * setup.py, eggsetup.py: easy_install ipython==dev works
567 573 correctly now (on Linux)
568 574
569 575 * ipy_user_conf,ipmaker: user config changes, removed spurious
570 576 warnings
571 577
572 578 * iplib: if rc.banner is string, use it as is.
573 579
574 580 * Magic: %pycat accepts a string argument and pages it's contents.
575 581
576 582
577 583 2006-01-30 Ville Vainio <vivainio@gmail.com>
578 584
579 585 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
580 586 Now %store and bookmarks work through PickleShare, meaning that
581 587 concurrent access is possible and all ipython sessions see the
582 588 same database situation all the time, instead of snapshot of
583 589 the situation when the session was started. Hence, %bookmark
584 590 results are immediately accessible from othes sessions. The database
585 591 is also available for use by user extensions. See:
586 592 http://www.python.org/pypi/pickleshare
587 593
588 594 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
589 595
590 596 * aliases can now be %store'd
591 597
592 598 * path.py moved to Extensions so that pickleshare does not need
593 599 IPython-specific import. Extensions added to pythonpath right
594 600 at __init__.
595 601
596 602 * iplib.py: ipalias deprecated/redundant; aliases are converted and
597 603 called with _ip.system and the pre-transformed command string.
598 604
599 605 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
600 606
601 607 * IPython/iplib.py (interact): Fix that we were not catching
602 608 KeyboardInterrupt exceptions properly. I'm not quite sure why the
603 609 logic here had to change, but it's fixed now.
604 610
605 611 2006-01-29 Ville Vainio <vivainio@gmail.com>
606 612
607 613 * iplib.py: Try to import pyreadline on Windows.
608 614
609 615 2006-01-27 Ville Vainio <vivainio@gmail.com>
610 616
611 617 * iplib.py: Expose ipapi as _ip in builtin namespace.
612 618 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
613 619 and ip_set_hook (-> _ip.set_hook) redundant. % and !
614 620 syntax now produce _ip.* variant of the commands.
615 621
616 622 * "_ip.options().autoedit_syntax = 2" automatically throws
617 623 user to editor for syntax error correction without prompting.
618 624
619 625 2006-01-27 Ville Vainio <vivainio@gmail.com>
620 626
621 627 * ipmaker.py: Give "realistic" sys.argv for scripts (without
622 628 'ipython' at argv[0]) executed through command line.
623 629 NOTE: this DEPRECATES calling ipython with multiple scripts
624 630 ("ipython a.py b.py c.py")
625 631
626 632 * iplib.py, hooks.py: Added configurable input prefilter,
627 633 named 'input_prefilter'. See ext_rescapture.py for example
628 634 usage.
629 635
630 636 * ext_rescapture.py, Magic.py: Better system command output capture
631 637 through 'var = !ls' (deprecates user-visible %sc). Same notation
632 638 applies for magics, 'var = %alias' assigns alias list to var.
633 639
634 640 * ipapi.py: added meta() for accessing extension-usable data store.
635 641
636 642 * iplib.py: added InteractiveShell.getapi(). New magics should be
637 643 written doing self.getapi() instead of using the shell directly.
638 644
639 645 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
640 646 %store foo >> ~/myfoo.txt to store variables to files (in clean
641 647 textual form, not a restorable pickle).
642 648
643 649 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
644 650
645 651 * usage.py, Magic.py: added %quickref
646 652
647 653 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
648 654
649 655 * GetoptErrors when invoking magics etc. with wrong args
650 656 are now more helpful:
651 657 GetoptError: option -l not recognized (allowed: "qb" )
652 658
653 659 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
654 660
655 661 * IPython/demo.py (Demo.show): Flush stdout after each block, so
656 662 computationally intensive blocks don't appear to stall the demo.
657 663
658 664 2006-01-24 Ville Vainio <vivainio@gmail.com>
659 665
660 666 * iplib.py, hooks.py: 'result_display' hook can return a non-None
661 667 value to manipulate resulting history entry.
662 668
663 669 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
664 670 to instance methods of IPApi class, to make extending an embedded
665 671 IPython feasible. See ext_rehashdir.py for example usage.
666 672
667 673 * Merged 1071-1076 from branches/0.7.1
668 674
669 675
670 676 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
671 677
672 678 * tools/release (daystamp): Fix build tools to use the new
673 679 eggsetup.py script to build lightweight eggs.
674 680
675 681 * Applied changesets 1062 and 1064 before 0.7.1 release.
676 682
677 683 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
678 684 see the raw input history (without conversions like %ls ->
679 685 ipmagic("ls")). After a request from W. Stein, SAGE
680 686 (http://modular.ucsd.edu/sage) developer. This information is
681 687 stored in the input_hist_raw attribute of the IPython instance, so
682 688 developers can access it if needed (it's an InputList instance).
683 689
684 690 * Versionstring = 0.7.2.svn
685 691
686 692 * eggsetup.py: A separate script for constructing eggs, creates
687 693 proper launch scripts even on Windows (an .exe file in
688 694 \python24\scripts).
689 695
690 696 * ipapi.py: launch_new_instance, launch entry point needed for the
691 697 egg.
692 698
693 699 2006-01-23 Ville Vainio <vivainio@gmail.com>
694 700
695 701 * Added %cpaste magic for pasting python code
696 702
697 703 2006-01-22 Ville Vainio <vivainio@gmail.com>
698 704
699 705 * Merge from branches/0.7.1 into trunk, revs 1052-1057
700 706
701 707 * Versionstring = 0.7.2.svn
702 708
703 709 * eggsetup.py: A separate script for constructing eggs, creates
704 710 proper launch scripts even on Windows (an .exe file in
705 711 \python24\scripts).
706 712
707 713 * ipapi.py: launch_new_instance, launch entry point needed for the
708 714 egg.
709 715
710 716 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
711 717
712 718 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
713 719 %pfile foo would print the file for foo even if it was a binary.
714 720 Now, extensions '.so' and '.dll' are skipped.
715 721
716 722 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
717 723 bug, where macros would fail in all threaded modes. I'm not 100%
718 724 sure, so I'm going to put out an rc instead of making a release
719 725 today, and wait for feedback for at least a few days.
720 726
721 727 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
722 728 it...) the handling of pasting external code with autoindent on.
723 729 To get out of a multiline input, the rule will appear for most
724 730 users unchanged: two blank lines or change the indent level
725 731 proposed by IPython. But there is a twist now: you can
726 732 add/subtract only *one or two spaces*. If you add/subtract three
727 733 or more (unless you completely delete the line), IPython will
728 734 accept that line, and you'll need to enter a second one of pure
729 735 whitespace. I know it sounds complicated, but I can't find a
730 736 different solution that covers all the cases, with the right
731 737 heuristics. Hopefully in actual use, nobody will really notice
732 738 all these strange rules and things will 'just work'.
733 739
734 740 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
735 741
736 742 * IPython/iplib.py (interact): catch exceptions which can be
737 743 triggered asynchronously by signal handlers. Thanks to an
738 744 automatic crash report, submitted by Colin Kingsley
739 745 <tercel-AT-gentoo.org>.
740 746
741 747 2006-01-20 Ville Vainio <vivainio@gmail.com>
742 748
743 749 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
744 750 (%rehashdir, very useful, try it out) of how to extend ipython
745 751 with new magics. Also added Extensions dir to pythonpath to make
746 752 importing extensions easy.
747 753
748 754 * %store now complains when trying to store interactively declared
749 755 classes / instances of those classes.
750 756
751 757 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
752 758 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
753 759 if they exist, and ipy_user_conf.py with some defaults is created for
754 760 the user.
755 761
756 762 * Startup rehashing done by the config file, not InterpreterExec.
757 763 This means system commands are available even without selecting the
758 764 pysh profile. It's the sensible default after all.
759 765
760 766 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
761 767
762 768 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
763 769 multiline code with autoindent on working. But I am really not
764 770 sure, so this needs more testing. Will commit a debug-enabled
765 771 version for now, while I test it some more, so that Ville and
766 772 others may also catch any problems. Also made
767 773 self.indent_current_str() a method, to ensure that there's no
768 774 chance of the indent space count and the corresponding string
769 775 falling out of sync. All code needing the string should just call
770 776 the method.
771 777
772 778 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
773 779
774 780 * IPython/Magic.py (magic_edit): fix check for when users don't
775 781 save their output files, the try/except was in the wrong section.
776 782
777 783 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
778 784
779 785 * IPython/Magic.py (magic_run): fix __file__ global missing from
780 786 script's namespace when executed via %run. After a report by
781 787 Vivian.
782 788
783 789 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
784 790 when using python 2.4. The parent constructor changed in 2.4, and
785 791 we need to track it directly (we can't call it, as it messes up
786 792 readline and tab-completion inside our pdb would stop working).
787 793 After a bug report by R. Bernstein <rocky-AT-panix.com>.
788 794
789 795 2006-01-16 Ville Vainio <vivainio@gmail.com>
790 796
791 797 * Ipython/magic.py: Reverted back to old %edit functionality
792 798 that returns file contents on exit.
793 799
794 800 * IPython/path.py: Added Jason Orendorff's "path" module to
795 801 IPython tree, http://www.jorendorff.com/articles/python/path/.
796 802 You can get path objects conveniently through %sc, and !!, e.g.:
797 803 sc files=ls
798 804 for p in files.paths: # or files.p
799 805 print p,p.mtime
800 806
801 807 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
802 808 now work again without considering the exclusion regexp -
803 809 hence, things like ',foo my/path' turn to 'foo("my/path")'
804 810 instead of syntax error.
805 811
806 812
807 813 2006-01-14 Ville Vainio <vivainio@gmail.com>
808 814
809 815 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
810 816 ipapi decorators for python 2.4 users, options() provides access to rc
811 817 data.
812 818
813 819 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
814 820 as path separators (even on Linux ;-). Space character after
815 821 backslash (as yielded by tab completer) is still space;
816 822 "%cd long\ name" works as expected.
817 823
818 824 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
819 825 as "chain of command", with priority. API stays the same,
820 826 TryNext exception raised by a hook function signals that
821 827 current hook failed and next hook should try handling it, as
822 828 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
823 829 requested configurable display hook, which is now implemented.
824 830
825 831 2006-01-13 Ville Vainio <vivainio@gmail.com>
826 832
827 833 * IPython/platutils*.py: platform specific utility functions,
828 834 so far only set_term_title is implemented (change terminal
829 835 label in windowing systems). %cd now changes the title to
830 836 current dir.
831 837
832 838 * IPython/Release.py: Added myself to "authors" list,
833 839 had to create new files.
834 840
835 841 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
836 842 shell escape; not a known bug but had potential to be one in the
837 843 future.
838 844
839 845 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
840 846 extension API for IPython! See the module for usage example. Fix
841 847 OInspect for docstring-less magic functions.
842 848
843 849
844 850 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
845 851
846 852 * IPython/iplib.py (raw_input): temporarily deactivate all
847 853 attempts at allowing pasting of code with autoindent on. It
848 854 introduced bugs (reported by Prabhu) and I can't seem to find a
849 855 robust combination which works in all cases. Will have to revisit
850 856 later.
851 857
852 858 * IPython/genutils.py: remove isspace() function. We've dropped
853 859 2.2 compatibility, so it's OK to use the string method.
854 860
855 861 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
856 862
857 863 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
858 864 matching what NOT to autocall on, to include all python binary
859 865 operators (including things like 'and', 'or', 'is' and 'in').
860 866 Prompted by a bug report on 'foo & bar', but I realized we had
861 867 many more potential bug cases with other operators. The regexp is
862 868 self.re_exclude_auto, it's fairly commented.
863 869
864 870 2006-01-12 Ville Vainio <vivainio@gmail.com>
865 871
866 872 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
867 873 Prettified and hardened string/backslash quoting with ipsystem(),
868 874 ipalias() and ipmagic(). Now even \ characters are passed to
869 875 %magics, !shell escapes and aliases exactly as they are in the
870 876 ipython command line. Should improve backslash experience,
871 877 particularly in Windows (path delimiter for some commands that
872 878 won't understand '/'), but Unix benefits as well (regexps). %cd
873 879 magic still doesn't support backslash path delimiters, though. Also
874 880 deleted all pretense of supporting multiline command strings in
875 881 !system or %magic commands. Thanks to Jerry McRae for suggestions.
876 882
877 883 * doc/build_doc_instructions.txt added. Documentation on how to
878 884 use doc/update_manual.py, added yesterday. Both files contributed
879 885 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
880 886 doc/*.sh for deprecation at a later date.
881 887
882 888 * /ipython.py Added ipython.py to root directory for
883 889 zero-installation (tar xzvf ipython.tgz; cd ipython; python
884 890 ipython.py) and development convenience (no need to keep doing
885 891 "setup.py install" between changes).
886 892
887 893 * Made ! and !! shell escapes work (again) in multiline expressions:
888 894 if 1:
889 895 !ls
890 896 !!ls
891 897
892 898 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
893 899
894 900 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
895 901 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
896 902 module in case-insensitive installation. Was causing crashes
897 903 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
898 904
899 905 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
900 906 <marienz-AT-gentoo.org>, closes
901 907 http://www.scipy.net/roundup/ipython/issue51.
902 908
903 909 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
904 910
905 911 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
906 912 problem of excessive CPU usage under *nix and keyboard lag under
907 913 win32.
908 914
909 915 2006-01-10 *** Released version 0.7.0
910 916
911 917 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
912 918
913 919 * IPython/Release.py (revision): tag version number to 0.7.0,
914 920 ready for release.
915 921
916 922 * IPython/Magic.py (magic_edit): Add print statement to %edit so
917 923 it informs the user of the name of the temp. file used. This can
918 924 help if you decide later to reuse that same file, so you know
919 925 where to copy the info from.
920 926
921 927 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
922 928
923 929 * setup_bdist_egg.py: little script to build an egg. Added
924 930 support in the release tools as well.
925 931
926 932 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
927 933
928 934 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
929 935 version selection (new -wxversion command line and ipythonrc
930 936 parameter). Patch contributed by Arnd Baecker
931 937 <arnd.baecker-AT-web.de>.
932 938
933 939 * IPython/iplib.py (embed_mainloop): fix tab-completion in
934 940 embedded instances, for variables defined at the interactive
935 941 prompt of the embedded ipython. Reported by Arnd.
936 942
937 943 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
938 944 it can be used as a (stateful) toggle, or with a direct parameter.
939 945
940 946 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
941 947 could be triggered in certain cases and cause the traceback
942 948 printer not to work.
943 949
944 950 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
945 951
946 952 * IPython/iplib.py (_should_recompile): Small fix, closes
947 953 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
948 954
949 955 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
950 956
951 957 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
952 958 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
953 959 Moad for help with tracking it down.
954 960
955 961 * IPython/iplib.py (handle_auto): fix autocall handling for
956 962 objects which support BOTH __getitem__ and __call__ (so that f [x]
957 963 is left alone, instead of becoming f([x]) automatically).
958 964
959 965 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
960 966 Ville's patch.
961 967
962 968 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
963 969
964 970 * IPython/iplib.py (handle_auto): changed autocall semantics to
965 971 include 'smart' mode, where the autocall transformation is NOT
966 972 applied if there are no arguments on the line. This allows you to
967 973 just type 'foo' if foo is a callable to see its internal form,
968 974 instead of having it called with no arguments (typically a
969 975 mistake). The old 'full' autocall still exists: for that, you
970 976 need to set the 'autocall' parameter to 2 in your ipythonrc file.
971 977
972 978 * IPython/completer.py (Completer.attr_matches): add
973 979 tab-completion support for Enthoughts' traits. After a report by
974 980 Arnd and a patch by Prabhu.
975 981
976 982 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
977 983
978 984 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
979 985 Schmolck's patch to fix inspect.getinnerframes().
980 986
981 987 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
982 988 for embedded instances, regarding handling of namespaces and items
983 989 added to the __builtin__ one. Multiple embedded instances and
984 990 recursive embeddings should work better now (though I'm not sure
985 991 I've got all the corner cases fixed, that code is a bit of a brain
986 992 twister).
987 993
988 994 * IPython/Magic.py (magic_edit): added support to edit in-memory
989 995 macros (automatically creates the necessary temp files). %edit
990 996 also doesn't return the file contents anymore, it's just noise.
991 997
992 998 * IPython/completer.py (Completer.attr_matches): revert change to
993 999 complete only on attributes listed in __all__. I realized it
994 1000 cripples the tab-completion system as a tool for exploring the
995 1001 internals of unknown libraries (it renders any non-__all__
996 1002 attribute off-limits). I got bit by this when trying to see
997 1003 something inside the dis module.
998 1004
999 1005 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1000 1006
1001 1007 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1002 1008 namespace for users and extension writers to hold data in. This
1003 1009 follows the discussion in
1004 1010 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1005 1011
1006 1012 * IPython/completer.py (IPCompleter.complete): small patch to help
1007 1013 tab-completion under Emacs, after a suggestion by John Barnard
1008 1014 <barnarj-AT-ccf.org>.
1009 1015
1010 1016 * IPython/Magic.py (Magic.extract_input_slices): added support for
1011 1017 the slice notation in magics to use N-M to represent numbers N...M
1012 1018 (closed endpoints). This is used by %macro and %save.
1013 1019
1014 1020 * IPython/completer.py (Completer.attr_matches): for modules which
1015 1021 define __all__, complete only on those. After a patch by Jeffrey
1016 1022 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1017 1023 speed up this routine.
1018 1024
1019 1025 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1020 1026 don't know if this is the end of it, but the behavior now is
1021 1027 certainly much more correct. Note that coupled with macros,
1022 1028 slightly surprising (at first) behavior may occur: a macro will in
1023 1029 general expand to multiple lines of input, so upon exiting, the
1024 1030 in/out counters will both be bumped by the corresponding amount
1025 1031 (as if the macro's contents had been typed interactively). Typing
1026 1032 %hist will reveal the intermediate (silently processed) lines.
1027 1033
1028 1034 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1029 1035 pickle to fail (%run was overwriting __main__ and not restoring
1030 1036 it, but pickle relies on __main__ to operate).
1031 1037
1032 1038 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1033 1039 using properties, but forgot to make the main InteractiveShell
1034 1040 class a new-style class. Properties fail silently, and
1035 1041 mysteriously, with old-style class (getters work, but
1036 1042 setters don't do anything).
1037 1043
1038 1044 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1039 1045
1040 1046 * IPython/Magic.py (magic_history): fix history reporting bug (I
1041 1047 know some nasties are still there, I just can't seem to find a
1042 1048 reproducible test case to track them down; the input history is
1043 1049 falling out of sync...)
1044 1050
1045 1051 * IPython/iplib.py (handle_shell_escape): fix bug where both
1046 1052 aliases and system accesses where broken for indented code (such
1047 1053 as loops).
1048 1054
1049 1055 * IPython/genutils.py (shell): fix small but critical bug for
1050 1056 win32 system access.
1051 1057
1052 1058 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1053 1059
1054 1060 * IPython/iplib.py (showtraceback): remove use of the
1055 1061 sys.last_{type/value/traceback} structures, which are non
1056 1062 thread-safe.
1057 1063 (_prefilter): change control flow to ensure that we NEVER
1058 1064 introspect objects when autocall is off. This will guarantee that
1059 1065 having an input line of the form 'x.y', where access to attribute
1060 1066 'y' has side effects, doesn't trigger the side effect TWICE. It
1061 1067 is important to note that, with autocall on, these side effects
1062 1068 can still happen.
1063 1069 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1064 1070 trio. IPython offers these three kinds of special calls which are
1065 1071 not python code, and it's a good thing to have their call method
1066 1072 be accessible as pure python functions (not just special syntax at
1067 1073 the command line). It gives us a better internal implementation
1068 1074 structure, as well as exposing these for user scripting more
1069 1075 cleanly.
1070 1076
1071 1077 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1072 1078 file. Now that they'll be more likely to be used with the
1073 1079 persistance system (%store), I want to make sure their module path
1074 1080 doesn't change in the future, so that we don't break things for
1075 1081 users' persisted data.
1076 1082
1077 1083 * IPython/iplib.py (autoindent_update): move indentation
1078 1084 management into the _text_ processing loop, not the keyboard
1079 1085 interactive one. This is necessary to correctly process non-typed
1080 1086 multiline input (such as macros).
1081 1087
1082 1088 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1083 1089 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1084 1090 which was producing problems in the resulting manual.
1085 1091 (magic_whos): improve reporting of instances (show their class,
1086 1092 instead of simply printing 'instance' which isn't terribly
1087 1093 informative).
1088 1094
1089 1095 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1090 1096 (minor mods) to support network shares under win32.
1091 1097
1092 1098 * IPython/winconsole.py (get_console_size): add new winconsole
1093 1099 module and fixes to page_dumb() to improve its behavior under
1094 1100 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1095 1101
1096 1102 * IPython/Magic.py (Macro): simplified Macro class to just
1097 1103 subclass list. We've had only 2.2 compatibility for a very long
1098 1104 time, yet I was still avoiding subclassing the builtin types. No
1099 1105 more (I'm also starting to use properties, though I won't shift to
1100 1106 2.3-specific features quite yet).
1101 1107 (magic_store): added Ville's patch for lightweight variable
1102 1108 persistence, after a request on the user list by Matt Wilkie
1103 1109 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1104 1110 details.
1105 1111
1106 1112 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1107 1113 changed the default logfile name from 'ipython.log' to
1108 1114 'ipython_log.py'. These logs are real python files, and now that
1109 1115 we have much better multiline support, people are more likely to
1110 1116 want to use them as such. Might as well name them correctly.
1111 1117
1112 1118 * IPython/Magic.py: substantial cleanup. While we can't stop
1113 1119 using magics as mixins, due to the existing customizations 'out
1114 1120 there' which rely on the mixin naming conventions, at least I
1115 1121 cleaned out all cross-class name usage. So once we are OK with
1116 1122 breaking compatibility, the two systems can be separated.
1117 1123
1118 1124 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1119 1125 anymore, and the class is a fair bit less hideous as well. New
1120 1126 features were also introduced: timestamping of input, and logging
1121 1127 of output results. These are user-visible with the -t and -o
1122 1128 options to %logstart. Closes
1123 1129 http://www.scipy.net/roundup/ipython/issue11 and a request by
1124 1130 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1125 1131
1126 1132 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1127 1133
1128 1134 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1129 1135 better handle backslashes in paths. See the thread 'More Windows
1130 1136 questions part 2 - \/ characters revisited' on the iypthon user
1131 1137 list:
1132 1138 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1133 1139
1134 1140 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1135 1141
1136 1142 (InteractiveShell.__init__): change threaded shells to not use the
1137 1143 ipython crash handler. This was causing more problems than not,
1138 1144 as exceptions in the main thread (GUI code, typically) would
1139 1145 always show up as a 'crash', when they really weren't.
1140 1146
1141 1147 The colors and exception mode commands (%colors/%xmode) have been
1142 1148 synchronized to also take this into account, so users can get
1143 1149 verbose exceptions for their threaded code as well. I also added
1144 1150 support for activating pdb inside this exception handler as well,
1145 1151 so now GUI authors can use IPython's enhanced pdb at runtime.
1146 1152
1147 1153 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1148 1154 true by default, and add it to the shipped ipythonrc file. Since
1149 1155 this asks the user before proceeding, I think it's OK to make it
1150 1156 true by default.
1151 1157
1152 1158 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1153 1159 of the previous special-casing of input in the eval loop. I think
1154 1160 this is cleaner, as they really are commands and shouldn't have
1155 1161 a special role in the middle of the core code.
1156 1162
1157 1163 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1158 1164
1159 1165 * IPython/iplib.py (edit_syntax_error): added support for
1160 1166 automatically reopening the editor if the file had a syntax error
1161 1167 in it. Thanks to scottt who provided the patch at:
1162 1168 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1163 1169 version committed).
1164 1170
1165 1171 * IPython/iplib.py (handle_normal): add suport for multi-line
1166 1172 input with emtpy lines. This fixes
1167 1173 http://www.scipy.net/roundup/ipython/issue43 and a similar
1168 1174 discussion on the user list.
1169 1175
1170 1176 WARNING: a behavior change is necessarily introduced to support
1171 1177 blank lines: now a single blank line with whitespace does NOT
1172 1178 break the input loop, which means that when autoindent is on, by
1173 1179 default hitting return on the next (indented) line does NOT exit.
1174 1180
1175 1181 Instead, to exit a multiline input you can either have:
1176 1182
1177 1183 - TWO whitespace lines (just hit return again), or
1178 1184 - a single whitespace line of a different length than provided
1179 1185 by the autoindent (add or remove a space).
1180 1186
1181 1187 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1182 1188 module to better organize all readline-related functionality.
1183 1189 I've deleted FlexCompleter and put all completion clases here.
1184 1190
1185 1191 * IPython/iplib.py (raw_input): improve indentation management.
1186 1192 It is now possible to paste indented code with autoindent on, and
1187 1193 the code is interpreted correctly (though it still looks bad on
1188 1194 screen, due to the line-oriented nature of ipython).
1189 1195 (MagicCompleter.complete): change behavior so that a TAB key on an
1190 1196 otherwise empty line actually inserts a tab, instead of completing
1191 1197 on the entire global namespace. This makes it easier to use the
1192 1198 TAB key for indentation. After a request by Hans Meine
1193 1199 <hans_meine-AT-gmx.net>
1194 1200 (_prefilter): add support so that typing plain 'exit' or 'quit'
1195 1201 does a sensible thing. Originally I tried to deviate as little as
1196 1202 possible from the default python behavior, but even that one may
1197 1203 change in this direction (thread on python-dev to that effect).
1198 1204 Regardless, ipython should do the right thing even if CPython's
1199 1205 '>>>' prompt doesn't.
1200 1206 (InteractiveShell): removed subclassing code.InteractiveConsole
1201 1207 class. By now we'd overridden just about all of its methods: I've
1202 1208 copied the remaining two over, and now ipython is a standalone
1203 1209 class. This will provide a clearer picture for the chainsaw
1204 1210 branch refactoring.
1205 1211
1206 1212 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1207 1213
1208 1214 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1209 1215 failures for objects which break when dir() is called on them.
1210 1216
1211 1217 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1212 1218 distinct local and global namespaces in the completer API. This
1213 1219 change allows us to properly handle completion with distinct
1214 1220 scopes, including in embedded instances (this had never really
1215 1221 worked correctly).
1216 1222
1217 1223 Note: this introduces a change in the constructor for
1218 1224 MagicCompleter, as a new global_namespace parameter is now the
1219 1225 second argument (the others were bumped one position).
1220 1226
1221 1227 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1222 1228
1223 1229 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1224 1230 embedded instances (which can be done now thanks to Vivian's
1225 1231 frame-handling fixes for pdb).
1226 1232 (InteractiveShell.__init__): Fix namespace handling problem in
1227 1233 embedded instances. We were overwriting __main__ unconditionally,
1228 1234 and this should only be done for 'full' (non-embedded) IPython;
1229 1235 embedded instances must respect the caller's __main__. Thanks to
1230 1236 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1231 1237
1232 1238 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1233 1239
1234 1240 * setup.py: added download_url to setup(). This registers the
1235 1241 download address at PyPI, which is not only useful to humans
1236 1242 browsing the site, but is also picked up by setuptools (the Eggs
1237 1243 machinery). Thanks to Ville and R. Kern for the info/discussion
1238 1244 on this.
1239 1245
1240 1246 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1241 1247
1242 1248 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1243 1249 This brings a lot of nice functionality to the pdb mode, which now
1244 1250 has tab-completion, syntax highlighting, and better stack handling
1245 1251 than before. Many thanks to Vivian De Smedt
1246 1252 <vivian-AT-vdesmedt.com> for the original patches.
1247 1253
1248 1254 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1249 1255
1250 1256 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1251 1257 sequence to consistently accept the banner argument. The
1252 1258 inconsistency was tripping SAGE, thanks to Gary Zablackis
1253 1259 <gzabl-AT-yahoo.com> for the report.
1254 1260
1255 1261 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1256 1262
1257 1263 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1258 1264 Fix bug where a naked 'alias' call in the ipythonrc file would
1259 1265 cause a crash. Bug reported by Jorgen Stenarson.
1260 1266
1261 1267 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1262 1268
1263 1269 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1264 1270 startup time.
1265 1271
1266 1272 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1267 1273 instances had introduced a bug with globals in normal code. Now
1268 1274 it's working in all cases.
1269 1275
1270 1276 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1271 1277 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1272 1278 has been introduced to set the default case sensitivity of the
1273 1279 searches. Users can still select either mode at runtime on a
1274 1280 per-search basis.
1275 1281
1276 1282 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1277 1283
1278 1284 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1279 1285 attributes in wildcard searches for subclasses. Modified version
1280 1286 of a patch by Jorgen.
1281 1287
1282 1288 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1283 1289
1284 1290 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1285 1291 embedded instances. I added a user_global_ns attribute to the
1286 1292 InteractiveShell class to handle this.
1287 1293
1288 1294 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1289 1295
1290 1296 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1291 1297 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1292 1298 (reported under win32, but may happen also in other platforms).
1293 1299 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1294 1300
1295 1301 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1296 1302
1297 1303 * IPython/Magic.py (magic_psearch): new support for wildcard
1298 1304 patterns. Now, typing ?a*b will list all names which begin with a
1299 1305 and end in b, for example. The %psearch magic has full
1300 1306 docstrings. Many thanks to JΓΆrgen Stenarson
1301 1307 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1302 1308 implementing this functionality.
1303 1309
1304 1310 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1305 1311
1306 1312 * Manual: fixed long-standing annoyance of double-dashes (as in
1307 1313 --prefix=~, for example) being stripped in the HTML version. This
1308 1314 is a latex2html bug, but a workaround was provided. Many thanks
1309 1315 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1310 1316 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1311 1317 rolling. This seemingly small issue had tripped a number of users
1312 1318 when first installing, so I'm glad to see it gone.
1313 1319
1314 1320 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1315 1321
1316 1322 * IPython/Extensions/numeric_formats.py: fix missing import,
1317 1323 reported by Stephen Walton.
1318 1324
1319 1325 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1320 1326
1321 1327 * IPython/demo.py: finish demo module, fully documented now.
1322 1328
1323 1329 * IPython/genutils.py (file_read): simple little utility to read a
1324 1330 file and ensure it's closed afterwards.
1325 1331
1326 1332 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1327 1333
1328 1334 * IPython/demo.py (Demo.__init__): added support for individually
1329 1335 tagging blocks for automatic execution.
1330 1336
1331 1337 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1332 1338 syntax-highlighted python sources, requested by John.
1333 1339
1334 1340 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1335 1341
1336 1342 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1337 1343 finishing.
1338 1344
1339 1345 * IPython/genutils.py (shlex_split): moved from Magic to here,
1340 1346 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1341 1347
1342 1348 * IPython/demo.py (Demo.__init__): added support for silent
1343 1349 blocks, improved marks as regexps, docstrings written.
1344 1350 (Demo.__init__): better docstring, added support for sys.argv.
1345 1351
1346 1352 * IPython/genutils.py (marquee): little utility used by the demo
1347 1353 code, handy in general.
1348 1354
1349 1355 * IPython/demo.py (Demo.__init__): new class for interactive
1350 1356 demos. Not documented yet, I just wrote it in a hurry for
1351 1357 scipy'05. Will docstring later.
1352 1358
1353 1359 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1354 1360
1355 1361 * IPython/Shell.py (sigint_handler): Drastic simplification which
1356 1362 also seems to make Ctrl-C work correctly across threads! This is
1357 1363 so simple, that I can't beleive I'd missed it before. Needs more
1358 1364 testing, though.
1359 1365 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1360 1366 like this before...
1361 1367
1362 1368 * IPython/genutils.py (get_home_dir): add protection against
1363 1369 non-dirs in win32 registry.
1364 1370
1365 1371 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1366 1372 bug where dict was mutated while iterating (pysh crash).
1367 1373
1368 1374 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1369 1375
1370 1376 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1371 1377 spurious newlines added by this routine. After a report by
1372 1378 F. Mantegazza.
1373 1379
1374 1380 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1375 1381
1376 1382 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1377 1383 calls. These were a leftover from the GTK 1.x days, and can cause
1378 1384 problems in certain cases (after a report by John Hunter).
1379 1385
1380 1386 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1381 1387 os.getcwd() fails at init time. Thanks to patch from David Remahl
1382 1388 <chmod007-AT-mac.com>.
1383 1389 (InteractiveShell.__init__): prevent certain special magics from
1384 1390 being shadowed by aliases. Closes
1385 1391 http://www.scipy.net/roundup/ipython/issue41.
1386 1392
1387 1393 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1388 1394
1389 1395 * IPython/iplib.py (InteractiveShell.complete): Added new
1390 1396 top-level completion method to expose the completion mechanism
1391 1397 beyond readline-based environments.
1392 1398
1393 1399 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1394 1400
1395 1401 * tools/ipsvnc (svnversion): fix svnversion capture.
1396 1402
1397 1403 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1398 1404 attribute to self, which was missing. Before, it was set by a
1399 1405 routine which in certain cases wasn't being called, so the
1400 1406 instance could end up missing the attribute. This caused a crash.
1401 1407 Closes http://www.scipy.net/roundup/ipython/issue40.
1402 1408
1403 1409 2005-08-16 Fernando Perez <fperez@colorado.edu>
1404 1410
1405 1411 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1406 1412 contains non-string attribute. Closes
1407 1413 http://www.scipy.net/roundup/ipython/issue38.
1408 1414
1409 1415 2005-08-14 Fernando Perez <fperez@colorado.edu>
1410 1416
1411 1417 * tools/ipsvnc: Minor improvements, to add changeset info.
1412 1418
1413 1419 2005-08-12 Fernando Perez <fperez@colorado.edu>
1414 1420
1415 1421 * IPython/iplib.py (runsource): remove self.code_to_run_src
1416 1422 attribute. I realized this is nothing more than
1417 1423 '\n'.join(self.buffer), and having the same data in two different
1418 1424 places is just asking for synchronization bugs. This may impact
1419 1425 people who have custom exception handlers, so I need to warn
1420 1426 ipython-dev about it (F. Mantegazza may use them).
1421 1427
1422 1428 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1423 1429
1424 1430 * IPython/genutils.py: fix 2.2 compatibility (generators)
1425 1431
1426 1432 2005-07-18 Fernando Perez <fperez@colorado.edu>
1427 1433
1428 1434 * IPython/genutils.py (get_home_dir): fix to help users with
1429 1435 invalid $HOME under win32.
1430 1436
1431 1437 2005-07-17 Fernando Perez <fperez@colorado.edu>
1432 1438
1433 1439 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1434 1440 some old hacks and clean up a bit other routines; code should be
1435 1441 simpler and a bit faster.
1436 1442
1437 1443 * IPython/iplib.py (interact): removed some last-resort attempts
1438 1444 to survive broken stdout/stderr. That code was only making it
1439 1445 harder to abstract out the i/o (necessary for gui integration),
1440 1446 and the crashes it could prevent were extremely rare in practice
1441 1447 (besides being fully user-induced in a pretty violent manner).
1442 1448
1443 1449 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1444 1450 Nothing major yet, but the code is simpler to read; this should
1445 1451 make it easier to do more serious modifications in the future.
1446 1452
1447 1453 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1448 1454 which broke in .15 (thanks to a report by Ville).
1449 1455
1450 1456 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1451 1457 be quite correct, I know next to nothing about unicode). This
1452 1458 will allow unicode strings to be used in prompts, amongst other
1453 1459 cases. It also will prevent ipython from crashing when unicode
1454 1460 shows up unexpectedly in many places. If ascii encoding fails, we
1455 1461 assume utf_8. Currently the encoding is not a user-visible
1456 1462 setting, though it could be made so if there is demand for it.
1457 1463
1458 1464 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1459 1465
1460 1466 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1461 1467
1462 1468 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1463 1469
1464 1470 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1465 1471 code can work transparently for 2.2/2.3.
1466 1472
1467 1473 2005-07-16 Fernando Perez <fperez@colorado.edu>
1468 1474
1469 1475 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1470 1476 out of the color scheme table used for coloring exception
1471 1477 tracebacks. This allows user code to add new schemes at runtime.
1472 1478 This is a minimally modified version of the patch at
1473 1479 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1474 1480 for the contribution.
1475 1481
1476 1482 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1477 1483 slightly modified version of the patch in
1478 1484 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1479 1485 to remove the previous try/except solution (which was costlier).
1480 1486 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1481 1487
1482 1488 2005-06-08 Fernando Perez <fperez@colorado.edu>
1483 1489
1484 1490 * IPython/iplib.py (write/write_err): Add methods to abstract all
1485 1491 I/O a bit more.
1486 1492
1487 1493 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1488 1494 warning, reported by Aric Hagberg, fix by JD Hunter.
1489 1495
1490 1496 2005-06-02 *** Released version 0.6.15
1491 1497
1492 1498 2005-06-01 Fernando Perez <fperez@colorado.edu>
1493 1499
1494 1500 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1495 1501 tab-completion of filenames within open-quoted strings. Note that
1496 1502 this requires that in ~/.ipython/ipythonrc, users change the
1497 1503 readline delimiters configuration to read:
1498 1504
1499 1505 readline_remove_delims -/~
1500 1506
1501 1507
1502 1508 2005-05-31 *** Released version 0.6.14
1503 1509
1504 1510 2005-05-29 Fernando Perez <fperez@colorado.edu>
1505 1511
1506 1512 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1507 1513 with files not on the filesystem. Reported by Eliyahu Sandler
1508 1514 <eli@gondolin.net>
1509 1515
1510 1516 2005-05-22 Fernando Perez <fperez@colorado.edu>
1511 1517
1512 1518 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1513 1519 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1514 1520
1515 1521 2005-05-19 Fernando Perez <fperez@colorado.edu>
1516 1522
1517 1523 * IPython/iplib.py (safe_execfile): close a file which could be
1518 1524 left open (causing problems in win32, which locks open files).
1519 1525 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1520 1526
1521 1527 2005-05-18 Fernando Perez <fperez@colorado.edu>
1522 1528
1523 1529 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1524 1530 keyword arguments correctly to safe_execfile().
1525 1531
1526 1532 2005-05-13 Fernando Perez <fperez@colorado.edu>
1527 1533
1528 1534 * ipython.1: Added info about Qt to manpage, and threads warning
1529 1535 to usage page (invoked with --help).
1530 1536
1531 1537 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1532 1538 new matcher (it goes at the end of the priority list) to do
1533 1539 tab-completion on named function arguments. Submitted by George
1534 1540 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1535 1541 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1536 1542 for more details.
1537 1543
1538 1544 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1539 1545 SystemExit exceptions in the script being run. Thanks to a report
1540 1546 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1541 1547 producing very annoying behavior when running unit tests.
1542 1548
1543 1549 2005-05-12 Fernando Perez <fperez@colorado.edu>
1544 1550
1545 1551 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1546 1552 which I'd broken (again) due to a changed regexp. In the process,
1547 1553 added ';' as an escape to auto-quote the whole line without
1548 1554 splitting its arguments. Thanks to a report by Jerry McRae
1549 1555 <qrs0xyc02-AT-sneakemail.com>.
1550 1556
1551 1557 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1552 1558 possible crashes caused by a TokenError. Reported by Ed Schofield
1553 1559 <schofield-AT-ftw.at>.
1554 1560
1555 1561 2005-05-06 Fernando Perez <fperez@colorado.edu>
1556 1562
1557 1563 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1558 1564
1559 1565 2005-04-29 Fernando Perez <fperez@colorado.edu>
1560 1566
1561 1567 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1562 1568 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1563 1569 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1564 1570 which provides support for Qt interactive usage (similar to the
1565 1571 existing one for WX and GTK). This had been often requested.
1566 1572
1567 1573 2005-04-14 *** Released version 0.6.13
1568 1574
1569 1575 2005-04-08 Fernando Perez <fperez@colorado.edu>
1570 1576
1571 1577 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1572 1578 from _ofind, which gets called on almost every input line. Now,
1573 1579 we only try to get docstrings if they are actually going to be
1574 1580 used (the overhead of fetching unnecessary docstrings can be
1575 1581 noticeable for certain objects, such as Pyro proxies).
1576 1582
1577 1583 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1578 1584 for completers. For some reason I had been passing them the state
1579 1585 variable, which completers never actually need, and was in
1580 1586 conflict with the rlcompleter API. Custom completers ONLY need to
1581 1587 take the text parameter.
1582 1588
1583 1589 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1584 1590 work correctly in pysh. I've also moved all the logic which used
1585 1591 to be in pysh.py here, which will prevent problems with future
1586 1592 upgrades. However, this time I must warn users to update their
1587 1593 pysh profile to include the line
1588 1594
1589 1595 import_all IPython.Extensions.InterpreterExec
1590 1596
1591 1597 because otherwise things won't work for them. They MUST also
1592 1598 delete pysh.py and the line
1593 1599
1594 1600 execfile pysh.py
1595 1601
1596 1602 from their ipythonrc-pysh.
1597 1603
1598 1604 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1599 1605 robust in the face of objects whose dir() returns non-strings
1600 1606 (which it shouldn't, but some broken libs like ITK do). Thanks to
1601 1607 a patch by John Hunter (implemented differently, though). Also
1602 1608 minor improvements by using .extend instead of + on lists.
1603 1609
1604 1610 * pysh.py:
1605 1611
1606 1612 2005-04-06 Fernando Perez <fperez@colorado.edu>
1607 1613
1608 1614 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1609 1615 by default, so that all users benefit from it. Those who don't
1610 1616 want it can still turn it off.
1611 1617
1612 1618 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1613 1619 config file, I'd forgotten about this, so users were getting it
1614 1620 off by default.
1615 1621
1616 1622 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1617 1623 consistency. Now magics can be called in multiline statements,
1618 1624 and python variables can be expanded in magic calls via $var.
1619 1625 This makes the magic system behave just like aliases or !system
1620 1626 calls.
1621 1627
1622 1628 2005-03-28 Fernando Perez <fperez@colorado.edu>
1623 1629
1624 1630 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1625 1631 expensive string additions for building command. Add support for
1626 1632 trailing ';' when autocall is used.
1627 1633
1628 1634 2005-03-26 Fernando Perez <fperez@colorado.edu>
1629 1635
1630 1636 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1631 1637 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1632 1638 ipython.el robust against prompts with any number of spaces
1633 1639 (including 0) after the ':' character.
1634 1640
1635 1641 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1636 1642 continuation prompt, which misled users to think the line was
1637 1643 already indented. Closes debian Bug#300847, reported to me by
1638 1644 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1639 1645
1640 1646 2005-03-23 Fernando Perez <fperez@colorado.edu>
1641 1647
1642 1648 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1643 1649 properly aligned if they have embedded newlines.
1644 1650
1645 1651 * IPython/iplib.py (runlines): Add a public method to expose
1646 1652 IPython's code execution machinery, so that users can run strings
1647 1653 as if they had been typed at the prompt interactively.
1648 1654 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1649 1655 methods which can call the system shell, but with python variable
1650 1656 expansion. The three such methods are: __IPYTHON__.system,
1651 1657 .getoutput and .getoutputerror. These need to be documented in a
1652 1658 'public API' section (to be written) of the manual.
1653 1659
1654 1660 2005-03-20 Fernando Perez <fperez@colorado.edu>
1655 1661
1656 1662 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1657 1663 for custom exception handling. This is quite powerful, and it
1658 1664 allows for user-installable exception handlers which can trap
1659 1665 custom exceptions at runtime and treat them separately from
1660 1666 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1661 1667 Mantegazza <mantegazza-AT-ill.fr>.
1662 1668 (InteractiveShell.set_custom_completer): public API function to
1663 1669 add new completers at runtime.
1664 1670
1665 1671 2005-03-19 Fernando Perez <fperez@colorado.edu>
1666 1672
1667 1673 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1668 1674 allow objects which provide their docstrings via non-standard
1669 1675 mechanisms (like Pyro proxies) to still be inspected by ipython's
1670 1676 ? system.
1671 1677
1672 1678 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1673 1679 automatic capture system. I tried quite hard to make it work
1674 1680 reliably, and simply failed. I tried many combinations with the
1675 1681 subprocess module, but eventually nothing worked in all needed
1676 1682 cases (not blocking stdin for the child, duplicating stdout
1677 1683 without blocking, etc). The new %sc/%sx still do capture to these
1678 1684 magical list/string objects which make shell use much more
1679 1685 conveninent, so not all is lost.
1680 1686
1681 1687 XXX - FIX MANUAL for the change above!
1682 1688
1683 1689 (runsource): I copied code.py's runsource() into ipython to modify
1684 1690 it a bit. Now the code object and source to be executed are
1685 1691 stored in ipython. This makes this info accessible to third-party
1686 1692 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1687 1693 Mantegazza <mantegazza-AT-ill.fr>.
1688 1694
1689 1695 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1690 1696 history-search via readline (like C-p/C-n). I'd wanted this for a
1691 1697 long time, but only recently found out how to do it. For users
1692 1698 who already have their ipythonrc files made and want this, just
1693 1699 add:
1694 1700
1695 1701 readline_parse_and_bind "\e[A": history-search-backward
1696 1702 readline_parse_and_bind "\e[B": history-search-forward
1697 1703
1698 1704 2005-03-18 Fernando Perez <fperez@colorado.edu>
1699 1705
1700 1706 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1701 1707 LSString and SList classes which allow transparent conversions
1702 1708 between list mode and whitespace-separated string.
1703 1709 (magic_r): Fix recursion problem in %r.
1704 1710
1705 1711 * IPython/genutils.py (LSString): New class to be used for
1706 1712 automatic storage of the results of all alias/system calls in _o
1707 1713 and _e (stdout/err). These provide a .l/.list attribute which
1708 1714 does automatic splitting on newlines. This means that for most
1709 1715 uses, you'll never need to do capturing of output with %sc/%sx
1710 1716 anymore, since ipython keeps this always done for you. Note that
1711 1717 only the LAST results are stored, the _o/e variables are
1712 1718 overwritten on each call. If you need to save their contents
1713 1719 further, simply bind them to any other name.
1714 1720
1715 1721 2005-03-17 Fernando Perez <fperez@colorado.edu>
1716 1722
1717 1723 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1718 1724 prompt namespace handling.
1719 1725
1720 1726 2005-03-16 Fernando Perez <fperez@colorado.edu>
1721 1727
1722 1728 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1723 1729 classic prompts to be '>>> ' (final space was missing, and it
1724 1730 trips the emacs python mode).
1725 1731 (BasePrompt.__str__): Added safe support for dynamic prompt
1726 1732 strings. Now you can set your prompt string to be '$x', and the
1727 1733 value of x will be printed from your interactive namespace. The
1728 1734 interpolation syntax includes the full Itpl support, so
1729 1735 ${foo()+x+bar()} is a valid prompt string now, and the function
1730 1736 calls will be made at runtime.
1731 1737
1732 1738 2005-03-15 Fernando Perez <fperez@colorado.edu>
1733 1739
1734 1740 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1735 1741 avoid name clashes in pylab. %hist still works, it just forwards
1736 1742 the call to %history.
1737 1743
1738 1744 2005-03-02 *** Released version 0.6.12
1739 1745
1740 1746 2005-03-02 Fernando Perez <fperez@colorado.edu>
1741 1747
1742 1748 * IPython/iplib.py (handle_magic): log magic calls properly as
1743 1749 ipmagic() function calls.
1744 1750
1745 1751 * IPython/Magic.py (magic_time): Improved %time to support
1746 1752 statements and provide wall-clock as well as CPU time.
1747 1753
1748 1754 2005-02-27 Fernando Perez <fperez@colorado.edu>
1749 1755
1750 1756 * IPython/hooks.py: New hooks module, to expose user-modifiable
1751 1757 IPython functionality in a clean manner. For now only the editor
1752 1758 hook is actually written, and other thigns which I intend to turn
1753 1759 into proper hooks aren't yet there. The display and prefilter
1754 1760 stuff, for example, should be hooks. But at least now the
1755 1761 framework is in place, and the rest can be moved here with more
1756 1762 time later. IPython had had a .hooks variable for a long time for
1757 1763 this purpose, but I'd never actually used it for anything.
1758 1764
1759 1765 2005-02-26 Fernando Perez <fperez@colorado.edu>
1760 1766
1761 1767 * IPython/ipmaker.py (make_IPython): make the default ipython
1762 1768 directory be called _ipython under win32, to follow more the
1763 1769 naming peculiarities of that platform (where buggy software like
1764 1770 Visual Sourcesafe breaks with .named directories). Reported by
1765 1771 Ville Vainio.
1766 1772
1767 1773 2005-02-23 Fernando Perez <fperez@colorado.edu>
1768 1774
1769 1775 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1770 1776 auto_aliases for win32 which were causing problems. Users can
1771 1777 define the ones they personally like.
1772 1778
1773 1779 2005-02-21 Fernando Perez <fperez@colorado.edu>
1774 1780
1775 1781 * IPython/Magic.py (magic_time): new magic to time execution of
1776 1782 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1777 1783
1778 1784 2005-02-19 Fernando Perez <fperez@colorado.edu>
1779 1785
1780 1786 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1781 1787 into keys (for prompts, for example).
1782 1788
1783 1789 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1784 1790 prompts in case users want them. This introduces a small behavior
1785 1791 change: ipython does not automatically add a space to all prompts
1786 1792 anymore. To get the old prompts with a space, users should add it
1787 1793 manually to their ipythonrc file, so for example prompt_in1 should
1788 1794 now read 'In [\#]: ' instead of 'In [\#]:'.
1789 1795 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1790 1796 file) to control left-padding of secondary prompts.
1791 1797
1792 1798 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1793 1799 the profiler can't be imported. Fix for Debian, which removed
1794 1800 profile.py because of License issues. I applied a slightly
1795 1801 modified version of the original Debian patch at
1796 1802 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1797 1803
1798 1804 2005-02-17 Fernando Perez <fperez@colorado.edu>
1799 1805
1800 1806 * IPython/genutils.py (native_line_ends): Fix bug which would
1801 1807 cause improper line-ends under win32 b/c I was not opening files
1802 1808 in binary mode. Bug report and fix thanks to Ville.
1803 1809
1804 1810 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1805 1811 trying to catch spurious foo[1] autocalls. My fix actually broke
1806 1812 ',/' autoquote/call with explicit escape (bad regexp).
1807 1813
1808 1814 2005-02-15 *** Released version 0.6.11
1809 1815
1810 1816 2005-02-14 Fernando Perez <fperez@colorado.edu>
1811 1817
1812 1818 * IPython/background_jobs.py: New background job management
1813 1819 subsystem. This is implemented via a new set of classes, and
1814 1820 IPython now provides a builtin 'jobs' object for background job
1815 1821 execution. A convenience %bg magic serves as a lightweight
1816 1822 frontend for starting the more common type of calls. This was
1817 1823 inspired by discussions with B. Granger and the BackgroundCommand
1818 1824 class described in the book Python Scripting for Computational
1819 1825 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1820 1826 (although ultimately no code from this text was used, as IPython's
1821 1827 system is a separate implementation).
1822 1828
1823 1829 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1824 1830 to control the completion of single/double underscore names
1825 1831 separately. As documented in the example ipytonrc file, the
1826 1832 readline_omit__names variable can now be set to 2, to omit even
1827 1833 single underscore names. Thanks to a patch by Brian Wong
1828 1834 <BrianWong-AT-AirgoNetworks.Com>.
1829 1835 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1830 1836 be autocalled as foo([1]) if foo were callable. A problem for
1831 1837 things which are both callable and implement __getitem__.
1832 1838 (init_readline): Fix autoindentation for win32. Thanks to a patch
1833 1839 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1834 1840
1835 1841 2005-02-12 Fernando Perez <fperez@colorado.edu>
1836 1842
1837 1843 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1838 1844 which I had written long ago to sort out user error messages which
1839 1845 may occur during startup. This seemed like a good idea initially,
1840 1846 but it has proven a disaster in retrospect. I don't want to
1841 1847 change much code for now, so my fix is to set the internal 'debug'
1842 1848 flag to true everywhere, whose only job was precisely to control
1843 1849 this subsystem. This closes issue 28 (as well as avoiding all
1844 1850 sorts of strange hangups which occur from time to time).
1845 1851
1846 1852 2005-02-07 Fernando Perez <fperez@colorado.edu>
1847 1853
1848 1854 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1849 1855 previous call produced a syntax error.
1850 1856
1851 1857 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1852 1858 classes without constructor.
1853 1859
1854 1860 2005-02-06 Fernando Perez <fperez@colorado.edu>
1855 1861
1856 1862 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1857 1863 completions with the results of each matcher, so we return results
1858 1864 to the user from all namespaces. This breaks with ipython
1859 1865 tradition, but I think it's a nicer behavior. Now you get all
1860 1866 possible completions listed, from all possible namespaces (python,
1861 1867 filesystem, magics...) After a request by John Hunter
1862 1868 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1863 1869
1864 1870 2005-02-05 Fernando Perez <fperez@colorado.edu>
1865 1871
1866 1872 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1867 1873 the call had quote characters in it (the quotes were stripped).
1868 1874
1869 1875 2005-01-31 Fernando Perez <fperez@colorado.edu>
1870 1876
1871 1877 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1872 1878 Itpl.itpl() to make the code more robust against psyco
1873 1879 optimizations.
1874 1880
1875 1881 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1876 1882 of causing an exception. Quicker, cleaner.
1877 1883
1878 1884 2005-01-28 Fernando Perez <fperez@colorado.edu>
1879 1885
1880 1886 * scripts/ipython_win_post_install.py (install): hardcode
1881 1887 sys.prefix+'python.exe' as the executable path. It turns out that
1882 1888 during the post-installation run, sys.executable resolves to the
1883 1889 name of the binary installer! I should report this as a distutils
1884 1890 bug, I think. I updated the .10 release with this tiny fix, to
1885 1891 avoid annoying the lists further.
1886 1892
1887 1893 2005-01-27 *** Released version 0.6.10
1888 1894
1889 1895 2005-01-27 Fernando Perez <fperez@colorado.edu>
1890 1896
1891 1897 * IPython/numutils.py (norm): Added 'inf' as optional name for
1892 1898 L-infinity norm, included references to mathworld.com for vector
1893 1899 norm definitions.
1894 1900 (amin/amax): added amin/amax for array min/max. Similar to what
1895 1901 pylab ships with after the recent reorganization of names.
1896 1902 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1897 1903
1898 1904 * ipython.el: committed Alex's recent fixes and improvements.
1899 1905 Tested with python-mode from CVS, and it looks excellent. Since
1900 1906 python-mode hasn't released anything in a while, I'm temporarily
1901 1907 putting a copy of today's CVS (v 4.70) of python-mode in:
1902 1908 http://ipython.scipy.org/tmp/python-mode.el
1903 1909
1904 1910 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1905 1911 sys.executable for the executable name, instead of assuming it's
1906 1912 called 'python.exe' (the post-installer would have produced broken
1907 1913 setups on systems with a differently named python binary).
1908 1914
1909 1915 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1910 1916 references to os.linesep, to make the code more
1911 1917 platform-independent. This is also part of the win32 coloring
1912 1918 fixes.
1913 1919
1914 1920 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1915 1921 lines, which actually cause coloring bugs because the length of
1916 1922 the line is very difficult to correctly compute with embedded
1917 1923 escapes. This was the source of all the coloring problems under
1918 1924 Win32. I think that _finally_, Win32 users have a properly
1919 1925 working ipython in all respects. This would never have happened
1920 1926 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1921 1927
1922 1928 2005-01-26 *** Released version 0.6.9
1923 1929
1924 1930 2005-01-25 Fernando Perez <fperez@colorado.edu>
1925 1931
1926 1932 * setup.py: finally, we have a true Windows installer, thanks to
1927 1933 the excellent work of Viktor Ransmayr
1928 1934 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1929 1935 Windows users. The setup routine is quite a bit cleaner thanks to
1930 1936 this, and the post-install script uses the proper functions to
1931 1937 allow a clean de-installation using the standard Windows Control
1932 1938 Panel.
1933 1939
1934 1940 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1935 1941 environment variable under all OSes (including win32) if
1936 1942 available. This will give consistency to win32 users who have set
1937 1943 this variable for any reason. If os.environ['HOME'] fails, the
1938 1944 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1939 1945
1940 1946 2005-01-24 Fernando Perez <fperez@colorado.edu>
1941 1947
1942 1948 * IPython/numutils.py (empty_like): add empty_like(), similar to
1943 1949 zeros_like() but taking advantage of the new empty() Numeric routine.
1944 1950
1945 1951 2005-01-23 *** Released version 0.6.8
1946 1952
1947 1953 2005-01-22 Fernando Perez <fperez@colorado.edu>
1948 1954
1949 1955 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1950 1956 automatic show() calls. After discussing things with JDH, it
1951 1957 turns out there are too many corner cases where this can go wrong.
1952 1958 It's best not to try to be 'too smart', and simply have ipython
1953 1959 reproduce as much as possible the default behavior of a normal
1954 1960 python shell.
1955 1961
1956 1962 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1957 1963 line-splitting regexp and _prefilter() to avoid calling getattr()
1958 1964 on assignments. This closes
1959 1965 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1960 1966 readline uses getattr(), so a simple <TAB> keypress is still
1961 1967 enough to trigger getattr() calls on an object.
1962 1968
1963 1969 2005-01-21 Fernando Perez <fperez@colorado.edu>
1964 1970
1965 1971 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1966 1972 docstring under pylab so it doesn't mask the original.
1967 1973
1968 1974 2005-01-21 *** Released version 0.6.7
1969 1975
1970 1976 2005-01-21 Fernando Perez <fperez@colorado.edu>
1971 1977
1972 1978 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1973 1979 signal handling for win32 users in multithreaded mode.
1974 1980
1975 1981 2005-01-17 Fernando Perez <fperez@colorado.edu>
1976 1982
1977 1983 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1978 1984 instances with no __init__. After a crash report by Norbert Nemec
1979 1985 <Norbert-AT-nemec-online.de>.
1980 1986
1981 1987 2005-01-14 Fernando Perez <fperez@colorado.edu>
1982 1988
1983 1989 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1984 1990 names for verbose exceptions, when multiple dotted names and the
1985 1991 'parent' object were present on the same line.
1986 1992
1987 1993 2005-01-11 Fernando Perez <fperez@colorado.edu>
1988 1994
1989 1995 * IPython/genutils.py (flag_calls): new utility to trap and flag
1990 1996 calls in functions. I need it to clean up matplotlib support.
1991 1997 Also removed some deprecated code in genutils.
1992 1998
1993 1999 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1994 2000 that matplotlib scripts called with %run, which don't call show()
1995 2001 themselves, still have their plotting windows open.
1996 2002
1997 2003 2005-01-05 Fernando Perez <fperez@colorado.edu>
1998 2004
1999 2005 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2000 2006 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2001 2007
2002 2008 2004-12-19 Fernando Perez <fperez@colorado.edu>
2003 2009
2004 2010 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2005 2011 parent_runcode, which was an eyesore. The same result can be
2006 2012 obtained with Python's regular superclass mechanisms.
2007 2013
2008 2014 2004-12-17 Fernando Perez <fperez@colorado.edu>
2009 2015
2010 2016 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2011 2017 reported by Prabhu.
2012 2018 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2013 2019 sys.stderr) instead of explicitly calling sys.stderr. This helps
2014 2020 maintain our I/O abstractions clean, for future GUI embeddings.
2015 2021
2016 2022 * IPython/genutils.py (info): added new utility for sys.stderr
2017 2023 unified info message handling (thin wrapper around warn()).
2018 2024
2019 2025 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2020 2026 composite (dotted) names on verbose exceptions.
2021 2027 (VerboseTB.nullrepr): harden against another kind of errors which
2022 2028 Python's inspect module can trigger, and which were crashing
2023 2029 IPython. Thanks to a report by Marco Lombardi
2024 2030 <mlombard-AT-ma010192.hq.eso.org>.
2025 2031
2026 2032 2004-12-13 *** Released version 0.6.6
2027 2033
2028 2034 2004-12-12 Fernando Perez <fperez@colorado.edu>
2029 2035
2030 2036 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2031 2037 generated by pygtk upon initialization if it was built without
2032 2038 threads (for matplotlib users). After a crash reported by
2033 2039 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2034 2040
2035 2041 * IPython/ipmaker.py (make_IPython): fix small bug in the
2036 2042 import_some parameter for multiple imports.
2037 2043
2038 2044 * IPython/iplib.py (ipmagic): simplified the interface of
2039 2045 ipmagic() to take a single string argument, just as it would be
2040 2046 typed at the IPython cmd line.
2041 2047 (ipalias): Added new ipalias() with an interface identical to
2042 2048 ipmagic(). This completes exposing a pure python interface to the
2043 2049 alias and magic system, which can be used in loops or more complex
2044 2050 code where IPython's automatic line mangling is not active.
2045 2051
2046 2052 * IPython/genutils.py (timing): changed interface of timing to
2047 2053 simply run code once, which is the most common case. timings()
2048 2054 remains unchanged, for the cases where you want multiple runs.
2049 2055
2050 2056 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2051 2057 bug where Python2.2 crashes with exec'ing code which does not end
2052 2058 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2053 2059 before.
2054 2060
2055 2061 2004-12-10 Fernando Perez <fperez@colorado.edu>
2056 2062
2057 2063 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2058 2064 -t to -T, to accomodate the new -t flag in %run (the %run and
2059 2065 %prun options are kind of intermixed, and it's not easy to change
2060 2066 this with the limitations of python's getopt).
2061 2067
2062 2068 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2063 2069 the execution of scripts. It's not as fine-tuned as timeit.py,
2064 2070 but it works from inside ipython (and under 2.2, which lacks
2065 2071 timeit.py). Optionally a number of runs > 1 can be given for
2066 2072 timing very short-running code.
2067 2073
2068 2074 * IPython/genutils.py (uniq_stable): new routine which returns a
2069 2075 list of unique elements in any iterable, but in stable order of
2070 2076 appearance. I needed this for the ultraTB fixes, and it's a handy
2071 2077 utility.
2072 2078
2073 2079 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2074 2080 dotted names in Verbose exceptions. This had been broken since
2075 2081 the very start, now x.y will properly be printed in a Verbose
2076 2082 traceback, instead of x being shown and y appearing always as an
2077 2083 'undefined global'. Getting this to work was a bit tricky,
2078 2084 because by default python tokenizers are stateless. Saved by
2079 2085 python's ability to easily add a bit of state to an arbitrary
2080 2086 function (without needing to build a full-blown callable object).
2081 2087
2082 2088 Also big cleanup of this code, which had horrendous runtime
2083 2089 lookups of zillions of attributes for colorization. Moved all
2084 2090 this code into a few templates, which make it cleaner and quicker.
2085 2091
2086 2092 Printout quality was also improved for Verbose exceptions: one
2087 2093 variable per line, and memory addresses are printed (this can be
2088 2094 quite handy in nasty debugging situations, which is what Verbose
2089 2095 is for).
2090 2096
2091 2097 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2092 2098 the command line as scripts to be loaded by embedded instances.
2093 2099 Doing so has the potential for an infinite recursion if there are
2094 2100 exceptions thrown in the process. This fixes a strange crash
2095 2101 reported by Philippe MULLER <muller-AT-irit.fr>.
2096 2102
2097 2103 2004-12-09 Fernando Perez <fperez@colorado.edu>
2098 2104
2099 2105 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2100 2106 to reflect new names in matplotlib, which now expose the
2101 2107 matlab-compatible interface via a pylab module instead of the
2102 2108 'matlab' name. The new code is backwards compatible, so users of
2103 2109 all matplotlib versions are OK. Patch by J. Hunter.
2104 2110
2105 2111 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2106 2112 of __init__ docstrings for instances (class docstrings are already
2107 2113 automatically printed). Instances with customized docstrings
2108 2114 (indep. of the class) are also recognized and all 3 separate
2109 2115 docstrings are printed (instance, class, constructor). After some
2110 2116 comments/suggestions by J. Hunter.
2111 2117
2112 2118 2004-12-05 Fernando Perez <fperez@colorado.edu>
2113 2119
2114 2120 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2115 2121 warnings when tab-completion fails and triggers an exception.
2116 2122
2117 2123 2004-12-03 Fernando Perez <fperez@colorado.edu>
2118 2124
2119 2125 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2120 2126 be triggered when using 'run -p'. An incorrect option flag was
2121 2127 being set ('d' instead of 'D').
2122 2128 (manpage): fix missing escaped \- sign.
2123 2129
2124 2130 2004-11-30 *** Released version 0.6.5
2125 2131
2126 2132 2004-11-30 Fernando Perez <fperez@colorado.edu>
2127 2133
2128 2134 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2129 2135 setting with -d option.
2130 2136
2131 2137 * setup.py (docfiles): Fix problem where the doc glob I was using
2132 2138 was COMPLETELY BROKEN. It was giving the right files by pure
2133 2139 accident, but failed once I tried to include ipython.el. Note:
2134 2140 glob() does NOT allow you to do exclusion on multiple endings!
2135 2141
2136 2142 2004-11-29 Fernando Perez <fperez@colorado.edu>
2137 2143
2138 2144 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2139 2145 the manpage as the source. Better formatting & consistency.
2140 2146
2141 2147 * IPython/Magic.py (magic_run): Added new -d option, to run
2142 2148 scripts under the control of the python pdb debugger. Note that
2143 2149 this required changing the %prun option -d to -D, to avoid a clash
2144 2150 (since %run must pass options to %prun, and getopt is too dumb to
2145 2151 handle options with string values with embedded spaces). Thanks
2146 2152 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2147 2153 (magic_who_ls): added type matching to %who and %whos, so that one
2148 2154 can filter their output to only include variables of certain
2149 2155 types. Another suggestion by Matthew.
2150 2156 (magic_whos): Added memory summaries in kb and Mb for arrays.
2151 2157 (magic_who): Improve formatting (break lines every 9 vars).
2152 2158
2153 2159 2004-11-28 Fernando Perez <fperez@colorado.edu>
2154 2160
2155 2161 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2156 2162 cache when empty lines were present.
2157 2163
2158 2164 2004-11-24 Fernando Perez <fperez@colorado.edu>
2159 2165
2160 2166 * IPython/usage.py (__doc__): document the re-activated threading
2161 2167 options for WX and GTK.
2162 2168
2163 2169 2004-11-23 Fernando Perez <fperez@colorado.edu>
2164 2170
2165 2171 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2166 2172 the -wthread and -gthread options, along with a new -tk one to try
2167 2173 and coordinate Tk threading with wx/gtk. The tk support is very
2168 2174 platform dependent, since it seems to require Tcl and Tk to be
2169 2175 built with threads (Fedora1/2 appears NOT to have it, but in
2170 2176 Prabhu's Debian boxes it works OK). But even with some Tk
2171 2177 limitations, this is a great improvement.
2172 2178
2173 2179 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2174 2180 info in user prompts. Patch by Prabhu.
2175 2181
2176 2182 2004-11-18 Fernando Perez <fperez@colorado.edu>
2177 2183
2178 2184 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2179 2185 EOFErrors and bail, to avoid infinite loops if a non-terminating
2180 2186 file is fed into ipython. Patch submitted in issue 19 by user,
2181 2187 many thanks.
2182 2188
2183 2189 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2184 2190 autoquote/parens in continuation prompts, which can cause lots of
2185 2191 problems. Closes roundup issue 20.
2186 2192
2187 2193 2004-11-17 Fernando Perez <fperez@colorado.edu>
2188 2194
2189 2195 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2190 2196 reported as debian bug #280505. I'm not sure my local changelog
2191 2197 entry has the proper debian format (Jack?).
2192 2198
2193 2199 2004-11-08 *** Released version 0.6.4
2194 2200
2195 2201 2004-11-08 Fernando Perez <fperez@colorado.edu>
2196 2202
2197 2203 * IPython/iplib.py (init_readline): Fix exit message for Windows
2198 2204 when readline is active. Thanks to a report by Eric Jones
2199 2205 <eric-AT-enthought.com>.
2200 2206
2201 2207 2004-11-07 Fernando Perez <fperez@colorado.edu>
2202 2208
2203 2209 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2204 2210 sometimes seen by win2k/cygwin users.
2205 2211
2206 2212 2004-11-06 Fernando Perez <fperez@colorado.edu>
2207 2213
2208 2214 * IPython/iplib.py (interact): Change the handling of %Exit from
2209 2215 trying to propagate a SystemExit to an internal ipython flag.
2210 2216 This is less elegant than using Python's exception mechanism, but
2211 2217 I can't get that to work reliably with threads, so under -pylab
2212 2218 %Exit was hanging IPython. Cross-thread exception handling is
2213 2219 really a bitch. Thaks to a bug report by Stephen Walton
2214 2220 <stephen.walton-AT-csun.edu>.
2215 2221
2216 2222 2004-11-04 Fernando Perez <fperez@colorado.edu>
2217 2223
2218 2224 * IPython/iplib.py (raw_input_original): store a pointer to the
2219 2225 true raw_input to harden against code which can modify it
2220 2226 (wx.py.PyShell does this and would otherwise crash ipython).
2221 2227 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2222 2228
2223 2229 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2224 2230 Ctrl-C problem, which does not mess up the input line.
2225 2231
2226 2232 2004-11-03 Fernando Perez <fperez@colorado.edu>
2227 2233
2228 2234 * IPython/Release.py: Changed licensing to BSD, in all files.
2229 2235 (name): lowercase name for tarball/RPM release.
2230 2236
2231 2237 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2232 2238 use throughout ipython.
2233 2239
2234 2240 * IPython/Magic.py (Magic._ofind): Switch to using the new
2235 2241 OInspect.getdoc() function.
2236 2242
2237 2243 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2238 2244 of the line currently being canceled via Ctrl-C. It's extremely
2239 2245 ugly, but I don't know how to do it better (the problem is one of
2240 2246 handling cross-thread exceptions).
2241 2247
2242 2248 2004-10-28 Fernando Perez <fperez@colorado.edu>
2243 2249
2244 2250 * IPython/Shell.py (signal_handler): add signal handlers to trap
2245 2251 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2246 2252 report by Francesc Alted.
2247 2253
2248 2254 2004-10-21 Fernando Perez <fperez@colorado.edu>
2249 2255
2250 2256 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2251 2257 to % for pysh syntax extensions.
2252 2258
2253 2259 2004-10-09 Fernando Perez <fperez@colorado.edu>
2254 2260
2255 2261 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2256 2262 arrays to print a more useful summary, without calling str(arr).
2257 2263 This avoids the problem of extremely lengthy computations which
2258 2264 occur if arr is large, and appear to the user as a system lockup
2259 2265 with 100% cpu activity. After a suggestion by Kristian Sandberg
2260 2266 <Kristian.Sandberg@colorado.edu>.
2261 2267 (Magic.__init__): fix bug in global magic escapes not being
2262 2268 correctly set.
2263 2269
2264 2270 2004-10-08 Fernando Perez <fperez@colorado.edu>
2265 2271
2266 2272 * IPython/Magic.py (__license__): change to absolute imports of
2267 2273 ipython's own internal packages, to start adapting to the absolute
2268 2274 import requirement of PEP-328.
2269 2275
2270 2276 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2271 2277 files, and standardize author/license marks through the Release
2272 2278 module instead of having per/file stuff (except for files with
2273 2279 particular licenses, like the MIT/PSF-licensed codes).
2274 2280
2275 2281 * IPython/Debugger.py: remove dead code for python 2.1
2276 2282
2277 2283 2004-10-04 Fernando Perez <fperez@colorado.edu>
2278 2284
2279 2285 * IPython/iplib.py (ipmagic): New function for accessing magics
2280 2286 via a normal python function call.
2281 2287
2282 2288 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2283 2289 from '@' to '%', to accomodate the new @decorator syntax of python
2284 2290 2.4.
2285 2291
2286 2292 2004-09-29 Fernando Perez <fperez@colorado.edu>
2287 2293
2288 2294 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2289 2295 matplotlib.use to prevent running scripts which try to switch
2290 2296 interactive backends from within ipython. This will just crash
2291 2297 the python interpreter, so we can't allow it (but a detailed error
2292 2298 is given to the user).
2293 2299
2294 2300 2004-09-28 Fernando Perez <fperez@colorado.edu>
2295 2301
2296 2302 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2297 2303 matplotlib-related fixes so that using @run with non-matplotlib
2298 2304 scripts doesn't pop up spurious plot windows. This requires
2299 2305 matplotlib >= 0.63, where I had to make some changes as well.
2300 2306
2301 2307 * IPython/ipmaker.py (make_IPython): update version requirement to
2302 2308 python 2.2.
2303 2309
2304 2310 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2305 2311 banner arg for embedded customization.
2306 2312
2307 2313 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2308 2314 explicit uses of __IP as the IPython's instance name. Now things
2309 2315 are properly handled via the shell.name value. The actual code
2310 2316 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2311 2317 is much better than before. I'll clean things completely when the
2312 2318 magic stuff gets a real overhaul.
2313 2319
2314 2320 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2315 2321 minor changes to debian dir.
2316 2322
2317 2323 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2318 2324 pointer to the shell itself in the interactive namespace even when
2319 2325 a user-supplied dict is provided. This is needed for embedding
2320 2326 purposes (found by tests with Michel Sanner).
2321 2327
2322 2328 2004-09-27 Fernando Perez <fperez@colorado.edu>
2323 2329
2324 2330 * IPython/UserConfig/ipythonrc: remove []{} from
2325 2331 readline_remove_delims, so that things like [modname.<TAB> do
2326 2332 proper completion. This disables [].TAB, but that's a less common
2327 2333 case than module names in list comprehensions, for example.
2328 2334 Thanks to a report by Andrea Riciputi.
2329 2335
2330 2336 2004-09-09 Fernando Perez <fperez@colorado.edu>
2331 2337
2332 2338 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2333 2339 blocking problems in win32 and osx. Fix by John.
2334 2340
2335 2341 2004-09-08 Fernando Perez <fperez@colorado.edu>
2336 2342
2337 2343 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2338 2344 for Win32 and OSX. Fix by John Hunter.
2339 2345
2340 2346 2004-08-30 *** Released version 0.6.3
2341 2347
2342 2348 2004-08-30 Fernando Perez <fperez@colorado.edu>
2343 2349
2344 2350 * setup.py (isfile): Add manpages to list of dependent files to be
2345 2351 updated.
2346 2352
2347 2353 2004-08-27 Fernando Perez <fperez@colorado.edu>
2348 2354
2349 2355 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2350 2356 for now. They don't really work with standalone WX/GTK code
2351 2357 (though matplotlib IS working fine with both of those backends).
2352 2358 This will neeed much more testing. I disabled most things with
2353 2359 comments, so turning it back on later should be pretty easy.
2354 2360
2355 2361 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2356 2362 autocalling of expressions like r'foo', by modifying the line
2357 2363 split regexp. Closes
2358 2364 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2359 2365 Riley <ipythonbugs-AT-sabi.net>.
2360 2366 (InteractiveShell.mainloop): honor --nobanner with banner
2361 2367 extensions.
2362 2368
2363 2369 * IPython/Shell.py: Significant refactoring of all classes, so
2364 2370 that we can really support ALL matplotlib backends and threading
2365 2371 models (John spotted a bug with Tk which required this). Now we
2366 2372 should support single-threaded, WX-threads and GTK-threads, both
2367 2373 for generic code and for matplotlib.
2368 2374
2369 2375 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2370 2376 -pylab, to simplify things for users. Will also remove the pylab
2371 2377 profile, since now all of matplotlib configuration is directly
2372 2378 handled here. This also reduces startup time.
2373 2379
2374 2380 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2375 2381 shell wasn't being correctly called. Also in IPShellWX.
2376 2382
2377 2383 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2378 2384 fine-tune banner.
2379 2385
2380 2386 * IPython/numutils.py (spike): Deprecate these spike functions,
2381 2387 delete (long deprecated) gnuplot_exec handler.
2382 2388
2383 2389 2004-08-26 Fernando Perez <fperez@colorado.edu>
2384 2390
2385 2391 * ipython.1: Update for threading options, plus some others which
2386 2392 were missing.
2387 2393
2388 2394 * IPython/ipmaker.py (__call__): Added -wthread option for
2389 2395 wxpython thread handling. Make sure threading options are only
2390 2396 valid at the command line.
2391 2397
2392 2398 * scripts/ipython: moved shell selection into a factory function
2393 2399 in Shell.py, to keep the starter script to a minimum.
2394 2400
2395 2401 2004-08-25 Fernando Perez <fperez@colorado.edu>
2396 2402
2397 2403 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2398 2404 John. Along with some recent changes he made to matplotlib, the
2399 2405 next versions of both systems should work very well together.
2400 2406
2401 2407 2004-08-24 Fernando Perez <fperez@colorado.edu>
2402 2408
2403 2409 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2404 2410 tried to switch the profiling to using hotshot, but I'm getting
2405 2411 strange errors from prof.runctx() there. I may be misreading the
2406 2412 docs, but it looks weird. For now the profiling code will
2407 2413 continue to use the standard profiler.
2408 2414
2409 2415 2004-08-23 Fernando Perez <fperez@colorado.edu>
2410 2416
2411 2417 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2412 2418 threaded shell, by John Hunter. It's not quite ready yet, but
2413 2419 close.
2414 2420
2415 2421 2004-08-22 Fernando Perez <fperez@colorado.edu>
2416 2422
2417 2423 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2418 2424 in Magic and ultraTB.
2419 2425
2420 2426 * ipython.1: document threading options in manpage.
2421 2427
2422 2428 * scripts/ipython: Changed name of -thread option to -gthread,
2423 2429 since this is GTK specific. I want to leave the door open for a
2424 2430 -wthread option for WX, which will most likely be necessary. This
2425 2431 change affects usage and ipmaker as well.
2426 2432
2427 2433 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2428 2434 handle the matplotlib shell issues. Code by John Hunter
2429 2435 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2430 2436 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2431 2437 broken (and disabled for end users) for now, but it puts the
2432 2438 infrastructure in place.
2433 2439
2434 2440 2004-08-21 Fernando Perez <fperez@colorado.edu>
2435 2441
2436 2442 * ipythonrc-pylab: Add matplotlib support.
2437 2443
2438 2444 * matplotlib_config.py: new files for matplotlib support, part of
2439 2445 the pylab profile.
2440 2446
2441 2447 * IPython/usage.py (__doc__): documented the threading options.
2442 2448
2443 2449 2004-08-20 Fernando Perez <fperez@colorado.edu>
2444 2450
2445 2451 * ipython: Modified the main calling routine to handle the -thread
2446 2452 and -mpthread options. This needs to be done as a top-level hack,
2447 2453 because it determines which class to instantiate for IPython
2448 2454 itself.
2449 2455
2450 2456 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2451 2457 classes to support multithreaded GTK operation without blocking,
2452 2458 and matplotlib with all backends. This is a lot of still very
2453 2459 experimental code, and threads are tricky. So it may still have a
2454 2460 few rough edges... This code owes a lot to
2455 2461 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2456 2462 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2457 2463 to John Hunter for all the matplotlib work.
2458 2464
2459 2465 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2460 2466 options for gtk thread and matplotlib support.
2461 2467
2462 2468 2004-08-16 Fernando Perez <fperez@colorado.edu>
2463 2469
2464 2470 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2465 2471 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2466 2472 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2467 2473
2468 2474 2004-08-11 Fernando Perez <fperez@colorado.edu>
2469 2475
2470 2476 * setup.py (isfile): Fix build so documentation gets updated for
2471 2477 rpms (it was only done for .tgz builds).
2472 2478
2473 2479 2004-08-10 Fernando Perez <fperez@colorado.edu>
2474 2480
2475 2481 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2476 2482
2477 2483 * iplib.py : Silence syntax error exceptions in tab-completion.
2478 2484
2479 2485 2004-08-05 Fernando Perez <fperez@colorado.edu>
2480 2486
2481 2487 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2482 2488 'color off' mark for continuation prompts. This was causing long
2483 2489 continuation lines to mis-wrap.
2484 2490
2485 2491 2004-08-01 Fernando Perez <fperez@colorado.edu>
2486 2492
2487 2493 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2488 2494 for building ipython to be a parameter. All this is necessary
2489 2495 right now to have a multithreaded version, but this insane
2490 2496 non-design will be cleaned up soon. For now, it's a hack that
2491 2497 works.
2492 2498
2493 2499 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2494 2500 args in various places. No bugs so far, but it's a dangerous
2495 2501 practice.
2496 2502
2497 2503 2004-07-31 Fernando Perez <fperez@colorado.edu>
2498 2504
2499 2505 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2500 2506 fix completion of files with dots in their names under most
2501 2507 profiles (pysh was OK because the completion order is different).
2502 2508
2503 2509 2004-07-27 Fernando Perez <fperez@colorado.edu>
2504 2510
2505 2511 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2506 2512 keywords manually, b/c the one in keyword.py was removed in python
2507 2513 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2508 2514 This is NOT a bug under python 2.3 and earlier.
2509 2515
2510 2516 2004-07-26 Fernando Perez <fperez@colorado.edu>
2511 2517
2512 2518 * IPython/ultraTB.py (VerboseTB.text): Add another
2513 2519 linecache.checkcache() call to try to prevent inspect.py from
2514 2520 crashing under python 2.3. I think this fixes
2515 2521 http://www.scipy.net/roundup/ipython/issue17.
2516 2522
2517 2523 2004-07-26 *** Released version 0.6.2
2518 2524
2519 2525 2004-07-26 Fernando Perez <fperez@colorado.edu>
2520 2526
2521 2527 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2522 2528 fail for any number.
2523 2529 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2524 2530 empty bookmarks.
2525 2531
2526 2532 2004-07-26 *** Released version 0.6.1
2527 2533
2528 2534 2004-07-26 Fernando Perez <fperez@colorado.edu>
2529 2535
2530 2536 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2531 2537
2532 2538 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2533 2539 escaping '()[]{}' in filenames.
2534 2540
2535 2541 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2536 2542 Python 2.2 users who lack a proper shlex.split.
2537 2543
2538 2544 2004-07-19 Fernando Perez <fperez@colorado.edu>
2539 2545
2540 2546 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2541 2547 for reading readline's init file. I follow the normal chain:
2542 2548 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2543 2549 report by Mike Heeter. This closes
2544 2550 http://www.scipy.net/roundup/ipython/issue16.
2545 2551
2546 2552 2004-07-18 Fernando Perez <fperez@colorado.edu>
2547 2553
2548 2554 * IPython/iplib.py (__init__): Add better handling of '\' under
2549 2555 Win32 for filenames. After a patch by Ville.
2550 2556
2551 2557 2004-07-17 Fernando Perez <fperez@colorado.edu>
2552 2558
2553 2559 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2554 2560 autocalling would be triggered for 'foo is bar' if foo is
2555 2561 callable. I also cleaned up the autocall detection code to use a
2556 2562 regexp, which is faster. Bug reported by Alexander Schmolck.
2557 2563
2558 2564 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2559 2565 '?' in them would confuse the help system. Reported by Alex
2560 2566 Schmolck.
2561 2567
2562 2568 2004-07-16 Fernando Perez <fperez@colorado.edu>
2563 2569
2564 2570 * IPython/GnuplotInteractive.py (__all__): added plot2.
2565 2571
2566 2572 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2567 2573 plotting dictionaries, lists or tuples of 1d arrays.
2568 2574
2569 2575 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2570 2576 optimizations.
2571 2577
2572 2578 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2573 2579 the information which was there from Janko's original IPP code:
2574 2580
2575 2581 03.05.99 20:53 porto.ifm.uni-kiel.de
2576 2582 --Started changelog.
2577 2583 --make clear do what it say it does
2578 2584 --added pretty output of lines from inputcache
2579 2585 --Made Logger a mixin class, simplifies handling of switches
2580 2586 --Added own completer class. .string<TAB> expands to last history
2581 2587 line which starts with string. The new expansion is also present
2582 2588 with Ctrl-r from the readline library. But this shows, who this
2583 2589 can be done for other cases.
2584 2590 --Added convention that all shell functions should accept a
2585 2591 parameter_string This opens the door for different behaviour for
2586 2592 each function. @cd is a good example of this.
2587 2593
2588 2594 04.05.99 12:12 porto.ifm.uni-kiel.de
2589 2595 --added logfile rotation
2590 2596 --added new mainloop method which freezes first the namespace
2591 2597
2592 2598 07.05.99 21:24 porto.ifm.uni-kiel.de
2593 2599 --added the docreader classes. Now there is a help system.
2594 2600 -This is only a first try. Currently it's not easy to put new
2595 2601 stuff in the indices. But this is the way to go. Info would be
2596 2602 better, but HTML is every where and not everybody has an info
2597 2603 system installed and it's not so easy to change html-docs to info.
2598 2604 --added global logfile option
2599 2605 --there is now a hook for object inspection method pinfo needs to
2600 2606 be provided for this. Can be reached by two '??'.
2601 2607
2602 2608 08.05.99 20:51 porto.ifm.uni-kiel.de
2603 2609 --added a README
2604 2610 --bug in rc file. Something has changed so functions in the rc
2605 2611 file need to reference the shell and not self. Not clear if it's a
2606 2612 bug or feature.
2607 2613 --changed rc file for new behavior
2608 2614
2609 2615 2004-07-15 Fernando Perez <fperez@colorado.edu>
2610 2616
2611 2617 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2612 2618 cache was falling out of sync in bizarre manners when multi-line
2613 2619 input was present. Minor optimizations and cleanup.
2614 2620
2615 2621 (Logger): Remove old Changelog info for cleanup. This is the
2616 2622 information which was there from Janko's original code:
2617 2623
2618 2624 Changes to Logger: - made the default log filename a parameter
2619 2625
2620 2626 - put a check for lines beginning with !@? in log(). Needed
2621 2627 (even if the handlers properly log their lines) for mid-session
2622 2628 logging activation to work properly. Without this, lines logged
2623 2629 in mid session, which get read from the cache, would end up
2624 2630 'bare' (with !@? in the open) in the log. Now they are caught
2625 2631 and prepended with a #.
2626 2632
2627 2633 * IPython/iplib.py (InteractiveShell.init_readline): added check
2628 2634 in case MagicCompleter fails to be defined, so we don't crash.
2629 2635
2630 2636 2004-07-13 Fernando Perez <fperez@colorado.edu>
2631 2637
2632 2638 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2633 2639 of EPS if the requested filename ends in '.eps'.
2634 2640
2635 2641 2004-07-04 Fernando Perez <fperez@colorado.edu>
2636 2642
2637 2643 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2638 2644 escaping of quotes when calling the shell.
2639 2645
2640 2646 2004-07-02 Fernando Perez <fperez@colorado.edu>
2641 2647
2642 2648 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2643 2649 gettext not working because we were clobbering '_'. Fixes
2644 2650 http://www.scipy.net/roundup/ipython/issue6.
2645 2651
2646 2652 2004-07-01 Fernando Perez <fperez@colorado.edu>
2647 2653
2648 2654 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2649 2655 into @cd. Patch by Ville.
2650 2656
2651 2657 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2652 2658 new function to store things after ipmaker runs. Patch by Ville.
2653 2659 Eventually this will go away once ipmaker is removed and the class
2654 2660 gets cleaned up, but for now it's ok. Key functionality here is
2655 2661 the addition of the persistent storage mechanism, a dict for
2656 2662 keeping data across sessions (for now just bookmarks, but more can
2657 2663 be implemented later).
2658 2664
2659 2665 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2660 2666 persistent across sections. Patch by Ville, I modified it
2661 2667 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2662 2668 added a '-l' option to list all bookmarks.
2663 2669
2664 2670 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2665 2671 center for cleanup. Registered with atexit.register(). I moved
2666 2672 here the old exit_cleanup(). After a patch by Ville.
2667 2673
2668 2674 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2669 2675 characters in the hacked shlex_split for python 2.2.
2670 2676
2671 2677 * IPython/iplib.py (file_matches): more fixes to filenames with
2672 2678 whitespace in them. It's not perfect, but limitations in python's
2673 2679 readline make it impossible to go further.
2674 2680
2675 2681 2004-06-29 Fernando Perez <fperez@colorado.edu>
2676 2682
2677 2683 * IPython/iplib.py (file_matches): escape whitespace correctly in
2678 2684 filename completions. Bug reported by Ville.
2679 2685
2680 2686 2004-06-28 Fernando Perez <fperez@colorado.edu>
2681 2687
2682 2688 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2683 2689 the history file will be called 'history-PROFNAME' (or just
2684 2690 'history' if no profile is loaded). I was getting annoyed at
2685 2691 getting my Numerical work history clobbered by pysh sessions.
2686 2692
2687 2693 * IPython/iplib.py (InteractiveShell.__init__): Internal
2688 2694 getoutputerror() function so that we can honor the system_verbose
2689 2695 flag for _all_ system calls. I also added escaping of #
2690 2696 characters here to avoid confusing Itpl.
2691 2697
2692 2698 * IPython/Magic.py (shlex_split): removed call to shell in
2693 2699 parse_options and replaced it with shlex.split(). The annoying
2694 2700 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2695 2701 to backport it from 2.3, with several frail hacks (the shlex
2696 2702 module is rather limited in 2.2). Thanks to a suggestion by Ville
2697 2703 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2698 2704 problem.
2699 2705
2700 2706 (Magic.magic_system_verbose): new toggle to print the actual
2701 2707 system calls made by ipython. Mainly for debugging purposes.
2702 2708
2703 2709 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2704 2710 doesn't support persistence. Reported (and fix suggested) by
2705 2711 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2706 2712
2707 2713 2004-06-26 Fernando Perez <fperez@colorado.edu>
2708 2714
2709 2715 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2710 2716 continue prompts.
2711 2717
2712 2718 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2713 2719 function (basically a big docstring) and a few more things here to
2714 2720 speedup startup. pysh.py is now very lightweight. We want because
2715 2721 it gets execfile'd, while InterpreterExec gets imported, so
2716 2722 byte-compilation saves time.
2717 2723
2718 2724 2004-06-25 Fernando Perez <fperez@colorado.edu>
2719 2725
2720 2726 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2721 2727 -NUM', which was recently broken.
2722 2728
2723 2729 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2724 2730 in multi-line input (but not !!, which doesn't make sense there).
2725 2731
2726 2732 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2727 2733 It's just too useful, and people can turn it off in the less
2728 2734 common cases where it's a problem.
2729 2735
2730 2736 2004-06-24 Fernando Perez <fperez@colorado.edu>
2731 2737
2732 2738 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2733 2739 special syntaxes (like alias calling) is now allied in multi-line
2734 2740 input. This is still _very_ experimental, but it's necessary for
2735 2741 efficient shell usage combining python looping syntax with system
2736 2742 calls. For now it's restricted to aliases, I don't think it
2737 2743 really even makes sense to have this for magics.
2738 2744
2739 2745 2004-06-23 Fernando Perez <fperez@colorado.edu>
2740 2746
2741 2747 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2742 2748 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2743 2749
2744 2750 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2745 2751 extensions under Windows (after code sent by Gary Bishop). The
2746 2752 extensions considered 'executable' are stored in IPython's rc
2747 2753 structure as win_exec_ext.
2748 2754
2749 2755 * IPython/genutils.py (shell): new function, like system() but
2750 2756 without return value. Very useful for interactive shell work.
2751 2757
2752 2758 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2753 2759 delete aliases.
2754 2760
2755 2761 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2756 2762 sure that the alias table doesn't contain python keywords.
2757 2763
2758 2764 2004-06-21 Fernando Perez <fperez@colorado.edu>
2759 2765
2760 2766 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2761 2767 non-existent items are found in $PATH. Reported by Thorsten.
2762 2768
2763 2769 2004-06-20 Fernando Perez <fperez@colorado.edu>
2764 2770
2765 2771 * IPython/iplib.py (complete): modified the completer so that the
2766 2772 order of priorities can be easily changed at runtime.
2767 2773
2768 2774 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2769 2775 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2770 2776
2771 2777 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2772 2778 expand Python variables prepended with $ in all system calls. The
2773 2779 same was done to InteractiveShell.handle_shell_escape. Now all
2774 2780 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2775 2781 expansion of python variables and expressions according to the
2776 2782 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2777 2783
2778 2784 Though PEP-215 has been rejected, a similar (but simpler) one
2779 2785 seems like it will go into Python 2.4, PEP-292 -
2780 2786 http://www.python.org/peps/pep-0292.html.
2781 2787
2782 2788 I'll keep the full syntax of PEP-215, since IPython has since the
2783 2789 start used Ka-Ping Yee's reference implementation discussed there
2784 2790 (Itpl), and I actually like the powerful semantics it offers.
2785 2791
2786 2792 In order to access normal shell variables, the $ has to be escaped
2787 2793 via an extra $. For example:
2788 2794
2789 2795 In [7]: PATH='a python variable'
2790 2796
2791 2797 In [8]: !echo $PATH
2792 2798 a python variable
2793 2799
2794 2800 In [9]: !echo $$PATH
2795 2801 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2796 2802
2797 2803 (Magic.parse_options): escape $ so the shell doesn't evaluate
2798 2804 things prematurely.
2799 2805
2800 2806 * IPython/iplib.py (InteractiveShell.call_alias): added the
2801 2807 ability for aliases to expand python variables via $.
2802 2808
2803 2809 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2804 2810 system, now there's a @rehash/@rehashx pair of magics. These work
2805 2811 like the csh rehash command, and can be invoked at any time. They
2806 2812 build a table of aliases to everything in the user's $PATH
2807 2813 (@rehash uses everything, @rehashx is slower but only adds
2808 2814 executable files). With this, the pysh.py-based shell profile can
2809 2815 now simply call rehash upon startup, and full access to all
2810 2816 programs in the user's path is obtained.
2811 2817
2812 2818 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2813 2819 functionality is now fully in place. I removed the old dynamic
2814 2820 code generation based approach, in favor of a much lighter one
2815 2821 based on a simple dict. The advantage is that this allows me to
2816 2822 now have thousands of aliases with negligible cost (unthinkable
2817 2823 with the old system).
2818 2824
2819 2825 2004-06-19 Fernando Perez <fperez@colorado.edu>
2820 2826
2821 2827 * IPython/iplib.py (__init__): extended MagicCompleter class to
2822 2828 also complete (last in priority) on user aliases.
2823 2829
2824 2830 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2825 2831 call to eval.
2826 2832 (ItplNS.__init__): Added a new class which functions like Itpl,
2827 2833 but allows configuring the namespace for the evaluation to occur
2828 2834 in.
2829 2835
2830 2836 2004-06-18 Fernando Perez <fperez@colorado.edu>
2831 2837
2832 2838 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2833 2839 better message when 'exit' or 'quit' are typed (a common newbie
2834 2840 confusion).
2835 2841
2836 2842 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2837 2843 check for Windows users.
2838 2844
2839 2845 * IPython/iplib.py (InteractiveShell.user_setup): removed
2840 2846 disabling of colors for Windows. I'll test at runtime and issue a
2841 2847 warning if Gary's readline isn't found, as to nudge users to
2842 2848 download it.
2843 2849
2844 2850 2004-06-16 Fernando Perez <fperez@colorado.edu>
2845 2851
2846 2852 * IPython/genutils.py (Stream.__init__): changed to print errors
2847 2853 to sys.stderr. I had a circular dependency here. Now it's
2848 2854 possible to run ipython as IDLE's shell (consider this pre-alpha,
2849 2855 since true stdout things end up in the starting terminal instead
2850 2856 of IDLE's out).
2851 2857
2852 2858 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2853 2859 users who haven't # updated their prompt_in2 definitions. Remove
2854 2860 eventually.
2855 2861 (multiple_replace): added credit to original ASPN recipe.
2856 2862
2857 2863 2004-06-15 Fernando Perez <fperez@colorado.edu>
2858 2864
2859 2865 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2860 2866 list of auto-defined aliases.
2861 2867
2862 2868 2004-06-13 Fernando Perez <fperez@colorado.edu>
2863 2869
2864 2870 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2865 2871 install was really requested (so setup.py can be used for other
2866 2872 things under Windows).
2867 2873
2868 2874 2004-06-10 Fernando Perez <fperez@colorado.edu>
2869 2875
2870 2876 * IPython/Logger.py (Logger.create_log): Manually remove any old
2871 2877 backup, since os.remove may fail under Windows. Fixes bug
2872 2878 reported by Thorsten.
2873 2879
2874 2880 2004-06-09 Fernando Perez <fperez@colorado.edu>
2875 2881
2876 2882 * examples/example-embed.py: fixed all references to %n (replaced
2877 2883 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2878 2884 for all examples and the manual as well.
2879 2885
2880 2886 2004-06-08 Fernando Perez <fperez@colorado.edu>
2881 2887
2882 2888 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2883 2889 alignment and color management. All 3 prompt subsystems now
2884 2890 inherit from BasePrompt.
2885 2891
2886 2892 * tools/release: updates for windows installer build and tag rpms
2887 2893 with python version (since paths are fixed).
2888 2894
2889 2895 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2890 2896 which will become eventually obsolete. Also fixed the default
2891 2897 prompt_in2 to use \D, so at least new users start with the correct
2892 2898 defaults.
2893 2899 WARNING: Users with existing ipythonrc files will need to apply
2894 2900 this fix manually!
2895 2901
2896 2902 * setup.py: make windows installer (.exe). This is finally the
2897 2903 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2898 2904 which I hadn't included because it required Python 2.3 (or recent
2899 2905 distutils).
2900 2906
2901 2907 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2902 2908 usage of new '\D' escape.
2903 2909
2904 2910 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2905 2911 lacks os.getuid())
2906 2912 (CachedOutput.set_colors): Added the ability to turn coloring
2907 2913 on/off with @colors even for manually defined prompt colors. It
2908 2914 uses a nasty global, but it works safely and via the generic color
2909 2915 handling mechanism.
2910 2916 (Prompt2.__init__): Introduced new escape '\D' for continuation
2911 2917 prompts. It represents the counter ('\#') as dots.
2912 2918 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2913 2919 need to update their ipythonrc files and replace '%n' with '\D' in
2914 2920 their prompt_in2 settings everywhere. Sorry, but there's
2915 2921 otherwise no clean way to get all prompts to properly align. The
2916 2922 ipythonrc shipped with IPython has been updated.
2917 2923
2918 2924 2004-06-07 Fernando Perez <fperez@colorado.edu>
2919 2925
2920 2926 * setup.py (isfile): Pass local_icons option to latex2html, so the
2921 2927 resulting HTML file is self-contained. Thanks to
2922 2928 dryice-AT-liu.com.cn for the tip.
2923 2929
2924 2930 * pysh.py: I created a new profile 'shell', which implements a
2925 2931 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2926 2932 system shell, nor will it become one anytime soon. It's mainly
2927 2933 meant to illustrate the use of the new flexible bash-like prompts.
2928 2934 I guess it could be used by hardy souls for true shell management,
2929 2935 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2930 2936 profile. This uses the InterpreterExec extension provided by
2931 2937 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2932 2938
2933 2939 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2934 2940 auto-align itself with the length of the previous input prompt
2935 2941 (taking into account the invisible color escapes).
2936 2942 (CachedOutput.__init__): Large restructuring of this class. Now
2937 2943 all three prompts (primary1, primary2, output) are proper objects,
2938 2944 managed by the 'parent' CachedOutput class. The code is still a
2939 2945 bit hackish (all prompts share state via a pointer to the cache),
2940 2946 but it's overall far cleaner than before.
2941 2947
2942 2948 * IPython/genutils.py (getoutputerror): modified to add verbose,
2943 2949 debug and header options. This makes the interface of all getout*
2944 2950 functions uniform.
2945 2951 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2946 2952
2947 2953 * IPython/Magic.py (Magic.default_option): added a function to
2948 2954 allow registering default options for any magic command. This
2949 2955 makes it easy to have profiles which customize the magics globally
2950 2956 for a certain use. The values set through this function are
2951 2957 picked up by the parse_options() method, which all magics should
2952 2958 use to parse their options.
2953 2959
2954 2960 * IPython/genutils.py (warn): modified the warnings framework to
2955 2961 use the Term I/O class. I'm trying to slowly unify all of
2956 2962 IPython's I/O operations to pass through Term.
2957 2963
2958 2964 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2959 2965 the secondary prompt to correctly match the length of the primary
2960 2966 one for any prompt. Now multi-line code will properly line up
2961 2967 even for path dependent prompts, such as the new ones available
2962 2968 via the prompt_specials.
2963 2969
2964 2970 2004-06-06 Fernando Perez <fperez@colorado.edu>
2965 2971
2966 2972 * IPython/Prompts.py (prompt_specials): Added the ability to have
2967 2973 bash-like special sequences in the prompts, which get
2968 2974 automatically expanded. Things like hostname, current working
2969 2975 directory and username are implemented already, but it's easy to
2970 2976 add more in the future. Thanks to a patch by W.J. van der Laan
2971 2977 <gnufnork-AT-hetdigitalegat.nl>
2972 2978 (prompt_specials): Added color support for prompt strings, so
2973 2979 users can define arbitrary color setups for their prompts.
2974 2980
2975 2981 2004-06-05 Fernando Perez <fperez@colorado.edu>
2976 2982
2977 2983 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2978 2984 code to load Gary Bishop's readline and configure it
2979 2985 automatically. Thanks to Gary for help on this.
2980 2986
2981 2987 2004-06-01 Fernando Perez <fperez@colorado.edu>
2982 2988
2983 2989 * IPython/Logger.py (Logger.create_log): fix bug for logging
2984 2990 with no filename (previous fix was incomplete).
2985 2991
2986 2992 2004-05-25 Fernando Perez <fperez@colorado.edu>
2987 2993
2988 2994 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2989 2995 parens would get passed to the shell.
2990 2996
2991 2997 2004-05-20 Fernando Perez <fperez@colorado.edu>
2992 2998
2993 2999 * IPython/Magic.py (Magic.magic_prun): changed default profile
2994 3000 sort order to 'time' (the more common profiling need).
2995 3001
2996 3002 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2997 3003 so that source code shown is guaranteed in sync with the file on
2998 3004 disk (also changed in psource). Similar fix to the one for
2999 3005 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3000 3006 <yann.ledu-AT-noos.fr>.
3001 3007
3002 3008 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3003 3009 with a single option would not be correctly parsed. Closes
3004 3010 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3005 3011 introduced in 0.6.0 (on 2004-05-06).
3006 3012
3007 3013 2004-05-13 *** Released version 0.6.0
3008 3014
3009 3015 2004-05-13 Fernando Perez <fperez@colorado.edu>
3010 3016
3011 3017 * debian/: Added debian/ directory to CVS, so that debian support
3012 3018 is publicly accessible. The debian package is maintained by Jack
3013 3019 Moffit <jack-AT-xiph.org>.
3014 3020
3015 3021 * Documentation: included the notes about an ipython-based system
3016 3022 shell (the hypothetical 'pysh') into the new_design.pdf document,
3017 3023 so that these ideas get distributed to users along with the
3018 3024 official documentation.
3019 3025
3020 3026 2004-05-10 Fernando Perez <fperez@colorado.edu>
3021 3027
3022 3028 * IPython/Logger.py (Logger.create_log): fix recently introduced
3023 3029 bug (misindented line) where logstart would fail when not given an
3024 3030 explicit filename.
3025 3031
3026 3032 2004-05-09 Fernando Perez <fperez@colorado.edu>
3027 3033
3028 3034 * IPython/Magic.py (Magic.parse_options): skip system call when
3029 3035 there are no options to look for. Faster, cleaner for the common
3030 3036 case.
3031 3037
3032 3038 * Documentation: many updates to the manual: describing Windows
3033 3039 support better, Gnuplot updates, credits, misc small stuff. Also
3034 3040 updated the new_design doc a bit.
3035 3041
3036 3042 2004-05-06 *** Released version 0.6.0.rc1
3037 3043
3038 3044 2004-05-06 Fernando Perez <fperez@colorado.edu>
3039 3045
3040 3046 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3041 3047 operations to use the vastly more efficient list/''.join() method.
3042 3048 (FormattedTB.text): Fix
3043 3049 http://www.scipy.net/roundup/ipython/issue12 - exception source
3044 3050 extract not updated after reload. Thanks to Mike Salib
3045 3051 <msalib-AT-mit.edu> for pinning the source of the problem.
3046 3052 Fortunately, the solution works inside ipython and doesn't require
3047 3053 any changes to python proper.
3048 3054
3049 3055 * IPython/Magic.py (Magic.parse_options): Improved to process the
3050 3056 argument list as a true shell would (by actually using the
3051 3057 underlying system shell). This way, all @magics automatically get
3052 3058 shell expansion for variables. Thanks to a comment by Alex
3053 3059 Schmolck.
3054 3060
3055 3061 2004-04-04 Fernando Perez <fperez@colorado.edu>
3056 3062
3057 3063 * IPython/iplib.py (InteractiveShell.interact): Added a special
3058 3064 trap for a debugger quit exception, which is basically impossible
3059 3065 to handle by normal mechanisms, given what pdb does to the stack.
3060 3066 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3061 3067
3062 3068 2004-04-03 Fernando Perez <fperez@colorado.edu>
3063 3069
3064 3070 * IPython/genutils.py (Term): Standardized the names of the Term
3065 3071 class streams to cin/cout/cerr, following C++ naming conventions
3066 3072 (I can't use in/out/err because 'in' is not a valid attribute
3067 3073 name).
3068 3074
3069 3075 * IPython/iplib.py (InteractiveShell.interact): don't increment
3070 3076 the prompt if there's no user input. By Daniel 'Dang' Griffith
3071 3077 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3072 3078 Francois Pinard.
3073 3079
3074 3080 2004-04-02 Fernando Perez <fperez@colorado.edu>
3075 3081
3076 3082 * IPython/genutils.py (Stream.__init__): Modified to survive at
3077 3083 least importing in contexts where stdin/out/err aren't true file
3078 3084 objects, such as PyCrust (they lack fileno() and mode). However,
3079 3085 the recovery facilities which rely on these things existing will
3080 3086 not work.
3081 3087
3082 3088 2004-04-01 Fernando Perez <fperez@colorado.edu>
3083 3089
3084 3090 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3085 3091 use the new getoutputerror() function, so it properly
3086 3092 distinguishes stdout/err.
3087 3093
3088 3094 * IPython/genutils.py (getoutputerror): added a function to
3089 3095 capture separately the standard output and error of a command.
3090 3096 After a comment from dang on the mailing lists. This code is
3091 3097 basically a modified version of commands.getstatusoutput(), from
3092 3098 the standard library.
3093 3099
3094 3100 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3095 3101 '!!' as a special syntax (shorthand) to access @sx.
3096 3102
3097 3103 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3098 3104 command and return its output as a list split on '\n'.
3099 3105
3100 3106 2004-03-31 Fernando Perez <fperez@colorado.edu>
3101 3107
3102 3108 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3103 3109 method to dictionaries used as FakeModule instances if they lack
3104 3110 it. At least pydoc in python2.3 breaks for runtime-defined
3105 3111 functions without this hack. At some point I need to _really_
3106 3112 understand what FakeModule is doing, because it's a gross hack.
3107 3113 But it solves Arnd's problem for now...
3108 3114
3109 3115 2004-02-27 Fernando Perez <fperez@colorado.edu>
3110 3116
3111 3117 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3112 3118 mode would behave erratically. Also increased the number of
3113 3119 possible logs in rotate mod to 999. Thanks to Rod Holland
3114 3120 <rhh@StructureLABS.com> for the report and fixes.
3115 3121
3116 3122 2004-02-26 Fernando Perez <fperez@colorado.edu>
3117 3123
3118 3124 * IPython/genutils.py (page): Check that the curses module really
3119 3125 has the initscr attribute before trying to use it. For some
3120 3126 reason, the Solaris curses module is missing this. I think this
3121 3127 should be considered a Solaris python bug, but I'm not sure.
3122 3128
3123 3129 2004-01-17 Fernando Perez <fperez@colorado.edu>
3124 3130
3125 3131 * IPython/genutils.py (Stream.__init__): Changes to try to make
3126 3132 ipython robust against stdin/out/err being closed by the user.
3127 3133 This is 'user error' (and blocks a normal python session, at least
3128 3134 the stdout case). However, Ipython should be able to survive such
3129 3135 instances of abuse as gracefully as possible. To simplify the
3130 3136 coding and maintain compatibility with Gary Bishop's Term
3131 3137 contributions, I've made use of classmethods for this. I think
3132 3138 this introduces a dependency on python 2.2.
3133 3139
3134 3140 2004-01-13 Fernando Perez <fperez@colorado.edu>
3135 3141
3136 3142 * IPython/numutils.py (exp_safe): simplified the code a bit and
3137 3143 removed the need for importing the kinds module altogether.
3138 3144
3139 3145 2004-01-06 Fernando Perez <fperez@colorado.edu>
3140 3146
3141 3147 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3142 3148 a magic function instead, after some community feedback. No
3143 3149 special syntax will exist for it, but its name is deliberately
3144 3150 very short.
3145 3151
3146 3152 2003-12-20 Fernando Perez <fperez@colorado.edu>
3147 3153
3148 3154 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3149 3155 new functionality, to automagically assign the result of a shell
3150 3156 command to a variable. I'll solicit some community feedback on
3151 3157 this before making it permanent.
3152 3158
3153 3159 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3154 3160 requested about callables for which inspect couldn't obtain a
3155 3161 proper argspec. Thanks to a crash report sent by Etienne
3156 3162 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3157 3163
3158 3164 2003-12-09 Fernando Perez <fperez@colorado.edu>
3159 3165
3160 3166 * IPython/genutils.py (page): patch for the pager to work across
3161 3167 various versions of Windows. By Gary Bishop.
3162 3168
3163 3169 2003-12-04 Fernando Perez <fperez@colorado.edu>
3164 3170
3165 3171 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3166 3172 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3167 3173 While I tested this and it looks ok, there may still be corner
3168 3174 cases I've missed.
3169 3175
3170 3176 2003-12-01 Fernando Perez <fperez@colorado.edu>
3171 3177
3172 3178 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3173 3179 where a line like 'p,q=1,2' would fail because the automagic
3174 3180 system would be triggered for @p.
3175 3181
3176 3182 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3177 3183 cleanups, code unmodified.
3178 3184
3179 3185 * IPython/genutils.py (Term): added a class for IPython to handle
3180 3186 output. In most cases it will just be a proxy for stdout/err, but
3181 3187 having this allows modifications to be made for some platforms,
3182 3188 such as handling color escapes under Windows. All of this code
3183 3189 was contributed by Gary Bishop, with minor modifications by me.
3184 3190 The actual changes affect many files.
3185 3191
3186 3192 2003-11-30 Fernando Perez <fperez@colorado.edu>
3187 3193
3188 3194 * IPython/iplib.py (file_matches): new completion code, courtesy
3189 3195 of Jeff Collins. This enables filename completion again under
3190 3196 python 2.3, which disabled it at the C level.
3191 3197
3192 3198 2003-11-11 Fernando Perez <fperez@colorado.edu>
3193 3199
3194 3200 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3195 3201 for Numeric.array(map(...)), but often convenient.
3196 3202
3197 3203 2003-11-05 Fernando Perez <fperez@colorado.edu>
3198 3204
3199 3205 * IPython/numutils.py (frange): Changed a call from int() to
3200 3206 int(round()) to prevent a problem reported with arange() in the
3201 3207 numpy list.
3202 3208
3203 3209 2003-10-06 Fernando Perez <fperez@colorado.edu>
3204 3210
3205 3211 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3206 3212 prevent crashes if sys lacks an argv attribute (it happens with
3207 3213 embedded interpreters which build a bare-bones sys module).
3208 3214 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3209 3215
3210 3216 2003-09-24 Fernando Perez <fperez@colorado.edu>
3211 3217
3212 3218 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3213 3219 to protect against poorly written user objects where __getattr__
3214 3220 raises exceptions other than AttributeError. Thanks to a bug
3215 3221 report by Oliver Sander <osander-AT-gmx.de>.
3216 3222
3217 3223 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3218 3224 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3219 3225
3220 3226 2003-09-09 Fernando Perez <fperez@colorado.edu>
3221 3227
3222 3228 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3223 3229 unpacking a list whith a callable as first element would
3224 3230 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3225 3231 Collins.
3226 3232
3227 3233 2003-08-25 *** Released version 0.5.0
3228 3234
3229 3235 2003-08-22 Fernando Perez <fperez@colorado.edu>
3230 3236
3231 3237 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3232 3238 improperly defined user exceptions. Thanks to feedback from Mark
3233 3239 Russell <mrussell-AT-verio.net>.
3234 3240
3235 3241 2003-08-20 Fernando Perez <fperez@colorado.edu>
3236 3242
3237 3243 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3238 3244 printing so that it would print multi-line string forms starting
3239 3245 with a new line. This way the formatting is better respected for
3240 3246 objects which work hard to make nice string forms.
3241 3247
3242 3248 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3243 3249 autocall would overtake data access for objects with both
3244 3250 __getitem__ and __call__.
3245 3251
3246 3252 2003-08-19 *** Released version 0.5.0-rc1
3247 3253
3248 3254 2003-08-19 Fernando Perez <fperez@colorado.edu>
3249 3255
3250 3256 * IPython/deep_reload.py (load_tail): single tiny change here
3251 3257 seems to fix the long-standing bug of dreload() failing to work
3252 3258 for dotted names. But this module is pretty tricky, so I may have
3253 3259 missed some subtlety. Needs more testing!.
3254 3260
3255 3261 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3256 3262 exceptions which have badly implemented __str__ methods.
3257 3263 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3258 3264 which I've been getting reports about from Python 2.3 users. I
3259 3265 wish I had a simple test case to reproduce the problem, so I could
3260 3266 either write a cleaner workaround or file a bug report if
3261 3267 necessary.
3262 3268
3263 3269 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3264 3270 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3265 3271 a bug report by Tjabo Kloppenburg.
3266 3272
3267 3273 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3268 3274 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3269 3275 seems rather unstable. Thanks to a bug report by Tjabo
3270 3276 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3271 3277
3272 3278 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3273 3279 this out soon because of the critical fixes in the inner loop for
3274 3280 generators.
3275 3281
3276 3282 * IPython/Magic.py (Magic.getargspec): removed. This (and
3277 3283 _get_def) have been obsoleted by OInspect for a long time, I
3278 3284 hadn't noticed that they were dead code.
3279 3285 (Magic._ofind): restored _ofind functionality for a few literals
3280 3286 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3281 3287 for things like "hello".capitalize?, since that would require a
3282 3288 potentially dangerous eval() again.
3283 3289
3284 3290 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3285 3291 logic a bit more to clean up the escapes handling and minimize the
3286 3292 use of _ofind to only necessary cases. The interactive 'feel' of
3287 3293 IPython should have improved quite a bit with the changes in
3288 3294 _prefilter and _ofind (besides being far safer than before).
3289 3295
3290 3296 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3291 3297 obscure, never reported). Edit would fail to find the object to
3292 3298 edit under some circumstances.
3293 3299 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3294 3300 which were causing double-calling of generators. Those eval calls
3295 3301 were _very_ dangerous, since code with side effects could be
3296 3302 triggered. As they say, 'eval is evil'... These were the
3297 3303 nastiest evals in IPython. Besides, _ofind is now far simpler,
3298 3304 and it should also be quite a bit faster. Its use of inspect is
3299 3305 also safer, so perhaps some of the inspect-related crashes I've
3300 3306 seen lately with Python 2.3 might be taken care of. That will
3301 3307 need more testing.
3302 3308
3303 3309 2003-08-17 Fernando Perez <fperez@colorado.edu>
3304 3310
3305 3311 * IPython/iplib.py (InteractiveShell._prefilter): significant
3306 3312 simplifications to the logic for handling user escapes. Faster
3307 3313 and simpler code.
3308 3314
3309 3315 2003-08-14 Fernando Perez <fperez@colorado.edu>
3310 3316
3311 3317 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3312 3318 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3313 3319 but it should be quite a bit faster. And the recursive version
3314 3320 generated O(log N) intermediate storage for all rank>1 arrays,
3315 3321 even if they were contiguous.
3316 3322 (l1norm): Added this function.
3317 3323 (norm): Added this function for arbitrary norms (including
3318 3324 l-infinity). l1 and l2 are still special cases for convenience
3319 3325 and speed.
3320 3326
3321 3327 2003-08-03 Fernando Perez <fperez@colorado.edu>
3322 3328
3323 3329 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3324 3330 exceptions, which now raise PendingDeprecationWarnings in Python
3325 3331 2.3. There were some in Magic and some in Gnuplot2.
3326 3332
3327 3333 2003-06-30 Fernando Perez <fperez@colorado.edu>
3328 3334
3329 3335 * IPython/genutils.py (page): modified to call curses only for
3330 3336 terminals where TERM=='xterm'. After problems under many other
3331 3337 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3332 3338
3333 3339 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3334 3340 would be triggered when readline was absent. This was just an old
3335 3341 debugging statement I'd forgotten to take out.
3336 3342
3337 3343 2003-06-20 Fernando Perez <fperez@colorado.edu>
3338 3344
3339 3345 * IPython/genutils.py (clock): modified to return only user time
3340 3346 (not counting system time), after a discussion on scipy. While
3341 3347 system time may be a useful quantity occasionally, it may much
3342 3348 more easily be skewed by occasional swapping or other similar
3343 3349 activity.
3344 3350
3345 3351 2003-06-05 Fernando Perez <fperez@colorado.edu>
3346 3352
3347 3353 * IPython/numutils.py (identity): new function, for building
3348 3354 arbitrary rank Kronecker deltas (mostly backwards compatible with
3349 3355 Numeric.identity)
3350 3356
3351 3357 2003-06-03 Fernando Perez <fperez@colorado.edu>
3352 3358
3353 3359 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3354 3360 arguments passed to magics with spaces, to allow trailing '\' to
3355 3361 work normally (mainly for Windows users).
3356 3362
3357 3363 2003-05-29 Fernando Perez <fperez@colorado.edu>
3358 3364
3359 3365 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3360 3366 instead of pydoc.help. This fixes a bizarre behavior where
3361 3367 printing '%s' % locals() would trigger the help system. Now
3362 3368 ipython behaves like normal python does.
3363 3369
3364 3370 Note that if one does 'from pydoc import help', the bizarre
3365 3371 behavior returns, but this will also happen in normal python, so
3366 3372 it's not an ipython bug anymore (it has to do with how pydoc.help
3367 3373 is implemented).
3368 3374
3369 3375 2003-05-22 Fernando Perez <fperez@colorado.edu>
3370 3376
3371 3377 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3372 3378 return [] instead of None when nothing matches, also match to end
3373 3379 of line. Patch by Gary Bishop.
3374 3380
3375 3381 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3376 3382 protection as before, for files passed on the command line. This
3377 3383 prevents the CrashHandler from kicking in if user files call into
3378 3384 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3379 3385 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3380 3386
3381 3387 2003-05-20 *** Released version 0.4.0
3382 3388
3383 3389 2003-05-20 Fernando Perez <fperez@colorado.edu>
3384 3390
3385 3391 * setup.py: added support for manpages. It's a bit hackish b/c of
3386 3392 a bug in the way the bdist_rpm distutils target handles gzipped
3387 3393 manpages, but it works. After a patch by Jack.
3388 3394
3389 3395 2003-05-19 Fernando Perez <fperez@colorado.edu>
3390 3396
3391 3397 * IPython/numutils.py: added a mockup of the kinds module, since
3392 3398 it was recently removed from Numeric. This way, numutils will
3393 3399 work for all users even if they are missing kinds.
3394 3400
3395 3401 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3396 3402 failure, which can occur with SWIG-wrapped extensions. After a
3397 3403 crash report from Prabhu.
3398 3404
3399 3405 2003-05-16 Fernando Perez <fperez@colorado.edu>
3400 3406
3401 3407 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3402 3408 protect ipython from user code which may call directly
3403 3409 sys.excepthook (this looks like an ipython crash to the user, even
3404 3410 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3405 3411 This is especially important to help users of WxWindows, but may
3406 3412 also be useful in other cases.
3407 3413
3408 3414 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3409 3415 an optional tb_offset to be specified, and to preserve exception
3410 3416 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3411 3417
3412 3418 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3413 3419
3414 3420 2003-05-15 Fernando Perez <fperez@colorado.edu>
3415 3421
3416 3422 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3417 3423 installing for a new user under Windows.
3418 3424
3419 3425 2003-05-12 Fernando Perez <fperez@colorado.edu>
3420 3426
3421 3427 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3422 3428 handler for Emacs comint-based lines. Currently it doesn't do
3423 3429 much (but importantly, it doesn't update the history cache). In
3424 3430 the future it may be expanded if Alex needs more functionality
3425 3431 there.
3426 3432
3427 3433 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3428 3434 info to crash reports.
3429 3435
3430 3436 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3431 3437 just like Python's -c. Also fixed crash with invalid -color
3432 3438 option value at startup. Thanks to Will French
3433 3439 <wfrench-AT-bestweb.net> for the bug report.
3434 3440
3435 3441 2003-05-09 Fernando Perez <fperez@colorado.edu>
3436 3442
3437 3443 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3438 3444 to EvalDict (it's a mapping, after all) and simplified its code
3439 3445 quite a bit, after a nice discussion on c.l.py where Gustavo
3440 3446 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3441 3447
3442 3448 2003-04-30 Fernando Perez <fperez@colorado.edu>
3443 3449
3444 3450 * IPython/genutils.py (timings_out): modified it to reduce its
3445 3451 overhead in the common reps==1 case.
3446 3452
3447 3453 2003-04-29 Fernando Perez <fperez@colorado.edu>
3448 3454
3449 3455 * IPython/genutils.py (timings_out): Modified to use the resource
3450 3456 module, which avoids the wraparound problems of time.clock().
3451 3457
3452 3458 2003-04-17 *** Released version 0.2.15pre4
3453 3459
3454 3460 2003-04-17 Fernando Perez <fperez@colorado.edu>
3455 3461
3456 3462 * setup.py (scriptfiles): Split windows-specific stuff over to a
3457 3463 separate file, in an attempt to have a Windows GUI installer.
3458 3464 That didn't work, but part of the groundwork is done.
3459 3465
3460 3466 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3461 3467 indent/unindent with 4 spaces. Particularly useful in combination
3462 3468 with the new auto-indent option.
3463 3469
3464 3470 2003-04-16 Fernando Perez <fperez@colorado.edu>
3465 3471
3466 3472 * IPython/Magic.py: various replacements of self.rc for
3467 3473 self.shell.rc. A lot more remains to be done to fully disentangle
3468 3474 this class from the main Shell class.
3469 3475
3470 3476 * IPython/GnuplotRuntime.py: added checks for mouse support so
3471 3477 that we don't try to enable it if the current gnuplot doesn't
3472 3478 really support it. Also added checks so that we don't try to
3473 3479 enable persist under Windows (where Gnuplot doesn't recognize the
3474 3480 option).
3475 3481
3476 3482 * IPython/iplib.py (InteractiveShell.interact): Added optional
3477 3483 auto-indenting code, after a patch by King C. Shu
3478 3484 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3479 3485 get along well with pasting indented code. If I ever figure out
3480 3486 how to make that part go well, it will become on by default.
3481 3487
3482 3488 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3483 3489 crash ipython if there was an unmatched '%' in the user's prompt
3484 3490 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3485 3491
3486 3492 * IPython/iplib.py (InteractiveShell.interact): removed the
3487 3493 ability to ask the user whether he wants to crash or not at the
3488 3494 'last line' exception handler. Calling functions at that point
3489 3495 changes the stack, and the error reports would have incorrect
3490 3496 tracebacks.
3491 3497
3492 3498 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3493 3499 pass through a peger a pretty-printed form of any object. After a
3494 3500 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3495 3501
3496 3502 2003-04-14 Fernando Perez <fperez@colorado.edu>
3497 3503
3498 3504 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3499 3505 all files in ~ would be modified at first install (instead of
3500 3506 ~/.ipython). This could be potentially disastrous, as the
3501 3507 modification (make line-endings native) could damage binary files.
3502 3508
3503 3509 2003-04-10 Fernando Perez <fperez@colorado.edu>
3504 3510
3505 3511 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3506 3512 handle only lines which are invalid python. This now means that
3507 3513 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3508 3514 for the bug report.
3509 3515
3510 3516 2003-04-01 Fernando Perez <fperez@colorado.edu>
3511 3517
3512 3518 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3513 3519 where failing to set sys.last_traceback would crash pdb.pm().
3514 3520 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3515 3521 report.
3516 3522
3517 3523 2003-03-25 Fernando Perez <fperez@colorado.edu>
3518 3524
3519 3525 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3520 3526 before printing it (it had a lot of spurious blank lines at the
3521 3527 end).
3522 3528
3523 3529 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3524 3530 output would be sent 21 times! Obviously people don't use this
3525 3531 too often, or I would have heard about it.
3526 3532
3527 3533 2003-03-24 Fernando Perez <fperez@colorado.edu>
3528 3534
3529 3535 * setup.py (scriptfiles): renamed the data_files parameter from
3530 3536 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3531 3537 for the patch.
3532 3538
3533 3539 2003-03-20 Fernando Perez <fperez@colorado.edu>
3534 3540
3535 3541 * IPython/genutils.py (error): added error() and fatal()
3536 3542 functions.
3537 3543
3538 3544 2003-03-18 *** Released version 0.2.15pre3
3539 3545
3540 3546 2003-03-18 Fernando Perez <fperez@colorado.edu>
3541 3547
3542 3548 * setupext/install_data_ext.py
3543 3549 (install_data_ext.initialize_options): Class contributed by Jack
3544 3550 Moffit for fixing the old distutils hack. He is sending this to
3545 3551 the distutils folks so in the future we may not need it as a
3546 3552 private fix.
3547 3553
3548 3554 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3549 3555 changes for Debian packaging. See his patch for full details.
3550 3556 The old distutils hack of making the ipythonrc* files carry a
3551 3557 bogus .py extension is gone, at last. Examples were moved to a
3552 3558 separate subdir under doc/, and the separate executable scripts
3553 3559 now live in their own directory. Overall a great cleanup. The
3554 3560 manual was updated to use the new files, and setup.py has been
3555 3561 fixed for this setup.
3556 3562
3557 3563 * IPython/PyColorize.py (Parser.usage): made non-executable and
3558 3564 created a pycolor wrapper around it to be included as a script.
3559 3565
3560 3566 2003-03-12 *** Released version 0.2.15pre2
3561 3567
3562 3568 2003-03-12 Fernando Perez <fperez@colorado.edu>
3563 3569
3564 3570 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3565 3571 long-standing problem with garbage characters in some terminals.
3566 3572 The issue was really that the \001 and \002 escapes must _only_ be
3567 3573 passed to input prompts (which call readline), but _never_ to
3568 3574 normal text to be printed on screen. I changed ColorANSI to have
3569 3575 two classes: TermColors and InputTermColors, each with the
3570 3576 appropriate escapes for input prompts or normal text. The code in
3571 3577 Prompts.py got slightly more complicated, but this very old and
3572 3578 annoying bug is finally fixed.
3573 3579
3574 3580 All the credit for nailing down the real origin of this problem
3575 3581 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3576 3582 *Many* thanks to him for spending quite a bit of effort on this.
3577 3583
3578 3584 2003-03-05 *** Released version 0.2.15pre1
3579 3585
3580 3586 2003-03-03 Fernando Perez <fperez@colorado.edu>
3581 3587
3582 3588 * IPython/FakeModule.py: Moved the former _FakeModule to a
3583 3589 separate file, because it's also needed by Magic (to fix a similar
3584 3590 pickle-related issue in @run).
3585 3591
3586 3592 2003-03-02 Fernando Perez <fperez@colorado.edu>
3587 3593
3588 3594 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3589 3595 the autocall option at runtime.
3590 3596 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3591 3597 across Magic.py to start separating Magic from InteractiveShell.
3592 3598 (Magic._ofind): Fixed to return proper namespace for dotted
3593 3599 names. Before, a dotted name would always return 'not currently
3594 3600 defined', because it would find the 'parent'. s.x would be found,
3595 3601 but since 'x' isn't defined by itself, it would get confused.
3596 3602 (Magic.magic_run): Fixed pickling problems reported by Ralf
3597 3603 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3598 3604 that I'd used when Mike Heeter reported similar issues at the
3599 3605 top-level, but now for @run. It boils down to injecting the
3600 3606 namespace where code is being executed with something that looks
3601 3607 enough like a module to fool pickle.dump(). Since a pickle stores
3602 3608 a named reference to the importing module, we need this for
3603 3609 pickles to save something sensible.
3604 3610
3605 3611 * IPython/ipmaker.py (make_IPython): added an autocall option.
3606 3612
3607 3613 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3608 3614 the auto-eval code. Now autocalling is an option, and the code is
3609 3615 also vastly safer. There is no more eval() involved at all.
3610 3616
3611 3617 2003-03-01 Fernando Perez <fperez@colorado.edu>
3612 3618
3613 3619 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3614 3620 dict with named keys instead of a tuple.
3615 3621
3616 3622 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3617 3623
3618 3624 * setup.py (make_shortcut): Fixed message about directories
3619 3625 created during Windows installation (the directories were ok, just
3620 3626 the printed message was misleading). Thanks to Chris Liechti
3621 3627 <cliechti-AT-gmx.net> for the heads up.
3622 3628
3623 3629 2003-02-21 Fernando Perez <fperez@colorado.edu>
3624 3630
3625 3631 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3626 3632 of ValueError exception when checking for auto-execution. This
3627 3633 one is raised by things like Numeric arrays arr.flat when the
3628 3634 array is non-contiguous.
3629 3635
3630 3636 2003-01-31 Fernando Perez <fperez@colorado.edu>
3631 3637
3632 3638 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3633 3639 not return any value at all (even though the command would get
3634 3640 executed).
3635 3641 (xsys): Flush stdout right after printing the command to ensure
3636 3642 proper ordering of commands and command output in the total
3637 3643 output.
3638 3644 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3639 3645 system/getoutput as defaults. The old ones are kept for
3640 3646 compatibility reasons, so no code which uses this library needs
3641 3647 changing.
3642 3648
3643 3649 2003-01-27 *** Released version 0.2.14
3644 3650
3645 3651 2003-01-25 Fernando Perez <fperez@colorado.edu>
3646 3652
3647 3653 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3648 3654 functions defined in previous edit sessions could not be re-edited
3649 3655 (because the temp files were immediately removed). Now temp files
3650 3656 are removed only at IPython's exit.
3651 3657 (Magic.magic_run): Improved @run to perform shell-like expansions
3652 3658 on its arguments (~users and $VARS). With this, @run becomes more
3653 3659 like a normal command-line.
3654 3660
3655 3661 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3656 3662 bugs related to embedding and cleaned up that code. A fairly
3657 3663 important one was the impossibility to access the global namespace
3658 3664 through the embedded IPython (only local variables were visible).
3659 3665
3660 3666 2003-01-14 Fernando Perez <fperez@colorado.edu>
3661 3667
3662 3668 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3663 3669 auto-calling to be a bit more conservative. Now it doesn't get
3664 3670 triggered if any of '!=()<>' are in the rest of the input line, to
3665 3671 allow comparing callables. Thanks to Alex for the heads up.
3666 3672
3667 3673 2003-01-07 Fernando Perez <fperez@colorado.edu>
3668 3674
3669 3675 * IPython/genutils.py (page): fixed estimation of the number of
3670 3676 lines in a string to be paged to simply count newlines. This
3671 3677 prevents over-guessing due to embedded escape sequences. A better
3672 3678 long-term solution would involve stripping out the control chars
3673 3679 for the count, but it's potentially so expensive I just don't
3674 3680 think it's worth doing.
3675 3681
3676 3682 2002-12-19 *** Released version 0.2.14pre50
3677 3683
3678 3684 2002-12-19 Fernando Perez <fperez@colorado.edu>
3679 3685
3680 3686 * tools/release (version): Changed release scripts to inform
3681 3687 Andrea and build a NEWS file with a list of recent changes.
3682 3688
3683 3689 * IPython/ColorANSI.py (__all__): changed terminal detection
3684 3690 code. Seems to work better for xterms without breaking
3685 3691 konsole. Will need more testing to determine if WinXP and Mac OSX
3686 3692 also work ok.
3687 3693
3688 3694 2002-12-18 *** Released version 0.2.14pre49
3689 3695
3690 3696 2002-12-18 Fernando Perez <fperez@colorado.edu>
3691 3697
3692 3698 * Docs: added new info about Mac OSX, from Andrea.
3693 3699
3694 3700 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3695 3701 allow direct plotting of python strings whose format is the same
3696 3702 of gnuplot data files.
3697 3703
3698 3704 2002-12-16 Fernando Perez <fperez@colorado.edu>
3699 3705
3700 3706 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3701 3707 value of exit question to be acknowledged.
3702 3708
3703 3709 2002-12-03 Fernando Perez <fperez@colorado.edu>
3704 3710
3705 3711 * IPython/ipmaker.py: removed generators, which had been added
3706 3712 by mistake in an earlier debugging run. This was causing trouble
3707 3713 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3708 3714 for pointing this out.
3709 3715
3710 3716 2002-11-17 Fernando Perez <fperez@colorado.edu>
3711 3717
3712 3718 * Manual: updated the Gnuplot section.
3713 3719
3714 3720 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3715 3721 a much better split of what goes in Runtime and what goes in
3716 3722 Interactive.
3717 3723
3718 3724 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3719 3725 being imported from iplib.
3720 3726
3721 3727 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3722 3728 for command-passing. Now the global Gnuplot instance is called
3723 3729 'gp' instead of 'g', which was really a far too fragile and
3724 3730 common name.
3725 3731
3726 3732 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3727 3733 bounding boxes generated by Gnuplot for square plots.
3728 3734
3729 3735 * IPython/genutils.py (popkey): new function added. I should
3730 3736 suggest this on c.l.py as a dict method, it seems useful.
3731 3737
3732 3738 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3733 3739 to transparently handle PostScript generation. MUCH better than
3734 3740 the previous plot_eps/replot_eps (which I removed now). The code
3735 3741 is also fairly clean and well documented now (including
3736 3742 docstrings).
3737 3743
3738 3744 2002-11-13 Fernando Perez <fperez@colorado.edu>
3739 3745
3740 3746 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3741 3747 (inconsistent with options).
3742 3748
3743 3749 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3744 3750 manually disabled, I don't know why. Fixed it.
3745 3751 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3746 3752 eps output.
3747 3753
3748 3754 2002-11-12 Fernando Perez <fperez@colorado.edu>
3749 3755
3750 3756 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3751 3757 don't propagate up to caller. Fixes crash reported by François
3752 3758 Pinard.
3753 3759
3754 3760 2002-11-09 Fernando Perez <fperez@colorado.edu>
3755 3761
3756 3762 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3757 3763 history file for new users.
3758 3764 (make_IPython): fixed bug where initial install would leave the
3759 3765 user running in the .ipython dir.
3760 3766 (make_IPython): fixed bug where config dir .ipython would be
3761 3767 created regardless of the given -ipythondir option. Thanks to Cory
3762 3768 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3763 3769
3764 3770 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3765 3771 type confirmations. Will need to use it in all of IPython's code
3766 3772 consistently.
3767 3773
3768 3774 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3769 3775 context to print 31 lines instead of the default 5. This will make
3770 3776 the crash reports extremely detailed in case the problem is in
3771 3777 libraries I don't have access to.
3772 3778
3773 3779 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3774 3780 line of defense' code to still crash, but giving users fair
3775 3781 warning. I don't want internal errors to go unreported: if there's
3776 3782 an internal problem, IPython should crash and generate a full
3777 3783 report.
3778 3784
3779 3785 2002-11-08 Fernando Perez <fperez@colorado.edu>
3780 3786
3781 3787 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3782 3788 otherwise uncaught exceptions which can appear if people set
3783 3789 sys.stdout to something badly broken. Thanks to a crash report
3784 3790 from henni-AT-mail.brainbot.com.
3785 3791
3786 3792 2002-11-04 Fernando Perez <fperez@colorado.edu>
3787 3793
3788 3794 * IPython/iplib.py (InteractiveShell.interact): added
3789 3795 __IPYTHON__active to the builtins. It's a flag which goes on when
3790 3796 the interaction starts and goes off again when it stops. This
3791 3797 allows embedding code to detect being inside IPython. Before this
3792 3798 was done via __IPYTHON__, but that only shows that an IPython
3793 3799 instance has been created.
3794 3800
3795 3801 * IPython/Magic.py (Magic.magic_env): I realized that in a
3796 3802 UserDict, instance.data holds the data as a normal dict. So I
3797 3803 modified @env to return os.environ.data instead of rebuilding a
3798 3804 dict by hand.
3799 3805
3800 3806 2002-11-02 Fernando Perez <fperez@colorado.edu>
3801 3807
3802 3808 * IPython/genutils.py (warn): changed so that level 1 prints no
3803 3809 header. Level 2 is now the default (with 'WARNING' header, as
3804 3810 before). I think I tracked all places where changes were needed in
3805 3811 IPython, but outside code using the old level numbering may have
3806 3812 broken.
3807 3813
3808 3814 * IPython/iplib.py (InteractiveShell.runcode): added this to
3809 3815 handle the tracebacks in SystemExit traps correctly. The previous
3810 3816 code (through interact) was printing more of the stack than
3811 3817 necessary, showing IPython internal code to the user.
3812 3818
3813 3819 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3814 3820 default. Now that the default at the confirmation prompt is yes,
3815 3821 it's not so intrusive. François' argument that ipython sessions
3816 3822 tend to be complex enough not to lose them from an accidental C-d,
3817 3823 is a valid one.
3818 3824
3819 3825 * IPython/iplib.py (InteractiveShell.interact): added a
3820 3826 showtraceback() call to the SystemExit trap, and modified the exit
3821 3827 confirmation to have yes as the default.
3822 3828
3823 3829 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3824 3830 this file. It's been gone from the code for a long time, this was
3825 3831 simply leftover junk.
3826 3832
3827 3833 2002-11-01 Fernando Perez <fperez@colorado.edu>
3828 3834
3829 3835 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3830 3836 added. If set, IPython now traps EOF and asks for
3831 3837 confirmation. After a request by François Pinard.
3832 3838
3833 3839 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3834 3840 of @abort, and with a new (better) mechanism for handling the
3835 3841 exceptions.
3836 3842
3837 3843 2002-10-27 Fernando Perez <fperez@colorado.edu>
3838 3844
3839 3845 * IPython/usage.py (__doc__): updated the --help information and
3840 3846 the ipythonrc file to indicate that -log generates
3841 3847 ./ipython.log. Also fixed the corresponding info in @logstart.
3842 3848 This and several other fixes in the manuals thanks to reports by
3843 3849 François Pinard <pinard-AT-iro.umontreal.ca>.
3844 3850
3845 3851 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3846 3852 refer to @logstart (instead of @log, which doesn't exist).
3847 3853
3848 3854 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3849 3855 AttributeError crash. Thanks to Christopher Armstrong
3850 3856 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3851 3857 introduced recently (in 0.2.14pre37) with the fix to the eval
3852 3858 problem mentioned below.
3853 3859
3854 3860 2002-10-17 Fernando Perez <fperez@colorado.edu>
3855 3861
3856 3862 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3857 3863 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3858 3864
3859 3865 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3860 3866 this function to fix a problem reported by Alex Schmolck. He saw
3861 3867 it with list comprehensions and generators, which were getting
3862 3868 called twice. The real problem was an 'eval' call in testing for
3863 3869 automagic which was evaluating the input line silently.
3864 3870
3865 3871 This is a potentially very nasty bug, if the input has side
3866 3872 effects which must not be repeated. The code is much cleaner now,
3867 3873 without any blanket 'except' left and with a regexp test for
3868 3874 actual function names.
3869 3875
3870 3876 But an eval remains, which I'm not fully comfortable with. I just
3871 3877 don't know how to find out if an expression could be a callable in
3872 3878 the user's namespace without doing an eval on the string. However
3873 3879 that string is now much more strictly checked so that no code
3874 3880 slips by, so the eval should only happen for things that can
3875 3881 really be only function/method names.
3876 3882
3877 3883 2002-10-15 Fernando Perez <fperez@colorado.edu>
3878 3884
3879 3885 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3880 3886 OSX information to main manual, removed README_Mac_OSX file from
3881 3887 distribution. Also updated credits for recent additions.
3882 3888
3883 3889 2002-10-10 Fernando Perez <fperez@colorado.edu>
3884 3890
3885 3891 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3886 3892 terminal-related issues. Many thanks to Andrea Riciputi
3887 3893 <andrea.riciputi-AT-libero.it> for writing it.
3888 3894
3889 3895 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3890 3896 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3891 3897
3892 3898 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3893 3899 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3894 3900 <syver-en-AT-online.no> who both submitted patches for this problem.
3895 3901
3896 3902 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3897 3903 global embedding to make sure that things don't overwrite user
3898 3904 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3899 3905
3900 3906 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3901 3907 compatibility. Thanks to Hayden Callow
3902 3908 <h.callow-AT-elec.canterbury.ac.nz>
3903 3909
3904 3910 2002-10-04 Fernando Perez <fperez@colorado.edu>
3905 3911
3906 3912 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3907 3913 Gnuplot.File objects.
3908 3914
3909 3915 2002-07-23 Fernando Perez <fperez@colorado.edu>
3910 3916
3911 3917 * IPython/genutils.py (timing): Added timings() and timing() for
3912 3918 quick access to the most commonly needed data, the execution
3913 3919 times. Old timing() renamed to timings_out().
3914 3920
3915 3921 2002-07-18 Fernando Perez <fperez@colorado.edu>
3916 3922
3917 3923 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3918 3924 bug with nested instances disrupting the parent's tab completion.
3919 3925
3920 3926 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3921 3927 all_completions code to begin the emacs integration.
3922 3928
3923 3929 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3924 3930 argument to allow titling individual arrays when plotting.
3925 3931
3926 3932 2002-07-15 Fernando Perez <fperez@colorado.edu>
3927 3933
3928 3934 * setup.py (make_shortcut): changed to retrieve the value of
3929 3935 'Program Files' directory from the registry (this value changes in
3930 3936 non-english versions of Windows). Thanks to Thomas Fanslau
3931 3937 <tfanslau-AT-gmx.de> for the report.
3932 3938
3933 3939 2002-07-10 Fernando Perez <fperez@colorado.edu>
3934 3940
3935 3941 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3936 3942 a bug in pdb, which crashes if a line with only whitespace is
3937 3943 entered. Bug report submitted to sourceforge.
3938 3944
3939 3945 2002-07-09 Fernando Perez <fperez@colorado.edu>
3940 3946
3941 3947 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3942 3948 reporting exceptions (it's a bug in inspect.py, I just set a
3943 3949 workaround).
3944 3950
3945 3951 2002-07-08 Fernando Perez <fperez@colorado.edu>
3946 3952
3947 3953 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3948 3954 __IPYTHON__ in __builtins__ to show up in user_ns.
3949 3955
3950 3956 2002-07-03 Fernando Perez <fperez@colorado.edu>
3951 3957
3952 3958 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3953 3959 name from @gp_set_instance to @gp_set_default.
3954 3960
3955 3961 * IPython/ipmaker.py (make_IPython): default editor value set to
3956 3962 '0' (a string), to match the rc file. Otherwise will crash when
3957 3963 .strip() is called on it.
3958 3964
3959 3965
3960 3966 2002-06-28 Fernando Perez <fperez@colorado.edu>
3961 3967
3962 3968 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3963 3969 of files in current directory when a file is executed via
3964 3970 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3965 3971
3966 3972 * setup.py (manfiles): fix for rpm builds, submitted by RA
3967 3973 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3968 3974
3969 3975 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3970 3976 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3971 3977 string!). A. Schmolck caught this one.
3972 3978
3973 3979 2002-06-27 Fernando Perez <fperez@colorado.edu>
3974 3980
3975 3981 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3976 3982 defined files at the cmd line. __name__ wasn't being set to
3977 3983 __main__.
3978 3984
3979 3985 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3980 3986 regular lists and tuples besides Numeric arrays.
3981 3987
3982 3988 * IPython/Prompts.py (CachedOutput.__call__): Added output
3983 3989 supression for input ending with ';'. Similar to Mathematica and
3984 3990 Matlab. The _* vars and Out[] list are still updated, just like
3985 3991 Mathematica behaves.
3986 3992
3987 3993 2002-06-25 Fernando Perez <fperez@colorado.edu>
3988 3994
3989 3995 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3990 3996 .ini extensions for profiels under Windows.
3991 3997
3992 3998 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3993 3999 string form. Fix contributed by Alexander Schmolck
3994 4000 <a.schmolck-AT-gmx.net>
3995 4001
3996 4002 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3997 4003 pre-configured Gnuplot instance.
3998 4004
3999 4005 2002-06-21 Fernando Perez <fperez@colorado.edu>
4000 4006
4001 4007 * IPython/numutils.py (exp_safe): new function, works around the
4002 4008 underflow problems in Numeric.
4003 4009 (log2): New fn. Safe log in base 2: returns exact integer answer
4004 4010 for exact integer powers of 2.
4005 4011
4006 4012 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4007 4013 properly.
4008 4014
4009 4015 2002-06-20 Fernando Perez <fperez@colorado.edu>
4010 4016
4011 4017 * IPython/genutils.py (timing): new function like
4012 4018 Mathematica's. Similar to time_test, but returns more info.
4013 4019
4014 4020 2002-06-18 Fernando Perez <fperez@colorado.edu>
4015 4021
4016 4022 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4017 4023 according to Mike Heeter's suggestions.
4018 4024
4019 4025 2002-06-16 Fernando Perez <fperez@colorado.edu>
4020 4026
4021 4027 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4022 4028 system. GnuplotMagic is gone as a user-directory option. New files
4023 4029 make it easier to use all the gnuplot stuff both from external
4024 4030 programs as well as from IPython. Had to rewrite part of
4025 4031 hardcopy() b/c of a strange bug: often the ps files simply don't
4026 4032 get created, and require a repeat of the command (often several
4027 4033 times).
4028 4034
4029 4035 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4030 4036 resolve output channel at call time, so that if sys.stderr has
4031 4037 been redirected by user this gets honored.
4032 4038
4033 4039 2002-06-13 Fernando Perez <fperez@colorado.edu>
4034 4040
4035 4041 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4036 4042 IPShell. Kept a copy with the old names to avoid breaking people's
4037 4043 embedded code.
4038 4044
4039 4045 * IPython/ipython: simplified it to the bare minimum after
4040 4046 Holger's suggestions. Added info about how to use it in
4041 4047 PYTHONSTARTUP.
4042 4048
4043 4049 * IPython/Shell.py (IPythonShell): changed the options passing
4044 4050 from a string with funky %s replacements to a straight list. Maybe
4045 4051 a bit more typing, but it follows sys.argv conventions, so there's
4046 4052 less special-casing to remember.
4047 4053
4048 4054 2002-06-12 Fernando Perez <fperez@colorado.edu>
4049 4055
4050 4056 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4051 4057 command. Thanks to a suggestion by Mike Heeter.
4052 4058 (Magic.magic_pfile): added behavior to look at filenames if given
4053 4059 arg is not a defined object.
4054 4060 (Magic.magic_save): New @save function to save code snippets. Also
4055 4061 a Mike Heeter idea.
4056 4062
4057 4063 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4058 4064 plot() and replot(). Much more convenient now, especially for
4059 4065 interactive use.
4060 4066
4061 4067 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4062 4068 filenames.
4063 4069
4064 4070 2002-06-02 Fernando Perez <fperez@colorado.edu>
4065 4071
4066 4072 * IPython/Struct.py (Struct.__init__): modified to admit
4067 4073 initialization via another struct.
4068 4074
4069 4075 * IPython/genutils.py (SystemExec.__init__): New stateful
4070 4076 interface to xsys and bq. Useful for writing system scripts.
4071 4077
4072 4078 2002-05-30 Fernando Perez <fperez@colorado.edu>
4073 4079
4074 4080 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4075 4081 documents. This will make the user download smaller (it's getting
4076 4082 too big).
4077 4083
4078 4084 2002-05-29 Fernando Perez <fperez@colorado.edu>
4079 4085
4080 4086 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4081 4087 fix problems with shelve and pickle. Seems to work, but I don't
4082 4088 know if corner cases break it. Thanks to Mike Heeter
4083 4089 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4084 4090
4085 4091 2002-05-24 Fernando Perez <fperez@colorado.edu>
4086 4092
4087 4093 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4088 4094 macros having broken.
4089 4095
4090 4096 2002-05-21 Fernando Perez <fperez@colorado.edu>
4091 4097
4092 4098 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4093 4099 introduced logging bug: all history before logging started was
4094 4100 being written one character per line! This came from the redesign
4095 4101 of the input history as a special list which slices to strings,
4096 4102 not to lists.
4097 4103
4098 4104 2002-05-20 Fernando Perez <fperez@colorado.edu>
4099 4105
4100 4106 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4101 4107 be an attribute of all classes in this module. The design of these
4102 4108 classes needs some serious overhauling.
4103 4109
4104 4110 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4105 4111 which was ignoring '_' in option names.
4106 4112
4107 4113 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4108 4114 'Verbose_novars' to 'Context' and made it the new default. It's a
4109 4115 bit more readable and also safer than verbose.
4110 4116
4111 4117 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4112 4118 triple-quoted strings.
4113 4119
4114 4120 * IPython/OInspect.py (__all__): new module exposing the object
4115 4121 introspection facilities. Now the corresponding magics are dummy
4116 4122 wrappers around this. Having this module will make it much easier
4117 4123 to put these functions into our modified pdb.
4118 4124 This new object inspector system uses the new colorizing module,
4119 4125 so source code and other things are nicely syntax highlighted.
4120 4126
4121 4127 2002-05-18 Fernando Perez <fperez@colorado.edu>
4122 4128
4123 4129 * IPython/ColorANSI.py: Split the coloring tools into a separate
4124 4130 module so I can use them in other code easier (they were part of
4125 4131 ultraTB).
4126 4132
4127 4133 2002-05-17 Fernando Perez <fperez@colorado.edu>
4128 4134
4129 4135 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4130 4136 fixed it to set the global 'g' also to the called instance, as
4131 4137 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4132 4138 user's 'g' variables).
4133 4139
4134 4140 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4135 4141 global variables (aliases to _ih,_oh) so that users which expect
4136 4142 In[5] or Out[7] to work aren't unpleasantly surprised.
4137 4143 (InputList.__getslice__): new class to allow executing slices of
4138 4144 input history directly. Very simple class, complements the use of
4139 4145 macros.
4140 4146
4141 4147 2002-05-16 Fernando Perez <fperez@colorado.edu>
4142 4148
4143 4149 * setup.py (docdirbase): make doc directory be just doc/IPython
4144 4150 without version numbers, it will reduce clutter for users.
4145 4151
4146 4152 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4147 4153 execfile call to prevent possible memory leak. See for details:
4148 4154 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4149 4155
4150 4156 2002-05-15 Fernando Perez <fperez@colorado.edu>
4151 4157
4152 4158 * IPython/Magic.py (Magic.magic_psource): made the object
4153 4159 introspection names be more standard: pdoc, pdef, pfile and
4154 4160 psource. They all print/page their output, and it makes
4155 4161 remembering them easier. Kept old names for compatibility as
4156 4162 aliases.
4157 4163
4158 4164 2002-05-14 Fernando Perez <fperez@colorado.edu>
4159 4165
4160 4166 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4161 4167 what the mouse problem was. The trick is to use gnuplot with temp
4162 4168 files and NOT with pipes (for data communication), because having
4163 4169 both pipes and the mouse on is bad news.
4164 4170
4165 4171 2002-05-13 Fernando Perez <fperez@colorado.edu>
4166 4172
4167 4173 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4168 4174 bug. Information would be reported about builtins even when
4169 4175 user-defined functions overrode them.
4170 4176
4171 4177 2002-05-11 Fernando Perez <fperez@colorado.edu>
4172 4178
4173 4179 * IPython/__init__.py (__all__): removed FlexCompleter from
4174 4180 __all__ so that things don't fail in platforms without readline.
4175 4181
4176 4182 2002-05-10 Fernando Perez <fperez@colorado.edu>
4177 4183
4178 4184 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4179 4185 it requires Numeric, effectively making Numeric a dependency for
4180 4186 IPython.
4181 4187
4182 4188 * Released 0.2.13
4183 4189
4184 4190 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4185 4191 profiler interface. Now all the major options from the profiler
4186 4192 module are directly supported in IPython, both for single
4187 4193 expressions (@prun) and for full programs (@run -p).
4188 4194
4189 4195 2002-05-09 Fernando Perez <fperez@colorado.edu>
4190 4196
4191 4197 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4192 4198 magic properly formatted for screen.
4193 4199
4194 4200 * setup.py (make_shortcut): Changed things to put pdf version in
4195 4201 doc/ instead of doc/manual (had to change lyxport a bit).
4196 4202
4197 4203 * IPython/Magic.py (Profile.string_stats): made profile runs go
4198 4204 through pager (they are long and a pager allows searching, saving,
4199 4205 etc.)
4200 4206
4201 4207 2002-05-08 Fernando Perez <fperez@colorado.edu>
4202 4208
4203 4209 * Released 0.2.12
4204 4210
4205 4211 2002-05-06 Fernando Perez <fperez@colorado.edu>
4206 4212
4207 4213 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4208 4214 introduced); 'hist n1 n2' was broken.
4209 4215 (Magic.magic_pdb): added optional on/off arguments to @pdb
4210 4216 (Magic.magic_run): added option -i to @run, which executes code in
4211 4217 the IPython namespace instead of a clean one. Also added @irun as
4212 4218 an alias to @run -i.
4213 4219
4214 4220 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4215 4221 fixed (it didn't really do anything, the namespaces were wrong).
4216 4222
4217 4223 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4218 4224
4219 4225 * IPython/__init__.py (__all__): Fixed package namespace, now
4220 4226 'import IPython' does give access to IPython.<all> as
4221 4227 expected. Also renamed __release__ to Release.
4222 4228
4223 4229 * IPython/Debugger.py (__license__): created new Pdb class which
4224 4230 functions like a drop-in for the normal pdb.Pdb but does NOT
4225 4231 import readline by default. This way it doesn't muck up IPython's
4226 4232 readline handling, and now tab-completion finally works in the
4227 4233 debugger -- sort of. It completes things globally visible, but the
4228 4234 completer doesn't track the stack as pdb walks it. That's a bit
4229 4235 tricky, and I'll have to implement it later.
4230 4236
4231 4237 2002-05-05 Fernando Perez <fperez@colorado.edu>
4232 4238
4233 4239 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4234 4240 magic docstrings when printed via ? (explicit \'s were being
4235 4241 printed).
4236 4242
4237 4243 * IPython/ipmaker.py (make_IPython): fixed namespace
4238 4244 identification bug. Now variables loaded via logs or command-line
4239 4245 files are recognized in the interactive namespace by @who.
4240 4246
4241 4247 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4242 4248 log replay system stemming from the string form of Structs.
4243 4249
4244 4250 * IPython/Magic.py (Macro.__init__): improved macros to properly
4245 4251 handle magic commands in them.
4246 4252 (Magic.magic_logstart): usernames are now expanded so 'logstart
4247 4253 ~/mylog' now works.
4248 4254
4249 4255 * IPython/iplib.py (complete): fixed bug where paths starting with
4250 4256 '/' would be completed as magic names.
4251 4257
4252 4258 2002-05-04 Fernando Perez <fperez@colorado.edu>
4253 4259
4254 4260 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4255 4261 allow running full programs under the profiler's control.
4256 4262
4257 4263 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4258 4264 mode to report exceptions verbosely but without formatting
4259 4265 variables. This addresses the issue of ipython 'freezing' (it's
4260 4266 not frozen, but caught in an expensive formatting loop) when huge
4261 4267 variables are in the context of an exception.
4262 4268 (VerboseTB.text): Added '--->' markers at line where exception was
4263 4269 triggered. Much clearer to read, especially in NoColor modes.
4264 4270
4265 4271 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4266 4272 implemented in reverse when changing to the new parse_options().
4267 4273
4268 4274 2002-05-03 Fernando Perez <fperez@colorado.edu>
4269 4275
4270 4276 * IPython/Magic.py (Magic.parse_options): new function so that
4271 4277 magics can parse options easier.
4272 4278 (Magic.magic_prun): new function similar to profile.run(),
4273 4279 suggested by Chris Hart.
4274 4280 (Magic.magic_cd): fixed behavior so that it only changes if
4275 4281 directory actually is in history.
4276 4282
4277 4283 * IPython/usage.py (__doc__): added information about potential
4278 4284 slowness of Verbose exception mode when there are huge data
4279 4285 structures to be formatted (thanks to Archie Paulson).
4280 4286
4281 4287 * IPython/ipmaker.py (make_IPython): Changed default logging
4282 4288 (when simply called with -log) to use curr_dir/ipython.log in
4283 4289 rotate mode. Fixed crash which was occuring with -log before
4284 4290 (thanks to Jim Boyle).
4285 4291
4286 4292 2002-05-01 Fernando Perez <fperez@colorado.edu>
4287 4293
4288 4294 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4289 4295 was nasty -- though somewhat of a corner case).
4290 4296
4291 4297 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4292 4298 text (was a bug).
4293 4299
4294 4300 2002-04-30 Fernando Perez <fperez@colorado.edu>
4295 4301
4296 4302 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4297 4303 a print after ^D or ^C from the user so that the In[] prompt
4298 4304 doesn't over-run the gnuplot one.
4299 4305
4300 4306 2002-04-29 Fernando Perez <fperez@colorado.edu>
4301 4307
4302 4308 * Released 0.2.10
4303 4309
4304 4310 * IPython/__release__.py (version): get date dynamically.
4305 4311
4306 4312 * Misc. documentation updates thanks to Arnd's comments. Also ran
4307 4313 a full spellcheck on the manual (hadn't been done in a while).
4308 4314
4309 4315 2002-04-27 Fernando Perez <fperez@colorado.edu>
4310 4316
4311 4317 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4312 4318 starting a log in mid-session would reset the input history list.
4313 4319
4314 4320 2002-04-26 Fernando Perez <fperez@colorado.edu>
4315 4321
4316 4322 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4317 4323 all files were being included in an update. Now anything in
4318 4324 UserConfig that matches [A-Za-z]*.py will go (this excludes
4319 4325 __init__.py)
4320 4326
4321 4327 2002-04-25 Fernando Perez <fperez@colorado.edu>
4322 4328
4323 4329 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4324 4330 to __builtins__ so that any form of embedded or imported code can
4325 4331 test for being inside IPython.
4326 4332
4327 4333 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4328 4334 changed to GnuplotMagic because it's now an importable module,
4329 4335 this makes the name follow that of the standard Gnuplot module.
4330 4336 GnuplotMagic can now be loaded at any time in mid-session.
4331 4337
4332 4338 2002-04-24 Fernando Perez <fperez@colorado.edu>
4333 4339
4334 4340 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4335 4341 the globals (IPython has its own namespace) and the
4336 4342 PhysicalQuantity stuff is much better anyway.
4337 4343
4338 4344 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4339 4345 embedding example to standard user directory for
4340 4346 distribution. Also put it in the manual.
4341 4347
4342 4348 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4343 4349 instance as first argument (so it doesn't rely on some obscure
4344 4350 hidden global).
4345 4351
4346 4352 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4347 4353 delimiters. While it prevents ().TAB from working, it allows
4348 4354 completions in open (... expressions. This is by far a more common
4349 4355 case.
4350 4356
4351 4357 2002-04-23 Fernando Perez <fperez@colorado.edu>
4352 4358
4353 4359 * IPython/Extensions/InterpreterPasteInput.py: new
4354 4360 syntax-processing module for pasting lines with >>> or ... at the
4355 4361 start.
4356 4362
4357 4363 * IPython/Extensions/PhysicalQ_Interactive.py
4358 4364 (PhysicalQuantityInteractive.__int__): fixed to work with either
4359 4365 Numeric or math.
4360 4366
4361 4367 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4362 4368 provided profiles. Now we have:
4363 4369 -math -> math module as * and cmath with its own namespace.
4364 4370 -numeric -> Numeric as *, plus gnuplot & grace
4365 4371 -physics -> same as before
4366 4372
4367 4373 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4368 4374 user-defined magics wouldn't be found by @magic if they were
4369 4375 defined as class methods. Also cleaned up the namespace search
4370 4376 logic and the string building (to use %s instead of many repeated
4371 4377 string adds).
4372 4378
4373 4379 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4374 4380 of user-defined magics to operate with class methods (cleaner, in
4375 4381 line with the gnuplot code).
4376 4382
4377 4383 2002-04-22 Fernando Perez <fperez@colorado.edu>
4378 4384
4379 4385 * setup.py: updated dependency list so that manual is updated when
4380 4386 all included files change.
4381 4387
4382 4388 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4383 4389 the delimiter removal option (the fix is ugly right now).
4384 4390
4385 4391 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4386 4392 all of the math profile (quicker loading, no conflict between
4387 4393 g-9.8 and g-gnuplot).
4388 4394
4389 4395 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4390 4396 name of post-mortem files to IPython_crash_report.txt.
4391 4397
4392 4398 * Cleanup/update of the docs. Added all the new readline info and
4393 4399 formatted all lists as 'real lists'.
4394 4400
4395 4401 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4396 4402 tab-completion options, since the full readline parse_and_bind is
4397 4403 now accessible.
4398 4404
4399 4405 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4400 4406 handling of readline options. Now users can specify any string to
4401 4407 be passed to parse_and_bind(), as well as the delimiters to be
4402 4408 removed.
4403 4409 (InteractiveShell.__init__): Added __name__ to the global
4404 4410 namespace so that things like Itpl which rely on its existence
4405 4411 don't crash.
4406 4412 (InteractiveShell._prefilter): Defined the default with a _ so
4407 4413 that prefilter() is easier to override, while the default one
4408 4414 remains available.
4409 4415
4410 4416 2002-04-18 Fernando Perez <fperez@colorado.edu>
4411 4417
4412 4418 * Added information about pdb in the docs.
4413 4419
4414 4420 2002-04-17 Fernando Perez <fperez@colorado.edu>
4415 4421
4416 4422 * IPython/ipmaker.py (make_IPython): added rc_override option to
4417 4423 allow passing config options at creation time which may override
4418 4424 anything set in the config files or command line. This is
4419 4425 particularly useful for configuring embedded instances.
4420 4426
4421 4427 2002-04-15 Fernando Perez <fperez@colorado.edu>
4422 4428
4423 4429 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4424 4430 crash embedded instances because of the input cache falling out of
4425 4431 sync with the output counter.
4426 4432
4427 4433 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4428 4434 mode which calls pdb after an uncaught exception in IPython itself.
4429 4435
4430 4436 2002-04-14 Fernando Perez <fperez@colorado.edu>
4431 4437
4432 4438 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4433 4439 readline, fix it back after each call.
4434 4440
4435 4441 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4436 4442 method to force all access via __call__(), which guarantees that
4437 4443 traceback references are properly deleted.
4438 4444
4439 4445 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4440 4446 improve printing when pprint is in use.
4441 4447
4442 4448 2002-04-13 Fernando Perez <fperez@colorado.edu>
4443 4449
4444 4450 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4445 4451 exceptions aren't caught anymore. If the user triggers one, he
4446 4452 should know why he's doing it and it should go all the way up,
4447 4453 just like any other exception. So now @abort will fully kill the
4448 4454 embedded interpreter and the embedding code (unless that happens
4449 4455 to catch SystemExit).
4450 4456
4451 4457 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4452 4458 and a debugger() method to invoke the interactive pdb debugger
4453 4459 after printing exception information. Also added the corresponding
4454 4460 -pdb option and @pdb magic to control this feature, and updated
4455 4461 the docs. After a suggestion from Christopher Hart
4456 4462 (hart-AT-caltech.edu).
4457 4463
4458 4464 2002-04-12 Fernando Perez <fperez@colorado.edu>
4459 4465
4460 4466 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4461 4467 the exception handlers defined by the user (not the CrashHandler)
4462 4468 so that user exceptions don't trigger an ipython bug report.
4463 4469
4464 4470 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4465 4471 configurable (it should have always been so).
4466 4472
4467 4473 2002-03-26 Fernando Perez <fperez@colorado.edu>
4468 4474
4469 4475 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4470 4476 and there to fix embedding namespace issues. This should all be
4471 4477 done in a more elegant way.
4472 4478
4473 4479 2002-03-25 Fernando Perez <fperez@colorado.edu>
4474 4480
4475 4481 * IPython/genutils.py (get_home_dir): Try to make it work under
4476 4482 win9x also.
4477 4483
4478 4484 2002-03-20 Fernando Perez <fperez@colorado.edu>
4479 4485
4480 4486 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4481 4487 sys.displayhook untouched upon __init__.
4482 4488
4483 4489 2002-03-19 Fernando Perez <fperez@colorado.edu>
4484 4490
4485 4491 * Released 0.2.9 (for embedding bug, basically).
4486 4492
4487 4493 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4488 4494 exceptions so that enclosing shell's state can be restored.
4489 4495
4490 4496 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4491 4497 naming conventions in the .ipython/ dir.
4492 4498
4493 4499 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4494 4500 from delimiters list so filenames with - in them get expanded.
4495 4501
4496 4502 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4497 4503 sys.displayhook not being properly restored after an embedded call.
4498 4504
4499 4505 2002-03-18 Fernando Perez <fperez@colorado.edu>
4500 4506
4501 4507 * Released 0.2.8
4502 4508
4503 4509 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4504 4510 some files weren't being included in a -upgrade.
4505 4511 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4506 4512 on' so that the first tab completes.
4507 4513 (InteractiveShell.handle_magic): fixed bug with spaces around
4508 4514 quotes breaking many magic commands.
4509 4515
4510 4516 * setup.py: added note about ignoring the syntax error messages at
4511 4517 installation.
4512 4518
4513 4519 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4514 4520 streamlining the gnuplot interface, now there's only one magic @gp.
4515 4521
4516 4522 2002-03-17 Fernando Perez <fperez@colorado.edu>
4517 4523
4518 4524 * IPython/UserConfig/magic_gnuplot.py: new name for the
4519 4525 example-magic_pm.py file. Much enhanced system, now with a shell
4520 4526 for communicating directly with gnuplot, one command at a time.
4521 4527
4522 4528 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4523 4529 setting __name__=='__main__'.
4524 4530
4525 4531 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4526 4532 mini-shell for accessing gnuplot from inside ipython. Should
4527 4533 extend it later for grace access too. Inspired by Arnd's
4528 4534 suggestion.
4529 4535
4530 4536 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4531 4537 calling magic functions with () in their arguments. Thanks to Arnd
4532 4538 Baecker for pointing this to me.
4533 4539
4534 4540 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4535 4541 infinitely for integer or complex arrays (only worked with floats).
4536 4542
4537 4543 2002-03-16 Fernando Perez <fperez@colorado.edu>
4538 4544
4539 4545 * setup.py: Merged setup and setup_windows into a single script
4540 4546 which properly handles things for windows users.
4541 4547
4542 4548 2002-03-15 Fernando Perez <fperez@colorado.edu>
4543 4549
4544 4550 * Big change to the manual: now the magics are all automatically
4545 4551 documented. This information is generated from their docstrings
4546 4552 and put in a latex file included by the manual lyx file. This way
4547 4553 we get always up to date information for the magics. The manual
4548 4554 now also has proper version information, also auto-synced.
4549 4555
4550 4556 For this to work, an undocumented --magic_docstrings option was added.
4551 4557
4552 4558 2002-03-13 Fernando Perez <fperez@colorado.edu>
4553 4559
4554 4560 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4555 4561 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4556 4562
4557 4563 2002-03-12 Fernando Perez <fperez@colorado.edu>
4558 4564
4559 4565 * IPython/ultraTB.py (TermColors): changed color escapes again to
4560 4566 fix the (old, reintroduced) line-wrapping bug. Basically, if
4561 4567 \001..\002 aren't given in the color escapes, lines get wrapped
4562 4568 weirdly. But giving those screws up old xterms and emacs terms. So
4563 4569 I added some logic for emacs terms to be ok, but I can't identify old
4564 4570 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4565 4571
4566 4572 2002-03-10 Fernando Perez <fperez@colorado.edu>
4567 4573
4568 4574 * IPython/usage.py (__doc__): Various documentation cleanups and
4569 4575 updates, both in usage docstrings and in the manual.
4570 4576
4571 4577 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4572 4578 handling of caching. Set minimum acceptabe value for having a
4573 4579 cache at 20 values.
4574 4580
4575 4581 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4576 4582 install_first_time function to a method, renamed it and added an
4577 4583 'upgrade' mode. Now people can update their config directory with
4578 4584 a simple command line switch (-upgrade, also new).
4579 4585
4580 4586 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4581 4587 @file (convenient for automagic users under Python >= 2.2).
4582 4588 Removed @files (it seemed more like a plural than an abbrev. of
4583 4589 'file show').
4584 4590
4585 4591 * IPython/iplib.py (install_first_time): Fixed crash if there were
4586 4592 backup files ('~') in .ipython/ install directory.
4587 4593
4588 4594 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4589 4595 system. Things look fine, but these changes are fairly
4590 4596 intrusive. Test them for a few days.
4591 4597
4592 4598 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4593 4599 the prompts system. Now all in/out prompt strings are user
4594 4600 controllable. This is particularly useful for embedding, as one
4595 4601 can tag embedded instances with particular prompts.
4596 4602
4597 4603 Also removed global use of sys.ps1/2, which now allows nested
4598 4604 embeddings without any problems. Added command-line options for
4599 4605 the prompt strings.
4600 4606
4601 4607 2002-03-08 Fernando Perez <fperez@colorado.edu>
4602 4608
4603 4609 * IPython/UserConfig/example-embed-short.py (ipshell): added
4604 4610 example file with the bare minimum code for embedding.
4605 4611
4606 4612 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4607 4613 functionality for the embeddable shell to be activated/deactivated
4608 4614 either globally or at each call.
4609 4615
4610 4616 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4611 4617 rewriting the prompt with '--->' for auto-inputs with proper
4612 4618 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4613 4619 this is handled by the prompts class itself, as it should.
4614 4620
4615 4621 2002-03-05 Fernando Perez <fperez@colorado.edu>
4616 4622
4617 4623 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4618 4624 @logstart to avoid name clashes with the math log function.
4619 4625
4620 4626 * Big updates to X/Emacs section of the manual.
4621 4627
4622 4628 * Removed ipython_emacs. Milan explained to me how to pass
4623 4629 arguments to ipython through Emacs. Some day I'm going to end up
4624 4630 learning some lisp...
4625 4631
4626 4632 2002-03-04 Fernando Perez <fperez@colorado.edu>
4627 4633
4628 4634 * IPython/ipython_emacs: Created script to be used as the
4629 4635 py-python-command Emacs variable so we can pass IPython
4630 4636 parameters. I can't figure out how to tell Emacs directly to pass
4631 4637 parameters to IPython, so a dummy shell script will do it.
4632 4638
4633 4639 Other enhancements made for things to work better under Emacs'
4634 4640 various types of terminals. Many thanks to Milan Zamazal
4635 4641 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4636 4642
4637 4643 2002-03-01 Fernando Perez <fperez@colorado.edu>
4638 4644
4639 4645 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4640 4646 that loading of readline is now optional. This gives better
4641 4647 control to emacs users.
4642 4648
4643 4649 * IPython/ultraTB.py (__date__): Modified color escape sequences
4644 4650 and now things work fine under xterm and in Emacs' term buffers
4645 4651 (though not shell ones). Well, in emacs you get colors, but all
4646 4652 seem to be 'light' colors (no difference between dark and light
4647 4653 ones). But the garbage chars are gone, and also in xterms. It
4648 4654 seems that now I'm using 'cleaner' ansi sequences.
4649 4655
4650 4656 2002-02-21 Fernando Perez <fperez@colorado.edu>
4651 4657
4652 4658 * Released 0.2.7 (mainly to publish the scoping fix).
4653 4659
4654 4660 * IPython/Logger.py (Logger.logstate): added. A corresponding
4655 4661 @logstate magic was created.
4656 4662
4657 4663 * IPython/Magic.py: fixed nested scoping problem under Python
4658 4664 2.1.x (automagic wasn't working).
4659 4665
4660 4666 2002-02-20 Fernando Perez <fperez@colorado.edu>
4661 4667
4662 4668 * Released 0.2.6.
4663 4669
4664 4670 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4665 4671 option so that logs can come out without any headers at all.
4666 4672
4667 4673 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4668 4674 SciPy.
4669 4675
4670 4676 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4671 4677 that embedded IPython calls don't require vars() to be explicitly
4672 4678 passed. Now they are extracted from the caller's frame (code
4673 4679 snatched from Eric Jones' weave). Added better documentation to
4674 4680 the section on embedding and the example file.
4675 4681
4676 4682 * IPython/genutils.py (page): Changed so that under emacs, it just
4677 4683 prints the string. You can then page up and down in the emacs
4678 4684 buffer itself. This is how the builtin help() works.
4679 4685
4680 4686 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4681 4687 macro scoping: macros need to be executed in the user's namespace
4682 4688 to work as if they had been typed by the user.
4683 4689
4684 4690 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4685 4691 execute automatically (no need to type 'exec...'). They then
4686 4692 behave like 'true macros'. The printing system was also modified
4687 4693 for this to work.
4688 4694
4689 4695 2002-02-19 Fernando Perez <fperez@colorado.edu>
4690 4696
4691 4697 * IPython/genutils.py (page_file): new function for paging files
4692 4698 in an OS-independent way. Also necessary for file viewing to work
4693 4699 well inside Emacs buffers.
4694 4700 (page): Added checks for being in an emacs buffer.
4695 4701 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4696 4702 same bug in iplib.
4697 4703
4698 4704 2002-02-18 Fernando Perez <fperez@colorado.edu>
4699 4705
4700 4706 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4701 4707 of readline so that IPython can work inside an Emacs buffer.
4702 4708
4703 4709 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4704 4710 method signatures (they weren't really bugs, but it looks cleaner
4705 4711 and keeps PyChecker happy).
4706 4712
4707 4713 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4708 4714 for implementing various user-defined hooks. Currently only
4709 4715 display is done.
4710 4716
4711 4717 * IPython/Prompts.py (CachedOutput._display): changed display
4712 4718 functions so that they can be dynamically changed by users easily.
4713 4719
4714 4720 * IPython/Extensions/numeric_formats.py (num_display): added an
4715 4721 extension for printing NumPy arrays in flexible manners. It
4716 4722 doesn't do anything yet, but all the structure is in
4717 4723 place. Ultimately the plan is to implement output format control
4718 4724 like in Octave.
4719 4725
4720 4726 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4721 4727 methods are found at run-time by all the automatic machinery.
4722 4728
4723 4729 2002-02-17 Fernando Perez <fperez@colorado.edu>
4724 4730
4725 4731 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4726 4732 whole file a little.
4727 4733
4728 4734 * ToDo: closed this document. Now there's a new_design.lyx
4729 4735 document for all new ideas. Added making a pdf of it for the
4730 4736 end-user distro.
4731 4737
4732 4738 * IPython/Logger.py (Logger.switch_log): Created this to replace
4733 4739 logon() and logoff(). It also fixes a nasty crash reported by
4734 4740 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4735 4741
4736 4742 * IPython/iplib.py (complete): got auto-completion to work with
4737 4743 automagic (I had wanted this for a long time).
4738 4744
4739 4745 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4740 4746 to @file, since file() is now a builtin and clashes with automagic
4741 4747 for @file.
4742 4748
4743 4749 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4744 4750 of this was previously in iplib, which had grown to more than 2000
4745 4751 lines, way too long. No new functionality, but it makes managing
4746 4752 the code a bit easier.
4747 4753
4748 4754 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4749 4755 information to crash reports.
4750 4756
4751 4757 2002-02-12 Fernando Perez <fperez@colorado.edu>
4752 4758
4753 4759 * Released 0.2.5.
4754 4760
4755 4761 2002-02-11 Fernando Perez <fperez@colorado.edu>
4756 4762
4757 4763 * Wrote a relatively complete Windows installer. It puts
4758 4764 everything in place, creates Start Menu entries and fixes the
4759 4765 color issues. Nothing fancy, but it works.
4760 4766
4761 4767 2002-02-10 Fernando Perez <fperez@colorado.edu>
4762 4768
4763 4769 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4764 4770 os.path.expanduser() call so that we can type @run ~/myfile.py and
4765 4771 have thigs work as expected.
4766 4772
4767 4773 * IPython/genutils.py (page): fixed exception handling so things
4768 4774 work both in Unix and Windows correctly. Quitting a pager triggers
4769 4775 an IOError/broken pipe in Unix, and in windows not finding a pager
4770 4776 is also an IOError, so I had to actually look at the return value
4771 4777 of the exception, not just the exception itself. Should be ok now.
4772 4778
4773 4779 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4774 4780 modified to allow case-insensitive color scheme changes.
4775 4781
4776 4782 2002-02-09 Fernando Perez <fperez@colorado.edu>
4777 4783
4778 4784 * IPython/genutils.py (native_line_ends): new function to leave
4779 4785 user config files with os-native line-endings.
4780 4786
4781 4787 * README and manual updates.
4782 4788
4783 4789 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4784 4790 instead of StringType to catch Unicode strings.
4785 4791
4786 4792 * IPython/genutils.py (filefind): fixed bug for paths with
4787 4793 embedded spaces (very common in Windows).
4788 4794
4789 4795 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4790 4796 files under Windows, so that they get automatically associated
4791 4797 with a text editor. Windows makes it a pain to handle
4792 4798 extension-less files.
4793 4799
4794 4800 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4795 4801 warning about readline only occur for Posix. In Windows there's no
4796 4802 way to get readline, so why bother with the warning.
4797 4803
4798 4804 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4799 4805 for __str__ instead of dir(self), since dir() changed in 2.2.
4800 4806
4801 4807 * Ported to Windows! Tested on XP, I suspect it should work fine
4802 4808 on NT/2000, but I don't think it will work on 98 et al. That
4803 4809 series of Windows is such a piece of junk anyway that I won't try
4804 4810 porting it there. The XP port was straightforward, showed a few
4805 4811 bugs here and there (fixed all), in particular some string
4806 4812 handling stuff which required considering Unicode strings (which
4807 4813 Windows uses). This is good, but hasn't been too tested :) No
4808 4814 fancy installer yet, I'll put a note in the manual so people at
4809 4815 least make manually a shortcut.
4810 4816
4811 4817 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4812 4818 into a single one, "colors". This now controls both prompt and
4813 4819 exception color schemes, and can be changed both at startup
4814 4820 (either via command-line switches or via ipythonrc files) and at
4815 4821 runtime, with @colors.
4816 4822 (Magic.magic_run): renamed @prun to @run and removed the old
4817 4823 @run. The two were too similar to warrant keeping both.
4818 4824
4819 4825 2002-02-03 Fernando Perez <fperez@colorado.edu>
4820 4826
4821 4827 * IPython/iplib.py (install_first_time): Added comment on how to
4822 4828 configure the color options for first-time users. Put a <return>
4823 4829 request at the end so that small-terminal users get a chance to
4824 4830 read the startup info.
4825 4831
4826 4832 2002-01-23 Fernando Perez <fperez@colorado.edu>
4827 4833
4828 4834 * IPython/iplib.py (CachedOutput.update): Changed output memory
4829 4835 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4830 4836 input history we still use _i. Did this b/c these variable are
4831 4837 very commonly used in interactive work, so the less we need to
4832 4838 type the better off we are.
4833 4839 (Magic.magic_prun): updated @prun to better handle the namespaces
4834 4840 the file will run in, including a fix for __name__ not being set
4835 4841 before.
4836 4842
4837 4843 2002-01-20 Fernando Perez <fperez@colorado.edu>
4838 4844
4839 4845 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4840 4846 extra garbage for Python 2.2. Need to look more carefully into
4841 4847 this later.
4842 4848
4843 4849 2002-01-19 Fernando Perez <fperez@colorado.edu>
4844 4850
4845 4851 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4846 4852 display SyntaxError exceptions properly formatted when they occur
4847 4853 (they can be triggered by imported code).
4848 4854
4849 4855 2002-01-18 Fernando Perez <fperez@colorado.edu>
4850 4856
4851 4857 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4852 4858 SyntaxError exceptions are reported nicely formatted, instead of
4853 4859 spitting out only offset information as before.
4854 4860 (Magic.magic_prun): Added the @prun function for executing
4855 4861 programs with command line args inside IPython.
4856 4862
4857 4863 2002-01-16 Fernando Perez <fperez@colorado.edu>
4858 4864
4859 4865 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4860 4866 to *not* include the last item given in a range. This brings their
4861 4867 behavior in line with Python's slicing:
4862 4868 a[n1:n2] -> a[n1]...a[n2-1]
4863 4869 It may be a bit less convenient, but I prefer to stick to Python's
4864 4870 conventions *everywhere*, so users never have to wonder.
4865 4871 (Magic.magic_macro): Added @macro function to ease the creation of
4866 4872 macros.
4867 4873
4868 4874 2002-01-05 Fernando Perez <fperez@colorado.edu>
4869 4875
4870 4876 * Released 0.2.4.
4871 4877
4872 4878 * IPython/iplib.py (Magic.magic_pdef):
4873 4879 (InteractiveShell.safe_execfile): report magic lines and error
4874 4880 lines without line numbers so one can easily copy/paste them for
4875 4881 re-execution.
4876 4882
4877 4883 * Updated manual with recent changes.
4878 4884
4879 4885 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4880 4886 docstring printing when class? is called. Very handy for knowing
4881 4887 how to create class instances (as long as __init__ is well
4882 4888 documented, of course :)
4883 4889 (Magic.magic_doc): print both class and constructor docstrings.
4884 4890 (Magic.magic_pdef): give constructor info if passed a class and
4885 4891 __call__ info for callable object instances.
4886 4892
4887 4893 2002-01-04 Fernando Perez <fperez@colorado.edu>
4888 4894
4889 4895 * Made deep_reload() off by default. It doesn't always work
4890 4896 exactly as intended, so it's probably safer to have it off. It's
4891 4897 still available as dreload() anyway, so nothing is lost.
4892 4898
4893 4899 2002-01-02 Fernando Perez <fperez@colorado.edu>
4894 4900
4895 4901 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4896 4902 so I wanted an updated release).
4897 4903
4898 4904 2001-12-27 Fernando Perez <fperez@colorado.edu>
4899 4905
4900 4906 * IPython/iplib.py (InteractiveShell.interact): Added the original
4901 4907 code from 'code.py' for this module in order to change the
4902 4908 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4903 4909 the history cache would break when the user hit Ctrl-C, and
4904 4910 interact() offers no way to add any hooks to it.
4905 4911
4906 4912 2001-12-23 Fernando Perez <fperez@colorado.edu>
4907 4913
4908 4914 * setup.py: added check for 'MANIFEST' before trying to remove
4909 4915 it. Thanks to Sean Reifschneider.
4910 4916
4911 4917 2001-12-22 Fernando Perez <fperez@colorado.edu>
4912 4918
4913 4919 * Released 0.2.2.
4914 4920
4915 4921 * Finished (reasonably) writing the manual. Later will add the
4916 4922 python-standard navigation stylesheets, but for the time being
4917 4923 it's fairly complete. Distribution will include html and pdf
4918 4924 versions.
4919 4925
4920 4926 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4921 4927 (MayaVi author).
4922 4928
4923 4929 2001-12-21 Fernando Perez <fperez@colorado.edu>
4924 4930
4925 4931 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4926 4932 good public release, I think (with the manual and the distutils
4927 4933 installer). The manual can use some work, but that can go
4928 4934 slowly. Otherwise I think it's quite nice for end users. Next
4929 4935 summer, rewrite the guts of it...
4930 4936
4931 4937 * Changed format of ipythonrc files to use whitespace as the
4932 4938 separator instead of an explicit '='. Cleaner.
4933 4939
4934 4940 2001-12-20 Fernando Perez <fperez@colorado.edu>
4935 4941
4936 4942 * Started a manual in LyX. For now it's just a quick merge of the
4937 4943 various internal docstrings and READMEs. Later it may grow into a
4938 4944 nice, full-blown manual.
4939 4945
4940 4946 * Set up a distutils based installer. Installation should now be
4941 4947 trivially simple for end-users.
4942 4948
4943 4949 2001-12-11 Fernando Perez <fperez@colorado.edu>
4944 4950
4945 4951 * Released 0.2.0. First public release, announced it at
4946 4952 comp.lang.python. From now on, just bugfixes...
4947 4953
4948 4954 * Went through all the files, set copyright/license notices and
4949 4955 cleaned up things. Ready for release.
4950 4956
4951 4957 2001-12-10 Fernando Perez <fperez@colorado.edu>
4952 4958
4953 4959 * Changed the first-time installer not to use tarfiles. It's more
4954 4960 robust now and less unix-dependent. Also makes it easier for
4955 4961 people to later upgrade versions.
4956 4962
4957 4963 * Changed @exit to @abort to reflect the fact that it's pretty
4958 4964 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4959 4965 becomes significant only when IPyhton is embedded: in that case,
4960 4966 C-D closes IPython only, but @abort kills the enclosing program
4961 4967 too (unless it had called IPython inside a try catching
4962 4968 SystemExit).
4963 4969
4964 4970 * Created Shell module which exposes the actuall IPython Shell
4965 4971 classes, currently the normal and the embeddable one. This at
4966 4972 least offers a stable interface we won't need to change when
4967 4973 (later) the internals are rewritten. That rewrite will be confined
4968 4974 to iplib and ipmaker, but the Shell interface should remain as is.
4969 4975
4970 4976 * Added embed module which offers an embeddable IPShell object,
4971 4977 useful to fire up IPython *inside* a running program. Great for
4972 4978 debugging or dynamical data analysis.
4973 4979
4974 4980 2001-12-08 Fernando Perez <fperez@colorado.edu>
4975 4981
4976 4982 * Fixed small bug preventing seeing info from methods of defined
4977 4983 objects (incorrect namespace in _ofind()).
4978 4984
4979 4985 * Documentation cleanup. Moved the main usage docstrings to a
4980 4986 separate file, usage.py (cleaner to maintain, and hopefully in the
4981 4987 future some perlpod-like way of producing interactive, man and
4982 4988 html docs out of it will be found).
4983 4989
4984 4990 * Added @profile to see your profile at any time.
4985 4991
4986 4992 * Added @p as an alias for 'print'. It's especially convenient if
4987 4993 using automagic ('p x' prints x).
4988 4994
4989 4995 * Small cleanups and fixes after a pychecker run.
4990 4996
4991 4997 * Changed the @cd command to handle @cd - and @cd -<n> for
4992 4998 visiting any directory in _dh.
4993 4999
4994 5000 * Introduced _dh, a history of visited directories. @dhist prints
4995 5001 it out with numbers.
4996 5002
4997 5003 2001-12-07 Fernando Perez <fperez@colorado.edu>
4998 5004
4999 5005 * Released 0.1.22
5000 5006
5001 5007 * Made initialization a bit more robust against invalid color
5002 5008 options in user input (exit, not traceback-crash).
5003 5009
5004 5010 * Changed the bug crash reporter to write the report only in the
5005 5011 user's .ipython directory. That way IPython won't litter people's
5006 5012 hard disks with crash files all over the place. Also print on
5007 5013 screen the necessary mail command.
5008 5014
5009 5015 * With the new ultraTB, implemented LightBG color scheme for light
5010 5016 background terminals. A lot of people like white backgrounds, so I
5011 5017 guess we should at least give them something readable.
5012 5018
5013 5019 2001-12-06 Fernando Perez <fperez@colorado.edu>
5014 5020
5015 5021 * Modified the structure of ultraTB. Now there's a proper class
5016 5022 for tables of color schemes which allow adding schemes easily and
5017 5023 switching the active scheme without creating a new instance every
5018 5024 time (which was ridiculous). The syntax for creating new schemes
5019 5025 is also cleaner. I think ultraTB is finally done, with a clean
5020 5026 class structure. Names are also much cleaner (now there's proper
5021 5027 color tables, no need for every variable to also have 'color' in
5022 5028 its name).
5023 5029
5024 5030 * Broke down genutils into separate files. Now genutils only
5025 5031 contains utility functions, and classes have been moved to their
5026 5032 own files (they had enough independent functionality to warrant
5027 5033 it): ConfigLoader, OutputTrap, Struct.
5028 5034
5029 5035 2001-12-05 Fernando Perez <fperez@colorado.edu>
5030 5036
5031 5037 * IPython turns 21! Released version 0.1.21, as a candidate for
5032 5038 public consumption. If all goes well, release in a few days.
5033 5039
5034 5040 * Fixed path bug (files in Extensions/ directory wouldn't be found
5035 5041 unless IPython/ was explicitly in sys.path).
5036 5042
5037 5043 * Extended the FlexCompleter class as MagicCompleter to allow
5038 5044 completion of @-starting lines.
5039 5045
5040 5046 * Created __release__.py file as a central repository for release
5041 5047 info that other files can read from.
5042 5048
5043 5049 * Fixed small bug in logging: when logging was turned on in
5044 5050 mid-session, old lines with special meanings (!@?) were being
5045 5051 logged without the prepended comment, which is necessary since
5046 5052 they are not truly valid python syntax. This should make session
5047 5053 restores produce less errors.
5048 5054
5049 5055 * The namespace cleanup forced me to make a FlexCompleter class
5050 5056 which is nothing but a ripoff of rlcompleter, but with selectable
5051 5057 namespace (rlcompleter only works in __main__.__dict__). I'll try
5052 5058 to submit a note to the authors to see if this change can be
5053 5059 incorporated in future rlcompleter releases (Dec.6: done)
5054 5060
5055 5061 * More fixes to namespace handling. It was a mess! Now all
5056 5062 explicit references to __main__.__dict__ are gone (except when
5057 5063 really needed) and everything is handled through the namespace
5058 5064 dicts in the IPython instance. We seem to be getting somewhere
5059 5065 with this, finally...
5060 5066
5061 5067 * Small documentation updates.
5062 5068
5063 5069 * Created the Extensions directory under IPython (with an
5064 5070 __init__.py). Put the PhysicalQ stuff there. This directory should
5065 5071 be used for all special-purpose extensions.
5066 5072
5067 5073 * File renaming:
5068 5074 ipythonlib --> ipmaker
5069 5075 ipplib --> iplib
5070 5076 This makes a bit more sense in terms of what these files actually do.
5071 5077
5072 5078 * Moved all the classes and functions in ipythonlib to ipplib, so
5073 5079 now ipythonlib only has make_IPython(). This will ease up its
5074 5080 splitting in smaller functional chunks later.
5075 5081
5076 5082 * Cleaned up (done, I think) output of @whos. Better column
5077 5083 formatting, and now shows str(var) for as much as it can, which is
5078 5084 typically what one gets with a 'print var'.
5079 5085
5080 5086 2001-12-04 Fernando Perez <fperez@colorado.edu>
5081 5087
5082 5088 * Fixed namespace problems. Now builtin/IPyhton/user names get
5083 5089 properly reported in their namespace. Internal namespace handling
5084 5090 is finally getting decent (not perfect yet, but much better than
5085 5091 the ad-hoc mess we had).
5086 5092
5087 5093 * Removed -exit option. If people just want to run a python
5088 5094 script, that's what the normal interpreter is for. Less
5089 5095 unnecessary options, less chances for bugs.
5090 5096
5091 5097 * Added a crash handler which generates a complete post-mortem if
5092 5098 IPython crashes. This will help a lot in tracking bugs down the
5093 5099 road.
5094 5100
5095 5101 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5096 5102 which were boud to functions being reassigned would bypass the
5097 5103 logger, breaking the sync of _il with the prompt counter. This
5098 5104 would then crash IPython later when a new line was logged.
5099 5105
5100 5106 2001-12-02 Fernando Perez <fperez@colorado.edu>
5101 5107
5102 5108 * Made IPython a package. This means people don't have to clutter
5103 5109 their sys.path with yet another directory. Changed the INSTALL
5104 5110 file accordingly.
5105 5111
5106 5112 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5107 5113 sorts its output (so @who shows it sorted) and @whos formats the
5108 5114 table according to the width of the first column. Nicer, easier to
5109 5115 read. Todo: write a generic table_format() which takes a list of
5110 5116 lists and prints it nicely formatted, with optional row/column
5111 5117 separators and proper padding and justification.
5112 5118
5113 5119 * Released 0.1.20
5114 5120
5115 5121 * Fixed bug in @log which would reverse the inputcache list (a
5116 5122 copy operation was missing).
5117 5123
5118 5124 * Code cleanup. @config was changed to use page(). Better, since
5119 5125 its output is always quite long.
5120 5126
5121 5127 * Itpl is back as a dependency. I was having too many problems
5122 5128 getting the parametric aliases to work reliably, and it's just
5123 5129 easier to code weird string operations with it than playing %()s
5124 5130 games. It's only ~6k, so I don't think it's too big a deal.
5125 5131
5126 5132 * Found (and fixed) a very nasty bug with history. !lines weren't
5127 5133 getting cached, and the out of sync caches would crash
5128 5134 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5129 5135 division of labor a bit better. Bug fixed, cleaner structure.
5130 5136
5131 5137 2001-12-01 Fernando Perez <fperez@colorado.edu>
5132 5138
5133 5139 * Released 0.1.19
5134 5140
5135 5141 * Added option -n to @hist to prevent line number printing. Much
5136 5142 easier to copy/paste code this way.
5137 5143
5138 5144 * Created global _il to hold the input list. Allows easy
5139 5145 re-execution of blocks of code by slicing it (inspired by Janko's
5140 5146 comment on 'macros').
5141 5147
5142 5148 * Small fixes and doc updates.
5143 5149
5144 5150 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5145 5151 much too fragile with automagic. Handles properly multi-line
5146 5152 statements and takes parameters.
5147 5153
5148 5154 2001-11-30 Fernando Perez <fperez@colorado.edu>
5149 5155
5150 5156 * Version 0.1.18 released.
5151 5157
5152 5158 * Fixed nasty namespace bug in initial module imports.
5153 5159
5154 5160 * Added copyright/license notes to all code files (except
5155 5161 DPyGetOpt). For the time being, LGPL. That could change.
5156 5162
5157 5163 * Rewrote a much nicer README, updated INSTALL, cleaned up
5158 5164 ipythonrc-* samples.
5159 5165
5160 5166 * Overall code/documentation cleanup. Basically ready for
5161 5167 release. Only remaining thing: licence decision (LGPL?).
5162 5168
5163 5169 * Converted load_config to a class, ConfigLoader. Now recursion
5164 5170 control is better organized. Doesn't include the same file twice.
5165 5171
5166 5172 2001-11-29 Fernando Perez <fperez@colorado.edu>
5167 5173
5168 5174 * Got input history working. Changed output history variables from
5169 5175 _p to _o so that _i is for input and _o for output. Just cleaner
5170 5176 convention.
5171 5177
5172 5178 * Implemented parametric aliases. This pretty much allows the
5173 5179 alias system to offer full-blown shell convenience, I think.
5174 5180
5175 5181 * Version 0.1.17 released, 0.1.18 opened.
5176 5182
5177 5183 * dot_ipython/ipythonrc (alias): added documentation.
5178 5184 (xcolor): Fixed small bug (xcolors -> xcolor)
5179 5185
5180 5186 * Changed the alias system. Now alias is a magic command to define
5181 5187 aliases just like the shell. Rationale: the builtin magics should
5182 5188 be there for things deeply connected to IPython's
5183 5189 architecture. And this is a much lighter system for what I think
5184 5190 is the really important feature: allowing users to define quickly
5185 5191 magics that will do shell things for them, so they can customize
5186 5192 IPython easily to match their work habits. If someone is really
5187 5193 desperate to have another name for a builtin alias, they can
5188 5194 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5189 5195 works.
5190 5196
5191 5197 2001-11-28 Fernando Perez <fperez@colorado.edu>
5192 5198
5193 5199 * Changed @file so that it opens the source file at the proper
5194 5200 line. Since it uses less, if your EDITOR environment is
5195 5201 configured, typing v will immediately open your editor of choice
5196 5202 right at the line where the object is defined. Not as quick as
5197 5203 having a direct @edit command, but for all intents and purposes it
5198 5204 works. And I don't have to worry about writing @edit to deal with
5199 5205 all the editors, less does that.
5200 5206
5201 5207 * Version 0.1.16 released, 0.1.17 opened.
5202 5208
5203 5209 * Fixed some nasty bugs in the page/page_dumb combo that could
5204 5210 crash IPython.
5205 5211
5206 5212 2001-11-27 Fernando Perez <fperez@colorado.edu>
5207 5213
5208 5214 * Version 0.1.15 released, 0.1.16 opened.
5209 5215
5210 5216 * Finally got ? and ?? to work for undefined things: now it's
5211 5217 possible to type {}.get? and get information about the get method
5212 5218 of dicts, or os.path? even if only os is defined (so technically
5213 5219 os.path isn't). Works at any level. For example, after import os,
5214 5220 os?, os.path?, os.path.abspath? all work. This is great, took some
5215 5221 work in _ofind.
5216 5222
5217 5223 * Fixed more bugs with logging. The sanest way to do it was to add
5218 5224 to @log a 'mode' parameter. Killed two in one shot (this mode
5219 5225 option was a request of Janko's). I think it's finally clean
5220 5226 (famous last words).
5221 5227
5222 5228 * Added a page_dumb() pager which does a decent job of paging on
5223 5229 screen, if better things (like less) aren't available. One less
5224 5230 unix dependency (someday maybe somebody will port this to
5225 5231 windows).
5226 5232
5227 5233 * Fixed problem in magic_log: would lock of logging out if log
5228 5234 creation failed (because it would still think it had succeeded).
5229 5235
5230 5236 * Improved the page() function using curses to auto-detect screen
5231 5237 size. Now it can make a much better decision on whether to print
5232 5238 or page a string. Option screen_length was modified: a value 0
5233 5239 means auto-detect, and that's the default now.
5234 5240
5235 5241 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5236 5242 go out. I'll test it for a few days, then talk to Janko about
5237 5243 licences and announce it.
5238 5244
5239 5245 * Fixed the length of the auto-generated ---> prompt which appears
5240 5246 for auto-parens and auto-quotes. Getting this right isn't trivial,
5241 5247 with all the color escapes, different prompt types and optional
5242 5248 separators. But it seems to be working in all the combinations.
5243 5249
5244 5250 2001-11-26 Fernando Perez <fperez@colorado.edu>
5245 5251
5246 5252 * Wrote a regexp filter to get option types from the option names
5247 5253 string. This eliminates the need to manually keep two duplicate
5248 5254 lists.
5249 5255
5250 5256 * Removed the unneeded check_option_names. Now options are handled
5251 5257 in a much saner manner and it's easy to visually check that things
5252 5258 are ok.
5253 5259
5254 5260 * Updated version numbers on all files I modified to carry a
5255 5261 notice so Janko and Nathan have clear version markers.
5256 5262
5257 5263 * Updated docstring for ultraTB with my changes. I should send
5258 5264 this to Nathan.
5259 5265
5260 5266 * Lots of small fixes. Ran everything through pychecker again.
5261 5267
5262 5268 * Made loading of deep_reload an cmd line option. If it's not too
5263 5269 kosher, now people can just disable it. With -nodeep_reload it's
5264 5270 still available as dreload(), it just won't overwrite reload().
5265 5271
5266 5272 * Moved many options to the no| form (-opt and -noopt
5267 5273 accepted). Cleaner.
5268 5274
5269 5275 * Changed magic_log so that if called with no parameters, it uses
5270 5276 'rotate' mode. That way auto-generated logs aren't automatically
5271 5277 over-written. For normal logs, now a backup is made if it exists
5272 5278 (only 1 level of backups). A new 'backup' mode was added to the
5273 5279 Logger class to support this. This was a request by Janko.
5274 5280
5275 5281 * Added @logoff/@logon to stop/restart an active log.
5276 5282
5277 5283 * Fixed a lot of bugs in log saving/replay. It was pretty
5278 5284 broken. Now special lines (!@,/) appear properly in the command
5279 5285 history after a log replay.
5280 5286
5281 5287 * Tried and failed to implement full session saving via pickle. My
5282 5288 idea was to pickle __main__.__dict__, but modules can't be
5283 5289 pickled. This would be a better alternative to replaying logs, but
5284 5290 seems quite tricky to get to work. Changed -session to be called
5285 5291 -logplay, which more accurately reflects what it does. And if we
5286 5292 ever get real session saving working, -session is now available.
5287 5293
5288 5294 * Implemented color schemes for prompts also. As for tracebacks,
5289 5295 currently only NoColor and Linux are supported. But now the
5290 5296 infrastructure is in place, based on a generic ColorScheme
5291 5297 class. So writing and activating new schemes both for the prompts
5292 5298 and the tracebacks should be straightforward.
5293 5299
5294 5300 * Version 0.1.13 released, 0.1.14 opened.
5295 5301
5296 5302 * Changed handling of options for output cache. Now counter is
5297 5303 hardwired starting at 1 and one specifies the maximum number of
5298 5304 entries *in the outcache* (not the max prompt counter). This is
5299 5305 much better, since many statements won't increase the cache
5300 5306 count. It also eliminated some confusing options, now there's only
5301 5307 one: cache_size.
5302 5308
5303 5309 * Added 'alias' magic function and magic_alias option in the
5304 5310 ipythonrc file. Now the user can easily define whatever names he
5305 5311 wants for the magic functions without having to play weird
5306 5312 namespace games. This gives IPython a real shell-like feel.
5307 5313
5308 5314 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5309 5315 @ or not).
5310 5316
5311 5317 This was one of the last remaining 'visible' bugs (that I know
5312 5318 of). I think if I can clean up the session loading so it works
5313 5319 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5314 5320 about licensing).
5315 5321
5316 5322 2001-11-25 Fernando Perez <fperez@colorado.edu>
5317 5323
5318 5324 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5319 5325 there's a cleaner distinction between what ? and ?? show.
5320 5326
5321 5327 * Added screen_length option. Now the user can define his own
5322 5328 screen size for page() operations.
5323 5329
5324 5330 * Implemented magic shell-like functions with automatic code
5325 5331 generation. Now adding another function is just a matter of adding
5326 5332 an entry to a dict, and the function is dynamically generated at
5327 5333 run-time. Python has some really cool features!
5328 5334
5329 5335 * Renamed many options to cleanup conventions a little. Now all
5330 5336 are lowercase, and only underscores where needed. Also in the code
5331 5337 option name tables are clearer.
5332 5338
5333 5339 * Changed prompts a little. Now input is 'In [n]:' instead of
5334 5340 'In[n]:='. This allows it the numbers to be aligned with the
5335 5341 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5336 5342 Python (it was a Mathematica thing). The '...' continuation prompt
5337 5343 was also changed a little to align better.
5338 5344
5339 5345 * Fixed bug when flushing output cache. Not all _p<n> variables
5340 5346 exist, so their deletion needs to be wrapped in a try:
5341 5347
5342 5348 * Figured out how to properly use inspect.formatargspec() (it
5343 5349 requires the args preceded by *). So I removed all the code from
5344 5350 _get_pdef in Magic, which was just replicating that.
5345 5351
5346 5352 * Added test to prefilter to allow redefining magic function names
5347 5353 as variables. This is ok, since the @ form is always available,
5348 5354 but whe should allow the user to define a variable called 'ls' if
5349 5355 he needs it.
5350 5356
5351 5357 * Moved the ToDo information from README into a separate ToDo.
5352 5358
5353 5359 * General code cleanup and small bugfixes. I think it's close to a
5354 5360 state where it can be released, obviously with a big 'beta'
5355 5361 warning on it.
5356 5362
5357 5363 * Got the magic function split to work. Now all magics are defined
5358 5364 in a separate class. It just organizes things a bit, and now
5359 5365 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5360 5366 was too long).
5361 5367
5362 5368 * Changed @clear to @reset to avoid potential confusions with
5363 5369 the shell command clear. Also renamed @cl to @clear, which does
5364 5370 exactly what people expect it to from their shell experience.
5365 5371
5366 5372 Added a check to the @reset command (since it's so
5367 5373 destructive, it's probably a good idea to ask for confirmation).
5368 5374 But now reset only works for full namespace resetting. Since the
5369 5375 del keyword is already there for deleting a few specific
5370 5376 variables, I don't see the point of having a redundant magic
5371 5377 function for the same task.
5372 5378
5373 5379 2001-11-24 Fernando Perez <fperez@colorado.edu>
5374 5380
5375 5381 * Updated the builtin docs (esp. the ? ones).
5376 5382
5377 5383 * Ran all the code through pychecker. Not terribly impressed with
5378 5384 it: lots of spurious warnings and didn't really find anything of
5379 5385 substance (just a few modules being imported and not used).
5380 5386
5381 5387 * Implemented the new ultraTB functionality into IPython. New
5382 5388 option: xcolors. This chooses color scheme. xmode now only selects
5383 5389 between Plain and Verbose. Better orthogonality.
5384 5390
5385 5391 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5386 5392 mode and color scheme for the exception handlers. Now it's
5387 5393 possible to have the verbose traceback with no coloring.
5388 5394
5389 5395 2001-11-23 Fernando Perez <fperez@colorado.edu>
5390 5396
5391 5397 * Version 0.1.12 released, 0.1.13 opened.
5392 5398
5393 5399 * Removed option to set auto-quote and auto-paren escapes by
5394 5400 user. The chances of breaking valid syntax are just too high. If
5395 5401 someone *really* wants, they can always dig into the code.
5396 5402
5397 5403 * Made prompt separators configurable.
5398 5404
5399 5405 2001-11-22 Fernando Perez <fperez@colorado.edu>
5400 5406
5401 5407 * Small bugfixes in many places.
5402 5408
5403 5409 * Removed the MyCompleter class from ipplib. It seemed redundant
5404 5410 with the C-p,C-n history search functionality. Less code to
5405 5411 maintain.
5406 5412
5407 5413 * Moved all the original ipython.py code into ipythonlib.py. Right
5408 5414 now it's just one big dump into a function called make_IPython, so
5409 5415 no real modularity has been gained. But at least it makes the
5410 5416 wrapper script tiny, and since ipythonlib is a module, it gets
5411 5417 compiled and startup is much faster.
5412 5418
5413 5419 This is a reasobably 'deep' change, so we should test it for a
5414 5420 while without messing too much more with the code.
5415 5421
5416 5422 2001-11-21 Fernando Perez <fperez@colorado.edu>
5417 5423
5418 5424 * Version 0.1.11 released, 0.1.12 opened for further work.
5419 5425
5420 5426 * Removed dependency on Itpl. It was only needed in one place. It
5421 5427 would be nice if this became part of python, though. It makes life
5422 5428 *a lot* easier in some cases.
5423 5429
5424 5430 * Simplified the prefilter code a bit. Now all handlers are
5425 5431 expected to explicitly return a value (at least a blank string).
5426 5432
5427 5433 * Heavy edits in ipplib. Removed the help system altogether. Now
5428 5434 obj?/?? is used for inspecting objects, a magic @doc prints
5429 5435 docstrings, and full-blown Python help is accessed via the 'help'
5430 5436 keyword. This cleans up a lot of code (less to maintain) and does
5431 5437 the job. Since 'help' is now a standard Python component, might as
5432 5438 well use it and remove duplicate functionality.
5433 5439
5434 5440 Also removed the option to use ipplib as a standalone program. By
5435 5441 now it's too dependent on other parts of IPython to function alone.
5436 5442
5437 5443 * Fixed bug in genutils.pager. It would crash if the pager was
5438 5444 exited immediately after opening (broken pipe).
5439 5445
5440 5446 * Trimmed down the VerboseTB reporting a little. The header is
5441 5447 much shorter now and the repeated exception arguments at the end
5442 5448 have been removed. For interactive use the old header seemed a bit
5443 5449 excessive.
5444 5450
5445 5451 * Fixed small bug in output of @whos for variables with multi-word
5446 5452 types (only first word was displayed).
5447 5453
5448 5454 2001-11-17 Fernando Perez <fperez@colorado.edu>
5449 5455
5450 5456 * Version 0.1.10 released, 0.1.11 opened for further work.
5451 5457
5452 5458 * Modified dirs and friends. dirs now *returns* the stack (not
5453 5459 prints), so one can manipulate it as a variable. Convenient to
5454 5460 travel along many directories.
5455 5461
5456 5462 * Fixed bug in magic_pdef: would only work with functions with
5457 5463 arguments with default values.
5458 5464
5459 5465 2001-11-14 Fernando Perez <fperez@colorado.edu>
5460 5466
5461 5467 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5462 5468 example with IPython. Various other minor fixes and cleanups.
5463 5469
5464 5470 * Version 0.1.9 released, 0.1.10 opened for further work.
5465 5471
5466 5472 * Added sys.path to the list of directories searched in the
5467 5473 execfile= option. It used to be the current directory and the
5468 5474 user's IPYTHONDIR only.
5469 5475
5470 5476 2001-11-13 Fernando Perez <fperez@colorado.edu>
5471 5477
5472 5478 * Reinstated the raw_input/prefilter separation that Janko had
5473 5479 initially. This gives a more convenient setup for extending the
5474 5480 pre-processor from the outside: raw_input always gets a string,
5475 5481 and prefilter has to process it. We can then redefine prefilter
5476 5482 from the outside and implement extensions for special
5477 5483 purposes.
5478 5484
5479 5485 Today I got one for inputting PhysicalQuantity objects
5480 5486 (from Scientific) without needing any function calls at
5481 5487 all. Extremely convenient, and it's all done as a user-level
5482 5488 extension (no IPython code was touched). Now instead of:
5483 5489 a = PhysicalQuantity(4.2,'m/s**2')
5484 5490 one can simply say
5485 5491 a = 4.2 m/s**2
5486 5492 or even
5487 5493 a = 4.2 m/s^2
5488 5494
5489 5495 I use this, but it's also a proof of concept: IPython really is
5490 5496 fully user-extensible, even at the level of the parsing of the
5491 5497 command line. It's not trivial, but it's perfectly doable.
5492 5498
5493 5499 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5494 5500 the problem of modules being loaded in the inverse order in which
5495 5501 they were defined in
5496 5502
5497 5503 * Version 0.1.8 released, 0.1.9 opened for further work.
5498 5504
5499 5505 * Added magics pdef, source and file. They respectively show the
5500 5506 definition line ('prototype' in C), source code and full python
5501 5507 file for any callable object. The object inspector oinfo uses
5502 5508 these to show the same information.
5503 5509
5504 5510 * Version 0.1.7 released, 0.1.8 opened for further work.
5505 5511
5506 5512 * Separated all the magic functions into a class called Magic. The
5507 5513 InteractiveShell class was becoming too big for Xemacs to handle
5508 5514 (de-indenting a line would lock it up for 10 seconds while it
5509 5515 backtracked on the whole class!)
5510 5516
5511 5517 FIXME: didn't work. It can be done, but right now namespaces are
5512 5518 all messed up. Do it later (reverted it for now, so at least
5513 5519 everything works as before).
5514 5520
5515 5521 * Got the object introspection system (magic_oinfo) working! I
5516 5522 think this is pretty much ready for release to Janko, so he can
5517 5523 test it for a while and then announce it. Pretty much 100% of what
5518 5524 I wanted for the 'phase 1' release is ready. Happy, tired.
5519 5525
5520 5526 2001-11-12 Fernando Perez <fperez@colorado.edu>
5521 5527
5522 5528 * Version 0.1.6 released, 0.1.7 opened for further work.
5523 5529
5524 5530 * Fixed bug in printing: it used to test for truth before
5525 5531 printing, so 0 wouldn't print. Now checks for None.
5526 5532
5527 5533 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5528 5534 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5529 5535 reaches by hand into the outputcache. Think of a better way to do
5530 5536 this later.
5531 5537
5532 5538 * Various small fixes thanks to Nathan's comments.
5533 5539
5534 5540 * Changed magic_pprint to magic_Pprint. This way it doesn't
5535 5541 collide with pprint() and the name is consistent with the command
5536 5542 line option.
5537 5543
5538 5544 * Changed prompt counter behavior to be fully like
5539 5545 Mathematica's. That is, even input that doesn't return a result
5540 5546 raises the prompt counter. The old behavior was kind of confusing
5541 5547 (getting the same prompt number several times if the operation
5542 5548 didn't return a result).
5543 5549
5544 5550 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5545 5551
5546 5552 * Fixed -Classic mode (wasn't working anymore).
5547 5553
5548 5554 * Added colored prompts using Nathan's new code. Colors are
5549 5555 currently hardwired, they can be user-configurable. For
5550 5556 developers, they can be chosen in file ipythonlib.py, at the
5551 5557 beginning of the CachedOutput class def.
5552 5558
5553 5559 2001-11-11 Fernando Perez <fperez@colorado.edu>
5554 5560
5555 5561 * Version 0.1.5 released, 0.1.6 opened for further work.
5556 5562
5557 5563 * Changed magic_env to *return* the environment as a dict (not to
5558 5564 print it). This way it prints, but it can also be processed.
5559 5565
5560 5566 * Added Verbose exception reporting to interactive
5561 5567 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5562 5568 traceback. Had to make some changes to the ultraTB file. This is
5563 5569 probably the last 'big' thing in my mental todo list. This ties
5564 5570 in with the next entry:
5565 5571
5566 5572 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5567 5573 has to specify is Plain, Color or Verbose for all exception
5568 5574 handling.
5569 5575
5570 5576 * Removed ShellServices option. All this can really be done via
5571 5577 the magic system. It's easier to extend, cleaner and has automatic
5572 5578 namespace protection and documentation.
5573 5579
5574 5580 2001-11-09 Fernando Perez <fperez@colorado.edu>
5575 5581
5576 5582 * Fixed bug in output cache flushing (missing parameter to
5577 5583 __init__). Other small bugs fixed (found using pychecker).
5578 5584
5579 5585 * Version 0.1.4 opened for bugfixing.
5580 5586
5581 5587 2001-11-07 Fernando Perez <fperez@colorado.edu>
5582 5588
5583 5589 * Version 0.1.3 released, mainly because of the raw_input bug.
5584 5590
5585 5591 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5586 5592 and when testing for whether things were callable, a call could
5587 5593 actually be made to certain functions. They would get called again
5588 5594 once 'really' executed, with a resulting double call. A disaster
5589 5595 in many cases (list.reverse() would never work!).
5590 5596
5591 5597 * Removed prefilter() function, moved its code to raw_input (which
5592 5598 after all was just a near-empty caller for prefilter). This saves
5593 5599 a function call on every prompt, and simplifies the class a tiny bit.
5594 5600
5595 5601 * Fix _ip to __ip name in magic example file.
5596 5602
5597 5603 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5598 5604 work with non-gnu versions of tar.
5599 5605
5600 5606 2001-11-06 Fernando Perez <fperez@colorado.edu>
5601 5607
5602 5608 * Version 0.1.2. Just to keep track of the recent changes.
5603 5609
5604 5610 * Fixed nasty bug in output prompt routine. It used to check 'if
5605 5611 arg != None...'. Problem is, this fails if arg implements a
5606 5612 special comparison (__cmp__) which disallows comparing to
5607 5613 None. Found it when trying to use the PhysicalQuantity module from
5608 5614 ScientificPython.
5609 5615
5610 5616 2001-11-05 Fernando Perez <fperez@colorado.edu>
5611 5617
5612 5618 * Also added dirs. Now the pushd/popd/dirs family functions
5613 5619 basically like the shell, with the added convenience of going home
5614 5620 when called with no args.
5615 5621
5616 5622 * pushd/popd slightly modified to mimic shell behavior more
5617 5623 closely.
5618 5624
5619 5625 * Added env,pushd,popd from ShellServices as magic functions. I
5620 5626 think the cleanest will be to port all desired functions from
5621 5627 ShellServices as magics and remove ShellServices altogether. This
5622 5628 will provide a single, clean way of adding functionality
5623 5629 (shell-type or otherwise) to IP.
5624 5630
5625 5631 2001-11-04 Fernando Perez <fperez@colorado.edu>
5626 5632
5627 5633 * Added .ipython/ directory to sys.path. This way users can keep
5628 5634 customizations there and access them via import.
5629 5635
5630 5636 2001-11-03 Fernando Perez <fperez@colorado.edu>
5631 5637
5632 5638 * Opened version 0.1.1 for new changes.
5633 5639
5634 5640 * Changed version number to 0.1.0: first 'public' release, sent to
5635 5641 Nathan and Janko.
5636 5642
5637 5643 * Lots of small fixes and tweaks.
5638 5644
5639 5645 * Minor changes to whos format. Now strings are shown, snipped if
5640 5646 too long.
5641 5647
5642 5648 * Changed ShellServices to work on __main__ so they show up in @who
5643 5649
5644 5650 * Help also works with ? at the end of a line:
5645 5651 ?sin and sin?
5646 5652 both produce the same effect. This is nice, as often I use the
5647 5653 tab-complete to find the name of a method, but I used to then have
5648 5654 to go to the beginning of the line to put a ? if I wanted more
5649 5655 info. Now I can just add the ? and hit return. Convenient.
5650 5656
5651 5657 2001-11-02 Fernando Perez <fperez@colorado.edu>
5652 5658
5653 5659 * Python version check (>=2.1) added.
5654 5660
5655 5661 * Added LazyPython documentation. At this point the docs are quite
5656 5662 a mess. A cleanup is in order.
5657 5663
5658 5664 * Auto-installer created. For some bizarre reason, the zipfiles
5659 5665 module isn't working on my system. So I made a tar version
5660 5666 (hopefully the command line options in various systems won't kill
5661 5667 me).
5662 5668
5663 5669 * Fixes to Struct in genutils. Now all dictionary-like methods are
5664 5670 protected (reasonably).
5665 5671
5666 5672 * Added pager function to genutils and changed ? to print usage
5667 5673 note through it (it was too long).
5668 5674
5669 5675 * Added the LazyPython functionality. Works great! I changed the
5670 5676 auto-quote escape to ';', it's on home row and next to '. But
5671 5677 both auto-quote and auto-paren (still /) escapes are command-line
5672 5678 parameters.
5673 5679
5674 5680
5675 5681 2001-11-01 Fernando Perez <fperez@colorado.edu>
5676 5682
5677 5683 * Version changed to 0.0.7. Fairly large change: configuration now
5678 5684 is all stored in a directory, by default .ipython. There, all
5679 5685 config files have normal looking names (not .names)
5680 5686
5681 5687 * Version 0.0.6 Released first to Lucas and Archie as a test
5682 5688 run. Since it's the first 'semi-public' release, change version to
5683 5689 > 0.0.6 for any changes now.
5684 5690
5685 5691 * Stuff I had put in the ipplib.py changelog:
5686 5692
5687 5693 Changes to InteractiveShell:
5688 5694
5689 5695 - Made the usage message a parameter.
5690 5696
5691 5697 - Require the name of the shell variable to be given. It's a bit
5692 5698 of a hack, but allows the name 'shell' not to be hardwired in the
5693 5699 magic (@) handler, which is problematic b/c it requires
5694 5700 polluting the global namespace with 'shell'. This in turn is
5695 5701 fragile: if a user redefines a variable called shell, things
5696 5702 break.
5697 5703
5698 5704 - magic @: all functions available through @ need to be defined
5699 5705 as magic_<name>, even though they can be called simply as
5700 5706 @<name>. This allows the special command @magic to gather
5701 5707 information automatically about all existing magic functions,
5702 5708 even if they are run-time user extensions, by parsing the shell
5703 5709 instance __dict__ looking for special magic_ names.
5704 5710
5705 5711 - mainloop: added *two* local namespace parameters. This allows
5706 5712 the class to differentiate between parameters which were there
5707 5713 before and after command line initialization was processed. This
5708 5714 way, later @who can show things loaded at startup by the
5709 5715 user. This trick was necessary to make session saving/reloading
5710 5716 really work: ideally after saving/exiting/reloading a session,
5711 5717 *everything* should look the same, including the output of @who. I
5712 5718 was only able to make this work with this double namespace
5713 5719 trick.
5714 5720
5715 5721 - added a header to the logfile which allows (almost) full
5716 5722 session restoring.
5717 5723
5718 5724 - prepend lines beginning with @ or !, with a and log
5719 5725 them. Why? !lines: may be useful to know what you did @lines:
5720 5726 they may affect session state. So when restoring a session, at
5721 5727 least inform the user of their presence. I couldn't quite get
5722 5728 them to properly re-execute, but at least the user is warned.
5723 5729
5724 5730 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now