##// END OF EJS Templates
A new ipipe table has been added: ialias produces all entries from IPython's...
walter.doerwald -
Show More
@@ -1,2264 +1,2292 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 ``ils`` (listing the
19 19 current directory, ``ienv`` (listing environment variables), ``ipwd`` (listing
20 20 user accounts) 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 ``ibrowse`` 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)`` method or register an
41 41 implementation of the generic function ``xattrs``. For more info see ``xattrs``.
42 42
43 43 * When an object ``foo`` is displayed by a ``Display`` object, the generic
44 44 function ``xrepr`` is used.
45 45
46 46 * Objects that can be iterated by ``Pipe``s must iterable. For special cases,
47 47 where iteration for display is different than the normal iteration a special
48 48 implementation can be registered with the generic function ``xiter``. This
49 49 makes it possible to use dictionaries and modules in pipeline expressions,
50 50 for example::
51 51
52 52 >>> import sys
53 53 >>> sys | ifilter("isinstance(value, int)") | idump
54 54 key |value
55 55 api_version| 1012
56 56 dllhandle | 503316480
57 57 hexversion | 33817328
58 58 maxint |2147483647
59 59 maxunicode | 65535
60 60 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
61 61 ...
62 62
63 63 Note: The expression strings passed to ``ifilter()`` and ``isort()`` can
64 64 refer to the object to be filtered or sorted via the variable ``_`` and to any
65 65 of the attributes of the object, i.e.::
66 66
67 67 >>> sys.modules | ifilter("_.value is not None") | isort("_.key.lower()")
68 68
69 69 does the same as::
70 70
71 71 >>> sys.modules | ifilter("value is not None") | isort("key.lower()")
72 72
73 73 In addition to expression strings, it's possible to pass callables (taking
74 74 the object as an argument) to ``ifilter()``, ``isort()`` and ``ieval()``::
75 75
76 76 >>> sys | ifilter(lambda _:isinstance(_.value, int)) \
77 77 ... | ieval(lambda _: (_.key, hex(_.value))) | idump
78 78 0 |1
79 79 api_version|0x3f4
80 80 dllhandle |0x1e000000
81 81 hexversion |0x20402f0
82 82 maxint |0x7fffffff
83 83 maxunicode |0xffff
84 84 """
85 85
86 86 import sys, os, os.path, stat, glob, new, csv, datetime, types
87 87 import itertools, mimetypes, StringIO
88 88
89 89 try: # Python 2.3 compatibility
90 90 import collections
91 91 except ImportError:
92 92 deque = list
93 93 else:
94 94 deque = collections.deque
95 95
96 96 try: # Python 2.3 compatibility
97 97 set
98 98 except NameError:
99 99 import sets
100 100 set = sets.Set
101 101
102 102 try: # Python 2.3 compatibility
103 103 sorted
104 104 except NameError:
105 105 def sorted(iterator, key=None, reverse=False):
106 106 items = list(iterator)
107 107 if key is not None:
108 108 items.sort(lambda i1, i2: cmp(key(i1), key(i2)))
109 109 else:
110 110 items.sort()
111 111 if reverse:
112 112 items.reverse()
113 113 return items
114 114
115 115 try:
116 116 import pwd
117 117 except ImportError:
118 118 pwd = None
119 119
120 120 try:
121 121 import grp
122 122 except ImportError:
123 123 grp = None
124 124
125 125 from IPython.external import simplegeneric
126 126
127 127 import path
128 128
129 129 try:
130 130 from IPython import genutils, generics
131 131 except ImportError:
132 132 genutils = None
133 133 generics = None
134 134
135 135 from IPython import ipapi
136 136
137 137
138 138 __all__ = [
139 139 "ifile", "ils", "iglob", "iwalk", "ipwdentry", "ipwd", "igrpentry", "igrp",
140 140 "icsv", "ix", "ichain", "isort", "ifilter", "ieval", "ienum",
141 "ienv", "ihist", "icap", "idump", "iless"
141 "ienv", "ihist", "ialias", "icap", "idump", "iless"
142 142 ]
143 143
144 144
145 145 os.stat_float_times(True) # enable microseconds
146 146
147 147
148 148 class AttrNamespace(object):
149 149 """
150 150 Helper class that is used for providing a namespace for evaluating
151 151 expressions containing attribute names of an object.
152 152 """
153 153 def __init__(self, wrapped):
154 154 self.wrapped = wrapped
155 155
156 156 def __getitem__(self, name):
157 157 if name == "_":
158 158 return self.wrapped
159 159 try:
160 160 return getattr(self.wrapped, name)
161 161 except AttributeError:
162 162 raise KeyError(name)
163 163
164 164 # Python 2.3 compatibility
165 165 # use eval workaround to find out which names are used in the
166 166 # eval string and put them into the locals. This works for most
167 167 # normal uses case, bizarre ones like accessing the locals()
168 168 # will fail
169 169 try:
170 170 eval("_", None, AttrNamespace(None))
171 171 except TypeError:
172 172 real_eval = eval
173 173 def eval(codestring, _globals, _locals):
174 174 """
175 175 eval(source[, globals[, locals]]) -> value
176 176
177 177 Evaluate the source in the context of globals and locals.
178 178 The source may be a string representing a Python expression
179 179 or a code object as returned by compile().
180 180 The globals must be a dictionary and locals can be any mappping.
181 181
182 182 This function is a workaround for the shortcomings of
183 183 Python 2.3's eval.
184 184 """
185 185
186 186 if isinstance(codestring, basestring):
187 187 code = compile(codestring, "_eval", "eval")
188 188 else:
189 189 code = codestring
190 190 newlocals = {}
191 191 for name in code.co_names:
192 192 try:
193 193 newlocals[name] = _locals[name]
194 194 except KeyError:
195 195 pass
196 196 return real_eval(code, _globals, newlocals)
197 197
198 198
199 199 noitem = object()
200 200
201 201
202 202 def item(iterator, index, default=noitem):
203 203 """
204 204 Return the ``index``th item from the iterator ``iterator``.
205 205 ``index`` must be an integer (negative integers are relative to the
206 206 end (i.e. the last items produced by the iterator)).
207 207
208 208 If ``default`` is given, this will be the default value when
209 209 the iterator doesn't contain an item at this position. Otherwise an
210 210 ``IndexError`` will be raised.
211 211
212 212 Note that using this function will partially or totally exhaust the
213 213 iterator.
214 214 """
215 215 i = index
216 216 if i>=0:
217 217 for item in iterator:
218 218 if not i:
219 219 return item
220 220 i -= 1
221 221 else:
222 222 i = -index
223 223 cache = deque()
224 224 for item in iterator:
225 225 cache.append(item)
226 226 if len(cache)>i:
227 227 cache.popleft()
228 228 if len(cache)==i:
229 229 return cache.popleft()
230 230 if default is noitem:
231 231 raise IndexError(index)
232 232 else:
233 233 return default
234 234
235 235
236 236 def getglobals(g):
237 237 """
238 238 Return the global namespace that is used for expression strings in
239 239 ``ifilter`` and others. This is ``g`` or (if ``g`` is ``None``) IPython's
240 240 user namespace.
241 241 """
242 242 if g is None:
243 243 if ipapi is not None:
244 244 api = ipapi.get()
245 245 if api is not None:
246 246 return api.user_ns
247 247 return globals()
248 248 return g
249 249
250 250
251 251 class Descriptor(object):
252 252 """
253 253 A ``Descriptor`` object is used for describing the attributes of objects.
254 254 """
255 255 def __hash__(self):
256 256 return hash(self.__class__) ^ hash(self.key())
257 257
258 258 def __eq__(self, other):
259 259 return self.__class__ is other.__class__ and self.key() == other.key()
260 260
261 261 def __ne__(self, other):
262 262 return self.__class__ is not other.__class__ or self.key() != other.key()
263 263
264 264 def key(self):
265 265 pass
266 266
267 267 def name(self):
268 268 """
269 269 Return the name of this attribute for display by a ``Display`` object
270 270 (e.g. as a column title).
271 271 """
272 272 key = self.key()
273 273 if key is None:
274 274 return "_"
275 275 return str(key)
276 276
277 277 def attrtype(self, obj):
278 278 """
279 279 Return the type of this attribute (i.e. something like "attribute" or
280 280 "method").
281 281 """
282 282
283 283 def valuetype(self, obj):
284 284 """
285 285 Return the type of this attribute value of the object ``obj``.
286 286 """
287 287
288 288 def value(self, obj):
289 289 """
290 290 Return the value of this attribute of the object ``obj``.
291 291 """
292 292
293 293 def doc(self, obj):
294 294 """
295 295 Return the documentation for this attribute.
296 296 """
297 297
298 298 def shortdoc(self, obj):
299 299 """
300 300 Return a short documentation for this attribute (defaulting to the
301 301 first line).
302 302 """
303 303 doc = self.doc(obj)
304 304 if doc is not None:
305 305 doc = doc.strip().splitlines()[0].strip()
306 306 return doc
307 307
308 308 def iter(self, obj):
309 309 """
310 310 Return an iterator for this attribute of the object ``obj``.
311 311 """
312 312 return xiter(self.value(obj))
313 313
314 314
315 315 class SelfDescriptor(Descriptor):
316 316 """
317 317 A ``SelfDescriptor`` describes the object itself.
318 318 """
319 319 def key(self):
320 320 return None
321 321
322 322 def attrtype(self, obj):
323 323 return "self"
324 324
325 325 def valuetype(self, obj):
326 326 return type(obj)
327 327
328 328 def value(self, obj):
329 329 return obj
330 330
331 331 def __repr__(self):
332 332 return "Self"
333 333
334 334 selfdescriptor = SelfDescriptor() # there's no need for more than one
335 335
336 336
337 337 class AttributeDescriptor(Descriptor):
338 338 """
339 339 An ``AttributeDescriptor`` describes a simple attribute of an object.
340 340 """
341 341 __slots__ = ("_name", "_doc")
342 342
343 343 def __init__(self, name, doc=None):
344 344 self._name = name
345 345 self._doc = doc
346 346
347 347 def key(self):
348 348 return self._name
349 349
350 350 def doc(self, obj):
351 351 return self._doc
352 352
353 353 def attrtype(self, obj):
354 354 return "attr"
355 355
356 356 def valuetype(self, obj):
357 357 return type(getattr(obj, self._name))
358 358
359 359 def value(self, obj):
360 360 return getattr(obj, self._name)
361 361
362 362 def __repr__(self):
363 363 if self._doc is None:
364 364 return "Attribute(%r)" % self._name
365 365 else:
366 366 return "Attribute(%r, %r)" % (self._name, self._doc)
367 367
368 368
369 369 class IndexDescriptor(Descriptor):
370 370 """
371 371 An ``IndexDescriptor`` describes an "attribute" of an object that is fetched
372 372 via ``__getitem__``.
373 373 """
374 374 __slots__ = ("_index",)
375 375
376 376 def __init__(self, index):
377 377 self._index = index
378 378
379 379 def key(self):
380 380 return self._index
381 381
382 382 def attrtype(self, obj):
383 383 return "item"
384 384
385 385 def valuetype(self, obj):
386 386 return type(obj[self._index])
387 387
388 388 def value(self, obj):
389 389 return obj[self._index]
390 390
391 391 def __repr__(self):
392 392 return "Index(%r)" % self._index
393 393
394 394
395 395 class MethodDescriptor(Descriptor):
396 396 """
397 397 A ``MethodDescriptor`` describes a method of an object that can be called
398 398 without argument. Note that this method shouldn't change the object.
399 399 """
400 400 __slots__ = ("_name", "_doc")
401 401
402 402 def __init__(self, name, doc=None):
403 403 self._name = name
404 404 self._doc = doc
405 405
406 406 def key(self):
407 407 return self._name
408 408
409 409 def doc(self, obj):
410 410 if self._doc is None:
411 411 return getattr(obj, self._name).__doc__
412 412 return self._doc
413 413
414 414 def attrtype(self, obj):
415 415 return "method"
416 416
417 417 def valuetype(self, obj):
418 418 return type(self.value(obj))
419 419
420 420 def value(self, obj):
421 421 return getattr(obj, self._name)()
422 422
423 423 def __repr__(self):
424 424 if self._doc is None:
425 425 return "Method(%r)" % self._name
426 426 else:
427 427 return "Method(%r, %r)" % (self._name, self._doc)
428 428
429 429
430 430 class IterAttributeDescriptor(Descriptor):
431 431 """
432 432 An ``IterAttributeDescriptor`` works like an ``AttributeDescriptor`` but
433 433 doesn't return an attribute values (because this value might be e.g. a large
434 434 list).
435 435 """
436 436 __slots__ = ("_name", "_doc")
437 437
438 438 def __init__(self, name, doc=None):
439 439 self._name = name
440 440 self._doc = doc
441 441
442 442 def key(self):
443 443 return self._name
444 444
445 445 def doc(self, obj):
446 446 return self._doc
447 447
448 448 def attrtype(self, obj):
449 449 return "iter"
450 450
451 451 def valuetype(self, obj):
452 452 return noitem
453 453
454 454 def value(self, obj):
455 455 return noitem
456 456
457 457 def iter(self, obj):
458 458 return xiter(getattr(obj, self._name))
459 459
460 460 def __repr__(self):
461 461 if self._doc is None:
462 462 return "IterAttribute(%r)" % self._name
463 463 else:
464 464 return "IterAttribute(%r, %r)" % (self._name, self._doc)
465 465
466 466
467 467 class IterMethodDescriptor(Descriptor):
468 468 """
469 469 An ``IterMethodDescriptor`` works like an ``MethodDescriptor`` but doesn't
470 470 return an attribute values (because this value might be e.g. a large list).
471 471 """
472 472 __slots__ = ("_name", "_doc")
473 473
474 474 def __init__(self, name, doc=None):
475 475 self._name = name
476 476 self._doc = doc
477 477
478 478 def key(self):
479 479 return self._name
480 480
481 481 def doc(self, obj):
482 482 if self._doc is None:
483 483 return getattr(obj, self._name).__doc__
484 484 return self._doc
485 485
486 486 def attrtype(self, obj):
487 487 return "itermethod"
488 488
489 489 def valuetype(self, obj):
490 490 return noitem
491 491
492 492 def value(self, obj):
493 493 return noitem
494 494
495 495 def iter(self, obj):
496 496 return xiter(getattr(obj, self._name)())
497 497
498 498 def __repr__(self):
499 499 if self._doc is None:
500 500 return "IterMethod(%r)" % self._name
501 501 else:
502 502 return "IterMethod(%r, %r)" % (self._name, self._doc)
503 503
504 504
505 505 class FunctionDescriptor(Descriptor):
506 506 """
507 507 A ``FunctionDescriptor`` turns a function into a descriptor. The function
508 508 will be called with the object to get the type and value of the attribute.
509 509 """
510 510 __slots__ = ("_function", "_name", "_doc")
511 511
512 512 def __init__(self, function, name=None, doc=None):
513 513 self._function = function
514 514 self._name = name
515 515 self._doc = doc
516 516
517 517 def key(self):
518 518 return self._function
519 519
520 520 def name(self):
521 521 if self._name is not None:
522 522 return self._name
523 523 return getattr(self._function, "__xname__", self._function.__name__)
524 524
525 525 def doc(self, obj):
526 526 if self._doc is None:
527 527 return self._function.__doc__
528 528 return self._doc
529 529
530 530 def attrtype(self, obj):
531 531 return "function"
532 532
533 533 def valuetype(self, obj):
534 534 return type(self._function(obj))
535 535
536 536 def value(self, obj):
537 537 return self._function(obj)
538 538
539 539 def __repr__(self):
540 540 if self._doc is None:
541 541 return "Function(%r)" % self._name
542 542 else:
543 543 return "Function(%r, %r)" % (self._name, self._doc)
544 544
545 545
546 546 class Table(object):
547 547 """
548 548 A ``Table`` is an object that produces items (just like a normal Python
549 549 iterator/generator does) and can be used as the first object in a pipeline
550 550 expression. The displayhook will open the default browser for such an object
551 551 (instead of simply printing the ``repr()`` result).
552 552 """
553 553
554 554 # We want to support ``foo`` and ``foo()`` in pipeline expression:
555 555 # So we implement the required operators (``|`` and ``+``) in the metaclass,
556 556 # instantiate the class and forward the operator to the instance
557 557 class __metaclass__(type):
558 558 def __iter__(self):
559 559 return iter(self())
560 560
561 561 def __or__(self, other):
562 562 return self() | other
563 563
564 564 def __add__(self, other):
565 565 return self() + other
566 566
567 567 def __radd__(self, other):
568 568 return other + self()
569 569
570 570 def __getitem__(self, index):
571 571 return self()[index]
572 572
573 573 def __getitem__(self, index):
574 574 return item(self, index)
575 575
576 576 def __contains__(self, item):
577 577 for haveitem in self:
578 578 if item == haveitem:
579 579 return True
580 580 return False
581 581
582 582 def __or__(self, other):
583 583 # autoinstantiate right hand side
584 584 if isinstance(other, type) and issubclass(other, (Table, Display)):
585 585 other = other()
586 586 # treat simple strings and functions as ``ieval`` instances
587 587 elif not isinstance(other, Display) and not isinstance(other, Table):
588 588 other = ieval(other)
589 589 # forward operations to the right hand side
590 590 return other.__ror__(self)
591 591
592 592 def __add__(self, other):
593 593 # autoinstantiate right hand side
594 594 if isinstance(other, type) and issubclass(other, Table):
595 595 other = other()
596 596 return ichain(self, other)
597 597
598 598 def __radd__(self, other):
599 599 # autoinstantiate left hand side
600 600 if isinstance(other, type) and issubclass(other, Table):
601 601 other = other()
602 602 return ichain(other, self)
603 603
604 604
605 605 class Pipe(Table):
606 606 """
607 607 A ``Pipe`` is an object that can be used in a pipeline expression. It
608 608 processes the objects it gets from its input ``Table``/``Pipe``. Note that
609 609 a ``Pipe`` object can't be used as the first object in a pipeline
610 610 expression, as it doesn't produces items itself.
611 611 """
612 612 class __metaclass__(Table.__metaclass__):
613 613 def __ror__(self, input):
614 614 return input | self()
615 615
616 616 def __ror__(self, input):
617 617 # autoinstantiate left hand side
618 618 if isinstance(input, type) and issubclass(input, Table):
619 619 input = input()
620 620 self.input = input
621 621 return self
622 622
623 623
624 624 def xrepr(item, mode="default"):
625 625 """
626 626 Generic function that adds color output and different display modes to ``repr``.
627 627
628 628 The result of an ``xrepr`` call is iterable and consists of ``(style, string)``
629 629 tuples. The ``style`` in this tuple must be a ``Style`` object from the
630 630 ``astring`` module. To reconfigure the output the first yielded tuple can be
631 631 a ``(aligment, full)`` tuple instead of a ``(style, string)`` tuple.
632 632 ``alignment`` can be -1 for left aligned, 0 for centered and 1 for right
633 633 aligned (the default is left alignment). ``full`` is a boolean that specifies
634 634 whether the complete output must be displayed or the ``Display`` object is
635 635 allowed to stop output after enough text has been produced (e.g. a syntax
636 636 highlighted text line would use ``True``, but for a large data structure
637 637 (i.e. a nested list, tuple or dictionary) ``False`` would be used).
638 638 The default is full output.
639 639
640 640 There are four different possible values for ``mode`` depending on where
641 641 the ``Display`` object will display ``item``:
642 642
643 643 ``"header"``
644 644 ``item`` will be displayed in a header line (this is used by ``ibrowse``).
645 645
646 646 ``"footer"``
647 647 ``item`` will be displayed in a footer line (this is used by ``ibrowse``).
648 648
649 649 ``"cell"``
650 650 ``item`` will be displayed in a table cell/list.
651 651
652 652 ``"default"``
653 653 default mode. If an ``xrepr`` implementation recursively outputs objects,
654 654 ``"default"`` must be passed in the recursive calls to ``xrepr``.
655 655
656 656 If no implementation is registered for ``item``, ``xrepr`` will try the
657 657 ``__xrepr__`` method on ``item``. If ``item`` doesn't have an ``__xrepr__``
658 658 method it falls back to ``repr``/``__repr__`` for all modes.
659 659 """
660 660 try:
661 661 func = item.__xrepr__
662 662 except AttributeError:
663 663 yield (astyle.style_default, repr(item))
664 664 else:
665 665 try:
666 666 for x in func(mode):
667 667 yield x
668 668 except (KeyboardInterrupt, SystemExit):
669 669 raise
670 670 except Exception:
671 671 yield (astyle.style_default, repr(item))
672 672 xrepr = simplegeneric.generic(xrepr)
673 673
674 674
675 675 def xrepr_none(self, mode="default"):
676 676 yield (astyle.style_type_none, repr(self))
677 677 xrepr.when_object(None)(xrepr_none)
678 678
679 679
680 680 def xrepr_noitem(self, mode="default"):
681 681 yield (2, True)
682 682 yield (astyle.style_nodata, "<?>")
683 683 xrepr.when_object(noitem)(xrepr_noitem)
684 684
685 685
686 686 def xrepr_bool(self, mode="default"):
687 687 yield (astyle.style_type_bool, repr(self))
688 688 xrepr.when_type(bool)(xrepr_bool)
689 689
690 690
691 691 def xrepr_str(self, mode="default"):
692 692 if mode == "cell":
693 693 yield (astyle.style_default, repr(self.expandtabs(tab))[1:-1])
694 694 else:
695 695 yield (astyle.style_default, repr(self))
696 696 xrepr.when_type(str)(xrepr_str)
697 697
698 698
699 699 def xrepr_unicode(self, mode="default"):
700 700 if mode == "cell":
701 701 yield (astyle.style_default, repr(self.expandtabs(tab))[2:-1])
702 702 else:
703 703 yield (astyle.style_default, repr(self))
704 704 xrepr.when_type(unicode)(xrepr_unicode)
705 705
706 706
707 707 def xrepr_number(self, mode="default"):
708 708 yield (1, True)
709 709 yield (astyle.style_type_number, repr(self))
710 710 xrepr.when_type(int)(xrepr_number)
711 711 xrepr.when_type(long)(xrepr_number)
712 712 xrepr.when_type(float)(xrepr_number)
713 713
714 714
715 715 def xrepr_complex(self, mode="default"):
716 716 yield (astyle.style_type_number, repr(self))
717 717 xrepr.when_type(complex)(xrepr_number)
718 718
719 719
720 720 def xrepr_datetime(self, mode="default"):
721 721 if mode == "cell":
722 722 # Don't use strftime() here, as this requires year >= 1900
723 723 yield (astyle.style_type_datetime,
724 724 "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
725 725 (self.year, self.month, self.day,
726 726 self.hour, self.minute, self.second,
727 727 self.microsecond),
728 728 )
729 729 else:
730 730 yield (astyle.style_type_datetime, repr(self))
731 731 xrepr.when_type(datetime.datetime)(xrepr_datetime)
732 732
733 733
734 734 def xrepr_date(self, mode="default"):
735 735 if mode == "cell":
736 736 yield (astyle.style_type_datetime,
737 737 "%04d-%02d-%02d" % (self.year, self.month, self.day))
738 738 else:
739 739 yield (astyle.style_type_datetime, repr(self))
740 740 xrepr.when_type(datetime.date)(xrepr_date)
741 741
742 742
743 743 def xrepr_time(self, mode="default"):
744 744 if mode == "cell":
745 745 yield (astyle.style_type_datetime,
746 746 "%02d:%02d:%02d.%06d" % \
747 747 (self.hour, self.minute, self.second, self.microsecond))
748 748 else:
749 749 yield (astyle.style_type_datetime, repr(self))
750 750 xrepr.when_type(datetime.time)(xrepr_time)
751 751
752 752
753 753 def xrepr_timedelta(self, mode="default"):
754 754 yield (astyle.style_type_datetime, repr(self))
755 755 xrepr.when_type(datetime.timedelta)(xrepr_timedelta)
756 756
757 757
758 758 def xrepr_type(self, mode="default"):
759 759 if self.__module__ == "__builtin__":
760 760 yield (astyle.style_type_type, self.__name__)
761 761 else:
762 762 yield (astyle.style_type_type, "%s.%s" % (self.__module__, self.__name__))
763 763 xrepr.when_type(type)(xrepr_type)
764 764
765 765
766 766 def xrepr_exception(self, mode="default"):
767 767 if self.__class__.__module__ == "exceptions":
768 768 classname = self.__class__.__name__
769 769 else:
770 770 classname = "%s.%s" % \
771 771 (self.__class__.__module__, self.__class__.__name__)
772 772 if mode == "header" or mode == "footer":
773 773 yield (astyle.style_error, "%s: %s" % (classname, self))
774 774 else:
775 775 yield (astyle.style_error, classname)
776 776 xrepr.when_type(Exception)(xrepr_exception)
777 777
778 778
779 779 def xrepr_listtuple(self, mode="default"):
780 780 if mode == "header" or mode == "footer":
781 781 if self.__class__.__module__ == "__builtin__":
782 782 classname = self.__class__.__name__
783 783 else:
784 784 classname = "%s.%s" % \
785 785 (self.__class__.__module__,self.__class__.__name__)
786 786 yield (astyle.style_default,
787 787 "<%s object with %d items at 0x%x>" % \
788 788 (classname, len(self), id(self)))
789 789 else:
790 790 yield (-1, False)
791 791 if isinstance(self, list):
792 792 yield (astyle.style_default, "[")
793 793 end = "]"
794 794 else:
795 795 yield (astyle.style_default, "(")
796 796 end = ")"
797 797 for (i, subself) in enumerate(self):
798 798 if i:
799 799 yield (astyle.style_default, ", ")
800 800 for part in xrepr(subself, "default"):
801 801 yield part
802 802 yield (astyle.style_default, end)
803 803 xrepr.when_type(list)(xrepr_listtuple)
804 804 xrepr.when_type(tuple)(xrepr_listtuple)
805 805
806 806
807 807 def xrepr_dict(self, mode="default"):
808 808 if mode == "header" or mode == "footer":
809 809 if self.__class__.__module__ == "__builtin__":
810 810 classname = self.__class__.__name__
811 811 else:
812 812 classname = "%s.%s" % \
813 813 (self.__class__.__module__,self.__class__.__name__)
814 814 yield (astyle.style_default,
815 815 "<%s object with %d items at 0x%x>" % \
816 816 (classname, len(self), id(self)))
817 817 else:
818 818 yield (-1, False)
819 819 if isinstance(self, dict):
820 820 yield (astyle.style_default, "{")
821 821 end = "}"
822 822 else:
823 823 yield (astyle.style_default, "dictproxy((")
824 824 end = "})"
825 825 for (i, (key, value)) in enumerate(self.iteritems()):
826 826 if i:
827 827 yield (astyle.style_default, ", ")
828 828 for part in xrepr(key, "default"):
829 829 yield part
830 830 yield (astyle.style_default, ": ")
831 831 for part in xrepr(value, "default"):
832 832 yield part
833 833 yield (astyle.style_default, end)
834 834 xrepr.when_type(dict)(xrepr_dict)
835 835 xrepr.when_type(types.DictProxyType)(xrepr_dict)
836 836
837 837
838 838 def upgradexattr(attr):
839 839 """
840 840 Convert an attribute descriptor string to a real descriptor object.
841 841
842 842 If attr already is a descriptor object return if unmodified. A
843 843 ``SelfDescriptor`` will be returned if ``attr`` is ``None``. ``"foo"``
844 844 returns an ``AttributeDescriptor`` for the attribute named ``"foo"``.
845 845 ``"foo()"`` returns a ``MethodDescriptor`` for the method named ``"foo"``.
846 846 ``"-foo"`` will return an ``IterAttributeDescriptor`` for the attribute
847 847 named ``"foo"`` and ``"-foo()"`` will return an ``IterMethodDescriptor``
848 848 for the method named ``"foo"``. Furthermore integer will return the appropriate
849 849 ``IndexDescriptor`` and callables will return a ``FunctionDescriptor``.
850 850 """
851 851 if attr is None:
852 852 return selfdescriptor
853 853 elif isinstance(attr, Descriptor):
854 854 return attr
855 855 elif isinstance(attr, str):
856 856 if attr.endswith("()"):
857 857 if attr.startswith("-"):
858 858 return IterMethodDescriptor(attr[1:-2])
859 859 else:
860 860 return MethodDescriptor(attr[:-2])
861 861 else:
862 862 if attr.startswith("-"):
863 863 return IterAttributeDescriptor(attr[1:])
864 864 else:
865 865 return AttributeDescriptor(attr)
866 866 elif isinstance(attr, (int, long)):
867 867 return IndexDescriptor(attr)
868 868 elif callable(attr):
869 869 return FunctionDescriptor(attr)
870 870 else:
871 871 raise TypeError("can't handle descriptor %r" % attr)
872 872
873 873
874 874 def xattrs(item, mode="default"):
875 875 """
876 876 Generic function that returns an iterable of attribute descriptors
877 877 to be used for displaying the attributes ob the object ``item`` in display
878 878 mode ``mode``.
879 879
880 880 There are two possible modes:
881 881
882 882 ``"detail"``
883 883 The ``Display`` object wants to display a detailed list of the object
884 884 attributes.
885 885
886 886 ``"default"``
887 887 The ``Display`` object wants to display the object in a list view.
888 888
889 889 If no implementation is registered for the object ``item`` ``xattrs`` falls
890 890 back to trying the ``__xattrs__`` method of the object. If this doesn't
891 891 exist either, ``dir(item)`` is used for ``"detail"`` mode and ``(None,)``
892 892 for ``"default"`` mode.
893 893
894 894 The implementation must yield attribute descriptors (see the class
895 895 ``Descriptor`` for more info). The ``__xattrs__`` method may also return
896 896 attribute descriptor strings (and ``None``) which will be converted to real
897 897 descriptors by ``upgradexattr()``.
898 898 """
899 899 try:
900 900 func = item.__xattrs__
901 901 except AttributeError:
902 902 if mode == "detail":
903 903 for attrname in dir(item):
904 904 yield AttributeDescriptor(attrname)
905 905 else:
906 906 yield selfdescriptor
907 907 else:
908 908 for attr in func(mode):
909 909 yield upgradexattr(attr)
910 910 xattrs = simplegeneric.generic(xattrs)
911 911
912 912
913 913 def xattrs_complex(self, mode="default"):
914 914 if mode == "detail":
915 915 return (AttributeDescriptor("real"), AttributeDescriptor("imag"))
916 916 return (selfdescriptor,)
917 917 xattrs.when_type(complex)(xattrs_complex)
918 918
919 919
920 920 def _isdict(item):
921 921 try:
922 922 itermeth = item.__class__.__iter__
923 923 except (AttributeError, TypeError):
924 924 return False
925 925 return itermeth is dict.__iter__ or itermeth is types.DictProxyType.__iter__
926 926
927 927
928 928 def _isstr(item):
929 929 if not isinstance(item, basestring):
930 930 return False
931 931 try:
932 932 itermeth = item.__class__.__iter__
933 933 except AttributeError:
934 934 return True
935 935 return False # ``__iter__`` has been redefined
936 936
937 937
938 938 def xiter(item):
939 939 """
940 940 Generic function that implements iteration for pipeline expression. If no
941 941 implementation is registered for ``item`` ``xiter`` falls back to ``iter``.
942 942 """
943 943 try:
944 944 func = item.__xiter__
945 945 except AttributeError:
946 946 if _isdict(item):
947 947 def items(item):
948 948 fields = ("key", "value")
949 949 for (key, value) in item.iteritems():
950 950 yield Fields(fields, key=key, value=value)
951 951 return items(item)
952 952 elif isinstance(item, new.module):
953 953 def items(item):
954 954 fields = ("key", "value")
955 955 for key in sorted(item.__dict__):
956 956 yield Fields(fields, key=key, value=getattr(item, key))
957 957 return items(item)
958 958 elif _isstr(item):
959 959 if not item:
960 960 raise ValueError("can't enter empty string")
961 961 lines = item.splitlines()
962 962 if len(lines) == 1:
963 963 def iterone(item):
964 964 yield item
965 965 return iterone(item)
966 966 else:
967 967 return iter(lines)
968 968 return iter(item)
969 969 else:
970 970 return iter(func()) # iter() just to be safe
971 971 xiter = simplegeneric.generic(xiter)
972 972
973 973
974 974 class ichain(Pipe):
975 975 """
976 976 Chains multiple ``Table``s into one.
977 977 """
978 978
979 979 def __init__(self, *iters):
980 980 self.iters = iters
981 981
982 982 def __iter__(self):
983 983 return itertools.chain(*self.iters)
984 984
985 985 def __xrepr__(self, mode="default"):
986 986 if mode == "header" or mode == "footer":
987 987 for (i, item) in enumerate(self.iters):
988 988 if i:
989 989 yield (astyle.style_default, "+")
990 990 if isinstance(item, Pipe):
991 991 yield (astyle.style_default, "(")
992 992 for part in xrepr(item, mode):
993 993 yield part
994 994 if isinstance(item, Pipe):
995 995 yield (astyle.style_default, ")")
996 996 else:
997 997 yield (astyle.style_default, repr(self))
998 998
999 999 def __repr__(self):
1000 1000 args = ", ".join([repr(it) for it in self.iters])
1001 1001 return "%s.%s(%s)" % \
1002 1002 (self.__class__.__module__, self.__class__.__name__, args)
1003 1003
1004 1004
1005 1005 class ifile(path.path):
1006 1006 """
1007 1007 file (or directory) object.
1008 1008 """
1009 1009
1010 1010 def getmode(self):
1011 1011 return self.stat().st_mode
1012 1012 mode = property(getmode, None, None, "Access mode")
1013 1013
1014 1014 def gettype(self):
1015 1015 data = [
1016 1016 (stat.S_ISREG, "file"),
1017 1017 (stat.S_ISDIR, "dir"),
1018 1018 (stat.S_ISCHR, "chardev"),
1019 1019 (stat.S_ISBLK, "blockdev"),
1020 1020 (stat.S_ISFIFO, "fifo"),
1021 1021 (stat.S_ISLNK, "symlink"),
1022 1022 (stat.S_ISSOCK,"socket"),
1023 1023 ]
1024 1024 lstat = self.lstat()
1025 1025 if lstat is not None:
1026 1026 types = set([text for (func, text) in data if func(lstat.st_mode)])
1027 1027 else:
1028 1028 types = set()
1029 1029 m = self.mode
1030 1030 types.update([text for (func, text) in data if func(m)])
1031 1031 return ", ".join(types)
1032 1032 type = property(gettype, None, None, "file type (file, directory, link, etc.)")
1033 1033
1034 1034 def getmodestr(self):
1035 1035 m = self.mode
1036 1036 data = [
1037 1037 (stat.S_IRUSR, "-r"),
1038 1038 (stat.S_IWUSR, "-w"),
1039 1039 (stat.S_IXUSR, "-x"),
1040 1040 (stat.S_IRGRP, "-r"),
1041 1041 (stat.S_IWGRP, "-w"),
1042 1042 (stat.S_IXGRP, "-x"),
1043 1043 (stat.S_IROTH, "-r"),
1044 1044 (stat.S_IWOTH, "-w"),
1045 1045 (stat.S_IXOTH, "-x"),
1046 1046 ]
1047 1047 return "".join([text[bool(m&bit)] for (bit, text) in data])
1048 1048
1049 1049 modestr = property(getmodestr, None, None, "Access mode as string")
1050 1050
1051 1051 def getblocks(self):
1052 1052 return self.stat().st_blocks
1053 1053 blocks = property(getblocks, None, None, "File size in blocks")
1054 1054
1055 1055 def getblksize(self):
1056 1056 return self.stat().st_blksize
1057 1057 blksize = property(getblksize, None, None, "Filesystem block size")
1058 1058
1059 1059 def getdev(self):
1060 1060 return self.stat().st_dev
1061 1061 dev = property(getdev)
1062 1062
1063 1063 def getnlink(self):
1064 1064 return self.stat().st_nlink
1065 1065 nlink = property(getnlink, None, None, "Number of links")
1066 1066
1067 1067 def getuid(self):
1068 1068 return self.stat().st_uid
1069 1069 uid = property(getuid, None, None, "User id of file owner")
1070 1070
1071 1071 def getgid(self):
1072 1072 return self.stat().st_gid
1073 1073 gid = property(getgid, None, None, "Group id of file owner")
1074 1074
1075 1075 def getowner(self):
1076 1076 stat = self.stat()
1077 1077 try:
1078 1078 return pwd.getpwuid(stat.st_uid).pw_name
1079 1079 except KeyError:
1080 1080 return stat.st_uid
1081 1081 owner = property(getowner, None, None, "Owner name (or id)")
1082 1082
1083 1083 def getgroup(self):
1084 1084 stat = self.stat()
1085 1085 try:
1086 1086 return grp.getgrgid(stat.st_gid).gr_name
1087 1087 except KeyError:
1088 1088 return stat.st_gid
1089 1089 group = property(getgroup, None, None, "Group name (or id)")
1090 1090
1091 1091 def getadate(self):
1092 1092 return datetime.datetime.utcfromtimestamp(self.atime)
1093 1093 adate = property(getadate, None, None, "Access date")
1094 1094
1095 1095 def getcdate(self):
1096 1096 return datetime.datetime.utcfromtimestamp(self.ctime)
1097 1097 cdate = property(getcdate, None, None, "Creation date")
1098 1098
1099 1099 def getmdate(self):
1100 1100 return datetime.datetime.utcfromtimestamp(self.mtime)
1101 1101 mdate = property(getmdate, None, None, "Modification date")
1102 1102
1103 1103 def mimetype(self):
1104 1104 """
1105 1105 Return MIME type guessed from the extension.
1106 1106 """
1107 1107 return mimetypes.guess_type(self.basename())[0]
1108 1108
1109 1109 def encoding(self):
1110 1110 """
1111 1111 Return guessed compression (like "compress" or "gzip").
1112 1112 """
1113 1113 return mimetypes.guess_type(self.basename())[1]
1114 1114
1115 1115 def __repr__(self):
1116 1116 return "ifile(%s)" % path._base.__repr__(self)
1117 1117
1118 1118 if sys.platform == "win32":
1119 1119 defaultattrs = (None, "type", "size", "modestr", "mdate")
1120 1120 else:
1121 1121 defaultattrs = (None, "type", "size", "modestr", "owner", "group", "mdate")
1122 1122
1123 1123 def __xattrs__(self, mode="default"):
1124 1124 if mode == "detail":
1125 1125 return (
1126 1126 "name",
1127 1127 "basename()",
1128 1128 "abspath()",
1129 1129 "realpath()",
1130 1130 "type",
1131 1131 "mode",
1132 1132 "modestr",
1133 1133 "stat()",
1134 1134 "lstat()",
1135 1135 "uid",
1136 1136 "gid",
1137 1137 "owner",
1138 1138 "group",
1139 1139 "dev",
1140 1140 "nlink",
1141 1141 "ctime",
1142 1142 "mtime",
1143 1143 "atime",
1144 1144 "cdate",
1145 1145 "mdate",
1146 1146 "adate",
1147 1147 "size",
1148 1148 "blocks",
1149 1149 "blksize",
1150 1150 "isdir()",
1151 1151 "islink()",
1152 1152 "mimetype()",
1153 1153 "encoding()",
1154 1154 "-listdir()",
1155 1155 "-dirs()",
1156 1156 "-files()",
1157 1157 "-walk()",
1158 1158 "-walkdirs()",
1159 1159 "-walkfiles()",
1160 1160 )
1161 1161 else:
1162 1162 return self.defaultattrs
1163 1163
1164 1164
1165 1165 def xiter_ifile(self):
1166 1166 if self.isdir():
1167 1167 yield (self / os.pardir).abspath()
1168 1168 for child in sorted(self.listdir()):
1169 1169 yield child
1170 1170 else:
1171 1171 f = self.open("rb")
1172 1172 for line in f:
1173 1173 yield line
1174 1174 f.close()
1175 1175 xiter.when_type(ifile)(xiter_ifile)
1176 1176
1177 1177
1178 1178 # We need to implement ``xrepr`` for ``ifile`` as a generic function, because
1179 1179 # otherwise ``xrepr_str`` would kick in.
1180 1180 def xrepr_ifile(self, mode="default"):
1181 1181 try:
1182 1182 if self.isdir():
1183 1183 name = "idir"
1184 1184 style = astyle.style_dir
1185 1185 else:
1186 1186 name = "ifile"
1187 1187 style = astyle.style_file
1188 1188 except IOError:
1189 1189 name = "ifile"
1190 1190 style = astyle.style_default
1191 1191 if mode in ("cell", "header", "footer"):
1192 1192 abspath = repr(path._base(self.normpath()))
1193 1193 if abspath.startswith("u"):
1194 1194 abspath = abspath[2:-1]
1195 1195 else:
1196 1196 abspath = abspath[1:-1]
1197 1197 if mode == "cell":
1198 1198 yield (style, abspath)
1199 1199 else:
1200 1200 yield (style, "%s(%s)" % (name, abspath))
1201 1201 else:
1202 1202 yield (style, repr(self))
1203 1203 xrepr.when_type(ifile)(xrepr_ifile)
1204 1204
1205 1205
1206 1206 class ils(Table):
1207 1207 """
1208 1208 List the current (or a specified) directory.
1209 1209
1210 1210 Examples::
1211 1211
1212 1212 >>> ils
1213 1213 >>> ils("/usr/local/lib/python2.4")
1214 1214 >>> ils("~")
1215 1215 """
1216 1216 def __init__(self, base=os.curdir, dirs=True, files=True):
1217 1217 self.base = os.path.expanduser(base)
1218 1218 self.dirs = dirs
1219 1219 self.files = files
1220 1220
1221 1221 def __iter__(self):
1222 1222 base = ifile(self.base)
1223 1223 yield (base / os.pardir).abspath()
1224 1224 for child in sorted(base.listdir()):
1225 1225 if self.dirs:
1226 1226 if self.files:
1227 1227 yield child
1228 1228 else:
1229 1229 if child.isdir():
1230 1230 yield child
1231 1231 elif self.files:
1232 1232 if not child.isdir():
1233 1233 yield child
1234 1234
1235 1235 def __xrepr__(self, mode="default"):
1236 1236 return xrepr(ifile(self.base), mode)
1237 1237
1238 1238 def __repr__(self):
1239 1239 return "%s.%s(%r)" % \
1240 1240 (self.__class__.__module__, self.__class__.__name__, self.base)
1241 1241
1242 1242
1243 1243 class iglob(Table):
1244 1244 """
1245 1245 List all files and directories matching a specified pattern.
1246 1246 (See ``glob.glob()`` for more info.).
1247 1247
1248 1248 Examples::
1249 1249
1250 1250 >>> iglob("*.py")
1251 1251 """
1252 1252 def __init__(self, glob):
1253 1253 self.glob = glob
1254 1254
1255 1255 def __iter__(self):
1256 1256 for name in glob.glob(self.glob):
1257 1257 yield ifile(name)
1258 1258
1259 1259 def __xrepr__(self, mode="default"):
1260 1260 if mode == "header" or mode == "footer" or mode == "cell":
1261 1261 yield (astyle.style_default,
1262 1262 "%s(%r)" % (self.__class__.__name__, self.glob))
1263 1263 else:
1264 1264 yield (astyle.style_default, repr(self))
1265 1265
1266 1266 def __repr__(self):
1267 1267 return "%s.%s(%r)" % \
1268 1268 (self.__class__.__module__, self.__class__.__name__, self.glob)
1269 1269
1270 1270
1271 1271 class iwalk(Table):
1272 1272 """
1273 1273 List all files and directories in a directory and it's subdirectory::
1274 1274
1275 1275 >>> iwalk
1276 1276 >>> iwalk("/usr/local/lib/python2.4")
1277 1277 >>> iwalk("~")
1278 1278 """
1279 1279 def __init__(self, base=os.curdir, dirs=True, files=True):
1280 1280 self.base = os.path.expanduser(base)
1281 1281 self.dirs = dirs
1282 1282 self.files = files
1283 1283
1284 1284 def __iter__(self):
1285 1285 for (dirpath, dirnames, filenames) in os.walk(self.base):
1286 1286 if self.dirs:
1287 1287 for name in sorted(dirnames):
1288 1288 yield ifile(os.path.join(dirpath, name))
1289 1289 if self.files:
1290 1290 for name in sorted(filenames):
1291 1291 yield ifile(os.path.join(dirpath, name))
1292 1292
1293 1293 def __xrepr__(self, mode="default"):
1294 1294 if mode == "header" or mode == "footer" or mode == "cell":
1295 1295 yield (astyle.style_default,
1296 1296 "%s(%r)" % (self.__class__.__name__, self.base))
1297 1297 else:
1298 1298 yield (astyle.style_default, repr(self))
1299 1299
1300 1300 def __repr__(self):
1301 1301 return "%s.%s(%r)" % \
1302 1302 (self.__class__.__module__, self.__class__.__name__, self.base)
1303 1303
1304 1304
1305 1305 class ipwdentry(object):
1306 1306 """
1307 1307 ``ipwdentry`` objects encapsulate entries in the Unix user account and
1308 1308 password database.
1309 1309 """
1310 1310 def __init__(self, id):
1311 1311 self._id = id
1312 1312 self._entry = None
1313 1313
1314 1314 def __eq__(self, other):
1315 1315 return self.__class__ is other.__class__ and self._id == other._id
1316 1316
1317 1317 def __ne__(self, other):
1318 1318 return self.__class__ is not other.__class__ or self._id != other._id
1319 1319
1320 1320 def _getentry(self):
1321 1321 if self._entry is None:
1322 1322 if isinstance(self._id, basestring):
1323 1323 self._entry = pwd.getpwnam(self._id)
1324 1324 else:
1325 1325 self._entry = pwd.getpwuid(self._id)
1326 1326 return self._entry
1327 1327
1328 1328 def getname(self):
1329 1329 if isinstance(self._id, basestring):
1330 1330 return self._id
1331 1331 else:
1332 1332 return self._getentry().pw_name
1333 1333 name = property(getname, None, None, "User name")
1334 1334
1335 1335 def getpasswd(self):
1336 1336 return self._getentry().pw_passwd
1337 1337 passwd = property(getpasswd, None, None, "Password")
1338 1338
1339 1339 def getuid(self):
1340 1340 if isinstance(self._id, basestring):
1341 1341 return self._getentry().pw_uid
1342 1342 else:
1343 1343 return self._id
1344 1344 uid = property(getuid, None, None, "User id")
1345 1345
1346 1346 def getgid(self):
1347 1347 return self._getentry().pw_gid
1348 1348 gid = property(getgid, None, None, "Primary group id")
1349 1349
1350 1350 def getgroup(self):
1351 1351 return igrpentry(self.gid)
1352 1352 group = property(getgroup, None, None, "Group")
1353 1353
1354 1354 def getgecos(self):
1355 1355 return self._getentry().pw_gecos
1356 1356 gecos = property(getgecos, None, None, "Information (e.g. full user name)")
1357 1357
1358 1358 def getdir(self):
1359 1359 return self._getentry().pw_dir
1360 1360 dir = property(getdir, None, None, "$HOME directory")
1361 1361
1362 1362 def getshell(self):
1363 1363 return self._getentry().pw_shell
1364 1364 shell = property(getshell, None, None, "Login shell")
1365 1365
1366 1366 def __xattrs__(self, mode="default"):
1367 1367 return ("name", "passwd", "uid", "gid", "gecos", "dir", "shell")
1368 1368
1369 1369 def __repr__(self):
1370 1370 return "%s.%s(%r)" % \
1371 1371 (self.__class__.__module__, self.__class__.__name__, self._id)
1372 1372
1373 1373
1374 1374 class ipwd(Table):
1375 1375 """
1376 1376 List all entries in the Unix user account and password database.
1377 1377
1378 1378 Example::
1379 1379
1380 1380 >>> ipwd | isort("uid")
1381 1381 """
1382 1382 def __iter__(self):
1383 1383 for entry in pwd.getpwall():
1384 1384 yield ipwdentry(entry.pw_name)
1385 1385
1386 1386 def __xrepr__(self, mode="default"):
1387 1387 if mode == "header" or mode == "footer" or mode == "cell":
1388 1388 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1389 1389 else:
1390 1390 yield (astyle.style_default, repr(self))
1391 1391
1392 1392
1393 1393 class igrpentry(object):
1394 1394 """
1395 1395 ``igrpentry`` objects encapsulate entries in the Unix group database.
1396 1396 """
1397 1397 def __init__(self, id):
1398 1398 self._id = id
1399 1399 self._entry = None
1400 1400
1401 1401 def __eq__(self, other):
1402 1402 return self.__class__ is other.__class__ and self._id == other._id
1403 1403
1404 1404 def __ne__(self, other):
1405 1405 return self.__class__ is not other.__class__ or self._id != other._id
1406 1406
1407 1407 def _getentry(self):
1408 1408 if self._entry is None:
1409 1409 if isinstance(self._id, basestring):
1410 1410 self._entry = grp.getgrnam(self._id)
1411 1411 else:
1412 1412 self._entry = grp.getgrgid(self._id)
1413 1413 return self._entry
1414 1414
1415 1415 def getname(self):
1416 1416 if isinstance(self._id, basestring):
1417 1417 return self._id
1418 1418 else:
1419 1419 return self._getentry().gr_name
1420 1420 name = property(getname, None, None, "Group name")
1421 1421
1422 1422 def getpasswd(self):
1423 1423 return self._getentry().gr_passwd
1424 1424 passwd = property(getpasswd, None, None, "Password")
1425 1425
1426 1426 def getgid(self):
1427 1427 if isinstance(self._id, basestring):
1428 1428 return self._getentry().gr_gid
1429 1429 else:
1430 1430 return self._id
1431 1431 gid = property(getgid, None, None, "Group id")
1432 1432
1433 1433 def getmem(self):
1434 1434 return self._getentry().gr_mem
1435 1435 mem = property(getmem, None, None, "Members")
1436 1436
1437 1437 def __xattrs__(self, mode="default"):
1438 1438 return ("name", "passwd", "gid", "mem")
1439 1439
1440 1440 def __xrepr__(self, mode="default"):
1441 1441 if mode == "header" or mode == "footer" or mode == "cell":
1442 1442 yield (astyle.style_default, "group ")
1443 1443 try:
1444 1444 yield (astyle.style_default, self.name)
1445 1445 except KeyError:
1446 1446 if isinstance(self._id, basestring):
1447 1447 yield (astyle.style_default, self.name_id)
1448 1448 else:
1449 1449 yield (astyle.style_type_number, str(self._id))
1450 1450 else:
1451 1451 yield (astyle.style_default, repr(self))
1452 1452
1453 1453 def __iter__(self):
1454 1454 for member in self.mem:
1455 1455 yield ipwdentry(member)
1456 1456
1457 1457 def __repr__(self):
1458 1458 return "%s.%s(%r)" % \
1459 1459 (self.__class__.__module__, self.__class__.__name__, self._id)
1460 1460
1461 1461
1462 1462 class igrp(Table):
1463 1463 """
1464 1464 This ``Table`` lists all entries in the Unix group database.
1465 1465 """
1466 1466 def __iter__(self):
1467 1467 for entry in grp.getgrall():
1468 1468 yield igrpentry(entry.gr_name)
1469 1469
1470 1470 def __xrepr__(self, mode="default"):
1471 1471 if mode == "header" or mode == "footer":
1472 1472 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1473 1473 else:
1474 1474 yield (astyle.style_default, repr(self))
1475 1475
1476 1476
1477 1477 class Fields(object):
1478 1478 def __init__(self, fieldnames, **fields):
1479 1479 self.__fieldnames = [upgradexattr(fieldname) for fieldname in fieldnames]
1480 1480 for (key, value) in fields.iteritems():
1481 1481 setattr(self, key, value)
1482 1482
1483 1483 def __xattrs__(self, mode="default"):
1484 1484 return self.__fieldnames
1485 1485
1486 1486 def __xrepr__(self, mode="default"):
1487 1487 yield (-1, False)
1488 1488 if mode == "header" or mode == "cell":
1489 1489 yield (astyle.style_default, self.__class__.__name__)
1490 1490 yield (astyle.style_default, "(")
1491 1491 for (i, f) in enumerate(self.__fieldnames):
1492 1492 if i:
1493 1493 yield (astyle.style_default, ", ")
1494 1494 yield (astyle.style_default, f.name())
1495 1495 yield (astyle.style_default, "=")
1496 1496 for part in xrepr(getattr(self, f), "default"):
1497 1497 yield part
1498 1498 yield (astyle.style_default, ")")
1499 1499 elif mode == "footer":
1500 1500 yield (astyle.style_default, self.__class__.__name__)
1501 1501 yield (astyle.style_default, "(")
1502 1502 for (i, f) in enumerate(self.__fieldnames):
1503 1503 if i:
1504 1504 yield (astyle.style_default, ", ")
1505 1505 yield (astyle.style_default, f.name())
1506 1506 yield (astyle.style_default, ")")
1507 1507 else:
1508 1508 yield (astyle.style_default, repr(self))
1509 1509
1510 1510
1511 1511 class FieldTable(Table, list):
1512 1512 def __init__(self, *fields):
1513 1513 Table.__init__(self)
1514 1514 list.__init__(self)
1515 1515 self.fields = fields
1516 1516
1517 1517 def add(self, **fields):
1518 1518 self.append(Fields(self.fields, **fields))
1519 1519
1520 1520 def __xrepr__(self, mode="default"):
1521 1521 yield (-1, False)
1522 1522 if mode == "header" or mode == "footer":
1523 1523 yield (astyle.style_default, self.__class__.__name__)
1524 1524 yield (astyle.style_default, "(")
1525 1525 for (i, f) in enumerate(self.__fieldnames):
1526 1526 if i:
1527 1527 yield (astyle.style_default, ", ")
1528 1528 yield (astyle.style_default, f)
1529 1529 yield (astyle.style_default, ")")
1530 1530 else:
1531 1531 yield (astyle.style_default, repr(self))
1532 1532
1533 1533 def __repr__(self):
1534 1534 return "<%s.%s object with fields=%r at 0x%x>" % \
1535 1535 (self.__class__.__module__, self.__class__.__name__,
1536 1536 ", ".join(map(repr, self.fields)), id(self))
1537 1537
1538 1538
1539 1539 class List(list):
1540 1540 def __xattrs__(self, mode="default"):
1541 1541 return xrange(len(self))
1542 1542
1543 1543 def __xrepr__(self, mode="default"):
1544 1544 yield (-1, False)
1545 1545 if mode == "header" or mode == "cell" or mode == "footer" or mode == "default":
1546 1546 yield (astyle.style_default, self.__class__.__name__)
1547 1547 yield (astyle.style_default, "(")
1548 1548 for (i, item) in enumerate(self):
1549 1549 if i:
1550 1550 yield (astyle.style_default, ", ")
1551 1551 for part in xrepr(item, "default"):
1552 1552 yield part
1553 1553 yield (astyle.style_default, ")")
1554 1554 else:
1555 1555 yield (astyle.style_default, repr(self))
1556 1556
1557 1557
1558 1558 class ienv(Table):
1559 1559 """
1560 1560 List environment variables.
1561 1561
1562 1562 Example::
1563 1563
1564 1564 >>> ienv
1565 1565 """
1566 1566
1567 1567 def __iter__(self):
1568 1568 fields = ("key", "value")
1569 1569 for (key, value) in os.environ.iteritems():
1570 1570 yield Fields(fields, key=key, value=value)
1571 1571
1572 1572 def __xrepr__(self, mode="default"):
1573 1573 if mode == "header" or mode == "cell":
1574 1574 yield (astyle.style_default, "%s()" % self.__class__.__name__)
1575 1575 else:
1576 1576 yield (astyle.style_default, repr(self))
1577 1577
1578 1578
1579 1579 class ihist(Table):
1580 1580 """
1581 1581 IPython input history
1582 1582
1583 1583 Example::
1584 1584
1585 1585 >>> ihist
1586 1586 >>> ihist(True) (raw mode)
1587 1587 """
1588 1588 def __init__(self, raw=True):
1589 1589 self.raw = raw
1590 1590
1591 1591 def __iter__(self):
1592 1592 api = ipapi.get()
1593 1593 if self.raw:
1594 1594 for line in api.IP.input_hist_raw:
1595 1595 yield line.rstrip("\n")
1596 1596 else:
1597 1597 for line in api.IP.input_hist:
1598 1598 yield line.rstrip("\n")
1599 1599
1600 1600
1601 class Alias(object):
1602 """
1603 Entry in the alias table
1604 """
1605 def __init__(self, name, args, command):
1606 self.name = name
1607 self.args = args
1608 self.command = command
1609
1610 def __xattrs__(self, mode="default"):
1611 return ("name", "args", "command")
1612
1613
1614 class ialias(Table):
1615 """
1616 IPython alias list
1617
1618 Example::
1619
1620 >>> ialias
1621 """
1622 def __iter__(self):
1623 api = ipapi.get()
1624
1625 for (name, (args, command)) in api.IP.alias_table.iteritems():
1626 yield Alias(name, args, command)
1627
1628
1601 1629 class icsv(Pipe):
1602 1630 """
1603 1631 This ``Pipe`` turns the input (with must be a pipe outputting lines
1604 1632 or an ``ifile``) into lines of CVS columns.
1605 1633 """
1606 1634 def __init__(self, **csvargs):
1607 1635 """
1608 1636 Create an ``icsv`` object. ``cvsargs`` will be passed through as
1609 1637 keyword arguments to ``cvs.reader()``.
1610 1638 """
1611 1639 self.csvargs = csvargs
1612 1640
1613 1641 def __iter__(self):
1614 1642 input = self.input
1615 1643 if isinstance(input, ifile):
1616 1644 input = input.open("rb")
1617 1645 reader = csv.reader(input, **self.csvargs)
1618 1646 for line in reader:
1619 1647 yield List(line)
1620 1648
1621 1649 def __xrepr__(self, mode="default"):
1622 1650 yield (-1, False)
1623 1651 if mode == "header" or mode == "footer":
1624 1652 input = getattr(self, "input", None)
1625 1653 if input is not None:
1626 1654 for part in xrepr(input, mode):
1627 1655 yield part
1628 1656 yield (astyle.style_default, " | ")
1629 1657 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1630 1658 for (i, (name, value)) in enumerate(self.csvargs.iteritems()):
1631 1659 if i:
1632 1660 yield (astyle.style_default, ", ")
1633 1661 yield (astyle.style_default, name)
1634 1662 yield (astyle.style_default, "=")
1635 1663 for part in xrepr(value, "default"):
1636 1664 yield part
1637 1665 yield (astyle.style_default, ")")
1638 1666 else:
1639 1667 yield (astyle.style_default, repr(self))
1640 1668
1641 1669 def __repr__(self):
1642 1670 args = ", ".join(["%s=%r" % item for item in self.csvargs.iteritems()])
1643 1671 return "<%s.%s %s at 0x%x>" % \
1644 1672 (self.__class__.__module__, self.__class__.__name__, args, id(self))
1645 1673
1646 1674
1647 1675 class ix(Table):
1648 1676 """
1649 1677 Execute a system command and list its output as lines
1650 1678 (similar to ``os.popen()``).
1651 1679
1652 1680 Examples::
1653 1681
1654 1682 >>> ix("ps x")
1655 1683 >>> ix("find .") | ifile
1656 1684 """
1657 1685 def __init__(self, cmd):
1658 1686 self.cmd = cmd
1659 1687 self._pipeout = None
1660 1688
1661 1689 def __iter__(self):
1662 1690 (_pipein, self._pipeout) = os.popen4(self.cmd)
1663 1691 _pipein.close()
1664 1692 for l in self._pipeout:
1665 1693 yield l.rstrip("\r\n")
1666 1694 self._pipeout.close()
1667 1695 self._pipeout = None
1668 1696
1669 1697 def __del__(self):
1670 1698 if self._pipeout is not None and not self._pipeout.closed:
1671 1699 self._pipeout.close()
1672 1700 self._pipeout = None
1673 1701
1674 1702 def __xrepr__(self, mode="default"):
1675 1703 if mode == "header" or mode == "footer":
1676 1704 yield (astyle.style_default,
1677 1705 "%s(%r)" % (self.__class__.__name__, self.cmd))
1678 1706 else:
1679 1707 yield (astyle.style_default, repr(self))
1680 1708
1681 1709 def __repr__(self):
1682 1710 return "%s.%s(%r)" % \
1683 1711 (self.__class__.__module__, self.__class__.__name__, self.cmd)
1684 1712
1685 1713
1686 1714 class ifilter(Pipe):
1687 1715 """
1688 1716 Filter an input pipe. Only objects where an expression evaluates to true
1689 1717 (and doesn't raise an exception) are listed.
1690 1718
1691 1719 Examples::
1692 1720
1693 1721 >>> ils | ifilter("_.isfile() and size>1000")
1694 1722 >>> igrp | ifilter("len(mem)")
1695 1723 >>> sys.modules | ifilter(lambda _:_.value is not None)
1696 1724 """
1697 1725
1698 1726 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1699 1727 """
1700 1728 Create an ``ifilter`` object. ``expr`` can be a callable or a string
1701 1729 containing an expression. ``globals`` will be used as the global
1702 1730 namespace for calling string expressions (defaulting to IPython's
1703 1731 user namespace). ``errors`` specifies how exception during evaluation
1704 1732 of ``expr`` are handled:
1705 1733
1706 1734 ``"drop"``
1707 1735 drop all items that have errors;
1708 1736
1709 1737 ``"keep"``
1710 1738 keep all items that have errors;
1711 1739
1712 1740 ``"keeperror"``
1713 1741 keep the exception of all items that have errors;
1714 1742
1715 1743 ``"raise"``
1716 1744 raise the exception;
1717 1745
1718 1746 ``"raiseifallfail"``
1719 1747 raise the first exception if all items have errors; otherwise drop
1720 1748 those with errors (this is the default).
1721 1749 """
1722 1750 self.expr = expr
1723 1751 self.globals = globals
1724 1752 self.errors = errors
1725 1753
1726 1754 def __iter__(self):
1727 1755 if callable(self.expr):
1728 1756 test = self.expr
1729 1757 else:
1730 1758 g = getglobals(self.globals)
1731 1759 expr = compile(self.expr, "ipipe-expression", "eval")
1732 1760 def test(item):
1733 1761 return eval(expr, g, AttrNamespace(item))
1734 1762
1735 1763 ok = 0
1736 1764 exc_info = None
1737 1765 for item in xiter(self.input):
1738 1766 try:
1739 1767 if test(item):
1740 1768 yield item
1741 1769 ok += 1
1742 1770 except (KeyboardInterrupt, SystemExit):
1743 1771 raise
1744 1772 except Exception, exc:
1745 1773 if self.errors == "drop":
1746 1774 pass # Ignore errors
1747 1775 elif self.errors == "keep":
1748 1776 yield item
1749 1777 elif self.errors == "keeperror":
1750 1778 yield exc
1751 1779 elif self.errors == "raise":
1752 1780 raise
1753 1781 elif self.errors == "raiseifallfail":
1754 1782 if exc_info is None:
1755 1783 exc_info = sys.exc_info()
1756 1784 if not ok and exc_info is not None:
1757 1785 raise exc_info[0], exc_info[1], exc_info[2]
1758 1786
1759 1787 def __xrepr__(self, mode="default"):
1760 1788 if mode == "header" or mode == "footer":
1761 1789 input = getattr(self, "input", None)
1762 1790 if input is not None:
1763 1791 for part in xrepr(input, mode):
1764 1792 yield part
1765 1793 yield (astyle.style_default, " | ")
1766 1794 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1767 1795 for part in xrepr(self.expr, "default"):
1768 1796 yield part
1769 1797 yield (astyle.style_default, ")")
1770 1798 else:
1771 1799 yield (astyle.style_default, repr(self))
1772 1800
1773 1801 def __repr__(self):
1774 1802 return "<%s.%s expr=%r at 0x%x>" % \
1775 1803 (self.__class__.__module__, self.__class__.__name__,
1776 1804 self.expr, id(self))
1777 1805
1778 1806
1779 1807 class ieval(Pipe):
1780 1808 """
1781 1809 Evaluate an expression for each object in the input pipe.
1782 1810
1783 1811 Examples::
1784 1812
1785 1813 >>> ils | ieval("_.abspath()")
1786 1814 >>> sys.path | ieval(ifile)
1787 1815 """
1788 1816
1789 1817 def __init__(self, expr, globals=None, errors="raiseifallfail"):
1790 1818 """
1791 1819 Create an ``ieval`` object. ``expr`` can be a callable or a string
1792 1820 containing an expression. For the meaning of ``globals`` and
1793 1821 ``errors`` see ``ifilter``.
1794 1822 """
1795 1823 self.expr = expr
1796 1824 self.globals = globals
1797 1825 self.errors = errors
1798 1826
1799 1827 def __iter__(self):
1800 1828 if callable(self.expr):
1801 1829 do = self.expr
1802 1830 else:
1803 1831 g = getglobals(self.globals)
1804 1832 expr = compile(self.expr, "ipipe-expression", "eval")
1805 1833 def do(item):
1806 1834 return eval(expr, g, AttrNamespace(item))
1807 1835
1808 1836 ok = 0
1809 1837 exc_info = None
1810 1838 for item in xiter(self.input):
1811 1839 try:
1812 1840 yield do(item)
1813 1841 except (KeyboardInterrupt, SystemExit):
1814 1842 raise
1815 1843 except Exception, exc:
1816 1844 if self.errors == "drop":
1817 1845 pass # Ignore errors
1818 1846 elif self.errors == "keep":
1819 1847 yield item
1820 1848 elif self.errors == "keeperror":
1821 1849 yield exc
1822 1850 elif self.errors == "raise":
1823 1851 raise
1824 1852 elif self.errors == "raiseifallfail":
1825 1853 if exc_info is None:
1826 1854 exc_info = sys.exc_info()
1827 1855 if not ok and exc_info is not None:
1828 1856 raise exc_info[0], exc_info[1], exc_info[2]
1829 1857
1830 1858 def __xrepr__(self, mode="default"):
1831 1859 if mode == "header" or mode == "footer":
1832 1860 input = getattr(self, "input", None)
1833 1861 if input is not None:
1834 1862 for part in xrepr(input, mode):
1835 1863 yield part
1836 1864 yield (astyle.style_default, " | ")
1837 1865 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1838 1866 for part in xrepr(self.expr, "default"):
1839 1867 yield part
1840 1868 yield (astyle.style_default, ")")
1841 1869 else:
1842 1870 yield (astyle.style_default, repr(self))
1843 1871
1844 1872 def __repr__(self):
1845 1873 return "<%s.%s expr=%r at 0x%x>" % \
1846 1874 (self.__class__.__module__, self.__class__.__name__,
1847 1875 self.expr, id(self))
1848 1876
1849 1877
1850 1878 class ienum(Pipe):
1851 1879 """
1852 1880 Enumerate the input pipe (i.e. wrap each input object in an object
1853 1881 with ``index`` and ``object`` attributes).
1854 1882
1855 1883 Examples::
1856 1884
1857 1885 >>> xrange(20) | ieval("_,_*_") | ienum | ifilter("index % 2 == 0") | ieval("object")
1858 1886 """
1859 1887 def __iter__(self):
1860 1888 fields = ("index", "object")
1861 1889 for (index, object) in enumerate(xiter(self.input)):
1862 1890 yield Fields(fields, index=index, object=object)
1863 1891
1864 1892
1865 1893 class isort(Pipe):
1866 1894 """
1867 1895 Sorts the input pipe.
1868 1896
1869 1897 Examples::
1870 1898
1871 1899 >>> ils | isort("size")
1872 1900 >>> ils | isort("_.isdir(), _.lower()", reverse=True)
1873 1901 """
1874 1902
1875 1903 def __init__(self, key=None, globals=None, reverse=False):
1876 1904 """
1877 1905 Create an ``isort`` object. ``key`` can be a callable or a string
1878 1906 containing an expression (or ``None`` in which case the items
1879 1907 themselves will be sorted). If ``reverse`` is true the sort order
1880 1908 will be reversed. For the meaning of ``globals`` see ``ifilter``.
1881 1909 """
1882 1910 self.key = key
1883 1911 self.globals = globals
1884 1912 self.reverse = reverse
1885 1913
1886 1914 def __iter__(self):
1887 1915 if self.key is None:
1888 1916 items = sorted(xiter(self.input), reverse=self.reverse)
1889 1917 elif callable(self.key):
1890 1918 items = sorted(xiter(self.input), key=self.key, reverse=self.reverse)
1891 1919 else:
1892 1920 g = getglobals(self.globals)
1893 1921 key = compile(self.key, "ipipe-expression", "eval")
1894 1922 def realkey(item):
1895 1923 return eval(key, g, AttrNamespace(item))
1896 1924 items = sorted(xiter(self.input), key=realkey, reverse=self.reverse)
1897 1925 for item in items:
1898 1926 yield item
1899 1927
1900 1928 def __xrepr__(self, mode="default"):
1901 1929 if mode == "header" or mode == "footer":
1902 1930 input = getattr(self, "input", None)
1903 1931 if input is not None:
1904 1932 for part in xrepr(input, mode):
1905 1933 yield part
1906 1934 yield (astyle.style_default, " | ")
1907 1935 yield (astyle.style_default, "%s(" % self.__class__.__name__)
1908 1936 for part in xrepr(self.key, "default"):
1909 1937 yield part
1910 1938 if self.reverse:
1911 1939 yield (astyle.style_default, ", ")
1912 1940 for part in xrepr(True, "default"):
1913 1941 yield part
1914 1942 yield (astyle.style_default, ")")
1915 1943 else:
1916 1944 yield (astyle.style_default, repr(self))
1917 1945
1918 1946 def __repr__(self):
1919 1947 return "<%s.%s key=%r reverse=%r at 0x%x>" % \
1920 1948 (self.__class__.__module__, self.__class__.__name__,
1921 1949 self.key, self.reverse, id(self))
1922 1950
1923 1951
1924 1952 tab = 3 # for expandtabs()
1925 1953
1926 1954 def _format(field):
1927 1955 if isinstance(field, str):
1928 1956 text = repr(field.expandtabs(tab))[1:-1]
1929 1957 elif isinstance(field, unicode):
1930 1958 text = repr(field.expandtabs(tab))[2:-1]
1931 1959 elif isinstance(field, datetime.datetime):
1932 1960 # Don't use strftime() here, as this requires year >= 1900
1933 1961 text = "%04d-%02d-%02d %02d:%02d:%02d.%06d" % \
1934 1962 (field.year, field.month, field.day,
1935 1963 field.hour, field.minute, field.second, field.microsecond)
1936 1964 elif isinstance(field, datetime.date):
1937 1965 text = "%04d-%02d-%02d" % (field.year, field.month, field.day)
1938 1966 else:
1939 1967 text = repr(field)
1940 1968 return text
1941 1969
1942 1970
1943 1971 class Display(object):
1944 1972 class __metaclass__(type):
1945 1973 def __ror__(self, input):
1946 1974 return input | self()
1947 1975
1948 1976 def __init__(self, input=None):
1949 1977 self.input = input
1950 1978
1951 1979 def __ror__(self, input):
1952 1980 self.input = input
1953 1981 return self
1954 1982
1955 1983 def display(self):
1956 1984 pass
1957 1985
1958 1986
1959 1987 class iless(Display):
1960 1988 cmd = "less --quit-if-one-screen --LONG-PROMPT --LINE-NUMBERS --chop-long-lines --shift=8 --RAW-CONTROL-CHARS"
1961 1989
1962 1990 def display(self):
1963 1991 try:
1964 1992 pager = os.popen(self.cmd, "w")
1965 1993 try:
1966 1994 for item in xiter(self.input):
1967 1995 first = False
1968 1996 for attr in xattrs(item, "default"):
1969 1997 if first:
1970 1998 first = False
1971 1999 else:
1972 2000 pager.write(" ")
1973 2001 attr = upgradexattr(attr)
1974 2002 if not isinstance(attr, SelfDescriptor):
1975 2003 pager.write(attr.name())
1976 2004 pager.write("=")
1977 2005 pager.write(str(attr.value(item)))
1978 2006 pager.write("\n")
1979 2007 finally:
1980 2008 pager.close()
1981 2009 except Exception, exc:
1982 2010 print "%s: %s" % (exc.__class__.__name__, str(exc))
1983 2011
1984 2012
1985 2013 class _RedirectIO(object):
1986 2014 def __init__(self,*args,**kwargs):
1987 2015 """
1988 2016 Map the system output streams to self.
1989 2017 """
1990 2018 self.stream = StringIO.StringIO()
1991 2019 self.stdout = sys.stdout
1992 2020 sys.stdout = self
1993 2021 self.stderr = sys.stderr
1994 2022 sys.stderr = self
1995 2023
1996 2024 def write(self, text):
1997 2025 """
1998 2026 Write both to screen and to self.
1999 2027 """
2000 2028 self.stream.write(text)
2001 2029 self.stdout.write(text)
2002 2030 if "\n" in text:
2003 2031 self.stdout.flush()
2004 2032
2005 2033 def writelines(self, lines):
2006 2034 """
2007 2035 Write lines both to screen and to self.
2008 2036 """
2009 2037 self.stream.writelines(lines)
2010 2038 self.stdout.writelines(lines)
2011 2039 self.stdout.flush()
2012 2040
2013 2041 def restore(self):
2014 2042 """
2015 2043 Restore the default system streams.
2016 2044 """
2017 2045 self.stdout.flush()
2018 2046 self.stderr.flush()
2019 2047 sys.stdout = self.stdout
2020 2048 sys.stderr = self.stderr
2021 2049
2022 2050
2023 2051 class icap(Table):
2024 2052 """
2025 2053 Execute a python string and capture any output to stderr/stdout.
2026 2054
2027 2055 Examples::
2028 2056
2029 2057 >>> import time
2030 2058 >>> icap("for i in range(10): print i, time.sleep(0.1)")
2031 2059
2032 2060 """
2033 2061 def __init__(self, expr, globals=None):
2034 2062 self.expr = expr
2035 2063 self.globals = globals
2036 2064 log = _RedirectIO()
2037 2065 try:
2038 2066 exec(expr, getglobals(globals))
2039 2067 finally:
2040 2068 log.restore()
2041 2069 self.stream = log.stream
2042 2070
2043 2071 def __iter__(self):
2044 2072 self.stream.seek(0)
2045 2073 for line in self.stream:
2046 2074 yield line.rstrip("\r\n")
2047 2075
2048 2076 def __xrepr__(self, mode="default"):
2049 2077 if mode == "header" or mode == "footer":
2050 2078 yield (astyle.style_default,
2051 2079 "%s(%r)" % (self.__class__.__name__, self.expr))
2052 2080 else:
2053 2081 yield (astyle.style_default, repr(self))
2054 2082
2055 2083 def __repr__(self):
2056 2084 return "%s.%s(%r)" % \
2057 2085 (self.__class__.__module__, self.__class__.__name__, self.expr)
2058 2086
2059 2087
2060 2088 def xformat(value, mode, maxlength):
2061 2089 align = None
2062 2090 full = True
2063 2091 width = 0
2064 2092 text = astyle.Text()
2065 2093 for (style, part) in xrepr(value, mode):
2066 2094 # only consider the first result
2067 2095 if align is None:
2068 2096 if isinstance(style, int):
2069 2097 # (style, text) really is (alignment, stop)
2070 2098 align = style
2071 2099 full = part
2072 2100 continue
2073 2101 else:
2074 2102 align = -1
2075 2103 full = True
2076 2104 if not isinstance(style, int):
2077 2105 text.append((style, part))
2078 2106 width += len(part)
2079 2107 if width >= maxlength and not full:
2080 2108 text.append((astyle.style_ellisis, "..."))
2081 2109 width += 3
2082 2110 break
2083 2111 if align is None: # default to left alignment
2084 2112 align = -1
2085 2113 return (align, width, text)
2086 2114
2087 2115
2088 2116
2089 2117 import astyle
2090 2118
2091 2119 class idump(Display):
2092 2120 # The approximate maximum length of a column entry
2093 2121 maxattrlength = 200
2094 2122
2095 2123 # Style for column names
2096 2124 style_header = astyle.Style.fromstr("white:black:bold")
2097 2125
2098 2126 def __init__(self, input=None, *attrs):
2099 2127 Display.__init__(self, input)
2100 2128 self.attrs = [upgradexattr(attr) for attr in attrs]
2101 2129 self.headerpadchar = " "
2102 2130 self.headersepchar = "|"
2103 2131 self.datapadchar = " "
2104 2132 self.datasepchar = "|"
2105 2133
2106 2134 def display(self):
2107 2135 stream = genutils.Term.cout
2108 2136 allattrs = []
2109 2137 attrset = set()
2110 2138 colwidths = {}
2111 2139 rows = []
2112 2140 for item in xiter(self.input):
2113 2141 row = {}
2114 2142 attrs = self.attrs
2115 2143 if not attrs:
2116 2144 attrs = xattrs(item, "default")
2117 2145 for attr in attrs:
2118 2146 if attr not in attrset:
2119 2147 allattrs.append(attr)
2120 2148 attrset.add(attr)
2121 2149 colwidths[attr] = len(attr.name())
2122 2150 try:
2123 2151 value = attr.value(item)
2124 2152 except (KeyboardInterrupt, SystemExit):
2125 2153 raise
2126 2154 except Exception, exc:
2127 2155 value = exc
2128 2156 (align, width, text) = xformat(value, "cell", self.maxattrlength)
2129 2157 colwidths[attr] = max(colwidths[attr], width)
2130 2158 # remember alignment, length and colored parts
2131 2159 row[attr] = (align, width, text)
2132 2160 rows.append(row)
2133 2161
2134 2162 stream.write("\n")
2135 2163 for (i, attr) in enumerate(allattrs):
2136 2164 attrname = attr.name()
2137 2165 self.style_header(attrname).write(stream)
2138 2166 spc = colwidths[attr] - len(attrname)
2139 2167 if i < len(colwidths)-1:
2140 2168 stream.write(self.headerpadchar*spc)
2141 2169 stream.write(self.headersepchar)
2142 2170 stream.write("\n")
2143 2171
2144 2172 for row in rows:
2145 2173 for (i, attr) in enumerate(allattrs):
2146 2174 (align, width, text) = row[attr]
2147 2175 spc = colwidths[attr] - width
2148 2176 if align == -1:
2149 2177 text.write(stream)
2150 2178 if i < len(colwidths)-1:
2151 2179 stream.write(self.datapadchar*spc)
2152 2180 elif align == 0:
2153 2181 spc = colwidths[attr] - width
2154 2182 spc1 = spc//2
2155 2183 spc2 = spc-spc1
2156 2184 stream.write(self.datapadchar*spc1)
2157 2185 text.write(stream)
2158 2186 if i < len(colwidths)-1:
2159 2187 stream.write(self.datapadchar*spc2)
2160 2188 else:
2161 2189 stream.write(self.datapadchar*spc)
2162 2190 text.write(stream)
2163 2191 if i < len(colwidths)-1:
2164 2192 stream.write(self.datasepchar)
2165 2193 stream.write("\n")
2166 2194
2167 2195
2168 2196 class AttributeDetail(Table):
2169 2197 """
2170 2198 ``AttributeDetail`` objects are use for displaying a detailed list of object
2171 2199 attributes.
2172 2200 """
2173 2201 def __init__(self, object, descriptor):
2174 2202 self.object = object
2175 2203 self.descriptor = descriptor
2176 2204
2177 2205 def __iter__(self):
2178 2206 return self.descriptor.iter(self.object)
2179 2207
2180 2208 def name(self):
2181 2209 return self.descriptor.name()
2182 2210
2183 2211 def attrtype(self):
2184 2212 return self.descriptor.attrtype(self.object)
2185 2213
2186 2214 def valuetype(self):
2187 2215 return self.descriptor.valuetype(self.object)
2188 2216
2189 2217 def doc(self):
2190 2218 return self.descriptor.doc(self.object)
2191 2219
2192 2220 def shortdoc(self):
2193 2221 return self.descriptor.shortdoc(self.object)
2194 2222
2195 2223 def value(self):
2196 2224 return self.descriptor.value(self.object)
2197 2225
2198 2226 def __xattrs__(self, mode="default"):
2199 2227 attrs = ("name()", "attrtype()", "valuetype()", "value()", "shortdoc()")
2200 2228 if mode == "detail":
2201 2229 attrs += ("doc()",)
2202 2230 return attrs
2203 2231
2204 2232 def __xrepr__(self, mode="default"):
2205 2233 yield (-1, True)
2206 2234 valuetype = self.valuetype()
2207 2235 if valuetype is not noitem:
2208 2236 for part in xrepr(valuetype):
2209 2237 yield part
2210 2238 yield (astyle.style_default, " ")
2211 2239 yield (astyle.style_default, self.attrtype())
2212 2240 yield (astyle.style_default, " ")
2213 2241 yield (astyle.style_default, self.name())
2214 2242 yield (astyle.style_default, " of ")
2215 2243 for part in xrepr(self.object):
2216 2244 yield part
2217 2245
2218 2246
2219 2247 try:
2220 2248 from ibrowse import ibrowse
2221 2249 except ImportError:
2222 2250 # No curses (probably Windows) => try igrid
2223 2251 try:
2224 2252 from igrid import igrid
2225 2253 except ImportError:
2226 2254 # no wx either => use ``idump`` as the default display.
2227 2255 defaultdisplay = idump
2228 2256 else:
2229 2257 defaultdisplay = igrid
2230 2258 __all__.append("igrid")
2231 2259 else:
2232 2260 defaultdisplay = ibrowse
2233 2261 __all__.append("ibrowse")
2234 2262
2235 2263
2236 2264 # If we're running under IPython, register our objects with IPython's
2237 2265 # generic function ``result_display``, else install a displayhook
2238 2266 # directly as sys.displayhook
2239 2267 if generics is not None:
2240 2268 def display_display(obj):
2241 2269 return obj.display()
2242 2270 generics.result_display.when_type(Display)(display_display)
2243 2271
2244 2272 def display_tableobject(obj):
2245 2273 return display_display(defaultdisplay(obj))
2246 2274 generics.result_display.when_type(Table)(display_tableobject)
2247 2275
2248 2276 def display_tableclass(obj):
2249 2277 return display_tableobject(obj())
2250 2278 generics.result_display.when_type(Table.__metaclass__)(display_tableclass)
2251 2279 else:
2252 2280 def installdisplayhook():
2253 2281 _originalhook = sys.displayhook
2254 2282 def displayhook(obj):
2255 2283 if isinstance(obj, type) and issubclass(obj, Table):
2256 2284 obj = obj()
2257 2285 if isinstance(obj, Table):
2258 2286 obj = defaultdisplay(obj)
2259 2287 if isinstance(obj, Display):
2260 2288 return obj.display()
2261 2289 else:
2262 2290 _originalhook(obj)
2263 2291 sys.displayhook = displayhook
2264 2292 installdisplayhook()
@@ -1,7419 +1,7424 b''
1 2008-02-02 Walter Doerwald <walter@livinglogic.de>
2
3 * ipipe.py: A new ipipe table has been added: ialias produces all
4 entries from IPython's alias table.
5
1 6 2008-02-01 Fernando Perez <Fernando.Perez@colorado.edu>
2 7
3 8 * IPython/Shell.py (MTInteractiveShell.runcode): Improve handling
4 9 of KBINT in threaded shells. After code provided by Marc in #212.
5 10
6 11 2008-01-30 Fernando Perez <Fernando.Perez@colorado.edu>
7 12
8 13 * IPython/Shell.py (MTInteractiveShell.__init__): Fixed deadlock
9 14 that could occur due to a race condition in threaded shells.
10 15 Thanks to code provided by Marc, as #210.
11 16
12 17 2008-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
13 18
14 19 * IPython/Magic.py (magic_doctest_mode): respect the user's
15 20 settings for input separators rather than overriding them. After
16 21 a report by Jeff Kowalczyk <jtk-AT-yahoo.com>
17 22
18 23 * IPython/history.py (magic_history): Add support for declaring an
19 24 output file directly from the history command.
20 25
21 26 2008-01-21 Walter Doerwald <walter@livinglogic.de>
22 27
23 28 * ipipe.py: Register ipipe's displayhooks via the generic function
24 29 generics.result_display() instead of using ipapi.set_hook().
25 30
26 31 2008-01-19 Walter Doerwald <walter@livinglogic.de>
27 32
28 33 * ibrowse.py, igrid.py, ipipe.py:
29 34 The input object can now be passed to the constructor of the display classes.
30 35 This makes it possible to use them with objects that implement __or__.
31 36 Use this constructor in the displayhook instead of piping.
32 37
33 38 * ipipe.py: Importing astyle.py is done as late as possible to
34 39 avoid problems with circular imports.
35 40
36 41 2008-01-19 Ville Vainio <vivainio@gmail.com>
37 42
38 43 * hooks.py, iplib.py: Added 'shell_hook' to customize how
39 44 IPython calls shell.
40 45
41 46 * hooks.py, iplib.py: Added 'show_in_pager' hook to specify
42 47 how IPython pages text (%page, %pycat, %pdoc etc.)
43 48
44 49 * Extensions/jobctrl.py: Use shell_hook. New magics: '%tasks'
45 50 and '%kill' to kill hanging processes that won't obey ctrl+C.
46 51
47 52 2008-01-16 Ville Vainio <vivainio@gmail.com>
48 53
49 54 * ipy_completers.py: pyw extension support for %run completer.
50 55
51 56 2008-01-11 Ville Vainio <vivainio@gmail.com>
52 57
53 58 * iplib.py, ipmaker.py: new rc option - autoexec. It's a list
54 59 of ipython commands to be run when IPython has started up
55 60 (just before running the scripts and -c arg on command line).
56 61
57 62 * ipy_user_conf.py: Added an example on how to change term
58 63 colors in config file (through using autoexec).
59 64
60 65 * completer.py, test_completer.py: Ability to specify custom
61 66 get_endidx to replace readline.get_endidx. For emacs users.
62 67
63 68 2008-01-10 Ville Vainio <vivainio@gmail.com>
64 69
65 70 * Prompts.py (set_p_str): do not crash on illegal prompt strings
66 71
67 72 2008-01-08 Ville Vainio <vivainio@gmail.com>
68 73
69 74 * '%macro -r' (raw mode) is now default in sh profile.
70 75
71 76 2007-12-31 Ville Vainio <vivainio@gmail.com>
72 77
73 78 * completer.py: custom completer matching is now case sensitive
74 79 (#207).
75 80
76 81 * ultraTB.py, iplib.py: Add some KeyboardInterrupt catching in
77 82 an attempt to prevent occasional crashes.
78 83
79 84 * CrashHandler.py: Crash log dump now asks user to press enter
80 85 before exiting.
81 86
82 87 * Store _ip in user_ns instead of __builtin__, enabling safer
83 88 coexistence of multiple IPython instances in the same python
84 89 interpreter (#197).
85 90
86 91 * Debugger.py, ipmaker.py: Need to add '-pydb' command line
87 92 switch to enable pydb in post-mortem debugging and %run -d.
88 93
89 94 2007-12-28 Ville Vainio <vivainio@gmail.com>
90 95
91 96 * ipy_server.py: TCP socket server for "remote control" of an IPython
92 97 instance.
93 98
94 99 * Debugger.py: Change to PSF license
95 100
96 101 * simplegeneric.py: Add license & author notes.
97 102
98 103 * ipy_fsops.py: Added PathObj and FileObj, an object-oriented way
99 104 to navigate file system with a custom completer. Run
100 105 ipy_fsops.test_pathobj() to play with it.
101 106
102 107 2007-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
103 108
104 109 * IPython/dtutils.py: Add utilities for interactively running
105 110 doctests. Still needs work to more easily handle the namespace of
106 111 the package one may be working on, but the basics are in place.
107 112
108 113 2007-12-27 Ville Vainio <vivainio@gmail.com>
109 114
110 115 * ipy_completers.py: Applied arno's patch to get proper list of
111 116 packages in import completer. Closes #196.
112 117
113 118 2007-12-20 Ville Vainio <vivainio@gmail.com>
114 119
115 120 * completer.py, generics.py(complete_object): Allow
116 121 custom complers based on python objects via simplegeneric.
117 122 See generics.py / my_demo_complete_object
118 123
119 124 2007-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
120 125
121 126 * IPython/Prompts.py (BasePrompt.__nonzero__): add proper boolean
122 127 behavior to prompt objects, useful for display hooks to adjust
123 128 themselves depending on whether prompts will be there or not.
124 129
125 130 2007-12-13 Ville Vainio <vivainio@gmail.com>
126 131
127 132 * iplib.py(raw_input): unix readline does not allow unicode in
128 133 history, encode to normal string. After patch by Tiago.
129 134 Close #201
130 135
131 136 2007-12-12 Ville Vainio <vivainio@gmail.com>
132 137
133 138 * genutils.py (abbrev_cwd): Terminal title now shows 2 levels of
134 139 current directory.
135 140
136 141 2007-12-12 Fernando Perez <Fernando.Perez@colorado.edu>
137 142
138 143 * IPython/Shell.py (_select_shell): add support for controlling
139 144 the pylab threading mode directly at the command line, without
140 145 having to modify MPL config files. Added unit tests for this
141 146 feature, though manual/docs update is still pending, will do later.
142 147
143 148 2007-12-11 Ville Vainio <vivainio@gmail.com>
144 149
145 150 * ext_rescapture.py: var = !cmd is no longer verbose (to facilitate
146 151 use in scripts)
147 152
148 153 2007-12-07 Ville Vainio <vivainio@gmail.com>
149 154
150 155 * iplib.py, ipy_profile_sh.py: Do not escape # on command lines
151 156 anymore (to \#) - even if it is a comment char that is implicitly
152 157 escaped in some unix shells in interactive mode, it is ok to leave
153 158 it in IPython as such.
154 159
155 160
156 161 2007-12-01 Robert Kern <robert.kern@gmail.com>
157 162
158 163 * IPython/ultraTB.py (findsource): Improve the monkeypatch to
159 164 inspect.findsource(). It can now find source lines inside zipped
160 165 packages.
161 166
162 167 * IPython/ultraTB.py: When constructing tracebacks, try to use __file__
163 168 in the frame's namespace before trusting the filename in the code object
164 169 which created the frame.
165 170
166 171 2007-11-29 *** Released version 0.8.2
167 172
168 173 2007-11-25 Fernando Perez <Fernando.Perez@colorado.edu>
169 174
170 175 * IPython/Logger.py (Logger.logstop): add a proper logstop()
171 176 method to fully stop the logger, along with a corresponding
172 177 %logstop magic for interactive use.
173 178
174 179 * IPython/Extensions/ipy_host_completers.py: added new host
175 180 completers functionality, contributed by Gael Pasgrimaud
176 181 <gawel-AT-afpy.org>.
177 182
178 183 2007-11-24 Fernando Perez <Fernando.Perez@colorado.edu>
179 184
180 185 * IPython/DPyGetOpt.py (ArgumentError): Apply patch by Paul Mueller
181 186 <gakusei-AT-dakotacom.net>, to fix deprecated string exceptions in
182 187 options handling. Unicode fix in %whos (committed a while ago)
183 188 was also contributed by Paul.
184 189
185 190 2007-11-23 Darren Dale <darren.dale@cornell.edu>
186 191 * ipy_traits_completer.py: let traits_completer respect the user's
187 192 readline_omit__names setting.
188 193
189 194 2007-11-08 Ville Vainio <vivainio@gmail.com>
190 195
191 196 * ipy_completers.py (import completer): assume 'xml' module exists.
192 197 Do not add every module twice anymore. Closes #196.
193 198
194 199 * ipy_completers.py, ipy_app_completers.py: Add proper apt-get
195 200 completer that uses apt-cache to search for existing packages.
196 201
197 202 2007-11-06 Ville Vainio <vivainio@gmail.com>
198 203
199 204 * Prompts.py: Do not update _oh and _123 when do_full_cache is not
200 205 true. Closes #194.
201 206
202 207 2007-11-01 Brian Granger <ellisonbg@gmail.com>
203 208
204 209 * iplib.py, rlineimpl.py: Applied Body Water's patches to get IPython
205 210 working with OS X 10.5 libedit implementation of readline.
206 211
207 212 2007-10-24 Ville Vainio <vivainio@gmail.com>
208 213
209 214 * iplib.py(user_setup): To route around buggy installations where
210 215 UserConfig is not available, create a minimal _ipython.
211 216
212 217 * iplib.py: Unicode fixes from Jorgen.
213 218
214 219 * genutils.py: Slist now has new method 'fields()' for extraction of
215 220 whitespace-separated fields from line-oriented data.
216 221
217 222 2007-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
218 223
219 224 * IPython/OInspect.py (Inspector.pinfo): fix bug that could arise
220 225 when querying objects with no __class__ attribute (such as
221 226 f2py-generated modules).
222 227
223 228 2007-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
224 229
225 230 * IPython/Magic.py (magic_time): track compilation time and report
226 231 it if longer than 0.1s (fix done to %time and %timeit). After a
227 232 SAGE bug report: http://trac.sagemath.org/sage_trac/ticket/632.
228 233
229 234 2007-09-18 Ville Vainio <vivainio@gmail.com>
230 235
231 236 * genutils.py(make_quoted_expr): Do not use Itpl, it does
232 237 not support unicode at the moment. Fixes (many) magic calls with
233 238 special characters.
234 239
235 240 2007-09-14 Fernando Perez <Fernando.Perez@colorado.edu>
236 241
237 242 * IPython/genutils.py (doctest_reload): expose the doctest
238 243 reloader to the user so that people can easily reset doctest while
239 244 using it interactively. Fixes a problem reported by Jorgen.
240 245
241 246 * IPython/iplib.py (InteractiveShell.__init__): protect the
242 247 FakeModule instances used for __main__ in %run calls from
243 248 deletion, so that user code defined in them isn't left with
244 249 dangling references due to the Python module deletion machinery.
245 250 This should fix the problems reported by Darren.
246 251
247 252 2007-09-10 Darren Dale <dd55@cornell.edu>
248 253
249 254 * Cleanup of IPShellQt and IPShellQt4
250 255
251 256 2007-09-09 Fernando Perez <Fernando.Perez@colorado.edu>
252 257
253 258 * IPython/FakeModule.py (FakeModule.__init__): further fixes for
254 259 doctest support.
255 260
256 261 * IPython/iplib.py (safe_execfile): minor docstring improvements.
257 262
258 263 2007-09-08 Ville Vainio <vivainio@gmail.com>
259 264
260 265 * Magic.py (%pushd, %popd, %dirs): Fix dir stack - push *current*
261 266 directory, not the target directory.
262 267
263 268 * ipapi.py, Magic.py, iplib.py: Add ipapi.UsageError, a lighter weight
264 269 exception that won't print the tracebacks. Switched many magics to
265 270 raise them on error situations, also GetoptError is not printed
266 271 anymore.
267 272
268 273 2007-09-07 Ville Vainio <vivainio@gmail.com>
269 274
270 275 * iplib.py: do not auto-alias "dir", it screws up other dir auto
271 276 aliases.
272 277
273 278 * genutils.py: SList.grep() implemented.
274 279
275 280 * ipy_editors.py, UserConfig/ipy_user_conf.py: Add some editors
276 281 for easy "out of the box" setup of several common editors, so that
277 282 e.g. '%edit os.path.isfile' will jump to the correct line
278 283 automatically. Contributions for command lines of your favourite
279 284 editors welcome.
280 285
281 286 2007-09-07 Fernando Perez <Fernando.Perez@colorado.edu>
282 287
283 288 * IPython/OInspect.py (Inspector.pinfo): fixed bug that was
284 289 preventing source display in certain cases. In reality I think
285 290 the problem is with Ubuntu's Python build, but this change works
286 291 around the issue in some cases (not in all, unfortunately). I'd
287 292 filed a Python bug on this with more details, but in the change of
288 293 bug trackers it seems to have been lost.
289 294
290 295 * IPython/Magic.py (magic_dhist): restore %dhist. No, cd -TAB is
291 296 not the same, it's not self-documenting, doesn't allow range
292 297 selection, and sorts alphabetically instead of numerically.
293 298 (magic_r): restore %r. No, "up + enter. One char magic" is not
294 299 the same thing, since %r takes parameters to allow fast retrieval
295 300 of old commands. I've received emails from users who use this a
296 301 LOT, so it stays.
297 302 (magic_automagic): restore %automagic. "use _ip.option.automagic"
298 303 is not a valid replacement b/c it doesn't provide an complete
299 304 explanation (which the automagic docstring does).
300 305 (magic_autocall): restore %autocall, with improved docstring.
301 306 Same argument as for others, "use _ip.options.autocall" is not a
302 307 valid replacement.
303 308 (magic_pdef): restore %pdef & friends. Used widely, mentioned in
304 309 tutorials and online docs.
305 310
306 311 2007-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
307 312
308 313 * IPython/usage.py (quick_reference): mention magics in quickref,
309 314 modified main banner to mention %quickref.
310 315
311 316 * IPython/FakeModule.py (FakeModule): fixes for doctest compatibility.
312 317
313 318 2007-09-06 Ville Vainio <vivainio@gmail.com>
314 319
315 320 * ipy_rehashdir.py, ipy_workdir.py, ipy_fsops.py, iplib.py:
316 321 Callable aliases now pass the _ip as first arg. This breaks
317 322 compatibility with earlier 0.8.2.svn series! (though they should
318 323 not have been in use yet outside these few extensions)
319 324
320 325 2007-09-05 Ville Vainio <vivainio@gmail.com>
321 326
322 327 * external/mglob.py: expand('dirname') => ['dirname'], instead
323 328 of ['dirname/foo','dirname/bar', ...].
324 329
325 330 * Extensions/ipy_fsops.py: added, has usefull shell utils for plain
326 331 win32 installations: icp, imv, imkdir, igrep, irm, collect (collect
327 332 is useful for others as well).
328 333
329 334 * iplib.py: on callable aliases (as opposed to old style aliases),
330 335 do var_expand() immediately, and use make_quoted_expr instead
331 336 of hardcoded r"""
332 337
333 338 * Extensions/ipy_profile_sh.py: Try to detect cygwin on win32,
334 339 if not available load ipy_fsops.py for cp, mv, etc. replacements
335 340
336 341 * OInspect.py, ipy_which.py: improve %which and obj? for callable
337 342 aliases
338 343
339 344 2007-09-04 Ville Vainio <vivainio@gmail.com>
340 345
341 346 * ipy_profile_zope.py: add zope profile, by Stefan Eletzhofer.
342 347 Relicensed under BSD with the authors approval.
343 348
344 349 * ipmaker.py, usage.py: Remove %magic from default banner, improve
345 350 %quickref
346 351
347 352 2007-09-03 Ville Vainio <vivainio@gmail.com>
348 353
349 354 * Magic.py: %time now passes expression through prefilter,
350 355 allowing IPython syntax.
351 356
352 357 2007-09-01 Ville Vainio <vivainio@gmail.com>
353 358
354 359 * ipmaker.py: Always show full traceback when newstyle config fails
355 360
356 361 2007-08-27 Ville Vainio <vivainio@gmail.com>
357 362
358 363 * Magic.py: fix %cd for nonexistent dir when dhist is empty, close #180
359 364
360 365 2007-08-26 Ville Vainio <vivainio@gmail.com>
361 366
362 367 * ipmaker.py: Command line args have the highest priority again
363 368
364 369 * iplib.py, ipmaker.py: -i command line argument now behaves as in
365 370 normal python, i.e. leaves the IPython session running after -c
366 371 command or running a batch file from command line.
367 372
368 373 2007-08-22 Ville Vainio <vivainio@gmail.com>
369 374
370 375 * iplib.py: no extra empty (last) line in raw hist w/ multiline
371 376 statements
372 377
373 378 * logger.py: Fix bug where blank lines in history were not
374 379 added until AFTER adding the current line; translated and raw
375 380 history should finally be in sync with prompt now.
376 381
377 382 * ipy_completers.py: quick_completer now makes it easy to create
378 383 trivial custom completers
379 384
380 385 * clearcmd.py: shadow history compression & erasing, fixed input hist
381 386 clearing.
382 387
383 388 * envpersist.py, history.py: %env (sh profile only), %hist completers
384 389
385 390 * genutils.py, Prompts.py, Magic.py: win32 - prompt (with \yDEPTH) and
386 391 term title now include the drive letter, and always use / instead of
387 392 os.sep (as per recommended approach for win32 ipython in general).
388 393
389 394 * ipykit.py, ipy_kitcfg.py: special launcher for ipykit. Allows running
390 395 plain python scripts from ipykit command line by running
391 396 "py myscript.py", even w/o installed python.
392 397
393 398 2007-08-21 Ville Vainio <vivainio@gmail.com>
394 399
395 400 * ipmaker.py: finding ipythonrc-PROF now skips ipy_profile_PROF.
396 401 (for backwards compatibility)
397 402
398 403 * history.py: switch back to %hist -t from %hist -r as default.
399 404 At least until raw history is fixed for good.
400 405
401 406 2007-08-20 Ville Vainio <vivainio@gmail.com>
402 407
403 408 * ipapi.py, iplib.py: DebugTools accessible via _ip.dbg, to catch &
404 409 locate alias redeclarations etc. Also, avoid handling
405 410 _ip.IP.alias_table directly, prefer using _ip.defalias.
406 411
407 412
408 413 2007-08-15 Ville Vainio <vivainio@gmail.com>
409 414
410 415 * prefilter.py: ! is now always served first
411 416
412 417 2007-08-15 Fernando Perez <Fernando.Perez@colorado.edu>
413 418
414 419 * IPython/iplib.py (safe_execfile): fix the SystemExit
415 420 auto-suppression code to work in Python2.4 (the internal structure
416 421 of that exception changed and I'd only tested the code with 2.5).
417 422 Bug reported by a SciPy attendee.
418 423
419 424 2007-08-13 Ville Vainio <vivainio@gmail.com>
420 425
421 426 * prefilter.py: reverted !c:/bin/foo fix, made % in
422 427 multiline specials work again
423 428
424 429 2007-08-13 Ville Vainio <vivainio@gmail.com>
425 430
426 431 * prefilter.py: Take more care to special-case !, so that
427 432 !c:/bin/foo.exe works.
428 433
429 434 * setup.py: if we are building eggs, strip all docs and
430 435 examples (it doesn't make sense to bytecompile examples,
431 436 and docs would be in an awkward place anyway).
432 437
433 438 * Ryan Krauss' patch fixes start menu shortcuts when IPython
434 439 is installed into a directory that has spaces in the name.
435 440
436 441 2007-08-13 Fernando Perez <Fernando.Perez@colorado.edu>
437 442
438 443 * IPython/Magic.py (magic_doctest_mode): fix prompt separators in
439 444 doctest profile and %doctest_mode, so they actually generate the
440 445 blank lines needed by doctest to separate individual tests.
441 446
442 447 * IPython/iplib.py (safe_execfile): modify so that running code
443 448 which calls sys.exit(0) (or equivalently, raise SystemExit(0))
444 449 doesn't get a printed traceback. Any other value in sys.exit(),
445 450 including the empty call, still generates a traceback. This
446 451 enables use of %run without having to pass '-e' for codes that
447 452 correctly set the exit status flag.
448 453
449 454 2007-08-12 Fernando Perez <Fernando.Perez@colorado.edu>
450 455
451 456 * IPython/iplib.py (InteractiveShell.post_config_initialization):
452 457 fix problems with doctests failing when run inside IPython due to
453 458 IPython's modifications of sys.displayhook.
454 459
455 460 2007-8-9 Fernando Perez <fperez@planck.colorado.edu>
456 461
457 462 * IPython/ipapi.py (to_user_ns): update to accept a dict as well as
458 463 a string with names.
459 464
460 465 2007-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
461 466
462 467 * IPython/Magic.py (magic_doctest_mode): added new %doctest_mode
463 468 magic to toggle on/off the doctest pasting support without having
464 469 to leave a session to switch to a separate profile.
465 470
466 471 2007-08-08 Fernando Perez <Fernando.Perez@colorado.edu>
467 472
468 473 * IPython/Extensions/ipy_profile_doctest.py (main): fix prompt to
469 474 introduce a blank line between inputs, to conform to doctest
470 475 requirements.
471 476
472 477 * IPython/OInspect.py (Inspector.pinfo): fix another part where
473 478 auto-generated docstrings for new-style classes were showing up.
474 479
475 480 2007-08-07 Fernando Perez <Fernando.Perez@colorado.edu>
476 481
477 482 * api_changes: Add new file to track backward-incompatible
478 483 user-visible changes.
479 484
480 485 2007-08-06 Ville Vainio <vivainio@gmail.com>
481 486
482 487 * ipmaker.py: fix bug where user_config_ns didn't exist at all
483 488 before all the config files were handled.
484 489
485 490 2007-08-04 Fernando Perez <Fernando.Perez@colorado.edu>
486 491
487 492 * IPython/irunner.py (RunnerFactory): Add new factory class for
488 493 creating reusable runners based on filenames.
489 494
490 495 * IPython/Extensions/ipy_profile_doctest.py: New profile for
491 496 doctest support. It sets prompts/exceptions as similar to
492 497 standard Python as possible, so that ipython sessions in this
493 498 profile can be easily pasted as doctests with minimal
494 499 modifications. It also enables pasting of doctests from external
495 500 sources (even if they have leading whitespace), so that you can
496 501 rerun doctests from existing sources.
497 502
498 503 * IPython/iplib.py (_prefilter): fix a buglet where after entering
499 504 some whitespace, the prompt would become a continuation prompt
500 505 with no way of exiting it other than Ctrl-C. This fix brings us
501 506 into conformity with how the default python prompt works.
502 507
503 508 * IPython/Extensions/InterpreterPasteInput.py (prefilter_paste):
504 509 Add support for pasting not only lines that start with '>>>', but
505 510 also with ' >>>'. That is, arbitrary whitespace can now precede
506 511 the prompts. This makes the system useful for pasting doctests
507 512 from docstrings back into a normal session.
508 513
509 514 2007-08-02 Fernando Perez <Fernando.Perez@colorado.edu>
510 515
511 516 * IPython/Shell.py (IPShellEmbed.__call__): fix bug introduced in
512 517 r1357, which had killed multiple invocations of an embedded
513 518 ipython (this means that example-embed has been broken for over 1
514 519 year!!!). Rather than possibly breaking the batch stuff for which
515 520 the code in iplib.py/interact was introduced, I worked around the
516 521 problem in the embedding class in Shell.py. We really need a
517 522 bloody test suite for this code, I'm sick of finding stuff that
518 523 used to work breaking left and right every time I use an old
519 524 feature I hadn't touched in a few months.
520 525 (kill_embedded): Add a new magic that only shows up in embedded
521 526 mode, to allow users to permanently deactivate an embedded instance.
522 527
523 528 2007-08-01 Ville Vainio <vivainio@gmail.com>
524 529
525 530 * iplib.py, ipy_profile_sh.py (runlines): Fix the bug where raw
526 531 history gets out of sync on runlines (e.g. when running macros).
527 532
528 533 2007-07-31 Fernando Perez <Fernando.Perez@colorado.edu>
529 534
530 535 * IPython/Magic.py (magic_colors): fix win32-related error message
531 536 that could appear under *nix when readline was missing. Patch by
532 537 Scott Jackson, closes #175.
533 538
534 539 2007-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
535 540
536 541 * IPython/Extensions/ipy_traits_completer.py: Add a new custom
537 542 completer that it traits-aware, so that traits objects don't show
538 543 all of their internal attributes all the time.
539 544
540 545 * IPython/genutils.py (dir2): moved this code from inside
541 546 completer.py to expose it publicly, so I could use it in the
542 547 wildcards bugfix.
543 548
544 549 * IPython/wildcard.py (NameSpace.__init__): fix a bug reported by
545 550 Stefan with Traits.
546 551
547 552 * IPython/completer.py (Completer.attr_matches): change internal
548 553 var name from 'object' to 'obj', since 'object' is now a builtin
549 554 and this can lead to weird bugs if reusing this code elsewhere.
550 555
551 556 2007-07-25 Fernando Perez <Fernando.Perez@colorado.edu>
552 557
553 558 * IPython/OInspect.py (Inspector.pinfo): fix small glitches in
554 559 'foo?' and update the code to prevent printing of default
555 560 docstrings that started appearing after I added support for
556 561 new-style classes. The approach I'm using isn't ideal (I just
557 562 special-case those strings) but I'm not sure how to more robustly
558 563 differentiate between truly user-written strings and Python's
559 564 automatic ones.
560 565
561 566 2007-07-09 Ville Vainio <vivainio@gmail.com>
562 567
563 568 * completer.py: Applied Matthew Neeley's patch:
564 569 Dynamic attributes from trait_names and _getAttributeNames are added
565 570 to the list of tab completions, but when this happens, the attribute
566 571 list is turned into a set, so the attributes are unordered when
567 572 printed, which makes it hard to find the right completion. This patch
568 573 turns this set back into a list and sort it.
569 574
570 575 2007-07-06 Fernando Perez <Fernando.Perez@colorado.edu>
571 576
572 577 * IPython/OInspect.py (Inspector.pinfo): Add support for new-style
573 578 classes in various inspector functions.
574 579
575 580 2007-06-28 Ville Vainio <vivainio@gmail.com>
576 581
577 582 * shadowns.py, iplib.py, ipapi.py, OInspect.py:
578 583 Implement "shadow" namespace, and callable aliases that reside there.
579 584 Use them by:
580 585
581 586 _ip.defalias('foo',myfunc) # creates _sh.foo that points to myfunc
582 587
583 588 foo hello world
584 589 (gets translated to:)
585 590 _sh.foo(r"""hello world""")
586 591
587 592 In practice, this kind of alias can take the role of a magic function
588 593
589 594 * New generic inspect_object, called on obj? and obj??
590 595
591 596 2007-06-15 Fernando Perez <Fernando.Perez@colorado.edu>
592 597
593 598 * IPython/ultraTB.py (findsource): fix a problem with
594 599 inspect.getfile that can cause crashes during traceback construction.
595 600
596 601 2007-06-14 Ville Vainio <vivainio@gmail.com>
597 602
598 603 * iplib.py (handle_auto): Try to use ascii for printing "--->"
599 604 autocall rewrite indication, becausesometimes unicode fails to print
600 605 properly (and you get ' - - - '). Use plain uncoloured ---> for
601 606 unicode.
602 607
603 608 * shadow history. Usable through "%hist -g <pat>" and "%rep 0123".
604 609
605 610 . pickleshare 'hash' commands (hget, hset, hcompress,
606 611 hdict) for efficient shadow history storage.
607 612
608 613 2007-06-13 Ville Vainio <vivainio@gmail.com>
609 614
610 615 * ipapi.py: _ip.to_user_ns(vars, interactive = True).
611 616 Added kw arg 'interactive', tell whether vars should be visible
612 617 with %whos.
613 618
614 619 2007-06-11 Ville Vainio <vivainio@gmail.com>
615 620
616 621 * pspersistence.py, Magic.py, iplib.py: directory history now saved
617 622 to db
618 623
619 624 * iplib.py: "ipython -c <cmd>" now passes the command through prefilter.
620 625 Also, it exits IPython immediately after evaluating the command (just like
621 626 std python)
622 627
623 628 2007-06-05 Walter Doerwald <walter@livinglogic.de>
624 629
625 630 * IPython/Extensions/ipipe.py: Added a new table icap, which executes a
626 631 Python string and captures the output. (Idea and original patch by
627 632 Stefan van der Walt)
628 633
629 634 2007-06-01 Fernando Perez <Fernando.Perez@colorado.edu>
630 635
631 636 * IPython/ultraTB.py (VerboseTB.text): update printing of
632 637 exception types for Python 2.5 (now all exceptions in the stdlib
633 638 are new-style classes).
634 639
635 640 2007-05-31 Walter Doerwald <walter@livinglogic.de>
636 641
637 642 * IPython/Extensions/igrid.py: Add new commands refresh and
638 643 refresh_timer (mapped to "R"/"F5" and to the menu) which restarts
639 644 the iterator once (refresh) or after every x seconds (refresh_timer).
640 645 Add a working implementation of "searchexpression", where the text
641 646 entered is not the text to search for, but an expression that must
642 647 be true. Added display of shortcuts to the menu. Added commands "pickinput"
643 648 and "pickinputattr" that put the object or attribute under the cursor
644 649 in the input line. Split the statusbar to be able to display the currently
645 650 active refresh interval. (Patch by Nik Tautenhahn)
646 651
647 652 2007-05-29 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
648 653
649 654 * fixing set_term_title to use ctypes as default
650 655
651 656 * fixing set_term_title fallback to work when curent dir
652 657 is on a windows network share
653 658
654 659 2007-05-28 Ville Vainio <vivainio@gmail.com>
655 660
656 661 * %cpaste: strip + with > from left (diffs).
657 662
658 663 * iplib.py: Fix crash when readline not installed
659 664
660 665 2007-05-26 Ville Vainio <vivainio@gmail.com>
661 666
662 667 * generics.py: introduce easy to extend result_display generic
663 668 function (using simplegeneric.py).
664 669
665 670 * Fixed the append functionality of %set.
666 671
667 672 2007-05-25 Ville Vainio <vivainio@gmail.com>
668 673
669 674 * New magic: %rep (fetch / run old commands from history)
670 675
671 676 * New extension: mglob (%mglob magic), for powerful glob / find /filter
672 677 like functionality
673 678
674 679 % maghistory.py: %hist -g PATTERM greps the history for pattern
675 680
676 681 2007-05-24 Walter Doerwald <walter@livinglogic.de>
677 682
678 683 * IPython/Extensions/ipipe.py: Added a Table ihist that can be used to
679 684 browse the IPython input history
680 685
681 686 * IPython/Extensions/ibrowse.py: Added two command to ibrowse: pickinput
682 687 (mapped to "i") can be used to put the object under the curser in the input
683 688 line. pickinputattr (mapped to "I") does the same for the attribute under
684 689 the cursor.
685 690
686 691 2007-05-24 Ville Vainio <vivainio@gmail.com>
687 692
688 693 * Grand magic cleansing (changeset [2380]):
689 694
690 695 * Introduce ipy_legacy.py where the following magics were
691 696 moved:
692 697
693 698 pdef pdoc psource pfile rehash dhist Quit p r automagic autocall
694 699
695 700 If you need them, either use default profile or "import ipy_legacy"
696 701 in your ipy_user_conf.py
697 702
698 703 * Move sh and scipy profile to Extensions from UserConfig. this implies
699 704 you should not edit them, but you don't need to run %upgrade when
700 705 upgrading IPython anymore.
701 706
702 707 * %hist/%history now operates in "raw" mode by default. To get the old
703 708 behaviour, run '%hist -n' (native mode).
704 709
705 710 * split ipy_stock_completers.py to ipy_stock_completers.py and
706 711 ipy_app_completers.py. Stock completers (%cd, import, %run) are now
707 712 installed as default.
708 713
709 714 * sh profile now installs ipy_signals.py, for (hopefully) better ctrl+c
710 715 handling.
711 716
712 717 * iplib.py, ipapi.py: _ip.set_next_input(s) sets the next ("default")
713 718 input if readline is available.
714 719
715 720 2007-05-23 Ville Vainio <vivainio@gmail.com>
716 721
717 722 * macro.py: %store uses __getstate__ properly
718 723
719 724 * exesetup.py: added new setup script for creating
720 725 standalone IPython executables with py2exe (i.e.
721 726 no python installation required).
722 727
723 728 * Removed ipythonrc-scipy, ipy_profile_scipy.py takes
724 729 its place.
725 730
726 731 * rlineimpl.py, genutils.py (get_home_dir): py2exe support
727 732
728 733 2007-05-21 Ville Vainio <vivainio@gmail.com>
729 734
730 735 * platutil_win32.py (set_term_title): handle
731 736 failure of 'title' system call properly.
732 737
733 738 2007-05-17 Walter Doerwald <walter@livinglogic.de>
734 739
735 740 * IPython/Extensions/ipipe.py: Fix xrepr for ifiles.
736 741 (Bug detected by Paul Mueller).
737 742
738 743 2007-05-16 Ville Vainio <vivainio@gmail.com>
739 744
740 745 * ipy_profile_sci.py, ipython_win_post_install.py: Create
741 746 new "sci" profile, effectively a modern version of the old
742 747 "scipy" profile (which is now slated for deprecation).
743 748
744 749 2007-05-15 Ville Vainio <vivainio@gmail.com>
745 750
746 751 * pycolorize.py, pycolor.1: Paul Mueller's patches that
747 752 make pycolorize read input from stdin when run without arguments.
748 753
749 754 * Magic.py: do not require 'PATH' in %rehash/%rehashx. Closes #155
750 755
751 756 * ipy_rehashdir.py: rename ext_rehashdir to ipy_rehashdir, import
752 757 it in sh profile (instead of ipy_system_conf.py).
753 758
754 759 * Magic.py, ipy_rehashdir.py, ipy_profile_sh.py: System command
755 760 aliases are now lower case on windows (MyCommand.exe => mycommand).
756 761
757 762 * macro.py, ipapi.py, iplib.py, Prompts.py: Macro system rehaul.
758 763 Macros are now callable objects that inherit from ipapi.IPyAutocall,
759 764 i.e. get autocalled regardless of system autocall setting.
760 765
761 766 2007-05-10 Fernando Perez <Fernando.Perez@colorado.edu>
762 767
763 768 * IPython/rlineimpl.py: check for clear_history in readline and
764 769 make it a dummy no-op if not available. This function isn't
765 770 guaranteed to be in the API and appeared in Python 2.4, so we need
766 771 to check it ourselves. Also, clean up this file quite a bit.
767 772
768 773 * ipython.1: update man page and full manual with information
769 774 about threads (remove outdated warning). Closes #151.
770 775
771 776 2007-05-09 Fernando Perez <Fernando.Perez@colorado.edu>
772 777
773 778 * IPython/Extensions/ipy_constants.py: Add Gael's constants module
774 779 in trunk (note that this made it into the 0.8.1 release already,
775 780 but the changelogs didn't get coordinated). Many thanks to Gael
776 781 Varoquaux <gael.varoquaux-AT-normalesup.org>
777 782
778 783 2007-05-09 *** Released version 0.8.1
779 784
780 785 2007-05-10 Walter Doerwald <walter@livinglogic.de>
781 786
782 787 * IPython/Extensions/igrid.py: Incorporate html help into
783 788 the module, so we don't have to search for the file.
784 789
785 790 2007-05-02 Fernando Perez <Fernando.Perez@colorado.edu>
786 791
787 792 * test/test_irunner.py (RunnerTestCase._test_runner): Close #147.
788 793
789 794 2007-04-30 Ville Vainio <vivainio@gmail.com>
790 795
791 796 * iplib.py: (pre_config_initialization) Catch UnicodeDecodeError if the
792 797 user has illegal (non-ascii) home directory name
793 798
794 799 2007-04-27 Ville Vainio <vivainio@gmail.com>
795 800
796 801 * platutils_win32.py: implement set_term_title for windows
797 802
798 803 * Update version number
799 804
800 805 * ipy_profile_sh.py: more informative prompt (2 dir levels)
801 806
802 807 2007-04-26 Walter Doerwald <walter@livinglogic.de>
803 808
804 809 * IPython/Extensions/igrid.py: (igrid) Fix bug that surfaced
805 810 when the igrid input raised an exception. (Patch by Nik Tautenhahn,
806 811 bug discovered by Ville).
807 812
808 813 2007-04-26 Ville Vainio <vivainio@gmail.com>
809 814
810 815 * Extensions/ipy_completers.py: Olivier's module completer now
811 816 saves the list of root modules if it takes > 4 secs on the first run.
812 817
813 818 * Magic.py (%rehashx): %rehashx now clears the completer cache
814 819
815 820
816 821 2007-04-26 Fernando Perez <Fernando.Perez@colorado.edu>
817 822
818 823 * ipython.el: fix incorrect color scheme, reported by Stefan.
819 824 Closes #149.
820 825
821 826 * IPython/PyColorize.py (Parser.format2): fix state-handling
822 827 logic. I still don't like how that code handles state, but at
823 828 least now it should be correct, if inelegant. Closes #146.
824 829
825 830 2007-04-25 Ville Vainio <vivainio@gmail.com>
826 831
827 832 * Extensions/ipy_which.py: added extension for %which magic, works
828 833 a lot like unix 'which' but also finds and expands aliases, and
829 834 allows wildcards.
830 835
831 836 * ipapi.py (expand_alias): Now actually *return* the expanded alias,
832 837 as opposed to returning nothing.
833 838
834 839 * UserConfig/ipy_user_conf.py, ipy_profile_sh.py: do not import
835 840 ipy_stock_completers on default profile, do import on sh profile.
836 841
837 842 2007-04-22 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
838 843
839 844 * Fix bug in iplib.py/safe_execfile when launching ipython with a script
840 845 like ipython.py foo.py which raised a IndexError.
841 846
842 847 2007-04-21 Ville Vainio <vivainio@gmail.com>
843 848
844 849 * Extensions/ipy_extutil.py: added extension to manage other ipython
845 850 extensions. Now only supports 'ls' == list extensions.
846 851
847 852 2007-04-20 Fernando Perez <Fernando.Perez@colorado.edu>
848 853
849 854 * IPython/Debugger.py (BdbQuit_excepthook): fix small bug that
850 855 would prevent use of the exception system outside of a running
851 856 IPython instance.
852 857
853 858 2007-04-20 Ville Vainio <vivainio@gmail.com>
854 859
855 860 * Extensions/ipy_render.py: added extension for easy
856 861 interactive text template rendering (to clipboard). Uses Ka-Ping Yee's
857 862 'Iptl' template notation,
858 863
859 864 * Extensions/ipy_completers.py: introduced Olivier Lauzanne's
860 865 safer & faster 'import' completer.
861 866
862 867 * ipapi.py: Introduced new ipapi methods, _ip.defmacro(name, value)
863 868 and _ip.defalias(name, command).
864 869
865 870 * Extensions/ipy_exportdb.py: New extension for exporting all the
866 871 %store'd data in a portable format (normal ipapi calls like
867 872 defmacro() etc.)
868 873
869 874 2007-04-19 Ville Vainio <vivainio@gmail.com>
870 875
871 876 * upgrade_dir.py: skip junk files like *.pyc
872 877
873 878 * Release.py: version number to 0.8.1
874 879
875 880 2007-04-18 Ville Vainio <vivainio@gmail.com>
876 881
877 882 * iplib.py (safe_execfile): make "ipython foo.py" work with 2.5.1c1
878 883 and later on win32.
879 884
880 885 2007-04-16 Ville Vainio <vivainio@gmail.com>
881 886
882 887 * iplib.py (showtraceback): Do not crash when running w/o readline.
883 888
884 889 2007-04-12 Walter Doerwald <walter@livinglogic.de>
885 890
886 891 * IPython/Extensions/ipipe.py: (ils) Directoy listings are now
887 892 sorted (case sensitive with files and dirs mixed).
888 893
889 894 2007-04-10 Fernando Perez <Fernando.Perez@colorado.edu>
890 895
891 896 * IPython/Release.py (version): Open trunk for 0.8.1 development.
892 897
893 898 2007-04-10 *** Released version 0.8.0
894 899
895 900 2007-04-07 Fernando Perez <Fernando.Perez@colorado.edu>
896 901
897 902 * Tag 0.8.0 for release.
898 903
899 904 * IPython/iplib.py (reloadhist): add API function to cleanly
900 905 reload the readline history, which was growing inappropriately on
901 906 every %run call.
902 907
903 908 * win32_manual_post_install.py (run): apply last part of Nicolas
904 909 Pernetty's patch (I'd accidentally applied it in a different
905 910 directory and this particular file didn't get patched).
906 911
907 912 2007-04-05 Fernando Perez <Fernando.Perez@colorado.edu>
908 913
909 914 * IPython/Shell.py (MAIN_THREAD_ID): get rid of my stupid hack to
910 915 find the main thread id and use the proper API call. Thanks to
911 916 Stefan for the fix.
912 917
913 918 * test/test_prefilter.py (esc_handler_tests): udpate one of Dan's
914 919 unit tests to reflect fixed ticket #52, and add more tests sent by
915 920 him.
916 921
917 922 * IPython/iplib.py (raw_input): restore the readline completer
918 923 state on every input, in case third-party code messed it up.
919 924 (_prefilter): revert recent addition of early-escape checks which
920 925 prevent many valid alias calls from working.
921 926
922 927 * IPython/Shell.py (MTInteractiveShell.runcode): add a tracking
923 928 flag for sigint handler so we don't run a full signal() call on
924 929 each runcode access.
925 930
926 931 * IPython/Magic.py (magic_whos): small improvement to diagnostic
927 932 message.
928 933
929 934 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
930 935
931 936 * IPython/Shell.py (sigint_handler): I *THINK* I finally got
932 937 asynchronous exceptions working, i.e., Ctrl-C can actually
933 938 interrupt long-running code in the multithreaded shells.
934 939
935 940 This is using Tomer Filiba's great ctypes-based trick:
936 941 http://sebulba.wikispaces.com/recipe+thread2. I'd already tried
937 942 this in the past, but hadn't been able to make it work before. So
938 943 far it looks like it's actually running, but this needs more
939 944 testing. If it really works, I'll be *very* happy, and we'll owe
940 945 a huge thank you to Tomer. My current implementation is ugly,
941 946 hackish and uses nasty globals, but I don't want to try and clean
942 947 anything up until we know if it actually works.
943 948
944 949 NOTE: this feature needs ctypes to work. ctypes is included in
945 950 Python2.5, but 2.4 users will need to manually install it. This
946 951 feature makes multi-threaded shells so much more usable that it's
947 952 a minor price to pay (ctypes is very easy to install, already a
948 953 requirement for win32 and available in major linux distros).
949 954
950 955 2007-04-04 Ville Vainio <vivainio@gmail.com>
951 956
952 957 * Extensions/ipy_completers.py, ipy_stock_completers.py:
953 958 Moved implementations of 'bundled' completers to ipy_completers.py,
954 959 they are only enabled in ipy_stock_completers.py.
955 960
956 961 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
957 962
958 963 * IPython/PyColorize.py (Parser.format2): Fix identation of
959 964 colorzied output and return early if color scheme is NoColor, to
960 965 avoid unnecessary and expensive tokenization. Closes #131.
961 966
962 967 2007-04-03 Fernando Perez <Fernando.Perez@colorado.edu>
963 968
964 969 * IPython/Debugger.py: disable the use of pydb version 1.17. It
965 970 has a critical bug (a missing import that makes post-mortem not
966 971 work at all). Unfortunately as of this time, this is the version
967 972 shipped with Ubuntu Edgy, so quite a few people have this one. I
968 973 hope Edgy will update to a more recent package.
969 974
970 975 2007-04-02 Fernando Perez <Fernando.Perez@colorado.edu>
971 976
972 977 * IPython/iplib.py (_prefilter): close #52, second part of a patch
973 978 set by Stefan (only the first part had been applied before).
974 979
975 980 * IPython/Extensions/ipy_stock_completers.py (module_completer):
976 981 remove usage of the dangerous pkgutil.walk_packages(). See
977 982 details in comments left in the code.
978 983
979 984 * IPython/Magic.py (magic_whos): add support for numpy arrays
980 985 similar to what we had for Numeric.
981 986
982 987 * IPython/completer.py (IPCompleter.complete): extend the
983 988 complete() call API to support completions by other mechanisms
984 989 than readline. Closes #109.
985 990
986 991 * IPython/iplib.py (safe_execfile): add a safeguard under Win32 to
987 992 protect against a bug in Python's execfile(). Closes #123.
988 993
989 994 2007-04-01 Fernando Perez <Fernando.Perez@colorado.edu>
990 995
991 996 * IPython/iplib.py (split_user_input): ensure that when splitting
992 997 user input, the part that can be treated as a python name is pure
993 998 ascii (Python identifiers MUST be pure ascii). Part of the
994 999 ongoing Unicode support work.
995 1000
996 1001 * IPython/Prompts.py (prompt_specials_color): Add \N for the
997 1002 actual prompt number, without any coloring. This allows users to
998 1003 produce numbered prompts with their own colors. Added after a
999 1004 report/request by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
1000 1005
1001 1006 2007-03-31 Walter Doerwald <walter@livinglogic.de>
1002 1007
1003 1008 * IPython/Extensions/igrid.py: Map the return key
1004 1009 to enter() and shift-return to enterattr().
1005 1010
1006 1011 2007-03-30 Fernando Perez <Fernando.Perez@colorado.edu>
1007 1012
1008 1013 * IPython/Magic.py (magic_psearch): add unicode support by
1009 1014 encoding to ascii the input, since this routine also only deals
1010 1015 with valid Python names. Fixes a bug reported by Stefan.
1011 1016
1012 1017 2007-03-29 Fernando Perez <Fernando.Perez@colorado.edu>
1013 1018
1014 1019 * IPython/Magic.py (_inspect): convert unicode input into ascii
1015 1020 before trying to evaluate it as a Python identifier. This fixes a
1016 1021 problem that the new unicode support had introduced when analyzing
1017 1022 long definition lines for functions.
1018 1023
1019 1024 2007-03-24 Walter Doerwald <walter@livinglogic.de>
1020 1025
1021 1026 * IPython/Extensions/igrid.py: Fix picking. Using
1022 1027 igrid with wxPython 2.6 and -wthread should work now.
1023 1028 igrid.display() simply tries to create a frame without
1024 1029 an application. Only if this fails an application is created.
1025 1030
1026 1031 2007-03-23 Walter Doerwald <walter@livinglogic.de>
1027 1032
1028 1033 * IPython/Extensions/path.py: Updated to version 2.2.
1029 1034
1030 1035 2007-03-23 Ville Vainio <vivainio@gmail.com>
1031 1036
1032 1037 * iplib.py: recursive alias expansion now works better, so that
1033 1038 cases like 'top' -> 'd:/cygwin/top' -> 'ls :/cygwin/top'
1034 1039 doesn't trip up the process, if 'd' has been aliased to 'ls'.
1035 1040
1036 1041 * Extensions/ipy_gnuglobal.py added, provides %global magic
1037 1042 for users of http://www.gnu.org/software/global
1038 1043
1039 1044 * iplib.py: '!command /?' now doesn't invoke IPython's help system.
1040 1045 Closes #52. Patch by Stefan van der Walt.
1041 1046
1042 1047 2007-03-23 Fernando Perez <Fernando.Perez@colorado.edu>
1043 1048
1044 1049 * IPython/FakeModule.py (FakeModule.__init__): Small fix to
1045 1050 respect the __file__ attribute when using %run. Thanks to a bug
1046 1051 report by Sebastian Rooks <sebastian.rooks-AT-free.fr>.
1047 1052
1048 1053 2007-03-22 Fernando Perez <Fernando.Perez@colorado.edu>
1049 1054
1050 1055 * IPython/iplib.py (raw_input): Fix mishandling of unicode at
1051 1056 input. Patch sent by Stefan.
1052 1057
1053 1058 2007-03-20 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
1054 1059 * IPython/Extensions/ipy_stock_completer.py
1055 1060 shlex_split, fix bug in shlex_split. len function
1056 1061 call was missing an if statement. Caused shlex_split to
1057 1062 sometimes return "" as last element.
1058 1063
1059 1064 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
1060 1065
1061 1066 * IPython/completer.py
1062 1067 (IPCompleter.file_matches.single_dir_expand): fix a problem
1063 1068 reported by Stefan, where directories containign a single subdir
1064 1069 would be completed too early.
1065 1070
1066 1071 * IPython/Shell.py (_load_pylab): Make the execution of 'from
1067 1072 pylab import *' when -pylab is given be optional. A new flag,
1068 1073 pylab_import_all controls this behavior, the default is True for
1069 1074 backwards compatibility.
1070 1075
1071 1076 * IPython/ultraTB.py (_formatTracebackLines): Added (slightly
1072 1077 modified) R. Bernstein's patch for fully syntax highlighted
1073 1078 tracebacks. The functionality is also available under ultraTB for
1074 1079 non-ipython users (someone using ultraTB but outside an ipython
1075 1080 session). They can select the color scheme by setting the
1076 1081 module-level global DEFAULT_SCHEME. The highlight functionality
1077 1082 also works when debugging.
1078 1083
1079 1084 * IPython/genutils.py (IOStream.close): small patch by
1080 1085 R. Bernstein for improved pydb support.
1081 1086
1082 1087 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
1083 1088 DaveS <davls@telus.net> to improve support of debugging under
1084 1089 NTEmacs, including improved pydb behavior.
1085 1090
1086 1091 * IPython/Magic.py (magic_prun): Fix saving of profile info for
1087 1092 Python 2.5, where the stats object API changed a little. Thanks
1088 1093 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
1089 1094
1090 1095 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
1091 1096 Pernetty's patch to improve support for (X)Emacs under Win32.
1092 1097
1093 1098 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
1094 1099
1095 1100 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
1096 1101 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
1097 1102 a report by Nik Tautenhahn.
1098 1103
1099 1104 2007-03-16 Walter Doerwald <walter@livinglogic.de>
1100 1105
1101 1106 * setup.py: Add the igrid help files to the list of data files
1102 1107 to be installed alongside igrid.
1103 1108 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
1104 1109 Show the input object of the igrid browser as the window tile.
1105 1110 Show the object the cursor is on in the statusbar.
1106 1111
1107 1112 2007-03-15 Ville Vainio <vivainio@gmail.com>
1108 1113
1109 1114 * Extensions/ipy_stock_completers.py: Fixed exception
1110 1115 on mismatching quotes in %run completer. Patch by
1111 1116 Jorgen Stenarson. Closes #127.
1112 1117
1113 1118 2007-03-14 Ville Vainio <vivainio@gmail.com>
1114 1119
1115 1120 * Extensions/ext_rehashdir.py: Do not do auto_alias
1116 1121 in %rehashdir, it clobbers %store'd aliases.
1117 1122
1118 1123 * UserConfig/ipy_profile_sh.py: envpersist.py extension
1119 1124 (beefed up %env) imported for sh profile.
1120 1125
1121 1126 2007-03-10 Walter Doerwald <walter@livinglogic.de>
1122 1127
1123 1128 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
1124 1129 as the default browser.
1125 1130 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
1126 1131 As igrid displays all attributes it ever encounters, fetch() (which has
1127 1132 been renamed to _fetch()) doesn't have to recalculate the display attributes
1128 1133 every time a new item is fetched. This should speed up scrolling.
1129 1134
1130 1135 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
1131 1136
1132 1137 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
1133 1138 Schmolck's recently reported tab-completion bug (my previous one
1134 1139 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
1135 1140
1136 1141 2007-03-09 Walter Doerwald <walter@livinglogic.de>
1137 1142
1138 1143 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
1139 1144 Close help window if exiting igrid.
1140 1145
1141 1146 2007-03-02 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
1142 1147
1143 1148 * IPython/Extensions/ipy_defaults.py: Check if readline is available
1144 1149 before calling functions from readline.
1145 1150
1146 1151 2007-03-02 Walter Doerwald <walter@livinglogic.de>
1147 1152
1148 1153 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
1149 1154 igrid is a wxPython-based display object for ipipe. If your system has
1150 1155 wx installed igrid will be the default display. Without wx ipipe falls
1151 1156 back to ibrowse (which needs curses). If no curses is installed ipipe
1152 1157 falls back to idump.
1153 1158
1154 1159 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
1155 1160
1156 1161 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
1157 1162 my changes from yesterday, they introduced bugs. Will reactivate
1158 1163 once I get a correct solution, which will be much easier thanks to
1159 1164 Dan Milstein's new prefilter test suite.
1160 1165
1161 1166 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
1162 1167
1163 1168 * IPython/iplib.py (split_user_input): fix input splitting so we
1164 1169 don't attempt attribute accesses on things that can't possibly be
1165 1170 valid Python attributes. After a bug report by Alex Schmolck.
1166 1171 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
1167 1172 %magic with explicit % prefix.
1168 1173
1169 1174 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
1170 1175
1171 1176 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
1172 1177 avoid a DeprecationWarning from GTK.
1173 1178
1174 1179 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
1175 1180
1176 1181 * IPython/genutils.py (clock): I modified clock() to return total
1177 1182 time, user+system. This is a more commonly needed metric. I also
1178 1183 introduced the new clocku/clocks to get only user/system time if
1179 1184 one wants those instead.
1180 1185
1181 1186 ***WARNING: API CHANGE*** clock() used to return only user time,
1182 1187 so if you want exactly the same results as before, use clocku
1183 1188 instead.
1184 1189
1185 1190 2007-02-22 Ville Vainio <vivainio@gmail.com>
1186 1191
1187 1192 * IPython/Extensions/ipy_p4.py: Extension for improved
1188 1193 p4 (perforce version control system) experience.
1189 1194 Adds %p4 magic with p4 command completion and
1190 1195 automatic -G argument (marshall output as python dict)
1191 1196
1192 1197 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
1193 1198
1194 1199 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
1195 1200 stop marks.
1196 1201 (ClearingMixin): a simple mixin to easily make a Demo class clear
1197 1202 the screen in between blocks and have empty marquees. The
1198 1203 ClearDemo and ClearIPDemo classes that use it are included.
1199 1204
1200 1205 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
1201 1206
1202 1207 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
1203 1208 protect against exceptions at Python shutdown time. Patch
1204 1209 sumbmitted to upstream.
1205 1210
1206 1211 2007-02-14 Walter Doerwald <walter@livinglogic.de>
1207 1212
1208 1213 * IPython/Extensions/ibrowse.py: If entering the first object level
1209 1214 (i.e. the object for which the browser has been started) fails,
1210 1215 now the error is raised directly (aborting the browser) instead of
1211 1216 running into an empty levels list later.
1212 1217
1213 1218 2007-02-03 Walter Doerwald <walter@livinglogic.de>
1214 1219
1215 1220 * IPython/Extensions/ipipe.py: Add an xrepr implementation
1216 1221 for the noitem object.
1217 1222
1218 1223 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
1219 1224
1220 1225 * IPython/completer.py (Completer.attr_matches): Fix small
1221 1226 tab-completion bug with Enthought Traits objects with units.
1222 1227 Thanks to a bug report by Tom Denniston
1223 1228 <tom.denniston-AT-alum.dartmouth.org>.
1224 1229
1225 1230 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
1226 1231
1227 1232 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
1228 1233 bug where only .ipy or .py would be completed. Once the first
1229 1234 argument to %run has been given, all completions are valid because
1230 1235 they are the arguments to the script, which may well be non-python
1231 1236 filenames.
1232 1237
1233 1238 * IPython/irunner.py (InteractiveRunner.run_source): major updates
1234 1239 to irunner to allow it to correctly support real doctesting of
1235 1240 out-of-process ipython code.
1236 1241
1237 1242 * IPython/Magic.py (magic_cd): Make the setting of the terminal
1238 1243 title an option (-noterm_title) because it completely breaks
1239 1244 doctesting.
1240 1245
1241 1246 * IPython/demo.py: fix IPythonDemo class that was not actually working.
1242 1247
1243 1248 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
1244 1249
1245 1250 * IPython/irunner.py (main): fix small bug where extensions were
1246 1251 not being correctly recognized.
1247 1252
1248 1253 2007-01-23 Walter Doerwald <walter@livinglogic.de>
1249 1254
1250 1255 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
1251 1256 a string containing a single line yields the string itself as the
1252 1257 only item.
1253 1258
1254 1259 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
1255 1260 object if it's the same as the one on the last level (This avoids
1256 1261 infinite recursion for one line strings).
1257 1262
1258 1263 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1259 1264
1260 1265 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
1261 1266 all output streams before printing tracebacks. This ensures that
1262 1267 user output doesn't end up interleaved with traceback output.
1263 1268
1264 1269 2007-01-10 Ville Vainio <vivainio@gmail.com>
1265 1270
1266 1271 * Extensions/envpersist.py: Turbocharged %env that remembers
1267 1272 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
1268 1273 "%env VISUAL=jed".
1269 1274
1270 1275 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
1271 1276
1272 1277 * IPython/iplib.py (showtraceback): ensure that we correctly call
1273 1278 custom handlers in all cases (some with pdb were slipping through,
1274 1279 but I'm not exactly sure why).
1275 1280
1276 1281 * IPython/Debugger.py (Tracer.__init__): added new class to
1277 1282 support set_trace-like usage of IPython's enhanced debugger.
1278 1283
1279 1284 2006-12-24 Ville Vainio <vivainio@gmail.com>
1280 1285
1281 1286 * ipmaker.py: more informative message when ipy_user_conf
1282 1287 import fails (suggest running %upgrade).
1283 1288
1284 1289 * tools/run_ipy_in_profiler.py: Utility to see where
1285 1290 the time during IPython startup is spent.
1286 1291
1287 1292 2006-12-20 Ville Vainio <vivainio@gmail.com>
1288 1293
1289 1294 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
1290 1295
1291 1296 * ipapi.py: Add new ipapi method, expand_alias.
1292 1297
1293 1298 * Release.py: Bump up version to 0.7.4.svn
1294 1299
1295 1300 2006-12-17 Ville Vainio <vivainio@gmail.com>
1296 1301
1297 1302 * Extensions/jobctrl.py: Fixed &cmd arg arg...
1298 1303 to work properly on posix too
1299 1304
1300 1305 * Release.py: Update revnum (version is still just 0.7.3).
1301 1306
1302 1307 2006-12-15 Ville Vainio <vivainio@gmail.com>
1303 1308
1304 1309 * scripts/ipython_win_post_install: create ipython.py in
1305 1310 prefix + "/scripts".
1306 1311
1307 1312 * Release.py: Update version to 0.7.3.
1308 1313
1309 1314 2006-12-14 Ville Vainio <vivainio@gmail.com>
1310 1315
1311 1316 * scripts/ipython_win_post_install: Overwrite old shortcuts
1312 1317 if they already exist
1313 1318
1314 1319 * Release.py: release 0.7.3rc2
1315 1320
1316 1321 2006-12-13 Ville Vainio <vivainio@gmail.com>
1317 1322
1318 1323 * Branch and update Release.py for 0.7.3rc1
1319 1324
1320 1325 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
1321 1326
1322 1327 * IPython/Shell.py (IPShellWX): update for current WX naming
1323 1328 conventions, to avoid a deprecation warning with current WX
1324 1329 versions. Thanks to a report by Danny Shevitz.
1325 1330
1326 1331 2006-12-12 Ville Vainio <vivainio@gmail.com>
1327 1332
1328 1333 * ipmaker.py: apply david cournapeau's patch to make
1329 1334 import_some work properly even when ipythonrc does
1330 1335 import_some on empty list (it was an old bug!).
1331 1336
1332 1337 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
1333 1338 Add deprecation note to ipythonrc and a url to wiki
1334 1339 in ipy_user_conf.py
1335 1340
1336 1341
1337 1342 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
1338 1343 as if it was typed on IPython command prompt, i.e.
1339 1344 as IPython script.
1340 1345
1341 1346 * example-magic.py, magic_grepl.py: remove outdated examples
1342 1347
1343 1348 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
1344 1349
1345 1350 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
1346 1351 is called before any exception has occurred.
1347 1352
1348 1353 2006-12-08 Ville Vainio <vivainio@gmail.com>
1349 1354
1350 1355 * Extensions/ipy_stock_completers.py: fix cd completer
1351 1356 to translate /'s to \'s again.
1352 1357
1353 1358 * completer.py: prevent traceback on file completions w/
1354 1359 backslash.
1355 1360
1356 1361 * Release.py: Update release number to 0.7.3b3 for release
1357 1362
1358 1363 2006-12-07 Ville Vainio <vivainio@gmail.com>
1359 1364
1360 1365 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
1361 1366 while executing external code. Provides more shell-like behaviour
1362 1367 and overall better response to ctrl + C / ctrl + break.
1363 1368
1364 1369 * tools/make_tarball.py: new script to create tarball straight from svn
1365 1370 (setup.py sdist doesn't work on win32).
1366 1371
1367 1372 * Extensions/ipy_stock_completers.py: fix cd completer to give up
1368 1373 on dirnames with spaces and use the default completer instead.
1369 1374
1370 1375 * Revision.py: Change version to 0.7.3b2 for release.
1371 1376
1372 1377 2006-12-05 Ville Vainio <vivainio@gmail.com>
1373 1378
1374 1379 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
1375 1380 pydb patch 4 (rm debug printing, py 2.5 checking)
1376 1381
1377 1382 2006-11-30 Walter Doerwald <walter@livinglogic.de>
1378 1383 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
1379 1384 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
1380 1385 "refreshfind" (mapped to "R") does the same but tries to go back to the same
1381 1386 object the cursor was on before the refresh. The command "markrange" is
1382 1387 mapped to "%" now.
1383 1388 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
1384 1389
1385 1390 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
1386 1391
1387 1392 * IPython/Magic.py (magic_debug): new %debug magic to activate the
1388 1393 interactive debugger on the last traceback, without having to call
1389 1394 %pdb and rerun your code. Made minor changes in various modules,
1390 1395 should automatically recognize pydb if available.
1391 1396
1392 1397 2006-11-28 Ville Vainio <vivainio@gmail.com>
1393 1398
1394 1399 * completer.py: If the text start with !, show file completions
1395 1400 properly. This helps when trying to complete command name
1396 1401 for shell escapes.
1397 1402
1398 1403 2006-11-27 Ville Vainio <vivainio@gmail.com>
1399 1404
1400 1405 * ipy_stock_completers.py: bzr completer submitted by Stefan van
1401 1406 der Walt. Clean up svn and hg completers by using a common
1402 1407 vcs_completer.
1403 1408
1404 1409 2006-11-26 Ville Vainio <vivainio@gmail.com>
1405 1410
1406 1411 * Remove ipconfig and %config; you should use _ip.options structure
1407 1412 directly instead!
1408 1413
1409 1414 * genutils.py: add wrap_deprecated function for deprecating callables
1410 1415
1411 1416 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
1412 1417 _ip.system instead. ipalias is redundant.
1413 1418
1414 1419 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
1415 1420 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
1416 1421 explicit.
1417 1422
1418 1423 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
1419 1424 completer. Try it by entering 'hg ' and pressing tab.
1420 1425
1421 1426 * macro.py: Give Macro a useful __repr__ method
1422 1427
1423 1428 * Magic.py: %whos abbreviates the typename of Macro for brevity.
1424 1429
1425 1430 2006-11-24 Walter Doerwald <walter@livinglogic.de>
1426 1431 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
1427 1432 we don't get a duplicate ipipe module, where registration of the xrepr
1428 1433 implementation for Text is useless.
1429 1434
1430 1435 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
1431 1436
1432 1437 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
1433 1438
1434 1439 2006-11-24 Ville Vainio <vivainio@gmail.com>
1435 1440
1436 1441 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
1437 1442 try to use "cProfile" instead of the slower pure python
1438 1443 "profile"
1439 1444
1440 1445 2006-11-23 Ville Vainio <vivainio@gmail.com>
1441 1446
1442 1447 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
1443 1448 Qt+IPython+Designer link in documentation.
1444 1449
1445 1450 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
1446 1451 correct Pdb object to %pydb.
1447 1452
1448 1453
1449 1454 2006-11-22 Walter Doerwald <walter@livinglogic.de>
1450 1455 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
1451 1456 generic xrepr(), otherwise the list implementation would kick in.
1452 1457
1453 1458 2006-11-21 Ville Vainio <vivainio@gmail.com>
1454 1459
1455 1460 * upgrade_dir.py: Now actually overwrites a nonmodified user file
1456 1461 with one from UserConfig.
1457 1462
1458 1463 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
1459 1464 it was missing which broke the sh profile.
1460 1465
1461 1466 * completer.py: file completer now uses explicit '/' instead
1462 1467 of os.path.join, expansion of 'foo' was broken on win32
1463 1468 if there was one directory with name 'foobar'.
1464 1469
1465 1470 * A bunch of patches from Kirill Smelkov:
1466 1471
1467 1472 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
1468 1473
1469 1474 * [patch 7/9] Implement %page -r (page in raw mode) -
1470 1475
1471 1476 * [patch 5/9] ScientificPython webpage has moved
1472 1477
1473 1478 * [patch 4/9] The manual mentions %ds, should be %dhist
1474 1479
1475 1480 * [patch 3/9] Kill old bits from %prun doc.
1476 1481
1477 1482 * [patch 1/9] Fix typos here and there.
1478 1483
1479 1484 2006-11-08 Ville Vainio <vivainio@gmail.com>
1480 1485
1481 1486 * completer.py (attr_matches): catch all exceptions raised
1482 1487 by eval of expr with dots.
1483 1488
1484 1489 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
1485 1490
1486 1491 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
1487 1492 input if it starts with whitespace. This allows you to paste
1488 1493 indented input from any editor without manually having to type in
1489 1494 the 'if 1:', which is convenient when working interactively.
1490 1495 Slightly modifed version of a patch by Bo Peng
1491 1496 <bpeng-AT-rice.edu>.
1492 1497
1493 1498 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1494 1499
1495 1500 * IPython/irunner.py (main): modified irunner so it automatically
1496 1501 recognizes the right runner to use based on the extension (.py for
1497 1502 python, .ipy for ipython and .sage for sage).
1498 1503
1499 1504 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
1500 1505 visible in ipapi as ip.config(), to programatically control the
1501 1506 internal rc object. There's an accompanying %config magic for
1502 1507 interactive use, which has been enhanced to match the
1503 1508 funtionality in ipconfig.
1504 1509
1505 1510 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
1506 1511 so it's not just a toggle, it now takes an argument. Add support
1507 1512 for a customizable header when making system calls, as the new
1508 1513 system_header variable in the ipythonrc file.
1509 1514
1510 1515 2006-11-03 Walter Doerwald <walter@livinglogic.de>
1511 1516
1512 1517 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
1513 1518 generic functions (using Philip J. Eby's simplegeneric package).
1514 1519 This makes it possible to customize the display of third-party classes
1515 1520 without having to monkeypatch them. xiter() no longer supports a mode
1516 1521 argument and the XMode class has been removed. The same functionality can
1517 1522 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
1518 1523 One consequence of the switch to generic functions is that xrepr() and
1519 1524 xattrs() implementation must define the default value for the mode
1520 1525 argument themselves and xattrs() implementations must return real
1521 1526 descriptors.
1522 1527
1523 1528 * IPython/external: This new subpackage will contain all third-party
1524 1529 packages that are bundled with IPython. (The first one is simplegeneric).
1525 1530
1526 1531 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
1527 1532 directory which as been dropped in r1703.
1528 1533
1529 1534 * IPython/Extensions/ipipe.py (iless): Fixed.
1530 1535
1531 1536 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
1532 1537
1533 1538 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1534 1539
1535 1540 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
1536 1541 handling in variable expansion so that shells and magics recognize
1537 1542 function local scopes correctly. Bug reported by Brian.
1538 1543
1539 1544 * scripts/ipython: remove the very first entry in sys.path which
1540 1545 Python auto-inserts for scripts, so that sys.path under IPython is
1541 1546 as similar as possible to that under plain Python.
1542 1547
1543 1548 * IPython/completer.py (IPCompleter.file_matches): Fix
1544 1549 tab-completion so that quotes are not closed unless the completion
1545 1550 is unambiguous. After a request by Stefan. Minor cleanups in
1546 1551 ipy_stock_completers.
1547 1552
1548 1553 2006-11-02 Ville Vainio <vivainio@gmail.com>
1549 1554
1550 1555 * ipy_stock_completers.py: Add %run and %cd completers.
1551 1556
1552 1557 * completer.py: Try running custom completer for both
1553 1558 "foo" and "%foo" if the command is just "foo". Ignore case
1554 1559 when filtering possible completions.
1555 1560
1556 1561 * UserConfig/ipy_user_conf.py: install stock completers as default
1557 1562
1558 1563 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
1559 1564 simplified readline history save / restore through a wrapper
1560 1565 function
1561 1566
1562 1567
1563 1568 2006-10-31 Ville Vainio <vivainio@gmail.com>
1564 1569
1565 1570 * strdispatch.py, completer.py, ipy_stock_completers.py:
1566 1571 Allow str_key ("command") in completer hooks. Implement
1567 1572 trivial completer for 'import' (stdlib modules only). Rename
1568 1573 ipy_linux_package_managers.py to ipy_stock_completers.py.
1569 1574 SVN completer.
1570 1575
1571 1576 * Extensions/ledit.py: %magic line editor for easily and
1572 1577 incrementally manipulating lists of strings. The magic command
1573 1578 name is %led.
1574 1579
1575 1580 2006-10-30 Ville Vainio <vivainio@gmail.com>
1576 1581
1577 1582 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
1578 1583 Bernsteins's patches for pydb integration.
1579 1584 http://bashdb.sourceforge.net/pydb/
1580 1585
1581 1586 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
1582 1587 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
1583 1588 custom completer hook to allow the users to implement their own
1584 1589 completers. See ipy_linux_package_managers.py for example. The
1585 1590 hook name is 'complete_command'.
1586 1591
1587 1592 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
1588 1593
1589 1594 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
1590 1595 Numeric leftovers.
1591 1596
1592 1597 * ipython.el (py-execute-region): apply Stefan's patch to fix
1593 1598 garbled results if the python shell hasn't been previously started.
1594 1599
1595 1600 * IPython/genutils.py (arg_split): moved to genutils, since it's a
1596 1601 pretty generic function and useful for other things.
1597 1602
1598 1603 * IPython/OInspect.py (getsource): Add customizable source
1599 1604 extractor. After a request/patch form W. Stein (SAGE).
1600 1605
1601 1606 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
1602 1607 window size to a more reasonable value from what pexpect does,
1603 1608 since their choice causes wrapping bugs with long input lines.
1604 1609
1605 1610 2006-10-28 Ville Vainio <vivainio@gmail.com>
1606 1611
1607 1612 * Magic.py (%run): Save and restore the readline history from
1608 1613 file around %run commands to prevent side effects from
1609 1614 %runned programs that might use readline (e.g. pydb).
1610 1615
1611 1616 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
1612 1617 invoking the pydb enhanced debugger.
1613 1618
1614 1619 2006-10-23 Walter Doerwald <walter@livinglogic.de>
1615 1620
1616 1621 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
1617 1622 call the base class method and propagate the return value to
1618 1623 ifile. This is now done by path itself.
1619 1624
1620 1625 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1621 1626
1622 1627 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
1623 1628 api: set_crash_handler(), to expose the ability to change the
1624 1629 internal crash handler.
1625 1630
1626 1631 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
1627 1632 the various parameters of the crash handler so that apps using
1628 1633 IPython as their engine can customize crash handling. Ipmlemented
1629 1634 at the request of SAGE.
1630 1635
1631 1636 2006-10-14 Ville Vainio <vivainio@gmail.com>
1632 1637
1633 1638 * Magic.py, ipython.el: applied first "safe" part of Rocky
1634 1639 Bernstein's patch set for pydb integration.
1635 1640
1636 1641 * Magic.py (%unalias, %alias): %store'd aliases can now be
1637 1642 removed with '%unalias'. %alias w/o args now shows most
1638 1643 interesting (stored / manually defined) aliases last
1639 1644 where they catch the eye w/o scrolling.
1640 1645
1641 1646 * Magic.py (%rehashx), ext_rehashdir.py: files with
1642 1647 'py' extension are always considered executable, even
1643 1648 when not in PATHEXT environment variable.
1644 1649
1645 1650 2006-10-12 Ville Vainio <vivainio@gmail.com>
1646 1651
1647 1652 * jobctrl.py: Add new "jobctrl" extension for spawning background
1648 1653 processes with "&find /". 'import jobctrl' to try it out. Requires
1649 1654 'subprocess' module, standard in python 2.4+.
1650 1655
1651 1656 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
1652 1657 so if foo -> bar and bar -> baz, then foo -> baz.
1653 1658
1654 1659 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
1655 1660
1656 1661 * IPython/Magic.py (Magic.parse_options): add a new posix option
1657 1662 to allow parsing of input args in magics that doesn't strip quotes
1658 1663 (if posix=False). This also closes %timeit bug reported by
1659 1664 Stefan.
1660 1665
1661 1666 2006-10-03 Ville Vainio <vivainio@gmail.com>
1662 1667
1663 1668 * iplib.py (raw_input, interact): Return ValueError catching for
1664 1669 raw_input. Fixes infinite loop for sys.stdin.close() or
1665 1670 sys.stdout.close().
1666 1671
1667 1672 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1668 1673
1669 1674 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
1670 1675 to help in handling doctests. irunner is now pretty useful for
1671 1676 running standalone scripts and simulate a full interactive session
1672 1677 in a format that can be then pasted as a doctest.
1673 1678
1674 1679 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
1675 1680 on top of the default (useless) ones. This also fixes the nasty
1676 1681 way in which 2.5's Quitter() exits (reverted [1785]).
1677 1682
1678 1683 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
1679 1684 2.5.
1680 1685
1681 1686 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
1682 1687 color scheme is updated as well when color scheme is changed
1683 1688 interactively.
1684 1689
1685 1690 2006-09-27 Ville Vainio <vivainio@gmail.com>
1686 1691
1687 1692 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
1688 1693 infinite loop and just exit. It's a hack, but will do for a while.
1689 1694
1690 1695 2006-08-25 Walter Doerwald <walter@livinglogic.de>
1691 1696
1692 1697 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
1693 1698 the constructor, this makes it possible to get a list of only directories
1694 1699 or only files.
1695 1700
1696 1701 2006-08-12 Ville Vainio <vivainio@gmail.com>
1697 1702
1698 1703 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
1699 1704 they broke unittest
1700 1705
1701 1706 2006-08-11 Ville Vainio <vivainio@gmail.com>
1702 1707
1703 1708 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
1704 1709 by resolving issue properly, i.e. by inheriting FakeModule
1705 1710 from types.ModuleType. Pickling ipython interactive data
1706 1711 should still work as usual (testing appreciated).
1707 1712
1708 1713 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
1709 1714
1710 1715 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
1711 1716 running under python 2.3 with code from 2.4 to fix a bug with
1712 1717 help(). Reported by the Debian maintainers, Norbert Tretkowski
1713 1718 <norbert-AT-tretkowski.de> and Alexandre Fayolle
1714 1719 <afayolle-AT-debian.org>.
1715 1720
1716 1721 2006-08-04 Walter Doerwald <walter@livinglogic.de>
1717 1722
1718 1723 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
1719 1724 (which was displaying "quit" twice).
1720 1725
1721 1726 2006-07-28 Walter Doerwald <walter@livinglogic.de>
1722 1727
1723 1728 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
1724 1729 the mode argument).
1725 1730
1726 1731 2006-07-27 Walter Doerwald <walter@livinglogic.de>
1727 1732
1728 1733 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
1729 1734 not running under IPython.
1730 1735
1731 1736 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
1732 1737 and make it iterable (iterating over the attribute itself). Add two new
1733 1738 magic strings for __xattrs__(): If the string starts with "-", the attribute
1734 1739 will not be displayed in ibrowse's detail view (but it can still be
1735 1740 iterated over). This makes it possible to add attributes that are large
1736 1741 lists or generator methods to the detail view. Replace magic attribute names
1737 1742 and _attrname() and _getattr() with "descriptors": For each type of magic
1738 1743 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
1739 1744 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
1740 1745 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
1741 1746 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
1742 1747 are still supported.
1743 1748
1744 1749 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
1745 1750 fails in ibrowse.fetch(), the exception object is added as the last item
1746 1751 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
1747 1752 a generator throws an exception midway through execution.
1748 1753
1749 1754 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
1750 1755 encoding into methods.
1751 1756
1752 1757 2006-07-26 Ville Vainio <vivainio@gmail.com>
1753 1758
1754 1759 * iplib.py: history now stores multiline input as single
1755 1760 history entries. Patch by Jorgen Cederlof.
1756 1761
1757 1762 2006-07-18 Walter Doerwald <walter@livinglogic.de>
1758 1763
1759 1764 * IPython/Extensions/ibrowse.py: Make cursor visible over
1760 1765 non existing attributes.
1761 1766
1762 1767 2006-07-14 Walter Doerwald <walter@livinglogic.de>
1763 1768
1764 1769 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
1765 1770 error output of the running command doesn't mess up the screen.
1766 1771
1767 1772 2006-07-13 Walter Doerwald <walter@livinglogic.de>
1768 1773
1769 1774 * IPython/Extensions/ipipe.py (isort): Make isort usable without
1770 1775 argument. This sorts the items themselves.
1771 1776
1772 1777 2006-07-12 Walter Doerwald <walter@livinglogic.de>
1773 1778
1774 1779 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
1775 1780 Compile expression strings into code objects. This should speed
1776 1781 up ifilter and friends somewhat.
1777 1782
1778 1783 2006-07-08 Ville Vainio <vivainio@gmail.com>
1779 1784
1780 1785 * Magic.py: %cpaste now strips > from the beginning of lines
1781 1786 to ease pasting quoted code from emails. Contributed by
1782 1787 Stefan van der Walt.
1783 1788
1784 1789 2006-06-29 Ville Vainio <vivainio@gmail.com>
1785 1790
1786 1791 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
1787 1792 mode, patch contributed by Darren Dale. NEEDS TESTING!
1788 1793
1789 1794 2006-06-28 Walter Doerwald <walter@livinglogic.de>
1790 1795
1791 1796 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
1792 1797 a blue background. Fix fetching new display rows when the browser
1793 1798 scrolls more than a screenful (e.g. by using the goto command).
1794 1799
1795 1800 2006-06-27 Ville Vainio <vivainio@gmail.com>
1796 1801
1797 1802 * Magic.py (_inspect, _ofind) Apply David Huard's
1798 1803 patch for displaying the correct docstring for 'property'
1799 1804 attributes.
1800 1805
1801 1806 2006-06-23 Walter Doerwald <walter@livinglogic.de>
1802 1807
1803 1808 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
1804 1809 commands into the methods implementing them.
1805 1810
1806 1811 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
1807 1812
1808 1813 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
1809 1814 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
1810 1815 autoindent support was authored by Jin Liu.
1811 1816
1812 1817 2006-06-22 Walter Doerwald <walter@livinglogic.de>
1813 1818
1814 1819 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
1815 1820 for keymaps with a custom class that simplifies handling.
1816 1821
1817 1822 2006-06-19 Walter Doerwald <walter@livinglogic.de>
1818 1823
1819 1824 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
1820 1825 resizing. This requires Python 2.5 to work.
1821 1826
1822 1827 2006-06-16 Walter Doerwald <walter@livinglogic.de>
1823 1828
1824 1829 * IPython/Extensions/ibrowse.py: Add two new commands to
1825 1830 ibrowse: "hideattr" (mapped to "h") hides the attribute under
1826 1831 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
1827 1832 attributes again. Remapped the help command to "?". Display
1828 1833 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
1829 1834 as keys for the "home" and "end" commands. Add three new commands
1830 1835 to the input mode for "find" and friends: "delend" (CTRL-K)
1831 1836 deletes to the end of line. "incsearchup" searches upwards in the
1832 1837 command history for an input that starts with the text before the cursor.
1833 1838 "incsearchdown" does the same downwards. Removed a bogus mapping of
1834 1839 the x key to "delete".
1835 1840
1836 1841 2006-06-15 Ville Vainio <vivainio@gmail.com>
1837 1842
1838 1843 * iplib.py, hooks.py: Added new generate_prompt hook that can be
1839 1844 used to create prompts dynamically, instead of the "old" way of
1840 1845 assigning "magic" strings to prompt_in1 and prompt_in2. The old
1841 1846 way still works (it's invoked by the default hook), of course.
1842 1847
1843 1848 * Prompts.py: added generate_output_prompt hook for altering output
1844 1849 prompt
1845 1850
1846 1851 * Release.py: Changed version string to 0.7.3.svn.
1847 1852
1848 1853 2006-06-15 Walter Doerwald <walter@livinglogic.de>
1849 1854
1850 1855 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
1851 1856 the call to fetch() always tries to fetch enough data for at least one
1852 1857 full screen. This makes it possible to simply call moveto(0,0,True) in
1853 1858 the constructor. Fix typos and removed the obsolete goto attribute.
1854 1859
1855 1860 2006-06-12 Ville Vainio <vivainio@gmail.com>
1856 1861
1857 1862 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
1858 1863 allowing $variable interpolation within multiline statements,
1859 1864 though so far only with "sh" profile for a testing period.
1860 1865 The patch also enables splitting long commands with \ but it
1861 1866 doesn't work properly yet.
1862 1867
1863 1868 2006-06-12 Walter Doerwald <walter@livinglogic.de>
1864 1869
1865 1870 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
1866 1871 input history and the position of the cursor in the input history for
1867 1872 the find, findbackwards and goto command.
1868 1873
1869 1874 2006-06-10 Walter Doerwald <walter@livinglogic.de>
1870 1875
1871 1876 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
1872 1877 implements the basic functionality of browser commands that require
1873 1878 input. Reimplement the goto, find and findbackwards commands as
1874 1879 subclasses of _CommandInput. Add an input history and keymaps to those
1875 1880 commands. Add "\r" as a keyboard shortcut for the enterdefault and
1876 1881 execute commands.
1877 1882
1878 1883 2006-06-07 Ville Vainio <vivainio@gmail.com>
1879 1884
1880 1885 * iplib.py: ipython mybatch.ipy exits ipython immediately after
1881 1886 running the batch files instead of leaving the session open.
1882 1887
1883 1888 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
1884 1889
1885 1890 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
1886 1891 the original fix was incomplete. Patch submitted by W. Maier.
1887 1892
1888 1893 2006-06-07 Ville Vainio <vivainio@gmail.com>
1889 1894
1890 1895 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
1891 1896 Confirmation prompts can be supressed by 'quiet' option.
1892 1897 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
1893 1898
1894 1899 2006-06-06 *** Released version 0.7.2
1895 1900
1896 1901 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
1897 1902
1898 1903 * IPython/Release.py (version): Made 0.7.2 final for release.
1899 1904 Repo tagged and release cut.
1900 1905
1901 1906 2006-06-05 Ville Vainio <vivainio@gmail.com>
1902 1907
1903 1908 * Magic.py (magic_rehashx): Honor no_alias list earlier in
1904 1909 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
1905 1910
1906 1911 * upgrade_dir.py: try import 'path' module a bit harder
1907 1912 (for %upgrade)
1908 1913
1909 1914 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
1910 1915
1911 1916 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
1912 1917 instead of looping 20 times.
1913 1918
1914 1919 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
1915 1920 correctly at initialization time. Bug reported by Krishna Mohan
1916 1921 Gundu <gkmohan-AT-gmail.com> on the user list.
1917 1922
1918 1923 * IPython/Release.py (version): Mark 0.7.2 version to start
1919 1924 testing for release on 06/06.
1920 1925
1921 1926 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
1922 1927
1923 1928 * scripts/irunner: thin script interface so users don't have to
1924 1929 find the module and call it as an executable, since modules rarely
1925 1930 live in people's PATH.
1926 1931
1927 1932 * IPython/irunner.py (InteractiveRunner.__init__): added
1928 1933 delaybeforesend attribute to control delays with newer versions of
1929 1934 pexpect. Thanks to detailed help from pexpect's author, Noah
1930 1935 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
1931 1936 correctly (it works in NoColor mode).
1932 1937
1933 1938 * IPython/iplib.py (handle_normal): fix nasty crash reported on
1934 1939 SAGE list, from improper log() calls.
1935 1940
1936 1941 2006-05-31 Ville Vainio <vivainio@gmail.com>
1937 1942
1938 1943 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
1939 1944 with args in parens to work correctly with dirs that have spaces.
1940 1945
1941 1946 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
1942 1947
1943 1948 * IPython/Logger.py (Logger.logstart): add option to log raw input
1944 1949 instead of the processed one. A -r flag was added to the
1945 1950 %logstart magic used for controlling logging.
1946 1951
1947 1952 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
1948 1953
1949 1954 * IPython/iplib.py (InteractiveShell.__init__): add check for the
1950 1955 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
1951 1956 recognize the option. After a bug report by Will Maier. This
1952 1957 closes #64 (will do it after confirmation from W. Maier).
1953 1958
1954 1959 * IPython/irunner.py: New module to run scripts as if manually
1955 1960 typed into an interactive environment, based on pexpect. After a
1956 1961 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
1957 1962 ipython-user list. Simple unittests in the tests/ directory.
1958 1963
1959 1964 * tools/release: add Will Maier, OpenBSD port maintainer, to
1960 1965 recepients list. We are now officially part of the OpenBSD ports:
1961 1966 http://www.openbsd.org/ports.html ! Many thanks to Will for the
1962 1967 work.
1963 1968
1964 1969 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
1965 1970
1966 1971 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
1967 1972 so that it doesn't break tkinter apps.
1968 1973
1969 1974 * IPython/iplib.py (_prefilter): fix bug where aliases would
1970 1975 shadow variables when autocall was fully off. Reported by SAGE
1971 1976 author William Stein.
1972 1977
1973 1978 * IPython/OInspect.py (Inspector.__init__): add a flag to control
1974 1979 at what detail level strings are computed when foo? is requested.
1975 1980 This allows users to ask for example that the string form of an
1976 1981 object is only computed when foo?? is called, or even never, by
1977 1982 setting the object_info_string_level >= 2 in the configuration
1978 1983 file. This new option has been added and documented. After a
1979 1984 request by SAGE to be able to control the printing of very large
1980 1985 objects more easily.
1981 1986
1982 1987 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
1983 1988
1984 1989 * IPython/ipmaker.py (make_IPython): remove the ipython call path
1985 1990 from sys.argv, to be 100% consistent with how Python itself works
1986 1991 (as seen for example with python -i file.py). After a bug report
1987 1992 by Jeffrey Collins.
1988 1993
1989 1994 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
1990 1995 nasty bug which was preventing custom namespaces with -pylab,
1991 1996 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
1992 1997 compatibility (long gone from mpl).
1993 1998
1994 1999 * IPython/ipapi.py (make_session): name change: create->make. We
1995 2000 use make in other places (ipmaker,...), it's shorter and easier to
1996 2001 type and say, etc. I'm trying to clean things before 0.7.2 so
1997 2002 that I can keep things stable wrt to ipapi in the chainsaw branch.
1998 2003
1999 2004 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
2000 2005 python-mode recognizes our debugger mode. Add support for
2001 2006 autoindent inside (X)emacs. After a patch sent in by Jin Liu
2002 2007 <m.liu.jin-AT-gmail.com> originally written by
2003 2008 doxgen-AT-newsmth.net (with minor modifications for xemacs
2004 2009 compatibility)
2005 2010
2006 2011 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
2007 2012 tracebacks when walking the stack so that the stack tracking system
2008 2013 in emacs' python-mode can identify the frames correctly.
2009 2014
2010 2015 * IPython/ipmaker.py (make_IPython): make the internal (and
2011 2016 default config) autoedit_syntax value false by default. Too many
2012 2017 users have complained to me (both on and off-list) about problems
2013 2018 with this option being on by default, so I'm making it default to
2014 2019 off. It can still be enabled by anyone via the usual mechanisms.
2015 2020
2016 2021 * IPython/completer.py (Completer.attr_matches): add support for
2017 2022 PyCrust-style _getAttributeNames magic method. Patch contributed
2018 2023 by <mscott-AT-goldenspud.com>. Closes #50.
2019 2024
2020 2025 * IPython/iplib.py (InteractiveShell.__init__): remove the
2021 2026 deletion of exit/quit from __builtin__, which can break
2022 2027 third-party tools like the Zope debugging console. The
2023 2028 %exit/%quit magics remain. In general, it's probably a good idea
2024 2029 not to delete anything from __builtin__, since we never know what
2025 2030 that will break. In any case, python now (for 2.5) will support
2026 2031 'real' exit/quit, so this issue is moot. Closes #55.
2027 2032
2028 2033 * IPython/genutils.py (with_obj): rename the 'with' function to
2029 2034 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
2030 2035 becomes a language keyword. Closes #53.
2031 2036
2032 2037 * IPython/FakeModule.py (FakeModule.__init__): add a proper
2033 2038 __file__ attribute to this so it fools more things into thinking
2034 2039 it is a real module. Closes #59.
2035 2040
2036 2041 * IPython/Magic.py (magic_edit): add -n option to open the editor
2037 2042 at a specific line number. After a patch by Stefan van der Walt.
2038 2043
2039 2044 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
2040 2045
2041 2046 * IPython/iplib.py (edit_syntax_error): fix crash when for some
2042 2047 reason the file could not be opened. After automatic crash
2043 2048 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
2044 2049 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
2045 2050 (_should_recompile): Don't fire editor if using %bg, since there
2046 2051 is no file in the first place. From the same report as above.
2047 2052 (raw_input): protect against faulty third-party prefilters. After
2048 2053 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
2049 2054 while running under SAGE.
2050 2055
2051 2056 2006-05-23 Ville Vainio <vivainio@gmail.com>
2052 2057
2053 2058 * ipapi.py: Stripped down ip.to_user_ns() to work only as
2054 2059 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
2055 2060 now returns None (again), unless dummy is specifically allowed by
2056 2061 ipapi.get(allow_dummy=True).
2057 2062
2058 2063 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
2059 2064
2060 2065 * IPython: remove all 2.2-compatibility objects and hacks from
2061 2066 everywhere, since we only support 2.3 at this point. Docs
2062 2067 updated.
2063 2068
2064 2069 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
2065 2070 Anything requiring extra validation can be turned into a Python
2066 2071 property in the future. I used a property for the db one b/c
2067 2072 there was a nasty circularity problem with the initialization
2068 2073 order, which right now I don't have time to clean up.
2069 2074
2070 2075 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
2071 2076 another locking bug reported by Jorgen. I'm not 100% sure though,
2072 2077 so more testing is needed...
2073 2078
2074 2079 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
2075 2080
2076 2081 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
2077 2082 local variables from any routine in user code (typically executed
2078 2083 with %run) directly into the interactive namespace. Very useful
2079 2084 when doing complex debugging.
2080 2085 (IPythonNotRunning): Changed the default None object to a dummy
2081 2086 whose attributes can be queried as well as called without
2082 2087 exploding, to ease writing code which works transparently both in
2083 2088 and out of ipython and uses some of this API.
2084 2089
2085 2090 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
2086 2091
2087 2092 * IPython/hooks.py (result_display): Fix the fact that our display
2088 2093 hook was using str() instead of repr(), as the default python
2089 2094 console does. This had gone unnoticed b/c it only happened if
2090 2095 %Pprint was off, but the inconsistency was there.
2091 2096
2092 2097 2006-05-15 Ville Vainio <vivainio@gmail.com>
2093 2098
2094 2099 * Oinspect.py: Only show docstring for nonexisting/binary files
2095 2100 when doing object??, closing ticket #62
2096 2101
2097 2102 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
2098 2103
2099 2104 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
2100 2105 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
2101 2106 was being released in a routine which hadn't checked if it had
2102 2107 been the one to acquire it.
2103 2108
2104 2109 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
2105 2110
2106 2111 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
2107 2112
2108 2113 2006-04-11 Ville Vainio <vivainio@gmail.com>
2109 2114
2110 2115 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
2111 2116 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
2112 2117 prefilters, allowing stuff like magics and aliases in the file.
2113 2118
2114 2119 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
2115 2120 added. Supported now are "%clear in" and "%clear out" (clear input and
2116 2121 output history, respectively). Also fixed CachedOutput.flush to
2117 2122 properly flush the output cache.
2118 2123
2119 2124 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
2120 2125 half-success (and fail explicitly).
2121 2126
2122 2127 2006-03-28 Ville Vainio <vivainio@gmail.com>
2123 2128
2124 2129 * iplib.py: Fix quoting of aliases so that only argless ones
2125 2130 are quoted
2126 2131
2127 2132 2006-03-28 Ville Vainio <vivainio@gmail.com>
2128 2133
2129 2134 * iplib.py: Quote aliases with spaces in the name.
2130 2135 "c:\program files\blah\bin" is now legal alias target.
2131 2136
2132 2137 * ext_rehashdir.py: Space no longer allowed as arg
2133 2138 separator, since space is legal in path names.
2134 2139
2135 2140 2006-03-16 Ville Vainio <vivainio@gmail.com>
2136 2141
2137 2142 * upgrade_dir.py: Take path.py from Extensions, correcting
2138 2143 %upgrade magic
2139 2144
2140 2145 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
2141 2146
2142 2147 * hooks.py: Only enclose editor binary in quotes if legal and
2143 2148 necessary (space in the name, and is an existing file). Fixes a bug
2144 2149 reported by Zachary Pincus.
2145 2150
2146 2151 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
2147 2152
2148 2153 * Manual: thanks to a tip on proper color handling for Emacs, by
2149 2154 Eric J Haywiser <ejh1-AT-MIT.EDU>.
2150 2155
2151 2156 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
2152 2157 by applying the provided patch. Thanks to Liu Jin
2153 2158 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
2154 2159 XEmacs/Linux, I'm trusting the submitter that it actually helps
2155 2160 under win32/GNU Emacs. Will revisit if any problems are reported.
2156 2161
2157 2162 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
2158 2163
2159 2164 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
2160 2165 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
2161 2166
2162 2167 2006-03-12 Ville Vainio <vivainio@gmail.com>
2163 2168
2164 2169 * Magic.py (magic_timeit): Added %timeit magic, contributed by
2165 2170 Torsten Marek.
2166 2171
2167 2172 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
2168 2173
2169 2174 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
2170 2175 line ranges works again.
2171 2176
2172 2177 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
2173 2178
2174 2179 * IPython/iplib.py (showtraceback): add back sys.last_traceback
2175 2180 and friends, after a discussion with Zach Pincus on ipython-user.
2176 2181 I'm not 100% sure, but after thinking about it quite a bit, it may
2177 2182 be OK. Testing with the multithreaded shells didn't reveal any
2178 2183 problems, but let's keep an eye out.
2179 2184
2180 2185 In the process, I fixed a few things which were calling
2181 2186 self.InteractiveTB() directly (like safe_execfile), which is a
2182 2187 mistake: ALL exception reporting should be done by calling
2183 2188 self.showtraceback(), which handles state and tab-completion and
2184 2189 more.
2185 2190
2186 2191 2006-03-01 Ville Vainio <vivainio@gmail.com>
2187 2192
2188 2193 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
2189 2194 To use, do "from ipipe import *".
2190 2195
2191 2196 2006-02-24 Ville Vainio <vivainio@gmail.com>
2192 2197
2193 2198 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
2194 2199 "cleanly" and safely than the older upgrade mechanism.
2195 2200
2196 2201 2006-02-21 Ville Vainio <vivainio@gmail.com>
2197 2202
2198 2203 * Magic.py: %save works again.
2199 2204
2200 2205 2006-02-15 Ville Vainio <vivainio@gmail.com>
2201 2206
2202 2207 * Magic.py: %Pprint works again
2203 2208
2204 2209 * Extensions/ipy_sane_defaults.py: Provide everything provided
2205 2210 in default ipythonrc, to make it possible to have a completely empty
2206 2211 ipythonrc (and thus completely rc-file free configuration)
2207 2212
2208 2213 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
2209 2214
2210 2215 * IPython/hooks.py (editor): quote the call to the editor command,
2211 2216 to allow commands with spaces in them. Problem noted by watching
2212 2217 Ian Oswald's video about textpad under win32 at
2213 2218 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
2214 2219
2215 2220 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
2216 2221 describing magics (we haven't used @ for a loong time).
2217 2222
2218 2223 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
2219 2224 contributed by marienz to close
2220 2225 http://www.scipy.net/roundup/ipython/issue53.
2221 2226
2222 2227 2006-02-10 Ville Vainio <vivainio@gmail.com>
2223 2228
2224 2229 * genutils.py: getoutput now works in win32 too
2225 2230
2226 2231 * completer.py: alias and magic completion only invoked
2227 2232 at the first "item" in the line, to avoid "cd %store"
2228 2233 nonsense.
2229 2234
2230 2235 2006-02-09 Ville Vainio <vivainio@gmail.com>
2231 2236
2232 2237 * test/*: Added a unit testing framework (finally).
2233 2238 '%run runtests.py' to run test_*.
2234 2239
2235 2240 * ipapi.py: Exposed runlines and set_custom_exc
2236 2241
2237 2242 2006-02-07 Ville Vainio <vivainio@gmail.com>
2238 2243
2239 2244 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
2240 2245 instead use "f(1 2)" as before.
2241 2246
2242 2247 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
2243 2248
2244 2249 * IPython/demo.py (IPythonDemo): Add new classes to the demo
2245 2250 facilities, for demos processed by the IPython input filter
2246 2251 (IPythonDemo), and for running a script one-line-at-a-time as a
2247 2252 demo, both for pure Python (LineDemo) and for IPython-processed
2248 2253 input (IPythonLineDemo). After a request by Dave Kohel, from the
2249 2254 SAGE team.
2250 2255 (Demo.edit): added an edit() method to the demo objects, to edit
2251 2256 the in-memory copy of the last executed block.
2252 2257
2253 2258 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
2254 2259 processing to %edit, %macro and %save. These commands can now be
2255 2260 invoked on the unprocessed input as it was typed by the user
2256 2261 (without any prefilters applied). After requests by the SAGE team
2257 2262 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
2258 2263
2259 2264 2006-02-01 Ville Vainio <vivainio@gmail.com>
2260 2265
2261 2266 * setup.py, eggsetup.py: easy_install ipython==dev works
2262 2267 correctly now (on Linux)
2263 2268
2264 2269 * ipy_user_conf,ipmaker: user config changes, removed spurious
2265 2270 warnings
2266 2271
2267 2272 * iplib: if rc.banner is string, use it as is.
2268 2273
2269 2274 * Magic: %pycat accepts a string argument and pages it's contents.
2270 2275
2271 2276
2272 2277 2006-01-30 Ville Vainio <vivainio@gmail.com>
2273 2278
2274 2279 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
2275 2280 Now %store and bookmarks work through PickleShare, meaning that
2276 2281 concurrent access is possible and all ipython sessions see the
2277 2282 same database situation all the time, instead of snapshot of
2278 2283 the situation when the session was started. Hence, %bookmark
2279 2284 results are immediately accessible from othes sessions. The database
2280 2285 is also available for use by user extensions. See:
2281 2286 http://www.python.org/pypi/pickleshare
2282 2287
2283 2288 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
2284 2289
2285 2290 * aliases can now be %store'd
2286 2291
2287 2292 * path.py moved to Extensions so that pickleshare does not need
2288 2293 IPython-specific import. Extensions added to pythonpath right
2289 2294 at __init__.
2290 2295
2291 2296 * iplib.py: ipalias deprecated/redundant; aliases are converted and
2292 2297 called with _ip.system and the pre-transformed command string.
2293 2298
2294 2299 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
2295 2300
2296 2301 * IPython/iplib.py (interact): Fix that we were not catching
2297 2302 KeyboardInterrupt exceptions properly. I'm not quite sure why the
2298 2303 logic here had to change, but it's fixed now.
2299 2304
2300 2305 2006-01-29 Ville Vainio <vivainio@gmail.com>
2301 2306
2302 2307 * iplib.py: Try to import pyreadline on Windows.
2303 2308
2304 2309 2006-01-27 Ville Vainio <vivainio@gmail.com>
2305 2310
2306 2311 * iplib.py: Expose ipapi as _ip in builtin namespace.
2307 2312 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
2308 2313 and ip_set_hook (-> _ip.set_hook) redundant. % and !
2309 2314 syntax now produce _ip.* variant of the commands.
2310 2315
2311 2316 * "_ip.options().autoedit_syntax = 2" automatically throws
2312 2317 user to editor for syntax error correction without prompting.
2313 2318
2314 2319 2006-01-27 Ville Vainio <vivainio@gmail.com>
2315 2320
2316 2321 * ipmaker.py: Give "realistic" sys.argv for scripts (without
2317 2322 'ipython' at argv[0]) executed through command line.
2318 2323 NOTE: this DEPRECATES calling ipython with multiple scripts
2319 2324 ("ipython a.py b.py c.py")
2320 2325
2321 2326 * iplib.py, hooks.py: Added configurable input prefilter,
2322 2327 named 'input_prefilter'. See ext_rescapture.py for example
2323 2328 usage.
2324 2329
2325 2330 * ext_rescapture.py, Magic.py: Better system command output capture
2326 2331 through 'var = !ls' (deprecates user-visible %sc). Same notation
2327 2332 applies for magics, 'var = %alias' assigns alias list to var.
2328 2333
2329 2334 * ipapi.py: added meta() for accessing extension-usable data store.
2330 2335
2331 2336 * iplib.py: added InteractiveShell.getapi(). New magics should be
2332 2337 written doing self.getapi() instead of using the shell directly.
2333 2338
2334 2339 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
2335 2340 %store foo >> ~/myfoo.txt to store variables to files (in clean
2336 2341 textual form, not a restorable pickle).
2337 2342
2338 2343 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
2339 2344
2340 2345 * usage.py, Magic.py: added %quickref
2341 2346
2342 2347 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
2343 2348
2344 2349 * GetoptErrors when invoking magics etc. with wrong args
2345 2350 are now more helpful:
2346 2351 GetoptError: option -l not recognized (allowed: "qb" )
2347 2352
2348 2353 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
2349 2354
2350 2355 * IPython/demo.py (Demo.show): Flush stdout after each block, so
2351 2356 computationally intensive blocks don't appear to stall the demo.
2352 2357
2353 2358 2006-01-24 Ville Vainio <vivainio@gmail.com>
2354 2359
2355 2360 * iplib.py, hooks.py: 'result_display' hook can return a non-None
2356 2361 value to manipulate resulting history entry.
2357 2362
2358 2363 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
2359 2364 to instance methods of IPApi class, to make extending an embedded
2360 2365 IPython feasible. See ext_rehashdir.py for example usage.
2361 2366
2362 2367 * Merged 1071-1076 from branches/0.7.1
2363 2368
2364 2369
2365 2370 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
2366 2371
2367 2372 * tools/release (daystamp): Fix build tools to use the new
2368 2373 eggsetup.py script to build lightweight eggs.
2369 2374
2370 2375 * Applied changesets 1062 and 1064 before 0.7.1 release.
2371 2376
2372 2377 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
2373 2378 see the raw input history (without conversions like %ls ->
2374 2379 ipmagic("ls")). After a request from W. Stein, SAGE
2375 2380 (http://modular.ucsd.edu/sage) developer. This information is
2376 2381 stored in the input_hist_raw attribute of the IPython instance, so
2377 2382 developers can access it if needed (it's an InputList instance).
2378 2383
2379 2384 * Versionstring = 0.7.2.svn
2380 2385
2381 2386 * eggsetup.py: A separate script for constructing eggs, creates
2382 2387 proper launch scripts even on Windows (an .exe file in
2383 2388 \python24\scripts).
2384 2389
2385 2390 * ipapi.py: launch_new_instance, launch entry point needed for the
2386 2391 egg.
2387 2392
2388 2393 2006-01-23 Ville Vainio <vivainio@gmail.com>
2389 2394
2390 2395 * Added %cpaste magic for pasting python code
2391 2396
2392 2397 2006-01-22 Ville Vainio <vivainio@gmail.com>
2393 2398
2394 2399 * Merge from branches/0.7.1 into trunk, revs 1052-1057
2395 2400
2396 2401 * Versionstring = 0.7.2.svn
2397 2402
2398 2403 * eggsetup.py: A separate script for constructing eggs, creates
2399 2404 proper launch scripts even on Windows (an .exe file in
2400 2405 \python24\scripts).
2401 2406
2402 2407 * ipapi.py: launch_new_instance, launch entry point needed for the
2403 2408 egg.
2404 2409
2405 2410 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
2406 2411
2407 2412 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
2408 2413 %pfile foo would print the file for foo even if it was a binary.
2409 2414 Now, extensions '.so' and '.dll' are skipped.
2410 2415
2411 2416 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
2412 2417 bug, where macros would fail in all threaded modes. I'm not 100%
2413 2418 sure, so I'm going to put out an rc instead of making a release
2414 2419 today, and wait for feedback for at least a few days.
2415 2420
2416 2421 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
2417 2422 it...) the handling of pasting external code with autoindent on.
2418 2423 To get out of a multiline input, the rule will appear for most
2419 2424 users unchanged: two blank lines or change the indent level
2420 2425 proposed by IPython. But there is a twist now: you can
2421 2426 add/subtract only *one or two spaces*. If you add/subtract three
2422 2427 or more (unless you completely delete the line), IPython will
2423 2428 accept that line, and you'll need to enter a second one of pure
2424 2429 whitespace. I know it sounds complicated, but I can't find a
2425 2430 different solution that covers all the cases, with the right
2426 2431 heuristics. Hopefully in actual use, nobody will really notice
2427 2432 all these strange rules and things will 'just work'.
2428 2433
2429 2434 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
2430 2435
2431 2436 * IPython/iplib.py (interact): catch exceptions which can be
2432 2437 triggered asynchronously by signal handlers. Thanks to an
2433 2438 automatic crash report, submitted by Colin Kingsley
2434 2439 <tercel-AT-gentoo.org>.
2435 2440
2436 2441 2006-01-20 Ville Vainio <vivainio@gmail.com>
2437 2442
2438 2443 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
2439 2444 (%rehashdir, very useful, try it out) of how to extend ipython
2440 2445 with new magics. Also added Extensions dir to pythonpath to make
2441 2446 importing extensions easy.
2442 2447
2443 2448 * %store now complains when trying to store interactively declared
2444 2449 classes / instances of those classes.
2445 2450
2446 2451 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
2447 2452 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
2448 2453 if they exist, and ipy_user_conf.py with some defaults is created for
2449 2454 the user.
2450 2455
2451 2456 * Startup rehashing done by the config file, not InterpreterExec.
2452 2457 This means system commands are available even without selecting the
2453 2458 pysh profile. It's the sensible default after all.
2454 2459
2455 2460 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
2456 2461
2457 2462 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
2458 2463 multiline code with autoindent on working. But I am really not
2459 2464 sure, so this needs more testing. Will commit a debug-enabled
2460 2465 version for now, while I test it some more, so that Ville and
2461 2466 others may also catch any problems. Also made
2462 2467 self.indent_current_str() a method, to ensure that there's no
2463 2468 chance of the indent space count and the corresponding string
2464 2469 falling out of sync. All code needing the string should just call
2465 2470 the method.
2466 2471
2467 2472 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
2468 2473
2469 2474 * IPython/Magic.py (magic_edit): fix check for when users don't
2470 2475 save their output files, the try/except was in the wrong section.
2471 2476
2472 2477 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
2473 2478
2474 2479 * IPython/Magic.py (magic_run): fix __file__ global missing from
2475 2480 script's namespace when executed via %run. After a report by
2476 2481 Vivian.
2477 2482
2478 2483 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
2479 2484 when using python 2.4. The parent constructor changed in 2.4, and
2480 2485 we need to track it directly (we can't call it, as it messes up
2481 2486 readline and tab-completion inside our pdb would stop working).
2482 2487 After a bug report by R. Bernstein <rocky-AT-panix.com>.
2483 2488
2484 2489 2006-01-16 Ville Vainio <vivainio@gmail.com>
2485 2490
2486 2491 * Ipython/magic.py: Reverted back to old %edit functionality
2487 2492 that returns file contents on exit.
2488 2493
2489 2494 * IPython/path.py: Added Jason Orendorff's "path" module to
2490 2495 IPython tree, http://www.jorendorff.com/articles/python/path/.
2491 2496 You can get path objects conveniently through %sc, and !!, e.g.:
2492 2497 sc files=ls
2493 2498 for p in files.paths: # or files.p
2494 2499 print p,p.mtime
2495 2500
2496 2501 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
2497 2502 now work again without considering the exclusion regexp -
2498 2503 hence, things like ',foo my/path' turn to 'foo("my/path")'
2499 2504 instead of syntax error.
2500 2505
2501 2506
2502 2507 2006-01-14 Ville Vainio <vivainio@gmail.com>
2503 2508
2504 2509 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
2505 2510 ipapi decorators for python 2.4 users, options() provides access to rc
2506 2511 data.
2507 2512
2508 2513 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
2509 2514 as path separators (even on Linux ;-). Space character after
2510 2515 backslash (as yielded by tab completer) is still space;
2511 2516 "%cd long\ name" works as expected.
2512 2517
2513 2518 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
2514 2519 as "chain of command", with priority. API stays the same,
2515 2520 TryNext exception raised by a hook function signals that
2516 2521 current hook failed and next hook should try handling it, as
2517 2522 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
2518 2523 requested configurable display hook, which is now implemented.
2519 2524
2520 2525 2006-01-13 Ville Vainio <vivainio@gmail.com>
2521 2526
2522 2527 * IPython/platutils*.py: platform specific utility functions,
2523 2528 so far only set_term_title is implemented (change terminal
2524 2529 label in windowing systems). %cd now changes the title to
2525 2530 current dir.
2526 2531
2527 2532 * IPython/Release.py: Added myself to "authors" list,
2528 2533 had to create new files.
2529 2534
2530 2535 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
2531 2536 shell escape; not a known bug but had potential to be one in the
2532 2537 future.
2533 2538
2534 2539 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
2535 2540 extension API for IPython! See the module for usage example. Fix
2536 2541 OInspect for docstring-less magic functions.
2537 2542
2538 2543
2539 2544 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
2540 2545
2541 2546 * IPython/iplib.py (raw_input): temporarily deactivate all
2542 2547 attempts at allowing pasting of code with autoindent on. It
2543 2548 introduced bugs (reported by Prabhu) and I can't seem to find a
2544 2549 robust combination which works in all cases. Will have to revisit
2545 2550 later.
2546 2551
2547 2552 * IPython/genutils.py: remove isspace() function. We've dropped
2548 2553 2.2 compatibility, so it's OK to use the string method.
2549 2554
2550 2555 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2551 2556
2552 2557 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
2553 2558 matching what NOT to autocall on, to include all python binary
2554 2559 operators (including things like 'and', 'or', 'is' and 'in').
2555 2560 Prompted by a bug report on 'foo & bar', but I realized we had
2556 2561 many more potential bug cases with other operators. The regexp is
2557 2562 self.re_exclude_auto, it's fairly commented.
2558 2563
2559 2564 2006-01-12 Ville Vainio <vivainio@gmail.com>
2560 2565
2561 2566 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
2562 2567 Prettified and hardened string/backslash quoting with ipsystem(),
2563 2568 ipalias() and ipmagic(). Now even \ characters are passed to
2564 2569 %magics, !shell escapes and aliases exactly as they are in the
2565 2570 ipython command line. Should improve backslash experience,
2566 2571 particularly in Windows (path delimiter for some commands that
2567 2572 won't understand '/'), but Unix benefits as well (regexps). %cd
2568 2573 magic still doesn't support backslash path delimiters, though. Also
2569 2574 deleted all pretense of supporting multiline command strings in
2570 2575 !system or %magic commands. Thanks to Jerry McRae for suggestions.
2571 2576
2572 2577 * doc/build_doc_instructions.txt added. Documentation on how to
2573 2578 use doc/update_manual.py, added yesterday. Both files contributed
2574 2579 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
2575 2580 doc/*.sh for deprecation at a later date.
2576 2581
2577 2582 * /ipython.py Added ipython.py to root directory for
2578 2583 zero-installation (tar xzvf ipython.tgz; cd ipython; python
2579 2584 ipython.py) and development convenience (no need to keep doing
2580 2585 "setup.py install" between changes).
2581 2586
2582 2587 * Made ! and !! shell escapes work (again) in multiline expressions:
2583 2588 if 1:
2584 2589 !ls
2585 2590 !!ls
2586 2591
2587 2592 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2588 2593
2589 2594 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
2590 2595 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
2591 2596 module in case-insensitive installation. Was causing crashes
2592 2597 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
2593 2598
2594 2599 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
2595 2600 <marienz-AT-gentoo.org>, closes
2596 2601 http://www.scipy.net/roundup/ipython/issue51.
2597 2602
2598 2603 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
2599 2604
2600 2605 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
2601 2606 problem of excessive CPU usage under *nix and keyboard lag under
2602 2607 win32.
2603 2608
2604 2609 2006-01-10 *** Released version 0.7.0
2605 2610
2606 2611 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
2607 2612
2608 2613 * IPython/Release.py (revision): tag version number to 0.7.0,
2609 2614 ready for release.
2610 2615
2611 2616 * IPython/Magic.py (magic_edit): Add print statement to %edit so
2612 2617 it informs the user of the name of the temp. file used. This can
2613 2618 help if you decide later to reuse that same file, so you know
2614 2619 where to copy the info from.
2615 2620
2616 2621 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
2617 2622
2618 2623 * setup_bdist_egg.py: little script to build an egg. Added
2619 2624 support in the release tools as well.
2620 2625
2621 2626 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
2622 2627
2623 2628 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
2624 2629 version selection (new -wxversion command line and ipythonrc
2625 2630 parameter). Patch contributed by Arnd Baecker
2626 2631 <arnd.baecker-AT-web.de>.
2627 2632
2628 2633 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2629 2634 embedded instances, for variables defined at the interactive
2630 2635 prompt of the embedded ipython. Reported by Arnd.
2631 2636
2632 2637 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
2633 2638 it can be used as a (stateful) toggle, or with a direct parameter.
2634 2639
2635 2640 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
2636 2641 could be triggered in certain cases and cause the traceback
2637 2642 printer not to work.
2638 2643
2639 2644 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
2640 2645
2641 2646 * IPython/iplib.py (_should_recompile): Small fix, closes
2642 2647 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
2643 2648
2644 2649 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
2645 2650
2646 2651 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
2647 2652 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
2648 2653 Moad for help with tracking it down.
2649 2654
2650 2655 * IPython/iplib.py (handle_auto): fix autocall handling for
2651 2656 objects which support BOTH __getitem__ and __call__ (so that f [x]
2652 2657 is left alone, instead of becoming f([x]) automatically).
2653 2658
2654 2659 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
2655 2660 Ville's patch.
2656 2661
2657 2662 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
2658 2663
2659 2664 * IPython/iplib.py (handle_auto): changed autocall semantics to
2660 2665 include 'smart' mode, where the autocall transformation is NOT
2661 2666 applied if there are no arguments on the line. This allows you to
2662 2667 just type 'foo' if foo is a callable to see its internal form,
2663 2668 instead of having it called with no arguments (typically a
2664 2669 mistake). The old 'full' autocall still exists: for that, you
2665 2670 need to set the 'autocall' parameter to 2 in your ipythonrc file.
2666 2671
2667 2672 * IPython/completer.py (Completer.attr_matches): add
2668 2673 tab-completion support for Enthoughts' traits. After a report by
2669 2674 Arnd and a patch by Prabhu.
2670 2675
2671 2676 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
2672 2677
2673 2678 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
2674 2679 Schmolck's patch to fix inspect.getinnerframes().
2675 2680
2676 2681 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
2677 2682 for embedded instances, regarding handling of namespaces and items
2678 2683 added to the __builtin__ one. Multiple embedded instances and
2679 2684 recursive embeddings should work better now (though I'm not sure
2680 2685 I've got all the corner cases fixed, that code is a bit of a brain
2681 2686 twister).
2682 2687
2683 2688 * IPython/Magic.py (magic_edit): added support to edit in-memory
2684 2689 macros (automatically creates the necessary temp files). %edit
2685 2690 also doesn't return the file contents anymore, it's just noise.
2686 2691
2687 2692 * IPython/completer.py (Completer.attr_matches): revert change to
2688 2693 complete only on attributes listed in __all__. I realized it
2689 2694 cripples the tab-completion system as a tool for exploring the
2690 2695 internals of unknown libraries (it renders any non-__all__
2691 2696 attribute off-limits). I got bit by this when trying to see
2692 2697 something inside the dis module.
2693 2698
2694 2699 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
2695 2700
2696 2701 * IPython/iplib.py (InteractiveShell.__init__): add .meta
2697 2702 namespace for users and extension writers to hold data in. This
2698 2703 follows the discussion in
2699 2704 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
2700 2705
2701 2706 * IPython/completer.py (IPCompleter.complete): small patch to help
2702 2707 tab-completion under Emacs, after a suggestion by John Barnard
2703 2708 <barnarj-AT-ccf.org>.
2704 2709
2705 2710 * IPython/Magic.py (Magic.extract_input_slices): added support for
2706 2711 the slice notation in magics to use N-M to represent numbers N...M
2707 2712 (closed endpoints). This is used by %macro and %save.
2708 2713
2709 2714 * IPython/completer.py (Completer.attr_matches): for modules which
2710 2715 define __all__, complete only on those. After a patch by Jeffrey
2711 2716 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
2712 2717 speed up this routine.
2713 2718
2714 2719 * IPython/Logger.py (Logger.log): fix a history handling bug. I
2715 2720 don't know if this is the end of it, but the behavior now is
2716 2721 certainly much more correct. Note that coupled with macros,
2717 2722 slightly surprising (at first) behavior may occur: a macro will in
2718 2723 general expand to multiple lines of input, so upon exiting, the
2719 2724 in/out counters will both be bumped by the corresponding amount
2720 2725 (as if the macro's contents had been typed interactively). Typing
2721 2726 %hist will reveal the intermediate (silently processed) lines.
2722 2727
2723 2728 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
2724 2729 pickle to fail (%run was overwriting __main__ and not restoring
2725 2730 it, but pickle relies on __main__ to operate).
2726 2731
2727 2732 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
2728 2733 using properties, but forgot to make the main InteractiveShell
2729 2734 class a new-style class. Properties fail silently, and
2730 2735 mysteriously, with old-style class (getters work, but
2731 2736 setters don't do anything).
2732 2737
2733 2738 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
2734 2739
2735 2740 * IPython/Magic.py (magic_history): fix history reporting bug (I
2736 2741 know some nasties are still there, I just can't seem to find a
2737 2742 reproducible test case to track them down; the input history is
2738 2743 falling out of sync...)
2739 2744
2740 2745 * IPython/iplib.py (handle_shell_escape): fix bug where both
2741 2746 aliases and system accesses where broken for indented code (such
2742 2747 as loops).
2743 2748
2744 2749 * IPython/genutils.py (shell): fix small but critical bug for
2745 2750 win32 system access.
2746 2751
2747 2752 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
2748 2753
2749 2754 * IPython/iplib.py (showtraceback): remove use of the
2750 2755 sys.last_{type/value/traceback} structures, which are non
2751 2756 thread-safe.
2752 2757 (_prefilter): change control flow to ensure that we NEVER
2753 2758 introspect objects when autocall is off. This will guarantee that
2754 2759 having an input line of the form 'x.y', where access to attribute
2755 2760 'y' has side effects, doesn't trigger the side effect TWICE. It
2756 2761 is important to note that, with autocall on, these side effects
2757 2762 can still happen.
2758 2763 (ipsystem): new builtin, to complete the ip{magic/alias/system}
2759 2764 trio. IPython offers these three kinds of special calls which are
2760 2765 not python code, and it's a good thing to have their call method
2761 2766 be accessible as pure python functions (not just special syntax at
2762 2767 the command line). It gives us a better internal implementation
2763 2768 structure, as well as exposing these for user scripting more
2764 2769 cleanly.
2765 2770
2766 2771 * IPython/macro.py (Macro.__init__): moved macros to a standalone
2767 2772 file. Now that they'll be more likely to be used with the
2768 2773 persistance system (%store), I want to make sure their module path
2769 2774 doesn't change in the future, so that we don't break things for
2770 2775 users' persisted data.
2771 2776
2772 2777 * IPython/iplib.py (autoindent_update): move indentation
2773 2778 management into the _text_ processing loop, not the keyboard
2774 2779 interactive one. This is necessary to correctly process non-typed
2775 2780 multiline input (such as macros).
2776 2781
2777 2782 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
2778 2783 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
2779 2784 which was producing problems in the resulting manual.
2780 2785 (magic_whos): improve reporting of instances (show their class,
2781 2786 instead of simply printing 'instance' which isn't terribly
2782 2787 informative).
2783 2788
2784 2789 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
2785 2790 (minor mods) to support network shares under win32.
2786 2791
2787 2792 * IPython/winconsole.py (get_console_size): add new winconsole
2788 2793 module and fixes to page_dumb() to improve its behavior under
2789 2794 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
2790 2795
2791 2796 * IPython/Magic.py (Macro): simplified Macro class to just
2792 2797 subclass list. We've had only 2.2 compatibility for a very long
2793 2798 time, yet I was still avoiding subclassing the builtin types. No
2794 2799 more (I'm also starting to use properties, though I won't shift to
2795 2800 2.3-specific features quite yet).
2796 2801 (magic_store): added Ville's patch for lightweight variable
2797 2802 persistence, after a request on the user list by Matt Wilkie
2798 2803 <maphew-AT-gmail.com>. The new %store magic's docstring has full
2799 2804 details.
2800 2805
2801 2806 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2802 2807 changed the default logfile name from 'ipython.log' to
2803 2808 'ipython_log.py'. These logs are real python files, and now that
2804 2809 we have much better multiline support, people are more likely to
2805 2810 want to use them as such. Might as well name them correctly.
2806 2811
2807 2812 * IPython/Magic.py: substantial cleanup. While we can't stop
2808 2813 using magics as mixins, due to the existing customizations 'out
2809 2814 there' which rely on the mixin naming conventions, at least I
2810 2815 cleaned out all cross-class name usage. So once we are OK with
2811 2816 breaking compatibility, the two systems can be separated.
2812 2817
2813 2818 * IPython/Logger.py: major cleanup. This one is NOT a mixin
2814 2819 anymore, and the class is a fair bit less hideous as well. New
2815 2820 features were also introduced: timestamping of input, and logging
2816 2821 of output results. These are user-visible with the -t and -o
2817 2822 options to %logstart. Closes
2818 2823 http://www.scipy.net/roundup/ipython/issue11 and a request by
2819 2824 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
2820 2825
2821 2826 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
2822 2827
2823 2828 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
2824 2829 better handle backslashes in paths. See the thread 'More Windows
2825 2830 questions part 2 - \/ characters revisited' on the iypthon user
2826 2831 list:
2827 2832 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
2828 2833
2829 2834 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
2830 2835
2831 2836 (InteractiveShell.__init__): change threaded shells to not use the
2832 2837 ipython crash handler. This was causing more problems than not,
2833 2838 as exceptions in the main thread (GUI code, typically) would
2834 2839 always show up as a 'crash', when they really weren't.
2835 2840
2836 2841 The colors and exception mode commands (%colors/%xmode) have been
2837 2842 synchronized to also take this into account, so users can get
2838 2843 verbose exceptions for their threaded code as well. I also added
2839 2844 support for activating pdb inside this exception handler as well,
2840 2845 so now GUI authors can use IPython's enhanced pdb at runtime.
2841 2846
2842 2847 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
2843 2848 true by default, and add it to the shipped ipythonrc file. Since
2844 2849 this asks the user before proceeding, I think it's OK to make it
2845 2850 true by default.
2846 2851
2847 2852 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
2848 2853 of the previous special-casing of input in the eval loop. I think
2849 2854 this is cleaner, as they really are commands and shouldn't have
2850 2855 a special role in the middle of the core code.
2851 2856
2852 2857 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
2853 2858
2854 2859 * IPython/iplib.py (edit_syntax_error): added support for
2855 2860 automatically reopening the editor if the file had a syntax error
2856 2861 in it. Thanks to scottt who provided the patch at:
2857 2862 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
2858 2863 version committed).
2859 2864
2860 2865 * IPython/iplib.py (handle_normal): add suport for multi-line
2861 2866 input with emtpy lines. This fixes
2862 2867 http://www.scipy.net/roundup/ipython/issue43 and a similar
2863 2868 discussion on the user list.
2864 2869
2865 2870 WARNING: a behavior change is necessarily introduced to support
2866 2871 blank lines: now a single blank line with whitespace does NOT
2867 2872 break the input loop, which means that when autoindent is on, by
2868 2873 default hitting return on the next (indented) line does NOT exit.
2869 2874
2870 2875 Instead, to exit a multiline input you can either have:
2871 2876
2872 2877 - TWO whitespace lines (just hit return again), or
2873 2878 - a single whitespace line of a different length than provided
2874 2879 by the autoindent (add or remove a space).
2875 2880
2876 2881 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
2877 2882 module to better organize all readline-related functionality.
2878 2883 I've deleted FlexCompleter and put all completion clases here.
2879 2884
2880 2885 * IPython/iplib.py (raw_input): improve indentation management.
2881 2886 It is now possible to paste indented code with autoindent on, and
2882 2887 the code is interpreted correctly (though it still looks bad on
2883 2888 screen, due to the line-oriented nature of ipython).
2884 2889 (MagicCompleter.complete): change behavior so that a TAB key on an
2885 2890 otherwise empty line actually inserts a tab, instead of completing
2886 2891 on the entire global namespace. This makes it easier to use the
2887 2892 TAB key for indentation. After a request by Hans Meine
2888 2893 <hans_meine-AT-gmx.net>
2889 2894 (_prefilter): add support so that typing plain 'exit' or 'quit'
2890 2895 does a sensible thing. Originally I tried to deviate as little as
2891 2896 possible from the default python behavior, but even that one may
2892 2897 change in this direction (thread on python-dev to that effect).
2893 2898 Regardless, ipython should do the right thing even if CPython's
2894 2899 '>>>' prompt doesn't.
2895 2900 (InteractiveShell): removed subclassing code.InteractiveConsole
2896 2901 class. By now we'd overridden just about all of its methods: I've
2897 2902 copied the remaining two over, and now ipython is a standalone
2898 2903 class. This will provide a clearer picture for the chainsaw
2899 2904 branch refactoring.
2900 2905
2901 2906 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
2902 2907
2903 2908 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
2904 2909 failures for objects which break when dir() is called on them.
2905 2910
2906 2911 * IPython/FlexCompleter.py (Completer.__init__): Added support for
2907 2912 distinct local and global namespaces in the completer API. This
2908 2913 change allows us to properly handle completion with distinct
2909 2914 scopes, including in embedded instances (this had never really
2910 2915 worked correctly).
2911 2916
2912 2917 Note: this introduces a change in the constructor for
2913 2918 MagicCompleter, as a new global_namespace parameter is now the
2914 2919 second argument (the others were bumped one position).
2915 2920
2916 2921 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
2917 2922
2918 2923 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2919 2924 embedded instances (which can be done now thanks to Vivian's
2920 2925 frame-handling fixes for pdb).
2921 2926 (InteractiveShell.__init__): Fix namespace handling problem in
2922 2927 embedded instances. We were overwriting __main__ unconditionally,
2923 2928 and this should only be done for 'full' (non-embedded) IPython;
2924 2929 embedded instances must respect the caller's __main__. Thanks to
2925 2930 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
2926 2931
2927 2932 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
2928 2933
2929 2934 * setup.py: added download_url to setup(). This registers the
2930 2935 download address at PyPI, which is not only useful to humans
2931 2936 browsing the site, but is also picked up by setuptools (the Eggs
2932 2937 machinery). Thanks to Ville and R. Kern for the info/discussion
2933 2938 on this.
2934 2939
2935 2940 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
2936 2941
2937 2942 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
2938 2943 This brings a lot of nice functionality to the pdb mode, which now
2939 2944 has tab-completion, syntax highlighting, and better stack handling
2940 2945 than before. Many thanks to Vivian De Smedt
2941 2946 <vivian-AT-vdesmedt.com> for the original patches.
2942 2947
2943 2948 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
2944 2949
2945 2950 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
2946 2951 sequence to consistently accept the banner argument. The
2947 2952 inconsistency was tripping SAGE, thanks to Gary Zablackis
2948 2953 <gzabl-AT-yahoo.com> for the report.
2949 2954
2950 2955 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2951 2956
2952 2957 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2953 2958 Fix bug where a naked 'alias' call in the ipythonrc file would
2954 2959 cause a crash. Bug reported by Jorgen Stenarson.
2955 2960
2956 2961 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2957 2962
2958 2963 * IPython/ipmaker.py (make_IPython): cleanups which should improve
2959 2964 startup time.
2960 2965
2961 2966 * IPython/iplib.py (runcode): my globals 'fix' for embedded
2962 2967 instances had introduced a bug with globals in normal code. Now
2963 2968 it's working in all cases.
2964 2969
2965 2970 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
2966 2971 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
2967 2972 has been introduced to set the default case sensitivity of the
2968 2973 searches. Users can still select either mode at runtime on a
2969 2974 per-search basis.
2970 2975
2971 2976 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
2972 2977
2973 2978 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
2974 2979 attributes in wildcard searches for subclasses. Modified version
2975 2980 of a patch by Jorgen.
2976 2981
2977 2982 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
2978 2983
2979 2984 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
2980 2985 embedded instances. I added a user_global_ns attribute to the
2981 2986 InteractiveShell class to handle this.
2982 2987
2983 2988 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
2984 2989
2985 2990 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
2986 2991 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
2987 2992 (reported under win32, but may happen also in other platforms).
2988 2993 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
2989 2994
2990 2995 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
2991 2996
2992 2997 * IPython/Magic.py (magic_psearch): new support for wildcard
2993 2998 patterns. Now, typing ?a*b will list all names which begin with a
2994 2999 and end in b, for example. The %psearch magic has full
2995 3000 docstrings. Many thanks to JΓΆrgen Stenarson
2996 3001 <jorgen.stenarson-AT-bostream.nu>, author of the patches
2997 3002 implementing this functionality.
2998 3003
2999 3004 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
3000 3005
3001 3006 * Manual: fixed long-standing annoyance of double-dashes (as in
3002 3007 --prefix=~, for example) being stripped in the HTML version. This
3003 3008 is a latex2html bug, but a workaround was provided. Many thanks
3004 3009 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
3005 3010 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
3006 3011 rolling. This seemingly small issue had tripped a number of users
3007 3012 when first installing, so I'm glad to see it gone.
3008 3013
3009 3014 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
3010 3015
3011 3016 * IPython/Extensions/numeric_formats.py: fix missing import,
3012 3017 reported by Stephen Walton.
3013 3018
3014 3019 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
3015 3020
3016 3021 * IPython/demo.py: finish demo module, fully documented now.
3017 3022
3018 3023 * IPython/genutils.py (file_read): simple little utility to read a
3019 3024 file and ensure it's closed afterwards.
3020 3025
3021 3026 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
3022 3027
3023 3028 * IPython/demo.py (Demo.__init__): added support for individually
3024 3029 tagging blocks for automatic execution.
3025 3030
3026 3031 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
3027 3032 syntax-highlighted python sources, requested by John.
3028 3033
3029 3034 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
3030 3035
3031 3036 * IPython/demo.py (Demo.again): fix bug where again() blocks after
3032 3037 finishing.
3033 3038
3034 3039 * IPython/genutils.py (shlex_split): moved from Magic to here,
3035 3040 where all 2.2 compatibility stuff lives. I needed it for demo.py.
3036 3041
3037 3042 * IPython/demo.py (Demo.__init__): added support for silent
3038 3043 blocks, improved marks as regexps, docstrings written.
3039 3044 (Demo.__init__): better docstring, added support for sys.argv.
3040 3045
3041 3046 * IPython/genutils.py (marquee): little utility used by the demo
3042 3047 code, handy in general.
3043 3048
3044 3049 * IPython/demo.py (Demo.__init__): new class for interactive
3045 3050 demos. Not documented yet, I just wrote it in a hurry for
3046 3051 scipy'05. Will docstring later.
3047 3052
3048 3053 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
3049 3054
3050 3055 * IPython/Shell.py (sigint_handler): Drastic simplification which
3051 3056 also seems to make Ctrl-C work correctly across threads! This is
3052 3057 so simple, that I can't beleive I'd missed it before. Needs more
3053 3058 testing, though.
3054 3059 (KBINT): Never mind, revert changes. I'm sure I'd tried something
3055 3060 like this before...
3056 3061
3057 3062 * IPython/genutils.py (get_home_dir): add protection against
3058 3063 non-dirs in win32 registry.
3059 3064
3060 3065 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
3061 3066 bug where dict was mutated while iterating (pysh crash).
3062 3067
3063 3068 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
3064 3069
3065 3070 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
3066 3071 spurious newlines added by this routine. After a report by
3067 3072 F. Mantegazza.
3068 3073
3069 3074 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
3070 3075
3071 3076 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
3072 3077 calls. These were a leftover from the GTK 1.x days, and can cause
3073 3078 problems in certain cases (after a report by John Hunter).
3074 3079
3075 3080 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
3076 3081 os.getcwd() fails at init time. Thanks to patch from David Remahl
3077 3082 <chmod007-AT-mac.com>.
3078 3083 (InteractiveShell.__init__): prevent certain special magics from
3079 3084 being shadowed by aliases. Closes
3080 3085 http://www.scipy.net/roundup/ipython/issue41.
3081 3086
3082 3087 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
3083 3088
3084 3089 * IPython/iplib.py (InteractiveShell.complete): Added new
3085 3090 top-level completion method to expose the completion mechanism
3086 3091 beyond readline-based environments.
3087 3092
3088 3093 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
3089 3094
3090 3095 * tools/ipsvnc (svnversion): fix svnversion capture.
3091 3096
3092 3097 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
3093 3098 attribute to self, which was missing. Before, it was set by a
3094 3099 routine which in certain cases wasn't being called, so the
3095 3100 instance could end up missing the attribute. This caused a crash.
3096 3101 Closes http://www.scipy.net/roundup/ipython/issue40.
3097 3102
3098 3103 2005-08-16 Fernando Perez <fperez@colorado.edu>
3099 3104
3100 3105 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
3101 3106 contains non-string attribute. Closes
3102 3107 http://www.scipy.net/roundup/ipython/issue38.
3103 3108
3104 3109 2005-08-14 Fernando Perez <fperez@colorado.edu>
3105 3110
3106 3111 * tools/ipsvnc: Minor improvements, to add changeset info.
3107 3112
3108 3113 2005-08-12 Fernando Perez <fperez@colorado.edu>
3109 3114
3110 3115 * IPython/iplib.py (runsource): remove self.code_to_run_src
3111 3116 attribute. I realized this is nothing more than
3112 3117 '\n'.join(self.buffer), and having the same data in two different
3113 3118 places is just asking for synchronization bugs. This may impact
3114 3119 people who have custom exception handlers, so I need to warn
3115 3120 ipython-dev about it (F. Mantegazza may use them).
3116 3121
3117 3122 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
3118 3123
3119 3124 * IPython/genutils.py: fix 2.2 compatibility (generators)
3120 3125
3121 3126 2005-07-18 Fernando Perez <fperez@colorado.edu>
3122 3127
3123 3128 * IPython/genutils.py (get_home_dir): fix to help users with
3124 3129 invalid $HOME under win32.
3125 3130
3126 3131 2005-07-17 Fernando Perez <fperez@colorado.edu>
3127 3132
3128 3133 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
3129 3134 some old hacks and clean up a bit other routines; code should be
3130 3135 simpler and a bit faster.
3131 3136
3132 3137 * IPython/iplib.py (interact): removed some last-resort attempts
3133 3138 to survive broken stdout/stderr. That code was only making it
3134 3139 harder to abstract out the i/o (necessary for gui integration),
3135 3140 and the crashes it could prevent were extremely rare in practice
3136 3141 (besides being fully user-induced in a pretty violent manner).
3137 3142
3138 3143 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
3139 3144 Nothing major yet, but the code is simpler to read; this should
3140 3145 make it easier to do more serious modifications in the future.
3141 3146
3142 3147 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
3143 3148 which broke in .15 (thanks to a report by Ville).
3144 3149
3145 3150 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
3146 3151 be quite correct, I know next to nothing about unicode). This
3147 3152 will allow unicode strings to be used in prompts, amongst other
3148 3153 cases. It also will prevent ipython from crashing when unicode
3149 3154 shows up unexpectedly in many places. If ascii encoding fails, we
3150 3155 assume utf_8. Currently the encoding is not a user-visible
3151 3156 setting, though it could be made so if there is demand for it.
3152 3157
3153 3158 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
3154 3159
3155 3160 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
3156 3161
3157 3162 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
3158 3163
3159 3164 * IPython/genutils.py: Add 2.2 compatibility here, so all other
3160 3165 code can work transparently for 2.2/2.3.
3161 3166
3162 3167 2005-07-16 Fernando Perez <fperez@colorado.edu>
3163 3168
3164 3169 * IPython/ultraTB.py (ExceptionColors): Make a global variable
3165 3170 out of the color scheme table used for coloring exception
3166 3171 tracebacks. This allows user code to add new schemes at runtime.
3167 3172 This is a minimally modified version of the patch at
3168 3173 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
3169 3174 for the contribution.
3170 3175
3171 3176 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
3172 3177 slightly modified version of the patch in
3173 3178 http://www.scipy.net/roundup/ipython/issue34, which also allows me
3174 3179 to remove the previous try/except solution (which was costlier).
3175 3180 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
3176 3181
3177 3182 2005-06-08 Fernando Perez <fperez@colorado.edu>
3178 3183
3179 3184 * IPython/iplib.py (write/write_err): Add methods to abstract all
3180 3185 I/O a bit more.
3181 3186
3182 3187 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
3183 3188 warning, reported by Aric Hagberg, fix by JD Hunter.
3184 3189
3185 3190 2005-06-02 *** Released version 0.6.15
3186 3191
3187 3192 2005-06-01 Fernando Perez <fperez@colorado.edu>
3188 3193
3189 3194 * IPython/iplib.py (MagicCompleter.file_matches): Fix
3190 3195 tab-completion of filenames within open-quoted strings. Note that
3191 3196 this requires that in ~/.ipython/ipythonrc, users change the
3192 3197 readline delimiters configuration to read:
3193 3198
3194 3199 readline_remove_delims -/~
3195 3200
3196 3201
3197 3202 2005-05-31 *** Released version 0.6.14
3198 3203
3199 3204 2005-05-29 Fernando Perez <fperez@colorado.edu>
3200 3205
3201 3206 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
3202 3207 with files not on the filesystem. Reported by Eliyahu Sandler
3203 3208 <eli@gondolin.net>
3204 3209
3205 3210 2005-05-22 Fernando Perez <fperez@colorado.edu>
3206 3211
3207 3212 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
3208 3213 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
3209 3214
3210 3215 2005-05-19 Fernando Perez <fperez@colorado.edu>
3211 3216
3212 3217 * IPython/iplib.py (safe_execfile): close a file which could be
3213 3218 left open (causing problems in win32, which locks open files).
3214 3219 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
3215 3220
3216 3221 2005-05-18 Fernando Perez <fperez@colorado.edu>
3217 3222
3218 3223 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
3219 3224 keyword arguments correctly to safe_execfile().
3220 3225
3221 3226 2005-05-13 Fernando Perez <fperez@colorado.edu>
3222 3227
3223 3228 * ipython.1: Added info about Qt to manpage, and threads warning
3224 3229 to usage page (invoked with --help).
3225 3230
3226 3231 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
3227 3232 new matcher (it goes at the end of the priority list) to do
3228 3233 tab-completion on named function arguments. Submitted by George
3229 3234 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
3230 3235 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
3231 3236 for more details.
3232 3237
3233 3238 * IPython/Magic.py (magic_run): Added new -e flag to ignore
3234 3239 SystemExit exceptions in the script being run. Thanks to a report
3235 3240 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
3236 3241 producing very annoying behavior when running unit tests.
3237 3242
3238 3243 2005-05-12 Fernando Perez <fperez@colorado.edu>
3239 3244
3240 3245 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
3241 3246 which I'd broken (again) due to a changed regexp. In the process,
3242 3247 added ';' as an escape to auto-quote the whole line without
3243 3248 splitting its arguments. Thanks to a report by Jerry McRae
3244 3249 <qrs0xyc02-AT-sneakemail.com>.
3245 3250
3246 3251 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
3247 3252 possible crashes caused by a TokenError. Reported by Ed Schofield
3248 3253 <schofield-AT-ftw.at>.
3249 3254
3250 3255 2005-05-06 Fernando Perez <fperez@colorado.edu>
3251 3256
3252 3257 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
3253 3258
3254 3259 2005-04-29 Fernando Perez <fperez@colorado.edu>
3255 3260
3256 3261 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
3257 3262 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
3258 3263 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
3259 3264 which provides support for Qt interactive usage (similar to the
3260 3265 existing one for WX and GTK). This had been often requested.
3261 3266
3262 3267 2005-04-14 *** Released version 0.6.13
3263 3268
3264 3269 2005-04-08 Fernando Perez <fperez@colorado.edu>
3265 3270
3266 3271 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
3267 3272 from _ofind, which gets called on almost every input line. Now,
3268 3273 we only try to get docstrings if they are actually going to be
3269 3274 used (the overhead of fetching unnecessary docstrings can be
3270 3275 noticeable for certain objects, such as Pyro proxies).
3271 3276
3272 3277 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
3273 3278 for completers. For some reason I had been passing them the state
3274 3279 variable, which completers never actually need, and was in
3275 3280 conflict with the rlcompleter API. Custom completers ONLY need to
3276 3281 take the text parameter.
3277 3282
3278 3283 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
3279 3284 work correctly in pysh. I've also moved all the logic which used
3280 3285 to be in pysh.py here, which will prevent problems with future
3281 3286 upgrades. However, this time I must warn users to update their
3282 3287 pysh profile to include the line
3283 3288
3284 3289 import_all IPython.Extensions.InterpreterExec
3285 3290
3286 3291 because otherwise things won't work for them. They MUST also
3287 3292 delete pysh.py and the line
3288 3293
3289 3294 execfile pysh.py
3290 3295
3291 3296 from their ipythonrc-pysh.
3292 3297
3293 3298 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
3294 3299 robust in the face of objects whose dir() returns non-strings
3295 3300 (which it shouldn't, but some broken libs like ITK do). Thanks to
3296 3301 a patch by John Hunter (implemented differently, though). Also
3297 3302 minor improvements by using .extend instead of + on lists.
3298 3303
3299 3304 * pysh.py:
3300 3305
3301 3306 2005-04-06 Fernando Perez <fperez@colorado.edu>
3302 3307
3303 3308 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
3304 3309 by default, so that all users benefit from it. Those who don't
3305 3310 want it can still turn it off.
3306 3311
3307 3312 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
3308 3313 config file, I'd forgotten about this, so users were getting it
3309 3314 off by default.
3310 3315
3311 3316 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
3312 3317 consistency. Now magics can be called in multiline statements,
3313 3318 and python variables can be expanded in magic calls via $var.
3314 3319 This makes the magic system behave just like aliases or !system
3315 3320 calls.
3316 3321
3317 3322 2005-03-28 Fernando Perez <fperez@colorado.edu>
3318 3323
3319 3324 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
3320 3325 expensive string additions for building command. Add support for
3321 3326 trailing ';' when autocall is used.
3322 3327
3323 3328 2005-03-26 Fernando Perez <fperez@colorado.edu>
3324 3329
3325 3330 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
3326 3331 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
3327 3332 ipython.el robust against prompts with any number of spaces
3328 3333 (including 0) after the ':' character.
3329 3334
3330 3335 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
3331 3336 continuation prompt, which misled users to think the line was
3332 3337 already indented. Closes debian Bug#300847, reported to me by
3333 3338 Norbert Tretkowski <tretkowski-AT-inittab.de>.
3334 3339
3335 3340 2005-03-23 Fernando Perez <fperez@colorado.edu>
3336 3341
3337 3342 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
3338 3343 properly aligned if they have embedded newlines.
3339 3344
3340 3345 * IPython/iplib.py (runlines): Add a public method to expose
3341 3346 IPython's code execution machinery, so that users can run strings
3342 3347 as if they had been typed at the prompt interactively.
3343 3348 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
3344 3349 methods which can call the system shell, but with python variable
3345 3350 expansion. The three such methods are: __IPYTHON__.system,
3346 3351 .getoutput and .getoutputerror. These need to be documented in a
3347 3352 'public API' section (to be written) of the manual.
3348 3353
3349 3354 2005-03-20 Fernando Perez <fperez@colorado.edu>
3350 3355
3351 3356 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
3352 3357 for custom exception handling. This is quite powerful, and it
3353 3358 allows for user-installable exception handlers which can trap
3354 3359 custom exceptions at runtime and treat them separately from
3355 3360 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
3356 3361 Mantegazza <mantegazza-AT-ill.fr>.
3357 3362 (InteractiveShell.set_custom_completer): public API function to
3358 3363 add new completers at runtime.
3359 3364
3360 3365 2005-03-19 Fernando Perez <fperez@colorado.edu>
3361 3366
3362 3367 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
3363 3368 allow objects which provide their docstrings via non-standard
3364 3369 mechanisms (like Pyro proxies) to still be inspected by ipython's
3365 3370 ? system.
3366 3371
3367 3372 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
3368 3373 automatic capture system. I tried quite hard to make it work
3369 3374 reliably, and simply failed. I tried many combinations with the
3370 3375 subprocess module, but eventually nothing worked in all needed
3371 3376 cases (not blocking stdin for the child, duplicating stdout
3372 3377 without blocking, etc). The new %sc/%sx still do capture to these
3373 3378 magical list/string objects which make shell use much more
3374 3379 conveninent, so not all is lost.
3375 3380
3376 3381 XXX - FIX MANUAL for the change above!
3377 3382
3378 3383 (runsource): I copied code.py's runsource() into ipython to modify
3379 3384 it a bit. Now the code object and source to be executed are
3380 3385 stored in ipython. This makes this info accessible to third-party
3381 3386 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
3382 3387 Mantegazza <mantegazza-AT-ill.fr>.
3383 3388
3384 3389 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
3385 3390 history-search via readline (like C-p/C-n). I'd wanted this for a
3386 3391 long time, but only recently found out how to do it. For users
3387 3392 who already have their ipythonrc files made and want this, just
3388 3393 add:
3389 3394
3390 3395 readline_parse_and_bind "\e[A": history-search-backward
3391 3396 readline_parse_and_bind "\e[B": history-search-forward
3392 3397
3393 3398 2005-03-18 Fernando Perez <fperez@colorado.edu>
3394 3399
3395 3400 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
3396 3401 LSString and SList classes which allow transparent conversions
3397 3402 between list mode and whitespace-separated string.
3398 3403 (magic_r): Fix recursion problem in %r.
3399 3404
3400 3405 * IPython/genutils.py (LSString): New class to be used for
3401 3406 automatic storage of the results of all alias/system calls in _o
3402 3407 and _e (stdout/err). These provide a .l/.list attribute which
3403 3408 does automatic splitting on newlines. This means that for most
3404 3409 uses, you'll never need to do capturing of output with %sc/%sx
3405 3410 anymore, since ipython keeps this always done for you. Note that
3406 3411 only the LAST results are stored, the _o/e variables are
3407 3412 overwritten on each call. If you need to save their contents
3408 3413 further, simply bind them to any other name.
3409 3414
3410 3415 2005-03-17 Fernando Perez <fperez@colorado.edu>
3411 3416
3412 3417 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
3413 3418 prompt namespace handling.
3414 3419
3415 3420 2005-03-16 Fernando Perez <fperez@colorado.edu>
3416 3421
3417 3422 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
3418 3423 classic prompts to be '>>> ' (final space was missing, and it
3419 3424 trips the emacs python mode).
3420 3425 (BasePrompt.__str__): Added safe support for dynamic prompt
3421 3426 strings. Now you can set your prompt string to be '$x', and the
3422 3427 value of x will be printed from your interactive namespace. The
3423 3428 interpolation syntax includes the full Itpl support, so
3424 3429 ${foo()+x+bar()} is a valid prompt string now, and the function
3425 3430 calls will be made at runtime.
3426 3431
3427 3432 2005-03-15 Fernando Perez <fperez@colorado.edu>
3428 3433
3429 3434 * IPython/Magic.py (magic_history): renamed %hist to %history, to
3430 3435 avoid name clashes in pylab. %hist still works, it just forwards
3431 3436 the call to %history.
3432 3437
3433 3438 2005-03-02 *** Released version 0.6.12
3434 3439
3435 3440 2005-03-02 Fernando Perez <fperez@colorado.edu>
3436 3441
3437 3442 * IPython/iplib.py (handle_magic): log magic calls properly as
3438 3443 ipmagic() function calls.
3439 3444
3440 3445 * IPython/Magic.py (magic_time): Improved %time to support
3441 3446 statements and provide wall-clock as well as CPU time.
3442 3447
3443 3448 2005-02-27 Fernando Perez <fperez@colorado.edu>
3444 3449
3445 3450 * IPython/hooks.py: New hooks module, to expose user-modifiable
3446 3451 IPython functionality in a clean manner. For now only the editor
3447 3452 hook is actually written, and other thigns which I intend to turn
3448 3453 into proper hooks aren't yet there. The display and prefilter
3449 3454 stuff, for example, should be hooks. But at least now the
3450 3455 framework is in place, and the rest can be moved here with more
3451 3456 time later. IPython had had a .hooks variable for a long time for
3452 3457 this purpose, but I'd never actually used it for anything.
3453 3458
3454 3459 2005-02-26 Fernando Perez <fperez@colorado.edu>
3455 3460
3456 3461 * IPython/ipmaker.py (make_IPython): make the default ipython
3457 3462 directory be called _ipython under win32, to follow more the
3458 3463 naming peculiarities of that platform (where buggy software like
3459 3464 Visual Sourcesafe breaks with .named directories). Reported by
3460 3465 Ville Vainio.
3461 3466
3462 3467 2005-02-23 Fernando Perez <fperez@colorado.edu>
3463 3468
3464 3469 * IPython/iplib.py (InteractiveShell.__init__): removed a few
3465 3470 auto_aliases for win32 which were causing problems. Users can
3466 3471 define the ones they personally like.
3467 3472
3468 3473 2005-02-21 Fernando Perez <fperez@colorado.edu>
3469 3474
3470 3475 * IPython/Magic.py (magic_time): new magic to time execution of
3471 3476 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
3472 3477
3473 3478 2005-02-19 Fernando Perez <fperez@colorado.edu>
3474 3479
3475 3480 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
3476 3481 into keys (for prompts, for example).
3477 3482
3478 3483 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
3479 3484 prompts in case users want them. This introduces a small behavior
3480 3485 change: ipython does not automatically add a space to all prompts
3481 3486 anymore. To get the old prompts with a space, users should add it
3482 3487 manually to their ipythonrc file, so for example prompt_in1 should
3483 3488 now read 'In [\#]: ' instead of 'In [\#]:'.
3484 3489 (BasePrompt.__init__): New option prompts_pad_left (only in rc
3485 3490 file) to control left-padding of secondary prompts.
3486 3491
3487 3492 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
3488 3493 the profiler can't be imported. Fix for Debian, which removed
3489 3494 profile.py because of License issues. I applied a slightly
3490 3495 modified version of the original Debian patch at
3491 3496 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
3492 3497
3493 3498 2005-02-17 Fernando Perez <fperez@colorado.edu>
3494 3499
3495 3500 * IPython/genutils.py (native_line_ends): Fix bug which would
3496 3501 cause improper line-ends under win32 b/c I was not opening files
3497 3502 in binary mode. Bug report and fix thanks to Ville.
3498 3503
3499 3504 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
3500 3505 trying to catch spurious foo[1] autocalls. My fix actually broke
3501 3506 ',/' autoquote/call with explicit escape (bad regexp).
3502 3507
3503 3508 2005-02-15 *** Released version 0.6.11
3504 3509
3505 3510 2005-02-14 Fernando Perez <fperez@colorado.edu>
3506 3511
3507 3512 * IPython/background_jobs.py: New background job management
3508 3513 subsystem. This is implemented via a new set of classes, and
3509 3514 IPython now provides a builtin 'jobs' object for background job
3510 3515 execution. A convenience %bg magic serves as a lightweight
3511 3516 frontend for starting the more common type of calls. This was
3512 3517 inspired by discussions with B. Granger and the BackgroundCommand
3513 3518 class described in the book Python Scripting for Computational
3514 3519 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
3515 3520 (although ultimately no code from this text was used, as IPython's
3516 3521 system is a separate implementation).
3517 3522
3518 3523 * IPython/iplib.py (MagicCompleter.python_matches): add new option
3519 3524 to control the completion of single/double underscore names
3520 3525 separately. As documented in the example ipytonrc file, the
3521 3526 readline_omit__names variable can now be set to 2, to omit even
3522 3527 single underscore names. Thanks to a patch by Brian Wong
3523 3528 <BrianWong-AT-AirgoNetworks.Com>.
3524 3529 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
3525 3530 be autocalled as foo([1]) if foo were callable. A problem for
3526 3531 things which are both callable and implement __getitem__.
3527 3532 (init_readline): Fix autoindentation for win32. Thanks to a patch
3528 3533 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
3529 3534
3530 3535 2005-02-12 Fernando Perez <fperez@colorado.edu>
3531 3536
3532 3537 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
3533 3538 which I had written long ago to sort out user error messages which
3534 3539 may occur during startup. This seemed like a good idea initially,
3535 3540 but it has proven a disaster in retrospect. I don't want to
3536 3541 change much code for now, so my fix is to set the internal 'debug'
3537 3542 flag to true everywhere, whose only job was precisely to control
3538 3543 this subsystem. This closes issue 28 (as well as avoiding all
3539 3544 sorts of strange hangups which occur from time to time).
3540 3545
3541 3546 2005-02-07 Fernando Perez <fperez@colorado.edu>
3542 3547
3543 3548 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
3544 3549 previous call produced a syntax error.
3545 3550
3546 3551 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3547 3552 classes without constructor.
3548 3553
3549 3554 2005-02-06 Fernando Perez <fperez@colorado.edu>
3550 3555
3551 3556 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
3552 3557 completions with the results of each matcher, so we return results
3553 3558 to the user from all namespaces. This breaks with ipython
3554 3559 tradition, but I think it's a nicer behavior. Now you get all
3555 3560 possible completions listed, from all possible namespaces (python,
3556 3561 filesystem, magics...) After a request by John Hunter
3557 3562 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3558 3563
3559 3564 2005-02-05 Fernando Perez <fperez@colorado.edu>
3560 3565
3561 3566 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
3562 3567 the call had quote characters in it (the quotes were stripped).
3563 3568
3564 3569 2005-01-31 Fernando Perez <fperez@colorado.edu>
3565 3570
3566 3571 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
3567 3572 Itpl.itpl() to make the code more robust against psyco
3568 3573 optimizations.
3569 3574
3570 3575 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
3571 3576 of causing an exception. Quicker, cleaner.
3572 3577
3573 3578 2005-01-28 Fernando Perez <fperez@colorado.edu>
3574 3579
3575 3580 * scripts/ipython_win_post_install.py (install): hardcode
3576 3581 sys.prefix+'python.exe' as the executable path. It turns out that
3577 3582 during the post-installation run, sys.executable resolves to the
3578 3583 name of the binary installer! I should report this as a distutils
3579 3584 bug, I think. I updated the .10 release with this tiny fix, to
3580 3585 avoid annoying the lists further.
3581 3586
3582 3587 2005-01-27 *** Released version 0.6.10
3583 3588
3584 3589 2005-01-27 Fernando Perez <fperez@colorado.edu>
3585 3590
3586 3591 * IPython/numutils.py (norm): Added 'inf' as optional name for
3587 3592 L-infinity norm, included references to mathworld.com for vector
3588 3593 norm definitions.
3589 3594 (amin/amax): added amin/amax for array min/max. Similar to what
3590 3595 pylab ships with after the recent reorganization of names.
3591 3596 (spike/spike_odd): removed deprecated spike/spike_odd functions.
3592 3597
3593 3598 * ipython.el: committed Alex's recent fixes and improvements.
3594 3599 Tested with python-mode from CVS, and it looks excellent. Since
3595 3600 python-mode hasn't released anything in a while, I'm temporarily
3596 3601 putting a copy of today's CVS (v 4.70) of python-mode in:
3597 3602 http://ipython.scipy.org/tmp/python-mode.el
3598 3603
3599 3604 * scripts/ipython_win_post_install.py (install): Win32 fix to use
3600 3605 sys.executable for the executable name, instead of assuming it's
3601 3606 called 'python.exe' (the post-installer would have produced broken
3602 3607 setups on systems with a differently named python binary).
3603 3608
3604 3609 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
3605 3610 references to os.linesep, to make the code more
3606 3611 platform-independent. This is also part of the win32 coloring
3607 3612 fixes.
3608 3613
3609 3614 * IPython/genutils.py (page_dumb): Remove attempts to chop long
3610 3615 lines, which actually cause coloring bugs because the length of
3611 3616 the line is very difficult to correctly compute with embedded
3612 3617 escapes. This was the source of all the coloring problems under
3613 3618 Win32. I think that _finally_, Win32 users have a properly
3614 3619 working ipython in all respects. This would never have happened
3615 3620 if not for Gary Bishop and Viktor Ransmayr's great help and work.
3616 3621
3617 3622 2005-01-26 *** Released version 0.6.9
3618 3623
3619 3624 2005-01-25 Fernando Perez <fperez@colorado.edu>
3620 3625
3621 3626 * setup.py: finally, we have a true Windows installer, thanks to
3622 3627 the excellent work of Viktor Ransmayr
3623 3628 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
3624 3629 Windows users. The setup routine is quite a bit cleaner thanks to
3625 3630 this, and the post-install script uses the proper functions to
3626 3631 allow a clean de-installation using the standard Windows Control
3627 3632 Panel.
3628 3633
3629 3634 * IPython/genutils.py (get_home_dir): changed to use the $HOME
3630 3635 environment variable under all OSes (including win32) if
3631 3636 available. This will give consistency to win32 users who have set
3632 3637 this variable for any reason. If os.environ['HOME'] fails, the
3633 3638 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
3634 3639
3635 3640 2005-01-24 Fernando Perez <fperez@colorado.edu>
3636 3641
3637 3642 * IPython/numutils.py (empty_like): add empty_like(), similar to
3638 3643 zeros_like() but taking advantage of the new empty() Numeric routine.
3639 3644
3640 3645 2005-01-23 *** Released version 0.6.8
3641 3646
3642 3647 2005-01-22 Fernando Perez <fperez@colorado.edu>
3643 3648
3644 3649 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
3645 3650 automatic show() calls. After discussing things with JDH, it
3646 3651 turns out there are too many corner cases where this can go wrong.
3647 3652 It's best not to try to be 'too smart', and simply have ipython
3648 3653 reproduce as much as possible the default behavior of a normal
3649 3654 python shell.
3650 3655
3651 3656 * IPython/iplib.py (InteractiveShell.__init__): Modified the
3652 3657 line-splitting regexp and _prefilter() to avoid calling getattr()
3653 3658 on assignments. This closes
3654 3659 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
3655 3660 readline uses getattr(), so a simple <TAB> keypress is still
3656 3661 enough to trigger getattr() calls on an object.
3657 3662
3658 3663 2005-01-21 Fernando Perez <fperez@colorado.edu>
3659 3664
3660 3665 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
3661 3666 docstring under pylab so it doesn't mask the original.
3662 3667
3663 3668 2005-01-21 *** Released version 0.6.7
3664 3669
3665 3670 2005-01-21 Fernando Perez <fperez@colorado.edu>
3666 3671
3667 3672 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
3668 3673 signal handling for win32 users in multithreaded mode.
3669 3674
3670 3675 2005-01-17 Fernando Perez <fperez@colorado.edu>
3671 3676
3672 3677 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3673 3678 instances with no __init__. After a crash report by Norbert Nemec
3674 3679 <Norbert-AT-nemec-online.de>.
3675 3680
3676 3681 2005-01-14 Fernando Perez <fperez@colorado.edu>
3677 3682
3678 3683 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
3679 3684 names for verbose exceptions, when multiple dotted names and the
3680 3685 'parent' object were present on the same line.
3681 3686
3682 3687 2005-01-11 Fernando Perez <fperez@colorado.edu>
3683 3688
3684 3689 * IPython/genutils.py (flag_calls): new utility to trap and flag
3685 3690 calls in functions. I need it to clean up matplotlib support.
3686 3691 Also removed some deprecated code in genutils.
3687 3692
3688 3693 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
3689 3694 that matplotlib scripts called with %run, which don't call show()
3690 3695 themselves, still have their plotting windows open.
3691 3696
3692 3697 2005-01-05 Fernando Perez <fperez@colorado.edu>
3693 3698
3694 3699 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
3695 3700 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
3696 3701
3697 3702 2004-12-19 Fernando Perez <fperez@colorado.edu>
3698 3703
3699 3704 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
3700 3705 parent_runcode, which was an eyesore. The same result can be
3701 3706 obtained with Python's regular superclass mechanisms.
3702 3707
3703 3708 2004-12-17 Fernando Perez <fperez@colorado.edu>
3704 3709
3705 3710 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
3706 3711 reported by Prabhu.
3707 3712 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
3708 3713 sys.stderr) instead of explicitly calling sys.stderr. This helps
3709 3714 maintain our I/O abstractions clean, for future GUI embeddings.
3710 3715
3711 3716 * IPython/genutils.py (info): added new utility for sys.stderr
3712 3717 unified info message handling (thin wrapper around warn()).
3713 3718
3714 3719 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
3715 3720 composite (dotted) names on verbose exceptions.
3716 3721 (VerboseTB.nullrepr): harden against another kind of errors which
3717 3722 Python's inspect module can trigger, and which were crashing
3718 3723 IPython. Thanks to a report by Marco Lombardi
3719 3724 <mlombard-AT-ma010192.hq.eso.org>.
3720 3725
3721 3726 2004-12-13 *** Released version 0.6.6
3722 3727
3723 3728 2004-12-12 Fernando Perez <fperez@colorado.edu>
3724 3729
3725 3730 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
3726 3731 generated by pygtk upon initialization if it was built without
3727 3732 threads (for matplotlib users). After a crash reported by
3728 3733 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
3729 3734
3730 3735 * IPython/ipmaker.py (make_IPython): fix small bug in the
3731 3736 import_some parameter for multiple imports.
3732 3737
3733 3738 * IPython/iplib.py (ipmagic): simplified the interface of
3734 3739 ipmagic() to take a single string argument, just as it would be
3735 3740 typed at the IPython cmd line.
3736 3741 (ipalias): Added new ipalias() with an interface identical to
3737 3742 ipmagic(). This completes exposing a pure python interface to the
3738 3743 alias and magic system, which can be used in loops or more complex
3739 3744 code where IPython's automatic line mangling is not active.
3740 3745
3741 3746 * IPython/genutils.py (timing): changed interface of timing to
3742 3747 simply run code once, which is the most common case. timings()
3743 3748 remains unchanged, for the cases where you want multiple runs.
3744 3749
3745 3750 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
3746 3751 bug where Python2.2 crashes with exec'ing code which does not end
3747 3752 in a single newline. Python 2.3 is OK, so I hadn't noticed this
3748 3753 before.
3749 3754
3750 3755 2004-12-10 Fernando Perez <fperez@colorado.edu>
3751 3756
3752 3757 * IPython/Magic.py (Magic.magic_prun): changed name of option from
3753 3758 -t to -T, to accomodate the new -t flag in %run (the %run and
3754 3759 %prun options are kind of intermixed, and it's not easy to change
3755 3760 this with the limitations of python's getopt).
3756 3761
3757 3762 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
3758 3763 the execution of scripts. It's not as fine-tuned as timeit.py,
3759 3764 but it works from inside ipython (and under 2.2, which lacks
3760 3765 timeit.py). Optionally a number of runs > 1 can be given for
3761 3766 timing very short-running code.
3762 3767
3763 3768 * IPython/genutils.py (uniq_stable): new routine which returns a
3764 3769 list of unique elements in any iterable, but in stable order of
3765 3770 appearance. I needed this for the ultraTB fixes, and it's a handy
3766 3771 utility.
3767 3772
3768 3773 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
3769 3774 dotted names in Verbose exceptions. This had been broken since
3770 3775 the very start, now x.y will properly be printed in a Verbose
3771 3776 traceback, instead of x being shown and y appearing always as an
3772 3777 'undefined global'. Getting this to work was a bit tricky,
3773 3778 because by default python tokenizers are stateless. Saved by
3774 3779 python's ability to easily add a bit of state to an arbitrary
3775 3780 function (without needing to build a full-blown callable object).
3776 3781
3777 3782 Also big cleanup of this code, which had horrendous runtime
3778 3783 lookups of zillions of attributes for colorization. Moved all
3779 3784 this code into a few templates, which make it cleaner and quicker.
3780 3785
3781 3786 Printout quality was also improved for Verbose exceptions: one
3782 3787 variable per line, and memory addresses are printed (this can be
3783 3788 quite handy in nasty debugging situations, which is what Verbose
3784 3789 is for).
3785 3790
3786 3791 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
3787 3792 the command line as scripts to be loaded by embedded instances.
3788 3793 Doing so has the potential for an infinite recursion if there are
3789 3794 exceptions thrown in the process. This fixes a strange crash
3790 3795 reported by Philippe MULLER <muller-AT-irit.fr>.
3791 3796
3792 3797 2004-12-09 Fernando Perez <fperez@colorado.edu>
3793 3798
3794 3799 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
3795 3800 to reflect new names in matplotlib, which now expose the
3796 3801 matlab-compatible interface via a pylab module instead of the
3797 3802 'matlab' name. The new code is backwards compatible, so users of
3798 3803 all matplotlib versions are OK. Patch by J. Hunter.
3799 3804
3800 3805 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
3801 3806 of __init__ docstrings for instances (class docstrings are already
3802 3807 automatically printed). Instances with customized docstrings
3803 3808 (indep. of the class) are also recognized and all 3 separate
3804 3809 docstrings are printed (instance, class, constructor). After some
3805 3810 comments/suggestions by J. Hunter.
3806 3811
3807 3812 2004-12-05 Fernando Perez <fperez@colorado.edu>
3808 3813
3809 3814 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
3810 3815 warnings when tab-completion fails and triggers an exception.
3811 3816
3812 3817 2004-12-03 Fernando Perez <fperez@colorado.edu>
3813 3818
3814 3819 * IPython/Magic.py (magic_prun): Fix bug where an exception would
3815 3820 be triggered when using 'run -p'. An incorrect option flag was
3816 3821 being set ('d' instead of 'D').
3817 3822 (manpage): fix missing escaped \- sign.
3818 3823
3819 3824 2004-11-30 *** Released version 0.6.5
3820 3825
3821 3826 2004-11-30 Fernando Perez <fperez@colorado.edu>
3822 3827
3823 3828 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
3824 3829 setting with -d option.
3825 3830
3826 3831 * setup.py (docfiles): Fix problem where the doc glob I was using
3827 3832 was COMPLETELY BROKEN. It was giving the right files by pure
3828 3833 accident, but failed once I tried to include ipython.el. Note:
3829 3834 glob() does NOT allow you to do exclusion on multiple endings!
3830 3835
3831 3836 2004-11-29 Fernando Perez <fperez@colorado.edu>
3832 3837
3833 3838 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
3834 3839 the manpage as the source. Better formatting & consistency.
3835 3840
3836 3841 * IPython/Magic.py (magic_run): Added new -d option, to run
3837 3842 scripts under the control of the python pdb debugger. Note that
3838 3843 this required changing the %prun option -d to -D, to avoid a clash
3839 3844 (since %run must pass options to %prun, and getopt is too dumb to
3840 3845 handle options with string values with embedded spaces). Thanks
3841 3846 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
3842 3847 (magic_who_ls): added type matching to %who and %whos, so that one
3843 3848 can filter their output to only include variables of certain
3844 3849 types. Another suggestion by Matthew.
3845 3850 (magic_whos): Added memory summaries in kb and Mb for arrays.
3846 3851 (magic_who): Improve formatting (break lines every 9 vars).
3847 3852
3848 3853 2004-11-28 Fernando Perez <fperez@colorado.edu>
3849 3854
3850 3855 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
3851 3856 cache when empty lines were present.
3852 3857
3853 3858 2004-11-24 Fernando Perez <fperez@colorado.edu>
3854 3859
3855 3860 * IPython/usage.py (__doc__): document the re-activated threading
3856 3861 options for WX and GTK.
3857 3862
3858 3863 2004-11-23 Fernando Perez <fperez@colorado.edu>
3859 3864
3860 3865 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
3861 3866 the -wthread and -gthread options, along with a new -tk one to try
3862 3867 and coordinate Tk threading with wx/gtk. The tk support is very
3863 3868 platform dependent, since it seems to require Tcl and Tk to be
3864 3869 built with threads (Fedora1/2 appears NOT to have it, but in
3865 3870 Prabhu's Debian boxes it works OK). But even with some Tk
3866 3871 limitations, this is a great improvement.
3867 3872
3868 3873 * IPython/Prompts.py (prompt_specials_color): Added \t for time
3869 3874 info in user prompts. Patch by Prabhu.
3870 3875
3871 3876 2004-11-18 Fernando Perez <fperez@colorado.edu>
3872 3877
3873 3878 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
3874 3879 EOFErrors and bail, to avoid infinite loops if a non-terminating
3875 3880 file is fed into ipython. Patch submitted in issue 19 by user,
3876 3881 many thanks.
3877 3882
3878 3883 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
3879 3884 autoquote/parens in continuation prompts, which can cause lots of
3880 3885 problems. Closes roundup issue 20.
3881 3886
3882 3887 2004-11-17 Fernando Perez <fperez@colorado.edu>
3883 3888
3884 3889 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
3885 3890 reported as debian bug #280505. I'm not sure my local changelog
3886 3891 entry has the proper debian format (Jack?).
3887 3892
3888 3893 2004-11-08 *** Released version 0.6.4
3889 3894
3890 3895 2004-11-08 Fernando Perez <fperez@colorado.edu>
3891 3896
3892 3897 * IPython/iplib.py (init_readline): Fix exit message for Windows
3893 3898 when readline is active. Thanks to a report by Eric Jones
3894 3899 <eric-AT-enthought.com>.
3895 3900
3896 3901 2004-11-07 Fernando Perez <fperez@colorado.edu>
3897 3902
3898 3903 * IPython/genutils.py (page): Add a trap for OSError exceptions,
3899 3904 sometimes seen by win2k/cygwin users.
3900 3905
3901 3906 2004-11-06 Fernando Perez <fperez@colorado.edu>
3902 3907
3903 3908 * IPython/iplib.py (interact): Change the handling of %Exit from
3904 3909 trying to propagate a SystemExit to an internal ipython flag.
3905 3910 This is less elegant than using Python's exception mechanism, but
3906 3911 I can't get that to work reliably with threads, so under -pylab
3907 3912 %Exit was hanging IPython. Cross-thread exception handling is
3908 3913 really a bitch. Thaks to a bug report by Stephen Walton
3909 3914 <stephen.walton-AT-csun.edu>.
3910 3915
3911 3916 2004-11-04 Fernando Perez <fperez@colorado.edu>
3912 3917
3913 3918 * IPython/iplib.py (raw_input_original): store a pointer to the
3914 3919 true raw_input to harden against code which can modify it
3915 3920 (wx.py.PyShell does this and would otherwise crash ipython).
3916 3921 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
3917 3922
3918 3923 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
3919 3924 Ctrl-C problem, which does not mess up the input line.
3920 3925
3921 3926 2004-11-03 Fernando Perez <fperez@colorado.edu>
3922 3927
3923 3928 * IPython/Release.py: Changed licensing to BSD, in all files.
3924 3929 (name): lowercase name for tarball/RPM release.
3925 3930
3926 3931 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
3927 3932 use throughout ipython.
3928 3933
3929 3934 * IPython/Magic.py (Magic._ofind): Switch to using the new
3930 3935 OInspect.getdoc() function.
3931 3936
3932 3937 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
3933 3938 of the line currently being canceled via Ctrl-C. It's extremely
3934 3939 ugly, but I don't know how to do it better (the problem is one of
3935 3940 handling cross-thread exceptions).
3936 3941
3937 3942 2004-10-28 Fernando Perez <fperez@colorado.edu>
3938 3943
3939 3944 * IPython/Shell.py (signal_handler): add signal handlers to trap
3940 3945 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
3941 3946 report by Francesc Alted.
3942 3947
3943 3948 2004-10-21 Fernando Perez <fperez@colorado.edu>
3944 3949
3945 3950 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
3946 3951 to % for pysh syntax extensions.
3947 3952
3948 3953 2004-10-09 Fernando Perez <fperez@colorado.edu>
3949 3954
3950 3955 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
3951 3956 arrays to print a more useful summary, without calling str(arr).
3952 3957 This avoids the problem of extremely lengthy computations which
3953 3958 occur if arr is large, and appear to the user as a system lockup
3954 3959 with 100% cpu activity. After a suggestion by Kristian Sandberg
3955 3960 <Kristian.Sandberg@colorado.edu>.
3956 3961 (Magic.__init__): fix bug in global magic escapes not being
3957 3962 correctly set.
3958 3963
3959 3964 2004-10-08 Fernando Perez <fperez@colorado.edu>
3960 3965
3961 3966 * IPython/Magic.py (__license__): change to absolute imports of
3962 3967 ipython's own internal packages, to start adapting to the absolute
3963 3968 import requirement of PEP-328.
3964 3969
3965 3970 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
3966 3971 files, and standardize author/license marks through the Release
3967 3972 module instead of having per/file stuff (except for files with
3968 3973 particular licenses, like the MIT/PSF-licensed codes).
3969 3974
3970 3975 * IPython/Debugger.py: remove dead code for python 2.1
3971 3976
3972 3977 2004-10-04 Fernando Perez <fperez@colorado.edu>
3973 3978
3974 3979 * IPython/iplib.py (ipmagic): New function for accessing magics
3975 3980 via a normal python function call.
3976 3981
3977 3982 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
3978 3983 from '@' to '%', to accomodate the new @decorator syntax of python
3979 3984 2.4.
3980 3985
3981 3986 2004-09-29 Fernando Perez <fperez@colorado.edu>
3982 3987
3983 3988 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
3984 3989 matplotlib.use to prevent running scripts which try to switch
3985 3990 interactive backends from within ipython. This will just crash
3986 3991 the python interpreter, so we can't allow it (but a detailed error
3987 3992 is given to the user).
3988 3993
3989 3994 2004-09-28 Fernando Perez <fperez@colorado.edu>
3990 3995
3991 3996 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
3992 3997 matplotlib-related fixes so that using @run with non-matplotlib
3993 3998 scripts doesn't pop up spurious plot windows. This requires
3994 3999 matplotlib >= 0.63, where I had to make some changes as well.
3995 4000
3996 4001 * IPython/ipmaker.py (make_IPython): update version requirement to
3997 4002 python 2.2.
3998 4003
3999 4004 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
4000 4005 banner arg for embedded customization.
4001 4006
4002 4007 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
4003 4008 explicit uses of __IP as the IPython's instance name. Now things
4004 4009 are properly handled via the shell.name value. The actual code
4005 4010 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
4006 4011 is much better than before. I'll clean things completely when the
4007 4012 magic stuff gets a real overhaul.
4008 4013
4009 4014 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
4010 4015 minor changes to debian dir.
4011 4016
4012 4017 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
4013 4018 pointer to the shell itself in the interactive namespace even when
4014 4019 a user-supplied dict is provided. This is needed for embedding
4015 4020 purposes (found by tests with Michel Sanner).
4016 4021
4017 4022 2004-09-27 Fernando Perez <fperez@colorado.edu>
4018 4023
4019 4024 * IPython/UserConfig/ipythonrc: remove []{} from
4020 4025 readline_remove_delims, so that things like [modname.<TAB> do
4021 4026 proper completion. This disables [].TAB, but that's a less common
4022 4027 case than module names in list comprehensions, for example.
4023 4028 Thanks to a report by Andrea Riciputi.
4024 4029
4025 4030 2004-09-09 Fernando Perez <fperez@colorado.edu>
4026 4031
4027 4032 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
4028 4033 blocking problems in win32 and osx. Fix by John.
4029 4034
4030 4035 2004-09-08 Fernando Perez <fperez@colorado.edu>
4031 4036
4032 4037 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
4033 4038 for Win32 and OSX. Fix by John Hunter.
4034 4039
4035 4040 2004-08-30 *** Released version 0.6.3
4036 4041
4037 4042 2004-08-30 Fernando Perez <fperez@colorado.edu>
4038 4043
4039 4044 * setup.py (isfile): Add manpages to list of dependent files to be
4040 4045 updated.
4041 4046
4042 4047 2004-08-27 Fernando Perez <fperez@colorado.edu>
4043 4048
4044 4049 * IPython/Shell.py (start): I've disabled -wthread and -gthread
4045 4050 for now. They don't really work with standalone WX/GTK code
4046 4051 (though matplotlib IS working fine with both of those backends).
4047 4052 This will neeed much more testing. I disabled most things with
4048 4053 comments, so turning it back on later should be pretty easy.
4049 4054
4050 4055 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
4051 4056 autocalling of expressions like r'foo', by modifying the line
4052 4057 split regexp. Closes
4053 4058 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
4054 4059 Riley <ipythonbugs-AT-sabi.net>.
4055 4060 (InteractiveShell.mainloop): honor --nobanner with banner
4056 4061 extensions.
4057 4062
4058 4063 * IPython/Shell.py: Significant refactoring of all classes, so
4059 4064 that we can really support ALL matplotlib backends and threading
4060 4065 models (John spotted a bug with Tk which required this). Now we
4061 4066 should support single-threaded, WX-threads and GTK-threads, both
4062 4067 for generic code and for matplotlib.
4063 4068
4064 4069 * IPython/ipmaker.py (__call__): Changed -mpthread option to
4065 4070 -pylab, to simplify things for users. Will also remove the pylab
4066 4071 profile, since now all of matplotlib configuration is directly
4067 4072 handled here. This also reduces startup time.
4068 4073
4069 4074 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
4070 4075 shell wasn't being correctly called. Also in IPShellWX.
4071 4076
4072 4077 * IPython/iplib.py (InteractiveShell.__init__): Added option to
4073 4078 fine-tune banner.
4074 4079
4075 4080 * IPython/numutils.py (spike): Deprecate these spike functions,
4076 4081 delete (long deprecated) gnuplot_exec handler.
4077 4082
4078 4083 2004-08-26 Fernando Perez <fperez@colorado.edu>
4079 4084
4080 4085 * ipython.1: Update for threading options, plus some others which
4081 4086 were missing.
4082 4087
4083 4088 * IPython/ipmaker.py (__call__): Added -wthread option for
4084 4089 wxpython thread handling. Make sure threading options are only
4085 4090 valid at the command line.
4086 4091
4087 4092 * scripts/ipython: moved shell selection into a factory function
4088 4093 in Shell.py, to keep the starter script to a minimum.
4089 4094
4090 4095 2004-08-25 Fernando Perez <fperez@colorado.edu>
4091 4096
4092 4097 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
4093 4098 John. Along with some recent changes he made to matplotlib, the
4094 4099 next versions of both systems should work very well together.
4095 4100
4096 4101 2004-08-24 Fernando Perez <fperez@colorado.edu>
4097 4102
4098 4103 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
4099 4104 tried to switch the profiling to using hotshot, but I'm getting
4100 4105 strange errors from prof.runctx() there. I may be misreading the
4101 4106 docs, but it looks weird. For now the profiling code will
4102 4107 continue to use the standard profiler.
4103 4108
4104 4109 2004-08-23 Fernando Perez <fperez@colorado.edu>
4105 4110
4106 4111 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
4107 4112 threaded shell, by John Hunter. It's not quite ready yet, but
4108 4113 close.
4109 4114
4110 4115 2004-08-22 Fernando Perez <fperez@colorado.edu>
4111 4116
4112 4117 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
4113 4118 in Magic and ultraTB.
4114 4119
4115 4120 * ipython.1: document threading options in manpage.
4116 4121
4117 4122 * scripts/ipython: Changed name of -thread option to -gthread,
4118 4123 since this is GTK specific. I want to leave the door open for a
4119 4124 -wthread option for WX, which will most likely be necessary. This
4120 4125 change affects usage and ipmaker as well.
4121 4126
4122 4127 * IPython/Shell.py (matplotlib_shell): Add a factory function to
4123 4128 handle the matplotlib shell issues. Code by John Hunter
4124 4129 <jdhunter-AT-nitace.bsd.uchicago.edu>.
4125 4130 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
4126 4131 broken (and disabled for end users) for now, but it puts the
4127 4132 infrastructure in place.
4128 4133
4129 4134 2004-08-21 Fernando Perez <fperez@colorado.edu>
4130 4135
4131 4136 * ipythonrc-pylab: Add matplotlib support.
4132 4137
4133 4138 * matplotlib_config.py: new files for matplotlib support, part of
4134 4139 the pylab profile.
4135 4140
4136 4141 * IPython/usage.py (__doc__): documented the threading options.
4137 4142
4138 4143 2004-08-20 Fernando Perez <fperez@colorado.edu>
4139 4144
4140 4145 * ipython: Modified the main calling routine to handle the -thread
4141 4146 and -mpthread options. This needs to be done as a top-level hack,
4142 4147 because it determines which class to instantiate for IPython
4143 4148 itself.
4144 4149
4145 4150 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
4146 4151 classes to support multithreaded GTK operation without blocking,
4147 4152 and matplotlib with all backends. This is a lot of still very
4148 4153 experimental code, and threads are tricky. So it may still have a
4149 4154 few rough edges... This code owes a lot to
4150 4155 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
4151 4156 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
4152 4157 to John Hunter for all the matplotlib work.
4153 4158
4154 4159 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
4155 4160 options for gtk thread and matplotlib support.
4156 4161
4157 4162 2004-08-16 Fernando Perez <fperez@colorado.edu>
4158 4163
4159 4164 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
4160 4165 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
4161 4166 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
4162 4167
4163 4168 2004-08-11 Fernando Perez <fperez@colorado.edu>
4164 4169
4165 4170 * setup.py (isfile): Fix build so documentation gets updated for
4166 4171 rpms (it was only done for .tgz builds).
4167 4172
4168 4173 2004-08-10 Fernando Perez <fperez@colorado.edu>
4169 4174
4170 4175 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
4171 4176
4172 4177 * iplib.py : Silence syntax error exceptions in tab-completion.
4173 4178
4174 4179 2004-08-05 Fernando Perez <fperez@colorado.edu>
4175 4180
4176 4181 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
4177 4182 'color off' mark for continuation prompts. This was causing long
4178 4183 continuation lines to mis-wrap.
4179 4184
4180 4185 2004-08-01 Fernando Perez <fperez@colorado.edu>
4181 4186
4182 4187 * IPython/ipmaker.py (make_IPython): Allow the shell class used
4183 4188 for building ipython to be a parameter. All this is necessary
4184 4189 right now to have a multithreaded version, but this insane
4185 4190 non-design will be cleaned up soon. For now, it's a hack that
4186 4191 works.
4187 4192
4188 4193 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
4189 4194 args in various places. No bugs so far, but it's a dangerous
4190 4195 practice.
4191 4196
4192 4197 2004-07-31 Fernando Perez <fperez@colorado.edu>
4193 4198
4194 4199 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
4195 4200 fix completion of files with dots in their names under most
4196 4201 profiles (pysh was OK because the completion order is different).
4197 4202
4198 4203 2004-07-27 Fernando Perez <fperez@colorado.edu>
4199 4204
4200 4205 * IPython/iplib.py (InteractiveShell.__init__): build dict of
4201 4206 keywords manually, b/c the one in keyword.py was removed in python
4202 4207 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
4203 4208 This is NOT a bug under python 2.3 and earlier.
4204 4209
4205 4210 2004-07-26 Fernando Perez <fperez@colorado.edu>
4206 4211
4207 4212 * IPython/ultraTB.py (VerboseTB.text): Add another
4208 4213 linecache.checkcache() call to try to prevent inspect.py from
4209 4214 crashing under python 2.3. I think this fixes
4210 4215 http://www.scipy.net/roundup/ipython/issue17.
4211 4216
4212 4217 2004-07-26 *** Released version 0.6.2
4213 4218
4214 4219 2004-07-26 Fernando Perez <fperez@colorado.edu>
4215 4220
4216 4221 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
4217 4222 fail for any number.
4218 4223 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
4219 4224 empty bookmarks.
4220 4225
4221 4226 2004-07-26 *** Released version 0.6.1
4222 4227
4223 4228 2004-07-26 Fernando Perez <fperez@colorado.edu>
4224 4229
4225 4230 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
4226 4231
4227 4232 * IPython/iplib.py (protect_filename): Applied Ville's patch for
4228 4233 escaping '()[]{}' in filenames.
4229 4234
4230 4235 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
4231 4236 Python 2.2 users who lack a proper shlex.split.
4232 4237
4233 4238 2004-07-19 Fernando Perez <fperez@colorado.edu>
4234 4239
4235 4240 * IPython/iplib.py (InteractiveShell.init_readline): Add support
4236 4241 for reading readline's init file. I follow the normal chain:
4237 4242 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
4238 4243 report by Mike Heeter. This closes
4239 4244 http://www.scipy.net/roundup/ipython/issue16.
4240 4245
4241 4246 2004-07-18 Fernando Perez <fperez@colorado.edu>
4242 4247
4243 4248 * IPython/iplib.py (__init__): Add better handling of '\' under
4244 4249 Win32 for filenames. After a patch by Ville.
4245 4250
4246 4251 2004-07-17 Fernando Perez <fperez@colorado.edu>
4247 4252
4248 4253 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4249 4254 autocalling would be triggered for 'foo is bar' if foo is
4250 4255 callable. I also cleaned up the autocall detection code to use a
4251 4256 regexp, which is faster. Bug reported by Alexander Schmolck.
4252 4257
4253 4258 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
4254 4259 '?' in them would confuse the help system. Reported by Alex
4255 4260 Schmolck.
4256 4261
4257 4262 2004-07-16 Fernando Perez <fperez@colorado.edu>
4258 4263
4259 4264 * IPython/GnuplotInteractive.py (__all__): added plot2.
4260 4265
4261 4266 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
4262 4267 plotting dictionaries, lists or tuples of 1d arrays.
4263 4268
4264 4269 * IPython/Magic.py (Magic.magic_hist): small clenaups and
4265 4270 optimizations.
4266 4271
4267 4272 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
4268 4273 the information which was there from Janko's original IPP code:
4269 4274
4270 4275 03.05.99 20:53 porto.ifm.uni-kiel.de
4271 4276 --Started changelog.
4272 4277 --make clear do what it say it does
4273 4278 --added pretty output of lines from inputcache
4274 4279 --Made Logger a mixin class, simplifies handling of switches
4275 4280 --Added own completer class. .string<TAB> expands to last history
4276 4281 line which starts with string. The new expansion is also present
4277 4282 with Ctrl-r from the readline library. But this shows, who this
4278 4283 can be done for other cases.
4279 4284 --Added convention that all shell functions should accept a
4280 4285 parameter_string This opens the door for different behaviour for
4281 4286 each function. @cd is a good example of this.
4282 4287
4283 4288 04.05.99 12:12 porto.ifm.uni-kiel.de
4284 4289 --added logfile rotation
4285 4290 --added new mainloop method which freezes first the namespace
4286 4291
4287 4292 07.05.99 21:24 porto.ifm.uni-kiel.de
4288 4293 --added the docreader classes. Now there is a help system.
4289 4294 -This is only a first try. Currently it's not easy to put new
4290 4295 stuff in the indices. But this is the way to go. Info would be
4291 4296 better, but HTML is every where and not everybody has an info
4292 4297 system installed and it's not so easy to change html-docs to info.
4293 4298 --added global logfile option
4294 4299 --there is now a hook for object inspection method pinfo needs to
4295 4300 be provided for this. Can be reached by two '??'.
4296 4301
4297 4302 08.05.99 20:51 porto.ifm.uni-kiel.de
4298 4303 --added a README
4299 4304 --bug in rc file. Something has changed so functions in the rc
4300 4305 file need to reference the shell and not self. Not clear if it's a
4301 4306 bug or feature.
4302 4307 --changed rc file for new behavior
4303 4308
4304 4309 2004-07-15 Fernando Perez <fperez@colorado.edu>
4305 4310
4306 4311 * IPython/Logger.py (Logger.log): fixed recent bug where the input
4307 4312 cache was falling out of sync in bizarre manners when multi-line
4308 4313 input was present. Minor optimizations and cleanup.
4309 4314
4310 4315 (Logger): Remove old Changelog info for cleanup. This is the
4311 4316 information which was there from Janko's original code:
4312 4317
4313 4318 Changes to Logger: - made the default log filename a parameter
4314 4319
4315 4320 - put a check for lines beginning with !@? in log(). Needed
4316 4321 (even if the handlers properly log their lines) for mid-session
4317 4322 logging activation to work properly. Without this, lines logged
4318 4323 in mid session, which get read from the cache, would end up
4319 4324 'bare' (with !@? in the open) in the log. Now they are caught
4320 4325 and prepended with a #.
4321 4326
4322 4327 * IPython/iplib.py (InteractiveShell.init_readline): added check
4323 4328 in case MagicCompleter fails to be defined, so we don't crash.
4324 4329
4325 4330 2004-07-13 Fernando Perez <fperez@colorado.edu>
4326 4331
4327 4332 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
4328 4333 of EPS if the requested filename ends in '.eps'.
4329 4334
4330 4335 2004-07-04 Fernando Perez <fperez@colorado.edu>
4331 4336
4332 4337 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
4333 4338 escaping of quotes when calling the shell.
4334 4339
4335 4340 2004-07-02 Fernando Perez <fperez@colorado.edu>
4336 4341
4337 4342 * IPython/Prompts.py (CachedOutput.update): Fix problem with
4338 4343 gettext not working because we were clobbering '_'. Fixes
4339 4344 http://www.scipy.net/roundup/ipython/issue6.
4340 4345
4341 4346 2004-07-01 Fernando Perez <fperez@colorado.edu>
4342 4347
4343 4348 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
4344 4349 into @cd. Patch by Ville.
4345 4350
4346 4351 * IPython/iplib.py (InteractiveShell.post_config_initialization):
4347 4352 new function to store things after ipmaker runs. Patch by Ville.
4348 4353 Eventually this will go away once ipmaker is removed and the class
4349 4354 gets cleaned up, but for now it's ok. Key functionality here is
4350 4355 the addition of the persistent storage mechanism, a dict for
4351 4356 keeping data across sessions (for now just bookmarks, but more can
4352 4357 be implemented later).
4353 4358
4354 4359 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
4355 4360 persistent across sections. Patch by Ville, I modified it
4356 4361 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
4357 4362 added a '-l' option to list all bookmarks.
4358 4363
4359 4364 * IPython/iplib.py (InteractiveShell.atexit_operations): new
4360 4365 center for cleanup. Registered with atexit.register(). I moved
4361 4366 here the old exit_cleanup(). After a patch by Ville.
4362 4367
4363 4368 * IPython/Magic.py (get_py_filename): added '~' to the accepted
4364 4369 characters in the hacked shlex_split for python 2.2.
4365 4370
4366 4371 * IPython/iplib.py (file_matches): more fixes to filenames with
4367 4372 whitespace in them. It's not perfect, but limitations in python's
4368 4373 readline make it impossible to go further.
4369 4374
4370 4375 2004-06-29 Fernando Perez <fperez@colorado.edu>
4371 4376
4372 4377 * IPython/iplib.py (file_matches): escape whitespace correctly in
4373 4378 filename completions. Bug reported by Ville.
4374 4379
4375 4380 2004-06-28 Fernando Perez <fperez@colorado.edu>
4376 4381
4377 4382 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
4378 4383 the history file will be called 'history-PROFNAME' (or just
4379 4384 'history' if no profile is loaded). I was getting annoyed at
4380 4385 getting my Numerical work history clobbered by pysh sessions.
4381 4386
4382 4387 * IPython/iplib.py (InteractiveShell.__init__): Internal
4383 4388 getoutputerror() function so that we can honor the system_verbose
4384 4389 flag for _all_ system calls. I also added escaping of #
4385 4390 characters here to avoid confusing Itpl.
4386 4391
4387 4392 * IPython/Magic.py (shlex_split): removed call to shell in
4388 4393 parse_options and replaced it with shlex.split(). The annoying
4389 4394 part was that in Python 2.2, shlex.split() doesn't exist, so I had
4390 4395 to backport it from 2.3, with several frail hacks (the shlex
4391 4396 module is rather limited in 2.2). Thanks to a suggestion by Ville
4392 4397 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
4393 4398 problem.
4394 4399
4395 4400 (Magic.magic_system_verbose): new toggle to print the actual
4396 4401 system calls made by ipython. Mainly for debugging purposes.
4397 4402
4398 4403 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
4399 4404 doesn't support persistence. Reported (and fix suggested) by
4400 4405 Travis Caldwell <travis_caldwell2000@yahoo.com>.
4401 4406
4402 4407 2004-06-26 Fernando Perez <fperez@colorado.edu>
4403 4408
4404 4409 * IPython/Logger.py (Logger.log): fix to handle correctly empty
4405 4410 continue prompts.
4406 4411
4407 4412 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
4408 4413 function (basically a big docstring) and a few more things here to
4409 4414 speedup startup. pysh.py is now very lightweight. We want because
4410 4415 it gets execfile'd, while InterpreterExec gets imported, so
4411 4416 byte-compilation saves time.
4412 4417
4413 4418 2004-06-25 Fernando Perez <fperez@colorado.edu>
4414 4419
4415 4420 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
4416 4421 -NUM', which was recently broken.
4417 4422
4418 4423 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
4419 4424 in multi-line input (but not !!, which doesn't make sense there).
4420 4425
4421 4426 * IPython/UserConfig/ipythonrc: made autoindent on by default.
4422 4427 It's just too useful, and people can turn it off in the less
4423 4428 common cases where it's a problem.
4424 4429
4425 4430 2004-06-24 Fernando Perez <fperez@colorado.edu>
4426 4431
4427 4432 * IPython/iplib.py (InteractiveShell._prefilter): big change -
4428 4433 special syntaxes (like alias calling) is now allied in multi-line
4429 4434 input. This is still _very_ experimental, but it's necessary for
4430 4435 efficient shell usage combining python looping syntax with system
4431 4436 calls. For now it's restricted to aliases, I don't think it
4432 4437 really even makes sense to have this for magics.
4433 4438
4434 4439 2004-06-23 Fernando Perez <fperez@colorado.edu>
4435 4440
4436 4441 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
4437 4442 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
4438 4443
4439 4444 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
4440 4445 extensions under Windows (after code sent by Gary Bishop). The
4441 4446 extensions considered 'executable' are stored in IPython's rc
4442 4447 structure as win_exec_ext.
4443 4448
4444 4449 * IPython/genutils.py (shell): new function, like system() but
4445 4450 without return value. Very useful for interactive shell work.
4446 4451
4447 4452 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
4448 4453 delete aliases.
4449 4454
4450 4455 * IPython/iplib.py (InteractiveShell.alias_table_update): make
4451 4456 sure that the alias table doesn't contain python keywords.
4452 4457
4453 4458 2004-06-21 Fernando Perez <fperez@colorado.edu>
4454 4459
4455 4460 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
4456 4461 non-existent items are found in $PATH. Reported by Thorsten.
4457 4462
4458 4463 2004-06-20 Fernando Perez <fperez@colorado.edu>
4459 4464
4460 4465 * IPython/iplib.py (complete): modified the completer so that the
4461 4466 order of priorities can be easily changed at runtime.
4462 4467
4463 4468 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
4464 4469 Modified to auto-execute all lines beginning with '~', '/' or '.'.
4465 4470
4466 4471 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
4467 4472 expand Python variables prepended with $ in all system calls. The
4468 4473 same was done to InteractiveShell.handle_shell_escape. Now all
4469 4474 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
4470 4475 expansion of python variables and expressions according to the
4471 4476 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
4472 4477
4473 4478 Though PEP-215 has been rejected, a similar (but simpler) one
4474 4479 seems like it will go into Python 2.4, PEP-292 -
4475 4480 http://www.python.org/peps/pep-0292.html.
4476 4481
4477 4482 I'll keep the full syntax of PEP-215, since IPython has since the
4478 4483 start used Ka-Ping Yee's reference implementation discussed there
4479 4484 (Itpl), and I actually like the powerful semantics it offers.
4480 4485
4481 4486 In order to access normal shell variables, the $ has to be escaped
4482 4487 via an extra $. For example:
4483 4488
4484 4489 In [7]: PATH='a python variable'
4485 4490
4486 4491 In [8]: !echo $PATH
4487 4492 a python variable
4488 4493
4489 4494 In [9]: !echo $$PATH
4490 4495 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
4491 4496
4492 4497 (Magic.parse_options): escape $ so the shell doesn't evaluate
4493 4498 things prematurely.
4494 4499
4495 4500 * IPython/iplib.py (InteractiveShell.call_alias): added the
4496 4501 ability for aliases to expand python variables via $.
4497 4502
4498 4503 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
4499 4504 system, now there's a @rehash/@rehashx pair of magics. These work
4500 4505 like the csh rehash command, and can be invoked at any time. They
4501 4506 build a table of aliases to everything in the user's $PATH
4502 4507 (@rehash uses everything, @rehashx is slower but only adds
4503 4508 executable files). With this, the pysh.py-based shell profile can
4504 4509 now simply call rehash upon startup, and full access to all
4505 4510 programs in the user's path is obtained.
4506 4511
4507 4512 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
4508 4513 functionality is now fully in place. I removed the old dynamic
4509 4514 code generation based approach, in favor of a much lighter one
4510 4515 based on a simple dict. The advantage is that this allows me to
4511 4516 now have thousands of aliases with negligible cost (unthinkable
4512 4517 with the old system).
4513 4518
4514 4519 2004-06-19 Fernando Perez <fperez@colorado.edu>
4515 4520
4516 4521 * IPython/iplib.py (__init__): extended MagicCompleter class to
4517 4522 also complete (last in priority) on user aliases.
4518 4523
4519 4524 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
4520 4525 call to eval.
4521 4526 (ItplNS.__init__): Added a new class which functions like Itpl,
4522 4527 but allows configuring the namespace for the evaluation to occur
4523 4528 in.
4524 4529
4525 4530 2004-06-18 Fernando Perez <fperez@colorado.edu>
4526 4531
4527 4532 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
4528 4533 better message when 'exit' or 'quit' are typed (a common newbie
4529 4534 confusion).
4530 4535
4531 4536 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
4532 4537 check for Windows users.
4533 4538
4534 4539 * IPython/iplib.py (InteractiveShell.user_setup): removed
4535 4540 disabling of colors for Windows. I'll test at runtime and issue a
4536 4541 warning if Gary's readline isn't found, as to nudge users to
4537 4542 download it.
4538 4543
4539 4544 2004-06-16 Fernando Perez <fperez@colorado.edu>
4540 4545
4541 4546 * IPython/genutils.py (Stream.__init__): changed to print errors
4542 4547 to sys.stderr. I had a circular dependency here. Now it's
4543 4548 possible to run ipython as IDLE's shell (consider this pre-alpha,
4544 4549 since true stdout things end up in the starting terminal instead
4545 4550 of IDLE's out).
4546 4551
4547 4552 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
4548 4553 users who haven't # updated their prompt_in2 definitions. Remove
4549 4554 eventually.
4550 4555 (multiple_replace): added credit to original ASPN recipe.
4551 4556
4552 4557 2004-06-15 Fernando Perez <fperez@colorado.edu>
4553 4558
4554 4559 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
4555 4560 list of auto-defined aliases.
4556 4561
4557 4562 2004-06-13 Fernando Perez <fperez@colorado.edu>
4558 4563
4559 4564 * setup.py (scriptfiles): Don't trigger win_post_install unless an
4560 4565 install was really requested (so setup.py can be used for other
4561 4566 things under Windows).
4562 4567
4563 4568 2004-06-10 Fernando Perez <fperez@colorado.edu>
4564 4569
4565 4570 * IPython/Logger.py (Logger.create_log): Manually remove any old
4566 4571 backup, since os.remove may fail under Windows. Fixes bug
4567 4572 reported by Thorsten.
4568 4573
4569 4574 2004-06-09 Fernando Perez <fperez@colorado.edu>
4570 4575
4571 4576 * examples/example-embed.py: fixed all references to %n (replaced
4572 4577 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
4573 4578 for all examples and the manual as well.
4574 4579
4575 4580 2004-06-08 Fernando Perez <fperez@colorado.edu>
4576 4581
4577 4582 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
4578 4583 alignment and color management. All 3 prompt subsystems now
4579 4584 inherit from BasePrompt.
4580 4585
4581 4586 * tools/release: updates for windows installer build and tag rpms
4582 4587 with python version (since paths are fixed).
4583 4588
4584 4589 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
4585 4590 which will become eventually obsolete. Also fixed the default
4586 4591 prompt_in2 to use \D, so at least new users start with the correct
4587 4592 defaults.
4588 4593 WARNING: Users with existing ipythonrc files will need to apply
4589 4594 this fix manually!
4590 4595
4591 4596 * setup.py: make windows installer (.exe). This is finally the
4592 4597 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
4593 4598 which I hadn't included because it required Python 2.3 (or recent
4594 4599 distutils).
4595 4600
4596 4601 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
4597 4602 usage of new '\D' escape.
4598 4603
4599 4604 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
4600 4605 lacks os.getuid())
4601 4606 (CachedOutput.set_colors): Added the ability to turn coloring
4602 4607 on/off with @colors even for manually defined prompt colors. It
4603 4608 uses a nasty global, but it works safely and via the generic color
4604 4609 handling mechanism.
4605 4610 (Prompt2.__init__): Introduced new escape '\D' for continuation
4606 4611 prompts. It represents the counter ('\#') as dots.
4607 4612 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
4608 4613 need to update their ipythonrc files and replace '%n' with '\D' in
4609 4614 their prompt_in2 settings everywhere. Sorry, but there's
4610 4615 otherwise no clean way to get all prompts to properly align. The
4611 4616 ipythonrc shipped with IPython has been updated.
4612 4617
4613 4618 2004-06-07 Fernando Perez <fperez@colorado.edu>
4614 4619
4615 4620 * setup.py (isfile): Pass local_icons option to latex2html, so the
4616 4621 resulting HTML file is self-contained. Thanks to
4617 4622 dryice-AT-liu.com.cn for the tip.
4618 4623
4619 4624 * pysh.py: I created a new profile 'shell', which implements a
4620 4625 _rudimentary_ IPython-based shell. This is in NO WAY a realy
4621 4626 system shell, nor will it become one anytime soon. It's mainly
4622 4627 meant to illustrate the use of the new flexible bash-like prompts.
4623 4628 I guess it could be used by hardy souls for true shell management,
4624 4629 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
4625 4630 profile. This uses the InterpreterExec extension provided by
4626 4631 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
4627 4632
4628 4633 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
4629 4634 auto-align itself with the length of the previous input prompt
4630 4635 (taking into account the invisible color escapes).
4631 4636 (CachedOutput.__init__): Large restructuring of this class. Now
4632 4637 all three prompts (primary1, primary2, output) are proper objects,
4633 4638 managed by the 'parent' CachedOutput class. The code is still a
4634 4639 bit hackish (all prompts share state via a pointer to the cache),
4635 4640 but it's overall far cleaner than before.
4636 4641
4637 4642 * IPython/genutils.py (getoutputerror): modified to add verbose,
4638 4643 debug and header options. This makes the interface of all getout*
4639 4644 functions uniform.
4640 4645 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
4641 4646
4642 4647 * IPython/Magic.py (Magic.default_option): added a function to
4643 4648 allow registering default options for any magic command. This
4644 4649 makes it easy to have profiles which customize the magics globally
4645 4650 for a certain use. The values set through this function are
4646 4651 picked up by the parse_options() method, which all magics should
4647 4652 use to parse their options.
4648 4653
4649 4654 * IPython/genutils.py (warn): modified the warnings framework to
4650 4655 use the Term I/O class. I'm trying to slowly unify all of
4651 4656 IPython's I/O operations to pass through Term.
4652 4657
4653 4658 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
4654 4659 the secondary prompt to correctly match the length of the primary
4655 4660 one for any prompt. Now multi-line code will properly line up
4656 4661 even for path dependent prompts, such as the new ones available
4657 4662 via the prompt_specials.
4658 4663
4659 4664 2004-06-06 Fernando Perez <fperez@colorado.edu>
4660 4665
4661 4666 * IPython/Prompts.py (prompt_specials): Added the ability to have
4662 4667 bash-like special sequences in the prompts, which get
4663 4668 automatically expanded. Things like hostname, current working
4664 4669 directory and username are implemented already, but it's easy to
4665 4670 add more in the future. Thanks to a patch by W.J. van der Laan
4666 4671 <gnufnork-AT-hetdigitalegat.nl>
4667 4672 (prompt_specials): Added color support for prompt strings, so
4668 4673 users can define arbitrary color setups for their prompts.
4669 4674
4670 4675 2004-06-05 Fernando Perez <fperez@colorado.edu>
4671 4676
4672 4677 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
4673 4678 code to load Gary Bishop's readline and configure it
4674 4679 automatically. Thanks to Gary for help on this.
4675 4680
4676 4681 2004-06-01 Fernando Perez <fperez@colorado.edu>
4677 4682
4678 4683 * IPython/Logger.py (Logger.create_log): fix bug for logging
4679 4684 with no filename (previous fix was incomplete).
4680 4685
4681 4686 2004-05-25 Fernando Perez <fperez@colorado.edu>
4682 4687
4683 4688 * IPython/Magic.py (Magic.parse_options): fix bug where naked
4684 4689 parens would get passed to the shell.
4685 4690
4686 4691 2004-05-20 Fernando Perez <fperez@colorado.edu>
4687 4692
4688 4693 * IPython/Magic.py (Magic.magic_prun): changed default profile
4689 4694 sort order to 'time' (the more common profiling need).
4690 4695
4691 4696 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
4692 4697 so that source code shown is guaranteed in sync with the file on
4693 4698 disk (also changed in psource). Similar fix to the one for
4694 4699 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
4695 4700 <yann.ledu-AT-noos.fr>.
4696 4701
4697 4702 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
4698 4703 with a single option would not be correctly parsed. Closes
4699 4704 http://www.scipy.net/roundup/ipython/issue14. This bug had been
4700 4705 introduced in 0.6.0 (on 2004-05-06).
4701 4706
4702 4707 2004-05-13 *** Released version 0.6.0
4703 4708
4704 4709 2004-05-13 Fernando Perez <fperez@colorado.edu>
4705 4710
4706 4711 * debian/: Added debian/ directory to CVS, so that debian support
4707 4712 is publicly accessible. The debian package is maintained by Jack
4708 4713 Moffit <jack-AT-xiph.org>.
4709 4714
4710 4715 * Documentation: included the notes about an ipython-based system
4711 4716 shell (the hypothetical 'pysh') into the new_design.pdf document,
4712 4717 so that these ideas get distributed to users along with the
4713 4718 official documentation.
4714 4719
4715 4720 2004-05-10 Fernando Perez <fperez@colorado.edu>
4716 4721
4717 4722 * IPython/Logger.py (Logger.create_log): fix recently introduced
4718 4723 bug (misindented line) where logstart would fail when not given an
4719 4724 explicit filename.
4720 4725
4721 4726 2004-05-09 Fernando Perez <fperez@colorado.edu>
4722 4727
4723 4728 * IPython/Magic.py (Magic.parse_options): skip system call when
4724 4729 there are no options to look for. Faster, cleaner for the common
4725 4730 case.
4726 4731
4727 4732 * Documentation: many updates to the manual: describing Windows
4728 4733 support better, Gnuplot updates, credits, misc small stuff. Also
4729 4734 updated the new_design doc a bit.
4730 4735
4731 4736 2004-05-06 *** Released version 0.6.0.rc1
4732 4737
4733 4738 2004-05-06 Fernando Perez <fperez@colorado.edu>
4734 4739
4735 4740 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
4736 4741 operations to use the vastly more efficient list/''.join() method.
4737 4742 (FormattedTB.text): Fix
4738 4743 http://www.scipy.net/roundup/ipython/issue12 - exception source
4739 4744 extract not updated after reload. Thanks to Mike Salib
4740 4745 <msalib-AT-mit.edu> for pinning the source of the problem.
4741 4746 Fortunately, the solution works inside ipython and doesn't require
4742 4747 any changes to python proper.
4743 4748
4744 4749 * IPython/Magic.py (Magic.parse_options): Improved to process the
4745 4750 argument list as a true shell would (by actually using the
4746 4751 underlying system shell). This way, all @magics automatically get
4747 4752 shell expansion for variables. Thanks to a comment by Alex
4748 4753 Schmolck.
4749 4754
4750 4755 2004-04-04 Fernando Perez <fperez@colorado.edu>
4751 4756
4752 4757 * IPython/iplib.py (InteractiveShell.interact): Added a special
4753 4758 trap for a debugger quit exception, which is basically impossible
4754 4759 to handle by normal mechanisms, given what pdb does to the stack.
4755 4760 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
4756 4761
4757 4762 2004-04-03 Fernando Perez <fperez@colorado.edu>
4758 4763
4759 4764 * IPython/genutils.py (Term): Standardized the names of the Term
4760 4765 class streams to cin/cout/cerr, following C++ naming conventions
4761 4766 (I can't use in/out/err because 'in' is not a valid attribute
4762 4767 name).
4763 4768
4764 4769 * IPython/iplib.py (InteractiveShell.interact): don't increment
4765 4770 the prompt if there's no user input. By Daniel 'Dang' Griffith
4766 4771 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
4767 4772 Francois Pinard.
4768 4773
4769 4774 2004-04-02 Fernando Perez <fperez@colorado.edu>
4770 4775
4771 4776 * IPython/genutils.py (Stream.__init__): Modified to survive at
4772 4777 least importing in contexts where stdin/out/err aren't true file
4773 4778 objects, such as PyCrust (they lack fileno() and mode). However,
4774 4779 the recovery facilities which rely on these things existing will
4775 4780 not work.
4776 4781
4777 4782 2004-04-01 Fernando Perez <fperez@colorado.edu>
4778 4783
4779 4784 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
4780 4785 use the new getoutputerror() function, so it properly
4781 4786 distinguishes stdout/err.
4782 4787
4783 4788 * IPython/genutils.py (getoutputerror): added a function to
4784 4789 capture separately the standard output and error of a command.
4785 4790 After a comment from dang on the mailing lists. This code is
4786 4791 basically a modified version of commands.getstatusoutput(), from
4787 4792 the standard library.
4788 4793
4789 4794 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
4790 4795 '!!' as a special syntax (shorthand) to access @sx.
4791 4796
4792 4797 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
4793 4798 command and return its output as a list split on '\n'.
4794 4799
4795 4800 2004-03-31 Fernando Perez <fperez@colorado.edu>
4796 4801
4797 4802 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
4798 4803 method to dictionaries used as FakeModule instances if they lack
4799 4804 it. At least pydoc in python2.3 breaks for runtime-defined
4800 4805 functions without this hack. At some point I need to _really_
4801 4806 understand what FakeModule is doing, because it's a gross hack.
4802 4807 But it solves Arnd's problem for now...
4803 4808
4804 4809 2004-02-27 Fernando Perez <fperez@colorado.edu>
4805 4810
4806 4811 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
4807 4812 mode would behave erratically. Also increased the number of
4808 4813 possible logs in rotate mod to 999. Thanks to Rod Holland
4809 4814 <rhh@StructureLABS.com> for the report and fixes.
4810 4815
4811 4816 2004-02-26 Fernando Perez <fperez@colorado.edu>
4812 4817
4813 4818 * IPython/genutils.py (page): Check that the curses module really
4814 4819 has the initscr attribute before trying to use it. For some
4815 4820 reason, the Solaris curses module is missing this. I think this
4816 4821 should be considered a Solaris python bug, but I'm not sure.
4817 4822
4818 4823 2004-01-17 Fernando Perez <fperez@colorado.edu>
4819 4824
4820 4825 * IPython/genutils.py (Stream.__init__): Changes to try to make
4821 4826 ipython robust against stdin/out/err being closed by the user.
4822 4827 This is 'user error' (and blocks a normal python session, at least
4823 4828 the stdout case). However, Ipython should be able to survive such
4824 4829 instances of abuse as gracefully as possible. To simplify the
4825 4830 coding and maintain compatibility with Gary Bishop's Term
4826 4831 contributions, I've made use of classmethods for this. I think
4827 4832 this introduces a dependency on python 2.2.
4828 4833
4829 4834 2004-01-13 Fernando Perez <fperez@colorado.edu>
4830 4835
4831 4836 * IPython/numutils.py (exp_safe): simplified the code a bit and
4832 4837 removed the need for importing the kinds module altogether.
4833 4838
4834 4839 2004-01-06 Fernando Perez <fperez@colorado.edu>
4835 4840
4836 4841 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
4837 4842 a magic function instead, after some community feedback. No
4838 4843 special syntax will exist for it, but its name is deliberately
4839 4844 very short.
4840 4845
4841 4846 2003-12-20 Fernando Perez <fperez@colorado.edu>
4842 4847
4843 4848 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
4844 4849 new functionality, to automagically assign the result of a shell
4845 4850 command to a variable. I'll solicit some community feedback on
4846 4851 this before making it permanent.
4847 4852
4848 4853 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
4849 4854 requested about callables for which inspect couldn't obtain a
4850 4855 proper argspec. Thanks to a crash report sent by Etienne
4851 4856 Posthumus <etienne-AT-apple01.cs.vu.nl>.
4852 4857
4853 4858 2003-12-09 Fernando Perez <fperez@colorado.edu>
4854 4859
4855 4860 * IPython/genutils.py (page): patch for the pager to work across
4856 4861 various versions of Windows. By Gary Bishop.
4857 4862
4858 4863 2003-12-04 Fernando Perez <fperez@colorado.edu>
4859 4864
4860 4865 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
4861 4866 Gnuplot.py version 1.7, whose internal names changed quite a bit.
4862 4867 While I tested this and it looks ok, there may still be corner
4863 4868 cases I've missed.
4864 4869
4865 4870 2003-12-01 Fernando Perez <fperez@colorado.edu>
4866 4871
4867 4872 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
4868 4873 where a line like 'p,q=1,2' would fail because the automagic
4869 4874 system would be triggered for @p.
4870 4875
4871 4876 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
4872 4877 cleanups, code unmodified.
4873 4878
4874 4879 * IPython/genutils.py (Term): added a class for IPython to handle
4875 4880 output. In most cases it will just be a proxy for stdout/err, but
4876 4881 having this allows modifications to be made for some platforms,
4877 4882 such as handling color escapes under Windows. All of this code
4878 4883 was contributed by Gary Bishop, with minor modifications by me.
4879 4884 The actual changes affect many files.
4880 4885
4881 4886 2003-11-30 Fernando Perez <fperez@colorado.edu>
4882 4887
4883 4888 * IPython/iplib.py (file_matches): new completion code, courtesy
4884 4889 of Jeff Collins. This enables filename completion again under
4885 4890 python 2.3, which disabled it at the C level.
4886 4891
4887 4892 2003-11-11 Fernando Perez <fperez@colorado.edu>
4888 4893
4889 4894 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
4890 4895 for Numeric.array(map(...)), but often convenient.
4891 4896
4892 4897 2003-11-05 Fernando Perez <fperez@colorado.edu>
4893 4898
4894 4899 * IPython/numutils.py (frange): Changed a call from int() to
4895 4900 int(round()) to prevent a problem reported with arange() in the
4896 4901 numpy list.
4897 4902
4898 4903 2003-10-06 Fernando Perez <fperez@colorado.edu>
4899 4904
4900 4905 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
4901 4906 prevent crashes if sys lacks an argv attribute (it happens with
4902 4907 embedded interpreters which build a bare-bones sys module).
4903 4908 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
4904 4909
4905 4910 2003-09-24 Fernando Perez <fperez@colorado.edu>
4906 4911
4907 4912 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
4908 4913 to protect against poorly written user objects where __getattr__
4909 4914 raises exceptions other than AttributeError. Thanks to a bug
4910 4915 report by Oliver Sander <osander-AT-gmx.de>.
4911 4916
4912 4917 * IPython/FakeModule.py (FakeModule.__repr__): this method was
4913 4918 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
4914 4919
4915 4920 2003-09-09 Fernando Perez <fperez@colorado.edu>
4916 4921
4917 4922 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4918 4923 unpacking a list whith a callable as first element would
4919 4924 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
4920 4925 Collins.
4921 4926
4922 4927 2003-08-25 *** Released version 0.5.0
4923 4928
4924 4929 2003-08-22 Fernando Perez <fperez@colorado.edu>
4925 4930
4926 4931 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
4927 4932 improperly defined user exceptions. Thanks to feedback from Mark
4928 4933 Russell <mrussell-AT-verio.net>.
4929 4934
4930 4935 2003-08-20 Fernando Perez <fperez@colorado.edu>
4931 4936
4932 4937 * IPython/OInspect.py (Inspector.pinfo): changed String Form
4933 4938 printing so that it would print multi-line string forms starting
4934 4939 with a new line. This way the formatting is better respected for
4935 4940 objects which work hard to make nice string forms.
4936 4941
4937 4942 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
4938 4943 autocall would overtake data access for objects with both
4939 4944 __getitem__ and __call__.
4940 4945
4941 4946 2003-08-19 *** Released version 0.5.0-rc1
4942 4947
4943 4948 2003-08-19 Fernando Perez <fperez@colorado.edu>
4944 4949
4945 4950 * IPython/deep_reload.py (load_tail): single tiny change here
4946 4951 seems to fix the long-standing bug of dreload() failing to work
4947 4952 for dotted names. But this module is pretty tricky, so I may have
4948 4953 missed some subtlety. Needs more testing!.
4949 4954
4950 4955 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
4951 4956 exceptions which have badly implemented __str__ methods.
4952 4957 (VerboseTB.text): harden against inspect.getinnerframes crashing,
4953 4958 which I've been getting reports about from Python 2.3 users. I
4954 4959 wish I had a simple test case to reproduce the problem, so I could
4955 4960 either write a cleaner workaround or file a bug report if
4956 4961 necessary.
4957 4962
4958 4963 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
4959 4964 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
4960 4965 a bug report by Tjabo Kloppenburg.
4961 4966
4962 4967 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
4963 4968 crashes. Wrapped the pdb call in a blanket try/except, since pdb
4964 4969 seems rather unstable. Thanks to a bug report by Tjabo
4965 4970 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
4966 4971
4967 4972 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
4968 4973 this out soon because of the critical fixes in the inner loop for
4969 4974 generators.
4970 4975
4971 4976 * IPython/Magic.py (Magic.getargspec): removed. This (and
4972 4977 _get_def) have been obsoleted by OInspect for a long time, I
4973 4978 hadn't noticed that they were dead code.
4974 4979 (Magic._ofind): restored _ofind functionality for a few literals
4975 4980 (those in ["''",'""','[]','{}','()']). But it won't work anymore
4976 4981 for things like "hello".capitalize?, since that would require a
4977 4982 potentially dangerous eval() again.
4978 4983
4979 4984 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
4980 4985 logic a bit more to clean up the escapes handling and minimize the
4981 4986 use of _ofind to only necessary cases. The interactive 'feel' of
4982 4987 IPython should have improved quite a bit with the changes in
4983 4988 _prefilter and _ofind (besides being far safer than before).
4984 4989
4985 4990 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
4986 4991 obscure, never reported). Edit would fail to find the object to
4987 4992 edit under some circumstances.
4988 4993 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
4989 4994 which were causing double-calling of generators. Those eval calls
4990 4995 were _very_ dangerous, since code with side effects could be
4991 4996 triggered. As they say, 'eval is evil'... These were the
4992 4997 nastiest evals in IPython. Besides, _ofind is now far simpler,
4993 4998 and it should also be quite a bit faster. Its use of inspect is
4994 4999 also safer, so perhaps some of the inspect-related crashes I've
4995 5000 seen lately with Python 2.3 might be taken care of. That will
4996 5001 need more testing.
4997 5002
4998 5003 2003-08-17 Fernando Perez <fperez@colorado.edu>
4999 5004
5000 5005 * IPython/iplib.py (InteractiveShell._prefilter): significant
5001 5006 simplifications to the logic for handling user escapes. Faster
5002 5007 and simpler code.
5003 5008
5004 5009 2003-08-14 Fernando Perez <fperez@colorado.edu>
5005 5010
5006 5011 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
5007 5012 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
5008 5013 but it should be quite a bit faster. And the recursive version
5009 5014 generated O(log N) intermediate storage for all rank>1 arrays,
5010 5015 even if they were contiguous.
5011 5016 (l1norm): Added this function.
5012 5017 (norm): Added this function for arbitrary norms (including
5013 5018 l-infinity). l1 and l2 are still special cases for convenience
5014 5019 and speed.
5015 5020
5016 5021 2003-08-03 Fernando Perez <fperez@colorado.edu>
5017 5022
5018 5023 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
5019 5024 exceptions, which now raise PendingDeprecationWarnings in Python
5020 5025 2.3. There were some in Magic and some in Gnuplot2.
5021 5026
5022 5027 2003-06-30 Fernando Perez <fperez@colorado.edu>
5023 5028
5024 5029 * IPython/genutils.py (page): modified to call curses only for
5025 5030 terminals where TERM=='xterm'. After problems under many other
5026 5031 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
5027 5032
5028 5033 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
5029 5034 would be triggered when readline was absent. This was just an old
5030 5035 debugging statement I'd forgotten to take out.
5031 5036
5032 5037 2003-06-20 Fernando Perez <fperez@colorado.edu>
5033 5038
5034 5039 * IPython/genutils.py (clock): modified to return only user time
5035 5040 (not counting system time), after a discussion on scipy. While
5036 5041 system time may be a useful quantity occasionally, it may much
5037 5042 more easily be skewed by occasional swapping or other similar
5038 5043 activity.
5039 5044
5040 5045 2003-06-05 Fernando Perez <fperez@colorado.edu>
5041 5046
5042 5047 * IPython/numutils.py (identity): new function, for building
5043 5048 arbitrary rank Kronecker deltas (mostly backwards compatible with
5044 5049 Numeric.identity)
5045 5050
5046 5051 2003-06-03 Fernando Perez <fperez@colorado.edu>
5047 5052
5048 5053 * IPython/iplib.py (InteractiveShell.handle_magic): protect
5049 5054 arguments passed to magics with spaces, to allow trailing '\' to
5050 5055 work normally (mainly for Windows users).
5051 5056
5052 5057 2003-05-29 Fernando Perez <fperez@colorado.edu>
5053 5058
5054 5059 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
5055 5060 instead of pydoc.help. This fixes a bizarre behavior where
5056 5061 printing '%s' % locals() would trigger the help system. Now
5057 5062 ipython behaves like normal python does.
5058 5063
5059 5064 Note that if one does 'from pydoc import help', the bizarre
5060 5065 behavior returns, but this will also happen in normal python, so
5061 5066 it's not an ipython bug anymore (it has to do with how pydoc.help
5062 5067 is implemented).
5063 5068
5064 5069 2003-05-22 Fernando Perez <fperez@colorado.edu>
5065 5070
5066 5071 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
5067 5072 return [] instead of None when nothing matches, also match to end
5068 5073 of line. Patch by Gary Bishop.
5069 5074
5070 5075 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
5071 5076 protection as before, for files passed on the command line. This
5072 5077 prevents the CrashHandler from kicking in if user files call into
5073 5078 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
5074 5079 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
5075 5080
5076 5081 2003-05-20 *** Released version 0.4.0
5077 5082
5078 5083 2003-05-20 Fernando Perez <fperez@colorado.edu>
5079 5084
5080 5085 * setup.py: added support for manpages. It's a bit hackish b/c of
5081 5086 a bug in the way the bdist_rpm distutils target handles gzipped
5082 5087 manpages, but it works. After a patch by Jack.
5083 5088
5084 5089 2003-05-19 Fernando Perez <fperez@colorado.edu>
5085 5090
5086 5091 * IPython/numutils.py: added a mockup of the kinds module, since
5087 5092 it was recently removed from Numeric. This way, numutils will
5088 5093 work for all users even if they are missing kinds.
5089 5094
5090 5095 * IPython/Magic.py (Magic._ofind): Harden against an inspect
5091 5096 failure, which can occur with SWIG-wrapped extensions. After a
5092 5097 crash report from Prabhu.
5093 5098
5094 5099 2003-05-16 Fernando Perez <fperez@colorado.edu>
5095 5100
5096 5101 * IPython/iplib.py (InteractiveShell.excepthook): New method to
5097 5102 protect ipython from user code which may call directly
5098 5103 sys.excepthook (this looks like an ipython crash to the user, even
5099 5104 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
5100 5105 This is especially important to help users of WxWindows, but may
5101 5106 also be useful in other cases.
5102 5107
5103 5108 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
5104 5109 an optional tb_offset to be specified, and to preserve exception
5105 5110 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
5106 5111
5107 5112 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
5108 5113
5109 5114 2003-05-15 Fernando Perez <fperez@colorado.edu>
5110 5115
5111 5116 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
5112 5117 installing for a new user under Windows.
5113 5118
5114 5119 2003-05-12 Fernando Perez <fperez@colorado.edu>
5115 5120
5116 5121 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
5117 5122 handler for Emacs comint-based lines. Currently it doesn't do
5118 5123 much (but importantly, it doesn't update the history cache). In
5119 5124 the future it may be expanded if Alex needs more functionality
5120 5125 there.
5121 5126
5122 5127 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
5123 5128 info to crash reports.
5124 5129
5125 5130 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
5126 5131 just like Python's -c. Also fixed crash with invalid -color
5127 5132 option value at startup. Thanks to Will French
5128 5133 <wfrench-AT-bestweb.net> for the bug report.
5129 5134
5130 5135 2003-05-09 Fernando Perez <fperez@colorado.edu>
5131 5136
5132 5137 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
5133 5138 to EvalDict (it's a mapping, after all) and simplified its code
5134 5139 quite a bit, after a nice discussion on c.l.py where Gustavo
5135 5140 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
5136 5141
5137 5142 2003-04-30 Fernando Perez <fperez@colorado.edu>
5138 5143
5139 5144 * IPython/genutils.py (timings_out): modified it to reduce its
5140 5145 overhead in the common reps==1 case.
5141 5146
5142 5147 2003-04-29 Fernando Perez <fperez@colorado.edu>
5143 5148
5144 5149 * IPython/genutils.py (timings_out): Modified to use the resource
5145 5150 module, which avoids the wraparound problems of time.clock().
5146 5151
5147 5152 2003-04-17 *** Released version 0.2.15pre4
5148 5153
5149 5154 2003-04-17 Fernando Perez <fperez@colorado.edu>
5150 5155
5151 5156 * setup.py (scriptfiles): Split windows-specific stuff over to a
5152 5157 separate file, in an attempt to have a Windows GUI installer.
5153 5158 That didn't work, but part of the groundwork is done.
5154 5159
5155 5160 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
5156 5161 indent/unindent with 4 spaces. Particularly useful in combination
5157 5162 with the new auto-indent option.
5158 5163
5159 5164 2003-04-16 Fernando Perez <fperez@colorado.edu>
5160 5165
5161 5166 * IPython/Magic.py: various replacements of self.rc for
5162 5167 self.shell.rc. A lot more remains to be done to fully disentangle
5163 5168 this class from the main Shell class.
5164 5169
5165 5170 * IPython/GnuplotRuntime.py: added checks for mouse support so
5166 5171 that we don't try to enable it if the current gnuplot doesn't
5167 5172 really support it. Also added checks so that we don't try to
5168 5173 enable persist under Windows (where Gnuplot doesn't recognize the
5169 5174 option).
5170 5175
5171 5176 * IPython/iplib.py (InteractiveShell.interact): Added optional
5172 5177 auto-indenting code, after a patch by King C. Shu
5173 5178 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
5174 5179 get along well with pasting indented code. If I ever figure out
5175 5180 how to make that part go well, it will become on by default.
5176 5181
5177 5182 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
5178 5183 crash ipython if there was an unmatched '%' in the user's prompt
5179 5184 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5180 5185
5181 5186 * IPython/iplib.py (InteractiveShell.interact): removed the
5182 5187 ability to ask the user whether he wants to crash or not at the
5183 5188 'last line' exception handler. Calling functions at that point
5184 5189 changes the stack, and the error reports would have incorrect
5185 5190 tracebacks.
5186 5191
5187 5192 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
5188 5193 pass through a peger a pretty-printed form of any object. After a
5189 5194 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
5190 5195
5191 5196 2003-04-14 Fernando Perez <fperez@colorado.edu>
5192 5197
5193 5198 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
5194 5199 all files in ~ would be modified at first install (instead of
5195 5200 ~/.ipython). This could be potentially disastrous, as the
5196 5201 modification (make line-endings native) could damage binary files.
5197 5202
5198 5203 2003-04-10 Fernando Perez <fperez@colorado.edu>
5199 5204
5200 5205 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
5201 5206 handle only lines which are invalid python. This now means that
5202 5207 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
5203 5208 for the bug report.
5204 5209
5205 5210 2003-04-01 Fernando Perez <fperez@colorado.edu>
5206 5211
5207 5212 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
5208 5213 where failing to set sys.last_traceback would crash pdb.pm().
5209 5214 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
5210 5215 report.
5211 5216
5212 5217 2003-03-25 Fernando Perez <fperez@colorado.edu>
5213 5218
5214 5219 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
5215 5220 before printing it (it had a lot of spurious blank lines at the
5216 5221 end).
5217 5222
5218 5223 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
5219 5224 output would be sent 21 times! Obviously people don't use this
5220 5225 too often, or I would have heard about it.
5221 5226
5222 5227 2003-03-24 Fernando Perez <fperez@colorado.edu>
5223 5228
5224 5229 * setup.py (scriptfiles): renamed the data_files parameter from
5225 5230 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
5226 5231 for the patch.
5227 5232
5228 5233 2003-03-20 Fernando Perez <fperez@colorado.edu>
5229 5234
5230 5235 * IPython/genutils.py (error): added error() and fatal()
5231 5236 functions.
5232 5237
5233 5238 2003-03-18 *** Released version 0.2.15pre3
5234 5239
5235 5240 2003-03-18 Fernando Perez <fperez@colorado.edu>
5236 5241
5237 5242 * setupext/install_data_ext.py
5238 5243 (install_data_ext.initialize_options): Class contributed by Jack
5239 5244 Moffit for fixing the old distutils hack. He is sending this to
5240 5245 the distutils folks so in the future we may not need it as a
5241 5246 private fix.
5242 5247
5243 5248 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
5244 5249 changes for Debian packaging. See his patch for full details.
5245 5250 The old distutils hack of making the ipythonrc* files carry a
5246 5251 bogus .py extension is gone, at last. Examples were moved to a
5247 5252 separate subdir under doc/, and the separate executable scripts
5248 5253 now live in their own directory. Overall a great cleanup. The
5249 5254 manual was updated to use the new files, and setup.py has been
5250 5255 fixed for this setup.
5251 5256
5252 5257 * IPython/PyColorize.py (Parser.usage): made non-executable and
5253 5258 created a pycolor wrapper around it to be included as a script.
5254 5259
5255 5260 2003-03-12 *** Released version 0.2.15pre2
5256 5261
5257 5262 2003-03-12 Fernando Perez <fperez@colorado.edu>
5258 5263
5259 5264 * IPython/ColorANSI.py (make_color_table): Finally fixed the
5260 5265 long-standing problem with garbage characters in some terminals.
5261 5266 The issue was really that the \001 and \002 escapes must _only_ be
5262 5267 passed to input prompts (which call readline), but _never_ to
5263 5268 normal text to be printed on screen. I changed ColorANSI to have
5264 5269 two classes: TermColors and InputTermColors, each with the
5265 5270 appropriate escapes for input prompts or normal text. The code in
5266 5271 Prompts.py got slightly more complicated, but this very old and
5267 5272 annoying bug is finally fixed.
5268 5273
5269 5274 All the credit for nailing down the real origin of this problem
5270 5275 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
5271 5276 *Many* thanks to him for spending quite a bit of effort on this.
5272 5277
5273 5278 2003-03-05 *** Released version 0.2.15pre1
5274 5279
5275 5280 2003-03-03 Fernando Perez <fperez@colorado.edu>
5276 5281
5277 5282 * IPython/FakeModule.py: Moved the former _FakeModule to a
5278 5283 separate file, because it's also needed by Magic (to fix a similar
5279 5284 pickle-related issue in @run).
5280 5285
5281 5286 2003-03-02 Fernando Perez <fperez@colorado.edu>
5282 5287
5283 5288 * IPython/Magic.py (Magic.magic_autocall): new magic to control
5284 5289 the autocall option at runtime.
5285 5290 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
5286 5291 across Magic.py to start separating Magic from InteractiveShell.
5287 5292 (Magic._ofind): Fixed to return proper namespace for dotted
5288 5293 names. Before, a dotted name would always return 'not currently
5289 5294 defined', because it would find the 'parent'. s.x would be found,
5290 5295 but since 'x' isn't defined by itself, it would get confused.
5291 5296 (Magic.magic_run): Fixed pickling problems reported by Ralf
5292 5297 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
5293 5298 that I'd used when Mike Heeter reported similar issues at the
5294 5299 top-level, but now for @run. It boils down to injecting the
5295 5300 namespace where code is being executed with something that looks
5296 5301 enough like a module to fool pickle.dump(). Since a pickle stores
5297 5302 a named reference to the importing module, we need this for
5298 5303 pickles to save something sensible.
5299 5304
5300 5305 * IPython/ipmaker.py (make_IPython): added an autocall option.
5301 5306
5302 5307 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
5303 5308 the auto-eval code. Now autocalling is an option, and the code is
5304 5309 also vastly safer. There is no more eval() involved at all.
5305 5310
5306 5311 2003-03-01 Fernando Perez <fperez@colorado.edu>
5307 5312
5308 5313 * IPython/Magic.py (Magic._ofind): Changed interface to return a
5309 5314 dict with named keys instead of a tuple.
5310 5315
5311 5316 * IPython: Started using CVS for IPython as of 0.2.15pre1.
5312 5317
5313 5318 * setup.py (make_shortcut): Fixed message about directories
5314 5319 created during Windows installation (the directories were ok, just
5315 5320 the printed message was misleading). Thanks to Chris Liechti
5316 5321 <cliechti-AT-gmx.net> for the heads up.
5317 5322
5318 5323 2003-02-21 Fernando Perez <fperez@colorado.edu>
5319 5324
5320 5325 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
5321 5326 of ValueError exception when checking for auto-execution. This
5322 5327 one is raised by things like Numeric arrays arr.flat when the
5323 5328 array is non-contiguous.
5324 5329
5325 5330 2003-01-31 Fernando Perez <fperez@colorado.edu>
5326 5331
5327 5332 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
5328 5333 not return any value at all (even though the command would get
5329 5334 executed).
5330 5335 (xsys): Flush stdout right after printing the command to ensure
5331 5336 proper ordering of commands and command output in the total
5332 5337 output.
5333 5338 (SystemExec/xsys/bq): Switched the names of xsys/bq and
5334 5339 system/getoutput as defaults. The old ones are kept for
5335 5340 compatibility reasons, so no code which uses this library needs
5336 5341 changing.
5337 5342
5338 5343 2003-01-27 *** Released version 0.2.14
5339 5344
5340 5345 2003-01-25 Fernando Perez <fperez@colorado.edu>
5341 5346
5342 5347 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
5343 5348 functions defined in previous edit sessions could not be re-edited
5344 5349 (because the temp files were immediately removed). Now temp files
5345 5350 are removed only at IPython's exit.
5346 5351 (Magic.magic_run): Improved @run to perform shell-like expansions
5347 5352 on its arguments (~users and $VARS). With this, @run becomes more
5348 5353 like a normal command-line.
5349 5354
5350 5355 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
5351 5356 bugs related to embedding and cleaned up that code. A fairly
5352 5357 important one was the impossibility to access the global namespace
5353 5358 through the embedded IPython (only local variables were visible).
5354 5359
5355 5360 2003-01-14 Fernando Perez <fperez@colorado.edu>
5356 5361
5357 5362 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
5358 5363 auto-calling to be a bit more conservative. Now it doesn't get
5359 5364 triggered if any of '!=()<>' are in the rest of the input line, to
5360 5365 allow comparing callables. Thanks to Alex for the heads up.
5361 5366
5362 5367 2003-01-07 Fernando Perez <fperez@colorado.edu>
5363 5368
5364 5369 * IPython/genutils.py (page): fixed estimation of the number of
5365 5370 lines in a string to be paged to simply count newlines. This
5366 5371 prevents over-guessing due to embedded escape sequences. A better
5367 5372 long-term solution would involve stripping out the control chars
5368 5373 for the count, but it's potentially so expensive I just don't
5369 5374 think it's worth doing.
5370 5375
5371 5376 2002-12-19 *** Released version 0.2.14pre50
5372 5377
5373 5378 2002-12-19 Fernando Perez <fperez@colorado.edu>
5374 5379
5375 5380 * tools/release (version): Changed release scripts to inform
5376 5381 Andrea and build a NEWS file with a list of recent changes.
5377 5382
5378 5383 * IPython/ColorANSI.py (__all__): changed terminal detection
5379 5384 code. Seems to work better for xterms without breaking
5380 5385 konsole. Will need more testing to determine if WinXP and Mac OSX
5381 5386 also work ok.
5382 5387
5383 5388 2002-12-18 *** Released version 0.2.14pre49
5384 5389
5385 5390 2002-12-18 Fernando Perez <fperez@colorado.edu>
5386 5391
5387 5392 * Docs: added new info about Mac OSX, from Andrea.
5388 5393
5389 5394 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
5390 5395 allow direct plotting of python strings whose format is the same
5391 5396 of gnuplot data files.
5392 5397
5393 5398 2002-12-16 Fernando Perez <fperez@colorado.edu>
5394 5399
5395 5400 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
5396 5401 value of exit question to be acknowledged.
5397 5402
5398 5403 2002-12-03 Fernando Perez <fperez@colorado.edu>
5399 5404
5400 5405 * IPython/ipmaker.py: removed generators, which had been added
5401 5406 by mistake in an earlier debugging run. This was causing trouble
5402 5407 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
5403 5408 for pointing this out.
5404 5409
5405 5410 2002-11-17 Fernando Perez <fperez@colorado.edu>
5406 5411
5407 5412 * Manual: updated the Gnuplot section.
5408 5413
5409 5414 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
5410 5415 a much better split of what goes in Runtime and what goes in
5411 5416 Interactive.
5412 5417
5413 5418 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
5414 5419 being imported from iplib.
5415 5420
5416 5421 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
5417 5422 for command-passing. Now the global Gnuplot instance is called
5418 5423 'gp' instead of 'g', which was really a far too fragile and
5419 5424 common name.
5420 5425
5421 5426 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
5422 5427 bounding boxes generated by Gnuplot for square plots.
5423 5428
5424 5429 * IPython/genutils.py (popkey): new function added. I should
5425 5430 suggest this on c.l.py as a dict method, it seems useful.
5426 5431
5427 5432 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
5428 5433 to transparently handle PostScript generation. MUCH better than
5429 5434 the previous plot_eps/replot_eps (which I removed now). The code
5430 5435 is also fairly clean and well documented now (including
5431 5436 docstrings).
5432 5437
5433 5438 2002-11-13 Fernando Perez <fperez@colorado.edu>
5434 5439
5435 5440 * IPython/Magic.py (Magic.magic_edit): fixed docstring
5436 5441 (inconsistent with options).
5437 5442
5438 5443 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
5439 5444 manually disabled, I don't know why. Fixed it.
5440 5445 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
5441 5446 eps output.
5442 5447
5443 5448 2002-11-12 Fernando Perez <fperez@colorado.edu>
5444 5449
5445 5450 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
5446 5451 don't propagate up to caller. Fixes crash reported by François
5447 5452 Pinard.
5448 5453
5449 5454 2002-11-09 Fernando Perez <fperez@colorado.edu>
5450 5455
5451 5456 * IPython/ipmaker.py (make_IPython): fixed problem with writing
5452 5457 history file for new users.
5453 5458 (make_IPython): fixed bug where initial install would leave the
5454 5459 user running in the .ipython dir.
5455 5460 (make_IPython): fixed bug where config dir .ipython would be
5456 5461 created regardless of the given -ipythondir option. Thanks to Cory
5457 5462 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
5458 5463
5459 5464 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
5460 5465 type confirmations. Will need to use it in all of IPython's code
5461 5466 consistently.
5462 5467
5463 5468 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
5464 5469 context to print 31 lines instead of the default 5. This will make
5465 5470 the crash reports extremely detailed in case the problem is in
5466 5471 libraries I don't have access to.
5467 5472
5468 5473 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
5469 5474 line of defense' code to still crash, but giving users fair
5470 5475 warning. I don't want internal errors to go unreported: if there's
5471 5476 an internal problem, IPython should crash and generate a full
5472 5477 report.
5473 5478
5474 5479 2002-11-08 Fernando Perez <fperez@colorado.edu>
5475 5480
5476 5481 * IPython/iplib.py (InteractiveShell.interact): added code to trap
5477 5482 otherwise uncaught exceptions which can appear if people set
5478 5483 sys.stdout to something badly broken. Thanks to a crash report
5479 5484 from henni-AT-mail.brainbot.com.
5480 5485
5481 5486 2002-11-04 Fernando Perez <fperez@colorado.edu>
5482 5487
5483 5488 * IPython/iplib.py (InteractiveShell.interact): added
5484 5489 __IPYTHON__active to the builtins. It's a flag which goes on when
5485 5490 the interaction starts and goes off again when it stops. This
5486 5491 allows embedding code to detect being inside IPython. Before this
5487 5492 was done via __IPYTHON__, but that only shows that an IPython
5488 5493 instance has been created.
5489 5494
5490 5495 * IPython/Magic.py (Magic.magic_env): I realized that in a
5491 5496 UserDict, instance.data holds the data as a normal dict. So I
5492 5497 modified @env to return os.environ.data instead of rebuilding a
5493 5498 dict by hand.
5494 5499
5495 5500 2002-11-02 Fernando Perez <fperez@colorado.edu>
5496 5501
5497 5502 * IPython/genutils.py (warn): changed so that level 1 prints no
5498 5503 header. Level 2 is now the default (with 'WARNING' header, as
5499 5504 before). I think I tracked all places where changes were needed in
5500 5505 IPython, but outside code using the old level numbering may have
5501 5506 broken.
5502 5507
5503 5508 * IPython/iplib.py (InteractiveShell.runcode): added this to
5504 5509 handle the tracebacks in SystemExit traps correctly. The previous
5505 5510 code (through interact) was printing more of the stack than
5506 5511 necessary, showing IPython internal code to the user.
5507 5512
5508 5513 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
5509 5514 default. Now that the default at the confirmation prompt is yes,
5510 5515 it's not so intrusive. François' argument that ipython sessions
5511 5516 tend to be complex enough not to lose them from an accidental C-d,
5512 5517 is a valid one.
5513 5518
5514 5519 * IPython/iplib.py (InteractiveShell.interact): added a
5515 5520 showtraceback() call to the SystemExit trap, and modified the exit
5516 5521 confirmation to have yes as the default.
5517 5522
5518 5523 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
5519 5524 this file. It's been gone from the code for a long time, this was
5520 5525 simply leftover junk.
5521 5526
5522 5527 2002-11-01 Fernando Perez <fperez@colorado.edu>
5523 5528
5524 5529 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
5525 5530 added. If set, IPython now traps EOF and asks for
5526 5531 confirmation. After a request by François Pinard.
5527 5532
5528 5533 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
5529 5534 of @abort, and with a new (better) mechanism for handling the
5530 5535 exceptions.
5531 5536
5532 5537 2002-10-27 Fernando Perez <fperez@colorado.edu>
5533 5538
5534 5539 * IPython/usage.py (__doc__): updated the --help information and
5535 5540 the ipythonrc file to indicate that -log generates
5536 5541 ./ipython.log. Also fixed the corresponding info in @logstart.
5537 5542 This and several other fixes in the manuals thanks to reports by
5538 5543 François Pinard <pinard-AT-iro.umontreal.ca>.
5539 5544
5540 5545 * IPython/Logger.py (Logger.switch_log): Fixed error message to
5541 5546 refer to @logstart (instead of @log, which doesn't exist).
5542 5547
5543 5548 * IPython/iplib.py (InteractiveShell._prefilter): fixed
5544 5549 AttributeError crash. Thanks to Christopher Armstrong
5545 5550 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
5546 5551 introduced recently (in 0.2.14pre37) with the fix to the eval
5547 5552 problem mentioned below.
5548 5553
5549 5554 2002-10-17 Fernando Perez <fperez@colorado.edu>
5550 5555
5551 5556 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
5552 5557 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
5553 5558
5554 5559 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
5555 5560 this function to fix a problem reported by Alex Schmolck. He saw
5556 5561 it with list comprehensions and generators, which were getting
5557 5562 called twice. The real problem was an 'eval' call in testing for
5558 5563 automagic which was evaluating the input line silently.
5559 5564
5560 5565 This is a potentially very nasty bug, if the input has side
5561 5566 effects which must not be repeated. The code is much cleaner now,
5562 5567 without any blanket 'except' left and with a regexp test for
5563 5568 actual function names.
5564 5569
5565 5570 But an eval remains, which I'm not fully comfortable with. I just
5566 5571 don't know how to find out if an expression could be a callable in
5567 5572 the user's namespace without doing an eval on the string. However
5568 5573 that string is now much more strictly checked so that no code
5569 5574 slips by, so the eval should only happen for things that can
5570 5575 really be only function/method names.
5571 5576
5572 5577 2002-10-15 Fernando Perez <fperez@colorado.edu>
5573 5578
5574 5579 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
5575 5580 OSX information to main manual, removed README_Mac_OSX file from
5576 5581 distribution. Also updated credits for recent additions.
5577 5582
5578 5583 2002-10-10 Fernando Perez <fperez@colorado.edu>
5579 5584
5580 5585 * README_Mac_OSX: Added a README for Mac OSX users for fixing
5581 5586 terminal-related issues. Many thanks to Andrea Riciputi
5582 5587 <andrea.riciputi-AT-libero.it> for writing it.
5583 5588
5584 5589 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
5585 5590 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5586 5591
5587 5592 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
5588 5593 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
5589 5594 <syver-en-AT-online.no> who both submitted patches for this problem.
5590 5595
5591 5596 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
5592 5597 global embedding to make sure that things don't overwrite user
5593 5598 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
5594 5599
5595 5600 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
5596 5601 compatibility. Thanks to Hayden Callow
5597 5602 <h.callow-AT-elec.canterbury.ac.nz>
5598 5603
5599 5604 2002-10-04 Fernando Perez <fperez@colorado.edu>
5600 5605
5601 5606 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
5602 5607 Gnuplot.File objects.
5603 5608
5604 5609 2002-07-23 Fernando Perez <fperez@colorado.edu>
5605 5610
5606 5611 * IPython/genutils.py (timing): Added timings() and timing() for
5607 5612 quick access to the most commonly needed data, the execution
5608 5613 times. Old timing() renamed to timings_out().
5609 5614
5610 5615 2002-07-18 Fernando Perez <fperez@colorado.edu>
5611 5616
5612 5617 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
5613 5618 bug with nested instances disrupting the parent's tab completion.
5614 5619
5615 5620 * IPython/iplib.py (all_completions): Added Alex Schmolck's
5616 5621 all_completions code to begin the emacs integration.
5617 5622
5618 5623 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
5619 5624 argument to allow titling individual arrays when plotting.
5620 5625
5621 5626 2002-07-15 Fernando Perez <fperez@colorado.edu>
5622 5627
5623 5628 * setup.py (make_shortcut): changed to retrieve the value of
5624 5629 'Program Files' directory from the registry (this value changes in
5625 5630 non-english versions of Windows). Thanks to Thomas Fanslau
5626 5631 <tfanslau-AT-gmx.de> for the report.
5627 5632
5628 5633 2002-07-10 Fernando Perez <fperez@colorado.edu>
5629 5634
5630 5635 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
5631 5636 a bug in pdb, which crashes if a line with only whitespace is
5632 5637 entered. Bug report submitted to sourceforge.
5633 5638
5634 5639 2002-07-09 Fernando Perez <fperez@colorado.edu>
5635 5640
5636 5641 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
5637 5642 reporting exceptions (it's a bug in inspect.py, I just set a
5638 5643 workaround).
5639 5644
5640 5645 2002-07-08 Fernando Perez <fperez@colorado.edu>
5641 5646
5642 5647 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
5643 5648 __IPYTHON__ in __builtins__ to show up in user_ns.
5644 5649
5645 5650 2002-07-03 Fernando Perez <fperez@colorado.edu>
5646 5651
5647 5652 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
5648 5653 name from @gp_set_instance to @gp_set_default.
5649 5654
5650 5655 * IPython/ipmaker.py (make_IPython): default editor value set to
5651 5656 '0' (a string), to match the rc file. Otherwise will crash when
5652 5657 .strip() is called on it.
5653 5658
5654 5659
5655 5660 2002-06-28 Fernando Perez <fperez@colorado.edu>
5656 5661
5657 5662 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
5658 5663 of files in current directory when a file is executed via
5659 5664 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
5660 5665
5661 5666 * setup.py (manfiles): fix for rpm builds, submitted by RA
5662 5667 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
5663 5668
5664 5669 * IPython/ipmaker.py (make_IPython): fixed lookup of default
5665 5670 editor when set to '0'. Problem was, '0' evaluates to True (it's a
5666 5671 string!). A. Schmolck caught this one.
5667 5672
5668 5673 2002-06-27 Fernando Perez <fperez@colorado.edu>
5669 5674
5670 5675 * IPython/ipmaker.py (make_IPython): fixed bug when running user
5671 5676 defined files at the cmd line. __name__ wasn't being set to
5672 5677 __main__.
5673 5678
5674 5679 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
5675 5680 regular lists and tuples besides Numeric arrays.
5676 5681
5677 5682 * IPython/Prompts.py (CachedOutput.__call__): Added output
5678 5683 supression for input ending with ';'. Similar to Mathematica and
5679 5684 Matlab. The _* vars and Out[] list are still updated, just like
5680 5685 Mathematica behaves.
5681 5686
5682 5687 2002-06-25 Fernando Perez <fperez@colorado.edu>
5683 5688
5684 5689 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
5685 5690 .ini extensions for profiels under Windows.
5686 5691
5687 5692 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
5688 5693 string form. Fix contributed by Alexander Schmolck
5689 5694 <a.schmolck-AT-gmx.net>
5690 5695
5691 5696 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
5692 5697 pre-configured Gnuplot instance.
5693 5698
5694 5699 2002-06-21 Fernando Perez <fperez@colorado.edu>
5695 5700
5696 5701 * IPython/numutils.py (exp_safe): new function, works around the
5697 5702 underflow problems in Numeric.
5698 5703 (log2): New fn. Safe log in base 2: returns exact integer answer
5699 5704 for exact integer powers of 2.
5700 5705
5701 5706 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
5702 5707 properly.
5703 5708
5704 5709 2002-06-20 Fernando Perez <fperez@colorado.edu>
5705 5710
5706 5711 * IPython/genutils.py (timing): new function like
5707 5712 Mathematica's. Similar to time_test, but returns more info.
5708 5713
5709 5714 2002-06-18 Fernando Perez <fperez@colorado.edu>
5710 5715
5711 5716 * IPython/Magic.py (Magic.magic_save): modified @save and @r
5712 5717 according to Mike Heeter's suggestions.
5713 5718
5714 5719 2002-06-16 Fernando Perez <fperez@colorado.edu>
5715 5720
5716 5721 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
5717 5722 system. GnuplotMagic is gone as a user-directory option. New files
5718 5723 make it easier to use all the gnuplot stuff both from external
5719 5724 programs as well as from IPython. Had to rewrite part of
5720 5725 hardcopy() b/c of a strange bug: often the ps files simply don't
5721 5726 get created, and require a repeat of the command (often several
5722 5727 times).
5723 5728
5724 5729 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
5725 5730 resolve output channel at call time, so that if sys.stderr has
5726 5731 been redirected by user this gets honored.
5727 5732
5728 5733 2002-06-13 Fernando Perez <fperez@colorado.edu>
5729 5734
5730 5735 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
5731 5736 IPShell. Kept a copy with the old names to avoid breaking people's
5732 5737 embedded code.
5733 5738
5734 5739 * IPython/ipython: simplified it to the bare minimum after
5735 5740 Holger's suggestions. Added info about how to use it in
5736 5741 PYTHONSTARTUP.
5737 5742
5738 5743 * IPython/Shell.py (IPythonShell): changed the options passing
5739 5744 from a string with funky %s replacements to a straight list. Maybe
5740 5745 a bit more typing, but it follows sys.argv conventions, so there's
5741 5746 less special-casing to remember.
5742 5747
5743 5748 2002-06-12 Fernando Perez <fperez@colorado.edu>
5744 5749
5745 5750 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
5746 5751 command. Thanks to a suggestion by Mike Heeter.
5747 5752 (Magic.magic_pfile): added behavior to look at filenames if given
5748 5753 arg is not a defined object.
5749 5754 (Magic.magic_save): New @save function to save code snippets. Also
5750 5755 a Mike Heeter idea.
5751 5756
5752 5757 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
5753 5758 plot() and replot(). Much more convenient now, especially for
5754 5759 interactive use.
5755 5760
5756 5761 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
5757 5762 filenames.
5758 5763
5759 5764 2002-06-02 Fernando Perez <fperez@colorado.edu>
5760 5765
5761 5766 * IPython/Struct.py (Struct.__init__): modified to admit
5762 5767 initialization via another struct.
5763 5768
5764 5769 * IPython/genutils.py (SystemExec.__init__): New stateful
5765 5770 interface to xsys and bq. Useful for writing system scripts.
5766 5771
5767 5772 2002-05-30 Fernando Perez <fperez@colorado.edu>
5768 5773
5769 5774 * MANIFEST.in: Changed docfile selection to exclude all the lyx
5770 5775 documents. This will make the user download smaller (it's getting
5771 5776 too big).
5772 5777
5773 5778 2002-05-29 Fernando Perez <fperez@colorado.edu>
5774 5779
5775 5780 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
5776 5781 fix problems with shelve and pickle. Seems to work, but I don't
5777 5782 know if corner cases break it. Thanks to Mike Heeter
5778 5783 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
5779 5784
5780 5785 2002-05-24 Fernando Perez <fperez@colorado.edu>
5781 5786
5782 5787 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
5783 5788 macros having broken.
5784 5789
5785 5790 2002-05-21 Fernando Perez <fperez@colorado.edu>
5786 5791
5787 5792 * IPython/Magic.py (Magic.magic_logstart): fixed recently
5788 5793 introduced logging bug: all history before logging started was
5789 5794 being written one character per line! This came from the redesign
5790 5795 of the input history as a special list which slices to strings,
5791 5796 not to lists.
5792 5797
5793 5798 2002-05-20 Fernando Perez <fperez@colorado.edu>
5794 5799
5795 5800 * IPython/Prompts.py (CachedOutput.__init__): made the color table
5796 5801 be an attribute of all classes in this module. The design of these
5797 5802 classes needs some serious overhauling.
5798 5803
5799 5804 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
5800 5805 which was ignoring '_' in option names.
5801 5806
5802 5807 * IPython/ultraTB.py (FormattedTB.__init__): Changed
5803 5808 'Verbose_novars' to 'Context' and made it the new default. It's a
5804 5809 bit more readable and also safer than verbose.
5805 5810
5806 5811 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
5807 5812 triple-quoted strings.
5808 5813
5809 5814 * IPython/OInspect.py (__all__): new module exposing the object
5810 5815 introspection facilities. Now the corresponding magics are dummy
5811 5816 wrappers around this. Having this module will make it much easier
5812 5817 to put these functions into our modified pdb.
5813 5818 This new object inspector system uses the new colorizing module,
5814 5819 so source code and other things are nicely syntax highlighted.
5815 5820
5816 5821 2002-05-18 Fernando Perez <fperez@colorado.edu>
5817 5822
5818 5823 * IPython/ColorANSI.py: Split the coloring tools into a separate
5819 5824 module so I can use them in other code easier (they were part of
5820 5825 ultraTB).
5821 5826
5822 5827 2002-05-17 Fernando Perez <fperez@colorado.edu>
5823 5828
5824 5829 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5825 5830 fixed it to set the global 'g' also to the called instance, as
5826 5831 long as 'g' was still a gnuplot instance (so it doesn't overwrite
5827 5832 user's 'g' variables).
5828 5833
5829 5834 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
5830 5835 global variables (aliases to _ih,_oh) so that users which expect
5831 5836 In[5] or Out[7] to work aren't unpleasantly surprised.
5832 5837 (InputList.__getslice__): new class to allow executing slices of
5833 5838 input history directly. Very simple class, complements the use of
5834 5839 macros.
5835 5840
5836 5841 2002-05-16 Fernando Perez <fperez@colorado.edu>
5837 5842
5838 5843 * setup.py (docdirbase): make doc directory be just doc/IPython
5839 5844 without version numbers, it will reduce clutter for users.
5840 5845
5841 5846 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
5842 5847 execfile call to prevent possible memory leak. See for details:
5843 5848 http://mail.python.org/pipermail/python-list/2002-February/088476.html
5844 5849
5845 5850 2002-05-15 Fernando Perez <fperez@colorado.edu>
5846 5851
5847 5852 * IPython/Magic.py (Magic.magic_psource): made the object
5848 5853 introspection names be more standard: pdoc, pdef, pfile and
5849 5854 psource. They all print/page their output, and it makes
5850 5855 remembering them easier. Kept old names for compatibility as
5851 5856 aliases.
5852 5857
5853 5858 2002-05-14 Fernando Perez <fperez@colorado.edu>
5854 5859
5855 5860 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
5856 5861 what the mouse problem was. The trick is to use gnuplot with temp
5857 5862 files and NOT with pipes (for data communication), because having
5858 5863 both pipes and the mouse on is bad news.
5859 5864
5860 5865 2002-05-13 Fernando Perez <fperez@colorado.edu>
5861 5866
5862 5867 * IPython/Magic.py (Magic._ofind): fixed namespace order search
5863 5868 bug. Information would be reported about builtins even when
5864 5869 user-defined functions overrode them.
5865 5870
5866 5871 2002-05-11 Fernando Perez <fperez@colorado.edu>
5867 5872
5868 5873 * IPython/__init__.py (__all__): removed FlexCompleter from
5869 5874 __all__ so that things don't fail in platforms without readline.
5870 5875
5871 5876 2002-05-10 Fernando Perez <fperez@colorado.edu>
5872 5877
5873 5878 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
5874 5879 it requires Numeric, effectively making Numeric a dependency for
5875 5880 IPython.
5876 5881
5877 5882 * Released 0.2.13
5878 5883
5879 5884 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
5880 5885 profiler interface. Now all the major options from the profiler
5881 5886 module are directly supported in IPython, both for single
5882 5887 expressions (@prun) and for full programs (@run -p).
5883 5888
5884 5889 2002-05-09 Fernando Perez <fperez@colorado.edu>
5885 5890
5886 5891 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
5887 5892 magic properly formatted for screen.
5888 5893
5889 5894 * setup.py (make_shortcut): Changed things to put pdf version in
5890 5895 doc/ instead of doc/manual (had to change lyxport a bit).
5891 5896
5892 5897 * IPython/Magic.py (Profile.string_stats): made profile runs go
5893 5898 through pager (they are long and a pager allows searching, saving,
5894 5899 etc.)
5895 5900
5896 5901 2002-05-08 Fernando Perez <fperez@colorado.edu>
5897 5902
5898 5903 * Released 0.2.12
5899 5904
5900 5905 2002-05-06 Fernando Perez <fperez@colorado.edu>
5901 5906
5902 5907 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
5903 5908 introduced); 'hist n1 n2' was broken.
5904 5909 (Magic.magic_pdb): added optional on/off arguments to @pdb
5905 5910 (Magic.magic_run): added option -i to @run, which executes code in
5906 5911 the IPython namespace instead of a clean one. Also added @irun as
5907 5912 an alias to @run -i.
5908 5913
5909 5914 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5910 5915 fixed (it didn't really do anything, the namespaces were wrong).
5911 5916
5912 5917 * IPython/Debugger.py (__init__): Added workaround for python 2.1
5913 5918
5914 5919 * IPython/__init__.py (__all__): Fixed package namespace, now
5915 5920 'import IPython' does give access to IPython.<all> as
5916 5921 expected. Also renamed __release__ to Release.
5917 5922
5918 5923 * IPython/Debugger.py (__license__): created new Pdb class which
5919 5924 functions like a drop-in for the normal pdb.Pdb but does NOT
5920 5925 import readline by default. This way it doesn't muck up IPython's
5921 5926 readline handling, and now tab-completion finally works in the
5922 5927 debugger -- sort of. It completes things globally visible, but the
5923 5928 completer doesn't track the stack as pdb walks it. That's a bit
5924 5929 tricky, and I'll have to implement it later.
5925 5930
5926 5931 2002-05-05 Fernando Perez <fperez@colorado.edu>
5927 5932
5928 5933 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
5929 5934 magic docstrings when printed via ? (explicit \'s were being
5930 5935 printed).
5931 5936
5932 5937 * IPython/ipmaker.py (make_IPython): fixed namespace
5933 5938 identification bug. Now variables loaded via logs or command-line
5934 5939 files are recognized in the interactive namespace by @who.
5935 5940
5936 5941 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
5937 5942 log replay system stemming from the string form of Structs.
5938 5943
5939 5944 * IPython/Magic.py (Macro.__init__): improved macros to properly
5940 5945 handle magic commands in them.
5941 5946 (Magic.magic_logstart): usernames are now expanded so 'logstart
5942 5947 ~/mylog' now works.
5943 5948
5944 5949 * IPython/iplib.py (complete): fixed bug where paths starting with
5945 5950 '/' would be completed as magic names.
5946 5951
5947 5952 2002-05-04 Fernando Perez <fperez@colorado.edu>
5948 5953
5949 5954 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
5950 5955 allow running full programs under the profiler's control.
5951 5956
5952 5957 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
5953 5958 mode to report exceptions verbosely but without formatting
5954 5959 variables. This addresses the issue of ipython 'freezing' (it's
5955 5960 not frozen, but caught in an expensive formatting loop) when huge
5956 5961 variables are in the context of an exception.
5957 5962 (VerboseTB.text): Added '--->' markers at line where exception was
5958 5963 triggered. Much clearer to read, especially in NoColor modes.
5959 5964
5960 5965 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
5961 5966 implemented in reverse when changing to the new parse_options().
5962 5967
5963 5968 2002-05-03 Fernando Perez <fperez@colorado.edu>
5964 5969
5965 5970 * IPython/Magic.py (Magic.parse_options): new function so that
5966 5971 magics can parse options easier.
5967 5972 (Magic.magic_prun): new function similar to profile.run(),
5968 5973 suggested by Chris Hart.
5969 5974 (Magic.magic_cd): fixed behavior so that it only changes if
5970 5975 directory actually is in history.
5971 5976
5972 5977 * IPython/usage.py (__doc__): added information about potential
5973 5978 slowness of Verbose exception mode when there are huge data
5974 5979 structures to be formatted (thanks to Archie Paulson).
5975 5980
5976 5981 * IPython/ipmaker.py (make_IPython): Changed default logging
5977 5982 (when simply called with -log) to use curr_dir/ipython.log in
5978 5983 rotate mode. Fixed crash which was occuring with -log before
5979 5984 (thanks to Jim Boyle).
5980 5985
5981 5986 2002-05-01 Fernando Perez <fperez@colorado.edu>
5982 5987
5983 5988 * Released 0.2.11 for these fixes (mainly the ultraTB one which
5984 5989 was nasty -- though somewhat of a corner case).
5985 5990
5986 5991 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
5987 5992 text (was a bug).
5988 5993
5989 5994 2002-04-30 Fernando Perez <fperez@colorado.edu>
5990 5995
5991 5996 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
5992 5997 a print after ^D or ^C from the user so that the In[] prompt
5993 5998 doesn't over-run the gnuplot one.
5994 5999
5995 6000 2002-04-29 Fernando Perez <fperez@colorado.edu>
5996 6001
5997 6002 * Released 0.2.10
5998 6003
5999 6004 * IPython/__release__.py (version): get date dynamically.
6000 6005
6001 6006 * Misc. documentation updates thanks to Arnd's comments. Also ran
6002 6007 a full spellcheck on the manual (hadn't been done in a while).
6003 6008
6004 6009 2002-04-27 Fernando Perez <fperez@colorado.edu>
6005 6010
6006 6011 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
6007 6012 starting a log in mid-session would reset the input history list.
6008 6013
6009 6014 2002-04-26 Fernando Perez <fperez@colorado.edu>
6010 6015
6011 6016 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
6012 6017 all files were being included in an update. Now anything in
6013 6018 UserConfig that matches [A-Za-z]*.py will go (this excludes
6014 6019 __init__.py)
6015 6020
6016 6021 2002-04-25 Fernando Perez <fperez@colorado.edu>
6017 6022
6018 6023 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
6019 6024 to __builtins__ so that any form of embedded or imported code can
6020 6025 test for being inside IPython.
6021 6026
6022 6027 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
6023 6028 changed to GnuplotMagic because it's now an importable module,
6024 6029 this makes the name follow that of the standard Gnuplot module.
6025 6030 GnuplotMagic can now be loaded at any time in mid-session.
6026 6031
6027 6032 2002-04-24 Fernando Perez <fperez@colorado.edu>
6028 6033
6029 6034 * IPython/numutils.py: removed SIUnits. It doesn't properly set
6030 6035 the globals (IPython has its own namespace) and the
6031 6036 PhysicalQuantity stuff is much better anyway.
6032 6037
6033 6038 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
6034 6039 embedding example to standard user directory for
6035 6040 distribution. Also put it in the manual.
6036 6041
6037 6042 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
6038 6043 instance as first argument (so it doesn't rely on some obscure
6039 6044 hidden global).
6040 6045
6041 6046 * IPython/UserConfig/ipythonrc.py: put () back in accepted
6042 6047 delimiters. While it prevents ().TAB from working, it allows
6043 6048 completions in open (... expressions. This is by far a more common
6044 6049 case.
6045 6050
6046 6051 2002-04-23 Fernando Perez <fperez@colorado.edu>
6047 6052
6048 6053 * IPython/Extensions/InterpreterPasteInput.py: new
6049 6054 syntax-processing module for pasting lines with >>> or ... at the
6050 6055 start.
6051 6056
6052 6057 * IPython/Extensions/PhysicalQ_Interactive.py
6053 6058 (PhysicalQuantityInteractive.__int__): fixed to work with either
6054 6059 Numeric or math.
6055 6060
6056 6061 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
6057 6062 provided profiles. Now we have:
6058 6063 -math -> math module as * and cmath with its own namespace.
6059 6064 -numeric -> Numeric as *, plus gnuplot & grace
6060 6065 -physics -> same as before
6061 6066
6062 6067 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
6063 6068 user-defined magics wouldn't be found by @magic if they were
6064 6069 defined as class methods. Also cleaned up the namespace search
6065 6070 logic and the string building (to use %s instead of many repeated
6066 6071 string adds).
6067 6072
6068 6073 * IPython/UserConfig/example-magic.py (magic_foo): updated example
6069 6074 of user-defined magics to operate with class methods (cleaner, in
6070 6075 line with the gnuplot code).
6071 6076
6072 6077 2002-04-22 Fernando Perez <fperez@colorado.edu>
6073 6078
6074 6079 * setup.py: updated dependency list so that manual is updated when
6075 6080 all included files change.
6076 6081
6077 6082 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
6078 6083 the delimiter removal option (the fix is ugly right now).
6079 6084
6080 6085 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
6081 6086 all of the math profile (quicker loading, no conflict between
6082 6087 g-9.8 and g-gnuplot).
6083 6088
6084 6089 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
6085 6090 name of post-mortem files to IPython_crash_report.txt.
6086 6091
6087 6092 * Cleanup/update of the docs. Added all the new readline info and
6088 6093 formatted all lists as 'real lists'.
6089 6094
6090 6095 * IPython/ipmaker.py (make_IPython): removed now-obsolete
6091 6096 tab-completion options, since the full readline parse_and_bind is
6092 6097 now accessible.
6093 6098
6094 6099 * IPython/iplib.py (InteractiveShell.init_readline): Changed
6095 6100 handling of readline options. Now users can specify any string to
6096 6101 be passed to parse_and_bind(), as well as the delimiters to be
6097 6102 removed.
6098 6103 (InteractiveShell.__init__): Added __name__ to the global
6099 6104 namespace so that things like Itpl which rely on its existence
6100 6105 don't crash.
6101 6106 (InteractiveShell._prefilter): Defined the default with a _ so
6102 6107 that prefilter() is easier to override, while the default one
6103 6108 remains available.
6104 6109
6105 6110 2002-04-18 Fernando Perez <fperez@colorado.edu>
6106 6111
6107 6112 * Added information about pdb in the docs.
6108 6113
6109 6114 2002-04-17 Fernando Perez <fperez@colorado.edu>
6110 6115
6111 6116 * IPython/ipmaker.py (make_IPython): added rc_override option to
6112 6117 allow passing config options at creation time which may override
6113 6118 anything set in the config files or command line. This is
6114 6119 particularly useful for configuring embedded instances.
6115 6120
6116 6121 2002-04-15 Fernando Perez <fperez@colorado.edu>
6117 6122
6118 6123 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
6119 6124 crash embedded instances because of the input cache falling out of
6120 6125 sync with the output counter.
6121 6126
6122 6127 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
6123 6128 mode which calls pdb after an uncaught exception in IPython itself.
6124 6129
6125 6130 2002-04-14 Fernando Perez <fperez@colorado.edu>
6126 6131
6127 6132 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
6128 6133 readline, fix it back after each call.
6129 6134
6130 6135 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
6131 6136 method to force all access via __call__(), which guarantees that
6132 6137 traceback references are properly deleted.
6133 6138
6134 6139 * IPython/Prompts.py (CachedOutput._display): minor fixes to
6135 6140 improve printing when pprint is in use.
6136 6141
6137 6142 2002-04-13 Fernando Perez <fperez@colorado.edu>
6138 6143
6139 6144 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
6140 6145 exceptions aren't caught anymore. If the user triggers one, he
6141 6146 should know why he's doing it and it should go all the way up,
6142 6147 just like any other exception. So now @abort will fully kill the
6143 6148 embedded interpreter and the embedding code (unless that happens
6144 6149 to catch SystemExit).
6145 6150
6146 6151 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
6147 6152 and a debugger() method to invoke the interactive pdb debugger
6148 6153 after printing exception information. Also added the corresponding
6149 6154 -pdb option and @pdb magic to control this feature, and updated
6150 6155 the docs. After a suggestion from Christopher Hart
6151 6156 (hart-AT-caltech.edu).
6152 6157
6153 6158 2002-04-12 Fernando Perez <fperez@colorado.edu>
6154 6159
6155 6160 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
6156 6161 the exception handlers defined by the user (not the CrashHandler)
6157 6162 so that user exceptions don't trigger an ipython bug report.
6158 6163
6159 6164 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
6160 6165 configurable (it should have always been so).
6161 6166
6162 6167 2002-03-26 Fernando Perez <fperez@colorado.edu>
6163 6168
6164 6169 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
6165 6170 and there to fix embedding namespace issues. This should all be
6166 6171 done in a more elegant way.
6167 6172
6168 6173 2002-03-25 Fernando Perez <fperez@colorado.edu>
6169 6174
6170 6175 * IPython/genutils.py (get_home_dir): Try to make it work under
6171 6176 win9x also.
6172 6177
6173 6178 2002-03-20 Fernando Perez <fperez@colorado.edu>
6174 6179
6175 6180 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
6176 6181 sys.displayhook untouched upon __init__.
6177 6182
6178 6183 2002-03-19 Fernando Perez <fperez@colorado.edu>
6179 6184
6180 6185 * Released 0.2.9 (for embedding bug, basically).
6181 6186
6182 6187 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
6183 6188 exceptions so that enclosing shell's state can be restored.
6184 6189
6185 6190 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
6186 6191 naming conventions in the .ipython/ dir.
6187 6192
6188 6193 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
6189 6194 from delimiters list so filenames with - in them get expanded.
6190 6195
6191 6196 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
6192 6197 sys.displayhook not being properly restored after an embedded call.
6193 6198
6194 6199 2002-03-18 Fernando Perez <fperez@colorado.edu>
6195 6200
6196 6201 * Released 0.2.8
6197 6202
6198 6203 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
6199 6204 some files weren't being included in a -upgrade.
6200 6205 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
6201 6206 on' so that the first tab completes.
6202 6207 (InteractiveShell.handle_magic): fixed bug with spaces around
6203 6208 quotes breaking many magic commands.
6204 6209
6205 6210 * setup.py: added note about ignoring the syntax error messages at
6206 6211 installation.
6207 6212
6208 6213 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
6209 6214 streamlining the gnuplot interface, now there's only one magic @gp.
6210 6215
6211 6216 2002-03-17 Fernando Perez <fperez@colorado.edu>
6212 6217
6213 6218 * IPython/UserConfig/magic_gnuplot.py: new name for the
6214 6219 example-magic_pm.py file. Much enhanced system, now with a shell
6215 6220 for communicating directly with gnuplot, one command at a time.
6216 6221
6217 6222 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
6218 6223 setting __name__=='__main__'.
6219 6224
6220 6225 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
6221 6226 mini-shell for accessing gnuplot from inside ipython. Should
6222 6227 extend it later for grace access too. Inspired by Arnd's
6223 6228 suggestion.
6224 6229
6225 6230 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
6226 6231 calling magic functions with () in their arguments. Thanks to Arnd
6227 6232 Baecker for pointing this to me.
6228 6233
6229 6234 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
6230 6235 infinitely for integer or complex arrays (only worked with floats).
6231 6236
6232 6237 2002-03-16 Fernando Perez <fperez@colorado.edu>
6233 6238
6234 6239 * setup.py: Merged setup and setup_windows into a single script
6235 6240 which properly handles things for windows users.
6236 6241
6237 6242 2002-03-15 Fernando Perez <fperez@colorado.edu>
6238 6243
6239 6244 * Big change to the manual: now the magics are all automatically
6240 6245 documented. This information is generated from their docstrings
6241 6246 and put in a latex file included by the manual lyx file. This way
6242 6247 we get always up to date information for the magics. The manual
6243 6248 now also has proper version information, also auto-synced.
6244 6249
6245 6250 For this to work, an undocumented --magic_docstrings option was added.
6246 6251
6247 6252 2002-03-13 Fernando Perez <fperez@colorado.edu>
6248 6253
6249 6254 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
6250 6255 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
6251 6256
6252 6257 2002-03-12 Fernando Perez <fperez@colorado.edu>
6253 6258
6254 6259 * IPython/ultraTB.py (TermColors): changed color escapes again to
6255 6260 fix the (old, reintroduced) line-wrapping bug. Basically, if
6256 6261 \001..\002 aren't given in the color escapes, lines get wrapped
6257 6262 weirdly. But giving those screws up old xterms and emacs terms. So
6258 6263 I added some logic for emacs terms to be ok, but I can't identify old
6259 6264 xterms separately ($TERM=='xterm' for many terminals, like konsole).
6260 6265
6261 6266 2002-03-10 Fernando Perez <fperez@colorado.edu>
6262 6267
6263 6268 * IPython/usage.py (__doc__): Various documentation cleanups and
6264 6269 updates, both in usage docstrings and in the manual.
6265 6270
6266 6271 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
6267 6272 handling of caching. Set minimum acceptabe value for having a
6268 6273 cache at 20 values.
6269 6274
6270 6275 * IPython/iplib.py (InteractiveShell.user_setup): moved the
6271 6276 install_first_time function to a method, renamed it and added an
6272 6277 'upgrade' mode. Now people can update their config directory with
6273 6278 a simple command line switch (-upgrade, also new).
6274 6279
6275 6280 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
6276 6281 @file (convenient for automagic users under Python >= 2.2).
6277 6282 Removed @files (it seemed more like a plural than an abbrev. of
6278 6283 'file show').
6279 6284
6280 6285 * IPython/iplib.py (install_first_time): Fixed crash if there were
6281 6286 backup files ('~') in .ipython/ install directory.
6282 6287
6283 6288 * IPython/ipmaker.py (make_IPython): fixes for new prompt
6284 6289 system. Things look fine, but these changes are fairly
6285 6290 intrusive. Test them for a few days.
6286 6291
6287 6292 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
6288 6293 the prompts system. Now all in/out prompt strings are user
6289 6294 controllable. This is particularly useful for embedding, as one
6290 6295 can tag embedded instances with particular prompts.
6291 6296
6292 6297 Also removed global use of sys.ps1/2, which now allows nested
6293 6298 embeddings without any problems. Added command-line options for
6294 6299 the prompt strings.
6295 6300
6296 6301 2002-03-08 Fernando Perez <fperez@colorado.edu>
6297 6302
6298 6303 * IPython/UserConfig/example-embed-short.py (ipshell): added
6299 6304 example file with the bare minimum code for embedding.
6300 6305
6301 6306 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
6302 6307 functionality for the embeddable shell to be activated/deactivated
6303 6308 either globally or at each call.
6304 6309
6305 6310 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
6306 6311 rewriting the prompt with '--->' for auto-inputs with proper
6307 6312 coloring. Now the previous UGLY hack in handle_auto() is gone, and
6308 6313 this is handled by the prompts class itself, as it should.
6309 6314
6310 6315 2002-03-05 Fernando Perez <fperez@colorado.edu>
6311 6316
6312 6317 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
6313 6318 @logstart to avoid name clashes with the math log function.
6314 6319
6315 6320 * Big updates to X/Emacs section of the manual.
6316 6321
6317 6322 * Removed ipython_emacs. Milan explained to me how to pass
6318 6323 arguments to ipython through Emacs. Some day I'm going to end up
6319 6324 learning some lisp...
6320 6325
6321 6326 2002-03-04 Fernando Perez <fperez@colorado.edu>
6322 6327
6323 6328 * IPython/ipython_emacs: Created script to be used as the
6324 6329 py-python-command Emacs variable so we can pass IPython
6325 6330 parameters. I can't figure out how to tell Emacs directly to pass
6326 6331 parameters to IPython, so a dummy shell script will do it.
6327 6332
6328 6333 Other enhancements made for things to work better under Emacs'
6329 6334 various types of terminals. Many thanks to Milan Zamazal
6330 6335 <pdm-AT-zamazal.org> for all the suggestions and pointers.
6331 6336
6332 6337 2002-03-01 Fernando Perez <fperez@colorado.edu>
6333 6338
6334 6339 * IPython/ipmaker.py (make_IPython): added a --readline! option so
6335 6340 that loading of readline is now optional. This gives better
6336 6341 control to emacs users.
6337 6342
6338 6343 * IPython/ultraTB.py (__date__): Modified color escape sequences
6339 6344 and now things work fine under xterm and in Emacs' term buffers
6340 6345 (though not shell ones). Well, in emacs you get colors, but all
6341 6346 seem to be 'light' colors (no difference between dark and light
6342 6347 ones). But the garbage chars are gone, and also in xterms. It
6343 6348 seems that now I'm using 'cleaner' ansi sequences.
6344 6349
6345 6350 2002-02-21 Fernando Perez <fperez@colorado.edu>
6346 6351
6347 6352 * Released 0.2.7 (mainly to publish the scoping fix).
6348 6353
6349 6354 * IPython/Logger.py (Logger.logstate): added. A corresponding
6350 6355 @logstate magic was created.
6351 6356
6352 6357 * IPython/Magic.py: fixed nested scoping problem under Python
6353 6358 2.1.x (automagic wasn't working).
6354 6359
6355 6360 2002-02-20 Fernando Perez <fperez@colorado.edu>
6356 6361
6357 6362 * Released 0.2.6.
6358 6363
6359 6364 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
6360 6365 option so that logs can come out without any headers at all.
6361 6366
6362 6367 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
6363 6368 SciPy.
6364 6369
6365 6370 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
6366 6371 that embedded IPython calls don't require vars() to be explicitly
6367 6372 passed. Now they are extracted from the caller's frame (code
6368 6373 snatched from Eric Jones' weave). Added better documentation to
6369 6374 the section on embedding and the example file.
6370 6375
6371 6376 * IPython/genutils.py (page): Changed so that under emacs, it just
6372 6377 prints the string. You can then page up and down in the emacs
6373 6378 buffer itself. This is how the builtin help() works.
6374 6379
6375 6380 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
6376 6381 macro scoping: macros need to be executed in the user's namespace
6377 6382 to work as if they had been typed by the user.
6378 6383
6379 6384 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
6380 6385 execute automatically (no need to type 'exec...'). They then
6381 6386 behave like 'true macros'. The printing system was also modified
6382 6387 for this to work.
6383 6388
6384 6389 2002-02-19 Fernando Perez <fperez@colorado.edu>
6385 6390
6386 6391 * IPython/genutils.py (page_file): new function for paging files
6387 6392 in an OS-independent way. Also necessary for file viewing to work
6388 6393 well inside Emacs buffers.
6389 6394 (page): Added checks for being in an emacs buffer.
6390 6395 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
6391 6396 same bug in iplib.
6392 6397
6393 6398 2002-02-18 Fernando Perez <fperez@colorado.edu>
6394 6399
6395 6400 * IPython/iplib.py (InteractiveShell.init_readline): modified use
6396 6401 of readline so that IPython can work inside an Emacs buffer.
6397 6402
6398 6403 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
6399 6404 method signatures (they weren't really bugs, but it looks cleaner
6400 6405 and keeps PyChecker happy).
6401 6406
6402 6407 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
6403 6408 for implementing various user-defined hooks. Currently only
6404 6409 display is done.
6405 6410
6406 6411 * IPython/Prompts.py (CachedOutput._display): changed display
6407 6412 functions so that they can be dynamically changed by users easily.
6408 6413
6409 6414 * IPython/Extensions/numeric_formats.py (num_display): added an
6410 6415 extension for printing NumPy arrays in flexible manners. It
6411 6416 doesn't do anything yet, but all the structure is in
6412 6417 place. Ultimately the plan is to implement output format control
6413 6418 like in Octave.
6414 6419
6415 6420 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
6416 6421 methods are found at run-time by all the automatic machinery.
6417 6422
6418 6423 2002-02-17 Fernando Perez <fperez@colorado.edu>
6419 6424
6420 6425 * setup_Windows.py (make_shortcut): documented. Cleaned up the
6421 6426 whole file a little.
6422 6427
6423 6428 * ToDo: closed this document. Now there's a new_design.lyx
6424 6429 document for all new ideas. Added making a pdf of it for the
6425 6430 end-user distro.
6426 6431
6427 6432 * IPython/Logger.py (Logger.switch_log): Created this to replace
6428 6433 logon() and logoff(). It also fixes a nasty crash reported by
6429 6434 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
6430 6435
6431 6436 * IPython/iplib.py (complete): got auto-completion to work with
6432 6437 automagic (I had wanted this for a long time).
6433 6438
6434 6439 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
6435 6440 to @file, since file() is now a builtin and clashes with automagic
6436 6441 for @file.
6437 6442
6438 6443 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
6439 6444 of this was previously in iplib, which had grown to more than 2000
6440 6445 lines, way too long. No new functionality, but it makes managing
6441 6446 the code a bit easier.
6442 6447
6443 6448 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
6444 6449 information to crash reports.
6445 6450
6446 6451 2002-02-12 Fernando Perez <fperez@colorado.edu>
6447 6452
6448 6453 * Released 0.2.5.
6449 6454
6450 6455 2002-02-11 Fernando Perez <fperez@colorado.edu>
6451 6456
6452 6457 * Wrote a relatively complete Windows installer. It puts
6453 6458 everything in place, creates Start Menu entries and fixes the
6454 6459 color issues. Nothing fancy, but it works.
6455 6460
6456 6461 2002-02-10 Fernando Perez <fperez@colorado.edu>
6457 6462
6458 6463 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
6459 6464 os.path.expanduser() call so that we can type @run ~/myfile.py and
6460 6465 have thigs work as expected.
6461 6466
6462 6467 * IPython/genutils.py (page): fixed exception handling so things
6463 6468 work both in Unix and Windows correctly. Quitting a pager triggers
6464 6469 an IOError/broken pipe in Unix, and in windows not finding a pager
6465 6470 is also an IOError, so I had to actually look at the return value
6466 6471 of the exception, not just the exception itself. Should be ok now.
6467 6472
6468 6473 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
6469 6474 modified to allow case-insensitive color scheme changes.
6470 6475
6471 6476 2002-02-09 Fernando Perez <fperez@colorado.edu>
6472 6477
6473 6478 * IPython/genutils.py (native_line_ends): new function to leave
6474 6479 user config files with os-native line-endings.
6475 6480
6476 6481 * README and manual updates.
6477 6482
6478 6483 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
6479 6484 instead of StringType to catch Unicode strings.
6480 6485
6481 6486 * IPython/genutils.py (filefind): fixed bug for paths with
6482 6487 embedded spaces (very common in Windows).
6483 6488
6484 6489 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
6485 6490 files under Windows, so that they get automatically associated
6486 6491 with a text editor. Windows makes it a pain to handle
6487 6492 extension-less files.
6488 6493
6489 6494 * IPython/iplib.py (InteractiveShell.init_readline): Made the
6490 6495 warning about readline only occur for Posix. In Windows there's no
6491 6496 way to get readline, so why bother with the warning.
6492 6497
6493 6498 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
6494 6499 for __str__ instead of dir(self), since dir() changed in 2.2.
6495 6500
6496 6501 * Ported to Windows! Tested on XP, I suspect it should work fine
6497 6502 on NT/2000, but I don't think it will work on 98 et al. That
6498 6503 series of Windows is such a piece of junk anyway that I won't try
6499 6504 porting it there. The XP port was straightforward, showed a few
6500 6505 bugs here and there (fixed all), in particular some string
6501 6506 handling stuff which required considering Unicode strings (which
6502 6507 Windows uses). This is good, but hasn't been too tested :) No
6503 6508 fancy installer yet, I'll put a note in the manual so people at
6504 6509 least make manually a shortcut.
6505 6510
6506 6511 * IPython/iplib.py (Magic.magic_colors): Unified the color options
6507 6512 into a single one, "colors". This now controls both prompt and
6508 6513 exception color schemes, and can be changed both at startup
6509 6514 (either via command-line switches or via ipythonrc files) and at
6510 6515 runtime, with @colors.
6511 6516 (Magic.magic_run): renamed @prun to @run and removed the old
6512 6517 @run. The two were too similar to warrant keeping both.
6513 6518
6514 6519 2002-02-03 Fernando Perez <fperez@colorado.edu>
6515 6520
6516 6521 * IPython/iplib.py (install_first_time): Added comment on how to
6517 6522 configure the color options for first-time users. Put a <return>
6518 6523 request at the end so that small-terminal users get a chance to
6519 6524 read the startup info.
6520 6525
6521 6526 2002-01-23 Fernando Perez <fperez@colorado.edu>
6522 6527
6523 6528 * IPython/iplib.py (CachedOutput.update): Changed output memory
6524 6529 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
6525 6530 input history we still use _i. Did this b/c these variable are
6526 6531 very commonly used in interactive work, so the less we need to
6527 6532 type the better off we are.
6528 6533 (Magic.magic_prun): updated @prun to better handle the namespaces
6529 6534 the file will run in, including a fix for __name__ not being set
6530 6535 before.
6531 6536
6532 6537 2002-01-20 Fernando Perez <fperez@colorado.edu>
6533 6538
6534 6539 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
6535 6540 extra garbage for Python 2.2. Need to look more carefully into
6536 6541 this later.
6537 6542
6538 6543 2002-01-19 Fernando Perez <fperez@colorado.edu>
6539 6544
6540 6545 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
6541 6546 display SyntaxError exceptions properly formatted when they occur
6542 6547 (they can be triggered by imported code).
6543 6548
6544 6549 2002-01-18 Fernando Perez <fperez@colorado.edu>
6545 6550
6546 6551 * IPython/iplib.py (InteractiveShell.safe_execfile): now
6547 6552 SyntaxError exceptions are reported nicely formatted, instead of
6548 6553 spitting out only offset information as before.
6549 6554 (Magic.magic_prun): Added the @prun function for executing
6550 6555 programs with command line args inside IPython.
6551 6556
6552 6557 2002-01-16 Fernando Perez <fperez@colorado.edu>
6553 6558
6554 6559 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
6555 6560 to *not* include the last item given in a range. This brings their
6556 6561 behavior in line with Python's slicing:
6557 6562 a[n1:n2] -> a[n1]...a[n2-1]
6558 6563 It may be a bit less convenient, but I prefer to stick to Python's
6559 6564 conventions *everywhere*, so users never have to wonder.
6560 6565 (Magic.magic_macro): Added @macro function to ease the creation of
6561 6566 macros.
6562 6567
6563 6568 2002-01-05 Fernando Perez <fperez@colorado.edu>
6564 6569
6565 6570 * Released 0.2.4.
6566 6571
6567 6572 * IPython/iplib.py (Magic.magic_pdef):
6568 6573 (InteractiveShell.safe_execfile): report magic lines and error
6569 6574 lines without line numbers so one can easily copy/paste them for
6570 6575 re-execution.
6571 6576
6572 6577 * Updated manual with recent changes.
6573 6578
6574 6579 * IPython/iplib.py (Magic.magic_oinfo): added constructor
6575 6580 docstring printing when class? is called. Very handy for knowing
6576 6581 how to create class instances (as long as __init__ is well
6577 6582 documented, of course :)
6578 6583 (Magic.magic_doc): print both class and constructor docstrings.
6579 6584 (Magic.magic_pdef): give constructor info if passed a class and
6580 6585 __call__ info for callable object instances.
6581 6586
6582 6587 2002-01-04 Fernando Perez <fperez@colorado.edu>
6583 6588
6584 6589 * Made deep_reload() off by default. It doesn't always work
6585 6590 exactly as intended, so it's probably safer to have it off. It's
6586 6591 still available as dreload() anyway, so nothing is lost.
6587 6592
6588 6593 2002-01-02 Fernando Perez <fperez@colorado.edu>
6589 6594
6590 6595 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
6591 6596 so I wanted an updated release).
6592 6597
6593 6598 2001-12-27 Fernando Perez <fperez@colorado.edu>
6594 6599
6595 6600 * IPython/iplib.py (InteractiveShell.interact): Added the original
6596 6601 code from 'code.py' for this module in order to change the
6597 6602 handling of a KeyboardInterrupt. This was necessary b/c otherwise
6598 6603 the history cache would break when the user hit Ctrl-C, and
6599 6604 interact() offers no way to add any hooks to it.
6600 6605
6601 6606 2001-12-23 Fernando Perez <fperez@colorado.edu>
6602 6607
6603 6608 * setup.py: added check for 'MANIFEST' before trying to remove
6604 6609 it. Thanks to Sean Reifschneider.
6605 6610
6606 6611 2001-12-22 Fernando Perez <fperez@colorado.edu>
6607 6612
6608 6613 * Released 0.2.2.
6609 6614
6610 6615 * Finished (reasonably) writing the manual. Later will add the
6611 6616 python-standard navigation stylesheets, but for the time being
6612 6617 it's fairly complete. Distribution will include html and pdf
6613 6618 versions.
6614 6619
6615 6620 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
6616 6621 (MayaVi author).
6617 6622
6618 6623 2001-12-21 Fernando Perez <fperez@colorado.edu>
6619 6624
6620 6625 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
6621 6626 good public release, I think (with the manual and the distutils
6622 6627 installer). The manual can use some work, but that can go
6623 6628 slowly. Otherwise I think it's quite nice for end users. Next
6624 6629 summer, rewrite the guts of it...
6625 6630
6626 6631 * Changed format of ipythonrc files to use whitespace as the
6627 6632 separator instead of an explicit '='. Cleaner.
6628 6633
6629 6634 2001-12-20 Fernando Perez <fperez@colorado.edu>
6630 6635
6631 6636 * Started a manual in LyX. For now it's just a quick merge of the
6632 6637 various internal docstrings and READMEs. Later it may grow into a
6633 6638 nice, full-blown manual.
6634 6639
6635 6640 * Set up a distutils based installer. Installation should now be
6636 6641 trivially simple for end-users.
6637 6642
6638 6643 2001-12-11 Fernando Perez <fperez@colorado.edu>
6639 6644
6640 6645 * Released 0.2.0. First public release, announced it at
6641 6646 comp.lang.python. From now on, just bugfixes...
6642 6647
6643 6648 * Went through all the files, set copyright/license notices and
6644 6649 cleaned up things. Ready for release.
6645 6650
6646 6651 2001-12-10 Fernando Perez <fperez@colorado.edu>
6647 6652
6648 6653 * Changed the first-time installer not to use tarfiles. It's more
6649 6654 robust now and less unix-dependent. Also makes it easier for
6650 6655 people to later upgrade versions.
6651 6656
6652 6657 * Changed @exit to @abort to reflect the fact that it's pretty
6653 6658 brutal (a sys.exit()). The difference between @abort and Ctrl-D
6654 6659 becomes significant only when IPyhton is embedded: in that case,
6655 6660 C-D closes IPython only, but @abort kills the enclosing program
6656 6661 too (unless it had called IPython inside a try catching
6657 6662 SystemExit).
6658 6663
6659 6664 * Created Shell module which exposes the actuall IPython Shell
6660 6665 classes, currently the normal and the embeddable one. This at
6661 6666 least offers a stable interface we won't need to change when
6662 6667 (later) the internals are rewritten. That rewrite will be confined
6663 6668 to iplib and ipmaker, but the Shell interface should remain as is.
6664 6669
6665 6670 * Added embed module which offers an embeddable IPShell object,
6666 6671 useful to fire up IPython *inside* a running program. Great for
6667 6672 debugging or dynamical data analysis.
6668 6673
6669 6674 2001-12-08 Fernando Perez <fperez@colorado.edu>
6670 6675
6671 6676 * Fixed small bug preventing seeing info from methods of defined
6672 6677 objects (incorrect namespace in _ofind()).
6673 6678
6674 6679 * Documentation cleanup. Moved the main usage docstrings to a
6675 6680 separate file, usage.py (cleaner to maintain, and hopefully in the
6676 6681 future some perlpod-like way of producing interactive, man and
6677 6682 html docs out of it will be found).
6678 6683
6679 6684 * Added @profile to see your profile at any time.
6680 6685
6681 6686 * Added @p as an alias for 'print'. It's especially convenient if
6682 6687 using automagic ('p x' prints x).
6683 6688
6684 6689 * Small cleanups and fixes after a pychecker run.
6685 6690
6686 6691 * Changed the @cd command to handle @cd - and @cd -<n> for
6687 6692 visiting any directory in _dh.
6688 6693
6689 6694 * Introduced _dh, a history of visited directories. @dhist prints
6690 6695 it out with numbers.
6691 6696
6692 6697 2001-12-07 Fernando Perez <fperez@colorado.edu>
6693 6698
6694 6699 * Released 0.1.22
6695 6700
6696 6701 * Made initialization a bit more robust against invalid color
6697 6702 options in user input (exit, not traceback-crash).
6698 6703
6699 6704 * Changed the bug crash reporter to write the report only in the
6700 6705 user's .ipython directory. That way IPython won't litter people's
6701 6706 hard disks with crash files all over the place. Also print on
6702 6707 screen the necessary mail command.
6703 6708
6704 6709 * With the new ultraTB, implemented LightBG color scheme for light
6705 6710 background terminals. A lot of people like white backgrounds, so I
6706 6711 guess we should at least give them something readable.
6707 6712
6708 6713 2001-12-06 Fernando Perez <fperez@colorado.edu>
6709 6714
6710 6715 * Modified the structure of ultraTB. Now there's a proper class
6711 6716 for tables of color schemes which allow adding schemes easily and
6712 6717 switching the active scheme without creating a new instance every
6713 6718 time (which was ridiculous). The syntax for creating new schemes
6714 6719 is also cleaner. I think ultraTB is finally done, with a clean
6715 6720 class structure. Names are also much cleaner (now there's proper
6716 6721 color tables, no need for every variable to also have 'color' in
6717 6722 its name).
6718 6723
6719 6724 * Broke down genutils into separate files. Now genutils only
6720 6725 contains utility functions, and classes have been moved to their
6721 6726 own files (they had enough independent functionality to warrant
6722 6727 it): ConfigLoader, OutputTrap, Struct.
6723 6728
6724 6729 2001-12-05 Fernando Perez <fperez@colorado.edu>
6725 6730
6726 6731 * IPython turns 21! Released version 0.1.21, as a candidate for
6727 6732 public consumption. If all goes well, release in a few days.
6728 6733
6729 6734 * Fixed path bug (files in Extensions/ directory wouldn't be found
6730 6735 unless IPython/ was explicitly in sys.path).
6731 6736
6732 6737 * Extended the FlexCompleter class as MagicCompleter to allow
6733 6738 completion of @-starting lines.
6734 6739
6735 6740 * Created __release__.py file as a central repository for release
6736 6741 info that other files can read from.
6737 6742
6738 6743 * Fixed small bug in logging: when logging was turned on in
6739 6744 mid-session, old lines with special meanings (!@?) were being
6740 6745 logged without the prepended comment, which is necessary since
6741 6746 they are not truly valid python syntax. This should make session
6742 6747 restores produce less errors.
6743 6748
6744 6749 * The namespace cleanup forced me to make a FlexCompleter class
6745 6750 which is nothing but a ripoff of rlcompleter, but with selectable
6746 6751 namespace (rlcompleter only works in __main__.__dict__). I'll try
6747 6752 to submit a note to the authors to see if this change can be
6748 6753 incorporated in future rlcompleter releases (Dec.6: done)
6749 6754
6750 6755 * More fixes to namespace handling. It was a mess! Now all
6751 6756 explicit references to __main__.__dict__ are gone (except when
6752 6757 really needed) and everything is handled through the namespace
6753 6758 dicts in the IPython instance. We seem to be getting somewhere
6754 6759 with this, finally...
6755 6760
6756 6761 * Small documentation updates.
6757 6762
6758 6763 * Created the Extensions directory under IPython (with an
6759 6764 __init__.py). Put the PhysicalQ stuff there. This directory should
6760 6765 be used for all special-purpose extensions.
6761 6766
6762 6767 * File renaming:
6763 6768 ipythonlib --> ipmaker
6764 6769 ipplib --> iplib
6765 6770 This makes a bit more sense in terms of what these files actually do.
6766 6771
6767 6772 * Moved all the classes and functions in ipythonlib to ipplib, so
6768 6773 now ipythonlib only has make_IPython(). This will ease up its
6769 6774 splitting in smaller functional chunks later.
6770 6775
6771 6776 * Cleaned up (done, I think) output of @whos. Better column
6772 6777 formatting, and now shows str(var) for as much as it can, which is
6773 6778 typically what one gets with a 'print var'.
6774 6779
6775 6780 2001-12-04 Fernando Perez <fperez@colorado.edu>
6776 6781
6777 6782 * Fixed namespace problems. Now builtin/IPyhton/user names get
6778 6783 properly reported in their namespace. Internal namespace handling
6779 6784 is finally getting decent (not perfect yet, but much better than
6780 6785 the ad-hoc mess we had).
6781 6786
6782 6787 * Removed -exit option. If people just want to run a python
6783 6788 script, that's what the normal interpreter is for. Less
6784 6789 unnecessary options, less chances for bugs.
6785 6790
6786 6791 * Added a crash handler which generates a complete post-mortem if
6787 6792 IPython crashes. This will help a lot in tracking bugs down the
6788 6793 road.
6789 6794
6790 6795 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
6791 6796 which were boud to functions being reassigned would bypass the
6792 6797 logger, breaking the sync of _il with the prompt counter. This
6793 6798 would then crash IPython later when a new line was logged.
6794 6799
6795 6800 2001-12-02 Fernando Perez <fperez@colorado.edu>
6796 6801
6797 6802 * Made IPython a package. This means people don't have to clutter
6798 6803 their sys.path with yet another directory. Changed the INSTALL
6799 6804 file accordingly.
6800 6805
6801 6806 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
6802 6807 sorts its output (so @who shows it sorted) and @whos formats the
6803 6808 table according to the width of the first column. Nicer, easier to
6804 6809 read. Todo: write a generic table_format() which takes a list of
6805 6810 lists and prints it nicely formatted, with optional row/column
6806 6811 separators and proper padding and justification.
6807 6812
6808 6813 * Released 0.1.20
6809 6814
6810 6815 * Fixed bug in @log which would reverse the inputcache list (a
6811 6816 copy operation was missing).
6812 6817
6813 6818 * Code cleanup. @config was changed to use page(). Better, since
6814 6819 its output is always quite long.
6815 6820
6816 6821 * Itpl is back as a dependency. I was having too many problems
6817 6822 getting the parametric aliases to work reliably, and it's just
6818 6823 easier to code weird string operations with it than playing %()s
6819 6824 games. It's only ~6k, so I don't think it's too big a deal.
6820 6825
6821 6826 * Found (and fixed) a very nasty bug with history. !lines weren't
6822 6827 getting cached, and the out of sync caches would crash
6823 6828 IPython. Fixed it by reorganizing the prefilter/handlers/logger
6824 6829 division of labor a bit better. Bug fixed, cleaner structure.
6825 6830
6826 6831 2001-12-01 Fernando Perez <fperez@colorado.edu>
6827 6832
6828 6833 * Released 0.1.19
6829 6834
6830 6835 * Added option -n to @hist to prevent line number printing. Much
6831 6836 easier to copy/paste code this way.
6832 6837
6833 6838 * Created global _il to hold the input list. Allows easy
6834 6839 re-execution of blocks of code by slicing it (inspired by Janko's
6835 6840 comment on 'macros').
6836 6841
6837 6842 * Small fixes and doc updates.
6838 6843
6839 6844 * Rewrote @history function (was @h). Renamed it to @hist, @h is
6840 6845 much too fragile with automagic. Handles properly multi-line
6841 6846 statements and takes parameters.
6842 6847
6843 6848 2001-11-30 Fernando Perez <fperez@colorado.edu>
6844 6849
6845 6850 * Version 0.1.18 released.
6846 6851
6847 6852 * Fixed nasty namespace bug in initial module imports.
6848 6853
6849 6854 * Added copyright/license notes to all code files (except
6850 6855 DPyGetOpt). For the time being, LGPL. That could change.
6851 6856
6852 6857 * Rewrote a much nicer README, updated INSTALL, cleaned up
6853 6858 ipythonrc-* samples.
6854 6859
6855 6860 * Overall code/documentation cleanup. Basically ready for
6856 6861 release. Only remaining thing: licence decision (LGPL?).
6857 6862
6858 6863 * Converted load_config to a class, ConfigLoader. Now recursion
6859 6864 control is better organized. Doesn't include the same file twice.
6860 6865
6861 6866 2001-11-29 Fernando Perez <fperez@colorado.edu>
6862 6867
6863 6868 * Got input history working. Changed output history variables from
6864 6869 _p to _o so that _i is for input and _o for output. Just cleaner
6865 6870 convention.
6866 6871
6867 6872 * Implemented parametric aliases. This pretty much allows the
6868 6873 alias system to offer full-blown shell convenience, I think.
6869 6874
6870 6875 * Version 0.1.17 released, 0.1.18 opened.
6871 6876
6872 6877 * dot_ipython/ipythonrc (alias): added documentation.
6873 6878 (xcolor): Fixed small bug (xcolors -> xcolor)
6874 6879
6875 6880 * Changed the alias system. Now alias is a magic command to define
6876 6881 aliases just like the shell. Rationale: the builtin magics should
6877 6882 be there for things deeply connected to IPython's
6878 6883 architecture. And this is a much lighter system for what I think
6879 6884 is the really important feature: allowing users to define quickly
6880 6885 magics that will do shell things for them, so they can customize
6881 6886 IPython easily to match their work habits. If someone is really
6882 6887 desperate to have another name for a builtin alias, they can
6883 6888 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
6884 6889 works.
6885 6890
6886 6891 2001-11-28 Fernando Perez <fperez@colorado.edu>
6887 6892
6888 6893 * Changed @file so that it opens the source file at the proper
6889 6894 line. Since it uses less, if your EDITOR environment is
6890 6895 configured, typing v will immediately open your editor of choice
6891 6896 right at the line where the object is defined. Not as quick as
6892 6897 having a direct @edit command, but for all intents and purposes it
6893 6898 works. And I don't have to worry about writing @edit to deal with
6894 6899 all the editors, less does that.
6895 6900
6896 6901 * Version 0.1.16 released, 0.1.17 opened.
6897 6902
6898 6903 * Fixed some nasty bugs in the page/page_dumb combo that could
6899 6904 crash IPython.
6900 6905
6901 6906 2001-11-27 Fernando Perez <fperez@colorado.edu>
6902 6907
6903 6908 * Version 0.1.15 released, 0.1.16 opened.
6904 6909
6905 6910 * Finally got ? and ?? to work for undefined things: now it's
6906 6911 possible to type {}.get? and get information about the get method
6907 6912 of dicts, or os.path? even if only os is defined (so technically
6908 6913 os.path isn't). Works at any level. For example, after import os,
6909 6914 os?, os.path?, os.path.abspath? all work. This is great, took some
6910 6915 work in _ofind.
6911 6916
6912 6917 * Fixed more bugs with logging. The sanest way to do it was to add
6913 6918 to @log a 'mode' parameter. Killed two in one shot (this mode
6914 6919 option was a request of Janko's). I think it's finally clean
6915 6920 (famous last words).
6916 6921
6917 6922 * Added a page_dumb() pager which does a decent job of paging on
6918 6923 screen, if better things (like less) aren't available. One less
6919 6924 unix dependency (someday maybe somebody will port this to
6920 6925 windows).
6921 6926
6922 6927 * Fixed problem in magic_log: would lock of logging out if log
6923 6928 creation failed (because it would still think it had succeeded).
6924 6929
6925 6930 * Improved the page() function using curses to auto-detect screen
6926 6931 size. Now it can make a much better decision on whether to print
6927 6932 or page a string. Option screen_length was modified: a value 0
6928 6933 means auto-detect, and that's the default now.
6929 6934
6930 6935 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
6931 6936 go out. I'll test it for a few days, then talk to Janko about
6932 6937 licences and announce it.
6933 6938
6934 6939 * Fixed the length of the auto-generated ---> prompt which appears
6935 6940 for auto-parens and auto-quotes. Getting this right isn't trivial,
6936 6941 with all the color escapes, different prompt types and optional
6937 6942 separators. But it seems to be working in all the combinations.
6938 6943
6939 6944 2001-11-26 Fernando Perez <fperez@colorado.edu>
6940 6945
6941 6946 * Wrote a regexp filter to get option types from the option names
6942 6947 string. This eliminates the need to manually keep two duplicate
6943 6948 lists.
6944 6949
6945 6950 * Removed the unneeded check_option_names. Now options are handled
6946 6951 in a much saner manner and it's easy to visually check that things
6947 6952 are ok.
6948 6953
6949 6954 * Updated version numbers on all files I modified to carry a
6950 6955 notice so Janko and Nathan have clear version markers.
6951 6956
6952 6957 * Updated docstring for ultraTB with my changes. I should send
6953 6958 this to Nathan.
6954 6959
6955 6960 * Lots of small fixes. Ran everything through pychecker again.
6956 6961
6957 6962 * Made loading of deep_reload an cmd line option. If it's not too
6958 6963 kosher, now people can just disable it. With -nodeep_reload it's
6959 6964 still available as dreload(), it just won't overwrite reload().
6960 6965
6961 6966 * Moved many options to the no| form (-opt and -noopt
6962 6967 accepted). Cleaner.
6963 6968
6964 6969 * Changed magic_log so that if called with no parameters, it uses
6965 6970 'rotate' mode. That way auto-generated logs aren't automatically
6966 6971 over-written. For normal logs, now a backup is made if it exists
6967 6972 (only 1 level of backups). A new 'backup' mode was added to the
6968 6973 Logger class to support this. This was a request by Janko.
6969 6974
6970 6975 * Added @logoff/@logon to stop/restart an active log.
6971 6976
6972 6977 * Fixed a lot of bugs in log saving/replay. It was pretty
6973 6978 broken. Now special lines (!@,/) appear properly in the command
6974 6979 history after a log replay.
6975 6980
6976 6981 * Tried and failed to implement full session saving via pickle. My
6977 6982 idea was to pickle __main__.__dict__, but modules can't be
6978 6983 pickled. This would be a better alternative to replaying logs, but
6979 6984 seems quite tricky to get to work. Changed -session to be called
6980 6985 -logplay, which more accurately reflects what it does. And if we
6981 6986 ever get real session saving working, -session is now available.
6982 6987
6983 6988 * Implemented color schemes for prompts also. As for tracebacks,
6984 6989 currently only NoColor and Linux are supported. But now the
6985 6990 infrastructure is in place, based on a generic ColorScheme
6986 6991 class. So writing and activating new schemes both for the prompts
6987 6992 and the tracebacks should be straightforward.
6988 6993
6989 6994 * Version 0.1.13 released, 0.1.14 opened.
6990 6995
6991 6996 * Changed handling of options for output cache. Now counter is
6992 6997 hardwired starting at 1 and one specifies the maximum number of
6993 6998 entries *in the outcache* (not the max prompt counter). This is
6994 6999 much better, since many statements won't increase the cache
6995 7000 count. It also eliminated some confusing options, now there's only
6996 7001 one: cache_size.
6997 7002
6998 7003 * Added 'alias' magic function and magic_alias option in the
6999 7004 ipythonrc file. Now the user can easily define whatever names he
7000 7005 wants for the magic functions without having to play weird
7001 7006 namespace games. This gives IPython a real shell-like feel.
7002 7007
7003 7008 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
7004 7009 @ or not).
7005 7010
7006 7011 This was one of the last remaining 'visible' bugs (that I know
7007 7012 of). I think if I can clean up the session loading so it works
7008 7013 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
7009 7014 about licensing).
7010 7015
7011 7016 2001-11-25 Fernando Perez <fperez@colorado.edu>
7012 7017
7013 7018 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
7014 7019 there's a cleaner distinction between what ? and ?? show.
7015 7020
7016 7021 * Added screen_length option. Now the user can define his own
7017 7022 screen size for page() operations.
7018 7023
7019 7024 * Implemented magic shell-like functions with automatic code
7020 7025 generation. Now adding another function is just a matter of adding
7021 7026 an entry to a dict, and the function is dynamically generated at
7022 7027 run-time. Python has some really cool features!
7023 7028
7024 7029 * Renamed many options to cleanup conventions a little. Now all
7025 7030 are lowercase, and only underscores where needed. Also in the code
7026 7031 option name tables are clearer.
7027 7032
7028 7033 * Changed prompts a little. Now input is 'In [n]:' instead of
7029 7034 'In[n]:='. This allows it the numbers to be aligned with the
7030 7035 Out[n] numbers, and removes usage of ':=' which doesn't exist in
7031 7036 Python (it was a Mathematica thing). The '...' continuation prompt
7032 7037 was also changed a little to align better.
7033 7038
7034 7039 * Fixed bug when flushing output cache. Not all _p<n> variables
7035 7040 exist, so their deletion needs to be wrapped in a try:
7036 7041
7037 7042 * Figured out how to properly use inspect.formatargspec() (it
7038 7043 requires the args preceded by *). So I removed all the code from
7039 7044 _get_pdef in Magic, which was just replicating that.
7040 7045
7041 7046 * Added test to prefilter to allow redefining magic function names
7042 7047 as variables. This is ok, since the @ form is always available,
7043 7048 but whe should allow the user to define a variable called 'ls' if
7044 7049 he needs it.
7045 7050
7046 7051 * Moved the ToDo information from README into a separate ToDo.
7047 7052
7048 7053 * General code cleanup and small bugfixes. I think it's close to a
7049 7054 state where it can be released, obviously with a big 'beta'
7050 7055 warning on it.
7051 7056
7052 7057 * Got the magic function split to work. Now all magics are defined
7053 7058 in a separate class. It just organizes things a bit, and now
7054 7059 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
7055 7060 was too long).
7056 7061
7057 7062 * Changed @clear to @reset to avoid potential confusions with
7058 7063 the shell command clear. Also renamed @cl to @clear, which does
7059 7064 exactly what people expect it to from their shell experience.
7060 7065
7061 7066 Added a check to the @reset command (since it's so
7062 7067 destructive, it's probably a good idea to ask for confirmation).
7063 7068 But now reset only works for full namespace resetting. Since the
7064 7069 del keyword is already there for deleting a few specific
7065 7070 variables, I don't see the point of having a redundant magic
7066 7071 function for the same task.
7067 7072
7068 7073 2001-11-24 Fernando Perez <fperez@colorado.edu>
7069 7074
7070 7075 * Updated the builtin docs (esp. the ? ones).
7071 7076
7072 7077 * Ran all the code through pychecker. Not terribly impressed with
7073 7078 it: lots of spurious warnings and didn't really find anything of
7074 7079 substance (just a few modules being imported and not used).
7075 7080
7076 7081 * Implemented the new ultraTB functionality into IPython. New
7077 7082 option: xcolors. This chooses color scheme. xmode now only selects
7078 7083 between Plain and Verbose. Better orthogonality.
7079 7084
7080 7085 * Large rewrite of ultraTB. Much cleaner now, with a separation of
7081 7086 mode and color scheme for the exception handlers. Now it's
7082 7087 possible to have the verbose traceback with no coloring.
7083 7088
7084 7089 2001-11-23 Fernando Perez <fperez@colorado.edu>
7085 7090
7086 7091 * Version 0.1.12 released, 0.1.13 opened.
7087 7092
7088 7093 * Removed option to set auto-quote and auto-paren escapes by
7089 7094 user. The chances of breaking valid syntax are just too high. If
7090 7095 someone *really* wants, they can always dig into the code.
7091 7096
7092 7097 * Made prompt separators configurable.
7093 7098
7094 7099 2001-11-22 Fernando Perez <fperez@colorado.edu>
7095 7100
7096 7101 * Small bugfixes in many places.
7097 7102
7098 7103 * Removed the MyCompleter class from ipplib. It seemed redundant
7099 7104 with the C-p,C-n history search functionality. Less code to
7100 7105 maintain.
7101 7106
7102 7107 * Moved all the original ipython.py code into ipythonlib.py. Right
7103 7108 now it's just one big dump into a function called make_IPython, so
7104 7109 no real modularity has been gained. But at least it makes the
7105 7110 wrapper script tiny, and since ipythonlib is a module, it gets
7106 7111 compiled and startup is much faster.
7107 7112
7108 7113 This is a reasobably 'deep' change, so we should test it for a
7109 7114 while without messing too much more with the code.
7110 7115
7111 7116 2001-11-21 Fernando Perez <fperez@colorado.edu>
7112 7117
7113 7118 * Version 0.1.11 released, 0.1.12 opened for further work.
7114 7119
7115 7120 * Removed dependency on Itpl. It was only needed in one place. It
7116 7121 would be nice if this became part of python, though. It makes life
7117 7122 *a lot* easier in some cases.
7118 7123
7119 7124 * Simplified the prefilter code a bit. Now all handlers are
7120 7125 expected to explicitly return a value (at least a blank string).
7121 7126
7122 7127 * Heavy edits in ipplib. Removed the help system altogether. Now
7123 7128 obj?/?? is used for inspecting objects, a magic @doc prints
7124 7129 docstrings, and full-blown Python help is accessed via the 'help'
7125 7130 keyword. This cleans up a lot of code (less to maintain) and does
7126 7131 the job. Since 'help' is now a standard Python component, might as
7127 7132 well use it and remove duplicate functionality.
7128 7133
7129 7134 Also removed the option to use ipplib as a standalone program. By
7130 7135 now it's too dependent on other parts of IPython to function alone.
7131 7136
7132 7137 * Fixed bug in genutils.pager. It would crash if the pager was
7133 7138 exited immediately after opening (broken pipe).
7134 7139
7135 7140 * Trimmed down the VerboseTB reporting a little. The header is
7136 7141 much shorter now and the repeated exception arguments at the end
7137 7142 have been removed. For interactive use the old header seemed a bit
7138 7143 excessive.
7139 7144
7140 7145 * Fixed small bug in output of @whos for variables with multi-word
7141 7146 types (only first word was displayed).
7142 7147
7143 7148 2001-11-17 Fernando Perez <fperez@colorado.edu>
7144 7149
7145 7150 * Version 0.1.10 released, 0.1.11 opened for further work.
7146 7151
7147 7152 * Modified dirs and friends. dirs now *returns* the stack (not
7148 7153 prints), so one can manipulate it as a variable. Convenient to
7149 7154 travel along many directories.
7150 7155
7151 7156 * Fixed bug in magic_pdef: would only work with functions with
7152 7157 arguments with default values.
7153 7158
7154 7159 2001-11-14 Fernando Perez <fperez@colorado.edu>
7155 7160
7156 7161 * Added the PhysicsInput stuff to dot_ipython so it ships as an
7157 7162 example with IPython. Various other minor fixes and cleanups.
7158 7163
7159 7164 * Version 0.1.9 released, 0.1.10 opened for further work.
7160 7165
7161 7166 * Added sys.path to the list of directories searched in the
7162 7167 execfile= option. It used to be the current directory and the
7163 7168 user's IPYTHONDIR only.
7164 7169
7165 7170 2001-11-13 Fernando Perez <fperez@colorado.edu>
7166 7171
7167 7172 * Reinstated the raw_input/prefilter separation that Janko had
7168 7173 initially. This gives a more convenient setup for extending the
7169 7174 pre-processor from the outside: raw_input always gets a string,
7170 7175 and prefilter has to process it. We can then redefine prefilter
7171 7176 from the outside and implement extensions for special
7172 7177 purposes.
7173 7178
7174 7179 Today I got one for inputting PhysicalQuantity objects
7175 7180 (from Scientific) without needing any function calls at
7176 7181 all. Extremely convenient, and it's all done as a user-level
7177 7182 extension (no IPython code was touched). Now instead of:
7178 7183 a = PhysicalQuantity(4.2,'m/s**2')
7179 7184 one can simply say
7180 7185 a = 4.2 m/s**2
7181 7186 or even
7182 7187 a = 4.2 m/s^2
7183 7188
7184 7189 I use this, but it's also a proof of concept: IPython really is
7185 7190 fully user-extensible, even at the level of the parsing of the
7186 7191 command line. It's not trivial, but it's perfectly doable.
7187 7192
7188 7193 * Added 'add_flip' method to inclusion conflict resolver. Fixes
7189 7194 the problem of modules being loaded in the inverse order in which
7190 7195 they were defined in
7191 7196
7192 7197 * Version 0.1.8 released, 0.1.9 opened for further work.
7193 7198
7194 7199 * Added magics pdef, source and file. They respectively show the
7195 7200 definition line ('prototype' in C), source code and full python
7196 7201 file for any callable object. The object inspector oinfo uses
7197 7202 these to show the same information.
7198 7203
7199 7204 * Version 0.1.7 released, 0.1.8 opened for further work.
7200 7205
7201 7206 * Separated all the magic functions into a class called Magic. The
7202 7207 InteractiveShell class was becoming too big for Xemacs to handle
7203 7208 (de-indenting a line would lock it up for 10 seconds while it
7204 7209 backtracked on the whole class!)
7205 7210
7206 7211 FIXME: didn't work. It can be done, but right now namespaces are
7207 7212 all messed up. Do it later (reverted it for now, so at least
7208 7213 everything works as before).
7209 7214
7210 7215 * Got the object introspection system (magic_oinfo) working! I
7211 7216 think this is pretty much ready for release to Janko, so he can
7212 7217 test it for a while and then announce it. Pretty much 100% of what
7213 7218 I wanted for the 'phase 1' release is ready. Happy, tired.
7214 7219
7215 7220 2001-11-12 Fernando Perez <fperez@colorado.edu>
7216 7221
7217 7222 * Version 0.1.6 released, 0.1.7 opened for further work.
7218 7223
7219 7224 * Fixed bug in printing: it used to test for truth before
7220 7225 printing, so 0 wouldn't print. Now checks for None.
7221 7226
7222 7227 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
7223 7228 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
7224 7229 reaches by hand into the outputcache. Think of a better way to do
7225 7230 this later.
7226 7231
7227 7232 * Various small fixes thanks to Nathan's comments.
7228 7233
7229 7234 * Changed magic_pprint to magic_Pprint. This way it doesn't
7230 7235 collide with pprint() and the name is consistent with the command
7231 7236 line option.
7232 7237
7233 7238 * Changed prompt counter behavior to be fully like
7234 7239 Mathematica's. That is, even input that doesn't return a result
7235 7240 raises the prompt counter. The old behavior was kind of confusing
7236 7241 (getting the same prompt number several times if the operation
7237 7242 didn't return a result).
7238 7243
7239 7244 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
7240 7245
7241 7246 * Fixed -Classic mode (wasn't working anymore).
7242 7247
7243 7248 * Added colored prompts using Nathan's new code. Colors are
7244 7249 currently hardwired, they can be user-configurable. For
7245 7250 developers, they can be chosen in file ipythonlib.py, at the
7246 7251 beginning of the CachedOutput class def.
7247 7252
7248 7253 2001-11-11 Fernando Perez <fperez@colorado.edu>
7249 7254
7250 7255 * Version 0.1.5 released, 0.1.6 opened for further work.
7251 7256
7252 7257 * Changed magic_env to *return* the environment as a dict (not to
7253 7258 print it). This way it prints, but it can also be processed.
7254 7259
7255 7260 * Added Verbose exception reporting to interactive
7256 7261 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
7257 7262 traceback. Had to make some changes to the ultraTB file. This is
7258 7263 probably the last 'big' thing in my mental todo list. This ties
7259 7264 in with the next entry:
7260 7265
7261 7266 * Changed -Xi and -Xf to a single -xmode option. Now all the user
7262 7267 has to specify is Plain, Color or Verbose for all exception
7263 7268 handling.
7264 7269
7265 7270 * Removed ShellServices option. All this can really be done via
7266 7271 the magic system. It's easier to extend, cleaner and has automatic
7267 7272 namespace protection and documentation.
7268 7273
7269 7274 2001-11-09 Fernando Perez <fperez@colorado.edu>
7270 7275
7271 7276 * Fixed bug in output cache flushing (missing parameter to
7272 7277 __init__). Other small bugs fixed (found using pychecker).
7273 7278
7274 7279 * Version 0.1.4 opened for bugfixing.
7275 7280
7276 7281 2001-11-07 Fernando Perez <fperez@colorado.edu>
7277 7282
7278 7283 * Version 0.1.3 released, mainly because of the raw_input bug.
7279 7284
7280 7285 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
7281 7286 and when testing for whether things were callable, a call could
7282 7287 actually be made to certain functions. They would get called again
7283 7288 once 'really' executed, with a resulting double call. A disaster
7284 7289 in many cases (list.reverse() would never work!).
7285 7290
7286 7291 * Removed prefilter() function, moved its code to raw_input (which
7287 7292 after all was just a near-empty caller for prefilter). This saves
7288 7293 a function call on every prompt, and simplifies the class a tiny bit.
7289 7294
7290 7295 * Fix _ip to __ip name in magic example file.
7291 7296
7292 7297 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
7293 7298 work with non-gnu versions of tar.
7294 7299
7295 7300 2001-11-06 Fernando Perez <fperez@colorado.edu>
7296 7301
7297 7302 * Version 0.1.2. Just to keep track of the recent changes.
7298 7303
7299 7304 * Fixed nasty bug in output prompt routine. It used to check 'if
7300 7305 arg != None...'. Problem is, this fails if arg implements a
7301 7306 special comparison (__cmp__) which disallows comparing to
7302 7307 None. Found it when trying to use the PhysicalQuantity module from
7303 7308 ScientificPython.
7304 7309
7305 7310 2001-11-05 Fernando Perez <fperez@colorado.edu>
7306 7311
7307 7312 * Also added dirs. Now the pushd/popd/dirs family functions
7308 7313 basically like the shell, with the added convenience of going home
7309 7314 when called with no args.
7310 7315
7311 7316 * pushd/popd slightly modified to mimic shell behavior more
7312 7317 closely.
7313 7318
7314 7319 * Added env,pushd,popd from ShellServices as magic functions. I
7315 7320 think the cleanest will be to port all desired functions from
7316 7321 ShellServices as magics and remove ShellServices altogether. This
7317 7322 will provide a single, clean way of adding functionality
7318 7323 (shell-type or otherwise) to IP.
7319 7324
7320 7325 2001-11-04 Fernando Perez <fperez@colorado.edu>
7321 7326
7322 7327 * Added .ipython/ directory to sys.path. This way users can keep
7323 7328 customizations there and access them via import.
7324 7329
7325 7330 2001-11-03 Fernando Perez <fperez@colorado.edu>
7326 7331
7327 7332 * Opened version 0.1.1 for new changes.
7328 7333
7329 7334 * Changed version number to 0.1.0: first 'public' release, sent to
7330 7335 Nathan and Janko.
7331 7336
7332 7337 * Lots of small fixes and tweaks.
7333 7338
7334 7339 * Minor changes to whos format. Now strings are shown, snipped if
7335 7340 too long.
7336 7341
7337 7342 * Changed ShellServices to work on __main__ so they show up in @who
7338 7343
7339 7344 * Help also works with ? at the end of a line:
7340 7345 ?sin and sin?
7341 7346 both produce the same effect. This is nice, as often I use the
7342 7347 tab-complete to find the name of a method, but I used to then have
7343 7348 to go to the beginning of the line to put a ? if I wanted more
7344 7349 info. Now I can just add the ? and hit return. Convenient.
7345 7350
7346 7351 2001-11-02 Fernando Perez <fperez@colorado.edu>
7347 7352
7348 7353 * Python version check (>=2.1) added.
7349 7354
7350 7355 * Added LazyPython documentation. At this point the docs are quite
7351 7356 a mess. A cleanup is in order.
7352 7357
7353 7358 * Auto-installer created. For some bizarre reason, the zipfiles
7354 7359 module isn't working on my system. So I made a tar version
7355 7360 (hopefully the command line options in various systems won't kill
7356 7361 me).
7357 7362
7358 7363 * Fixes to Struct in genutils. Now all dictionary-like methods are
7359 7364 protected (reasonably).
7360 7365
7361 7366 * Added pager function to genutils and changed ? to print usage
7362 7367 note through it (it was too long).
7363 7368
7364 7369 * Added the LazyPython functionality. Works great! I changed the
7365 7370 auto-quote escape to ';', it's on home row and next to '. But
7366 7371 both auto-quote and auto-paren (still /) escapes are command-line
7367 7372 parameters.
7368 7373
7369 7374
7370 7375 2001-11-01 Fernando Perez <fperez@colorado.edu>
7371 7376
7372 7377 * Version changed to 0.0.7. Fairly large change: configuration now
7373 7378 is all stored in a directory, by default .ipython. There, all
7374 7379 config files have normal looking names (not .names)
7375 7380
7376 7381 * Version 0.0.6 Released first to Lucas and Archie as a test
7377 7382 run. Since it's the first 'semi-public' release, change version to
7378 7383 > 0.0.6 for any changes now.
7379 7384
7380 7385 * Stuff I had put in the ipplib.py changelog:
7381 7386
7382 7387 Changes to InteractiveShell:
7383 7388
7384 7389 - Made the usage message a parameter.
7385 7390
7386 7391 - Require the name of the shell variable to be given. It's a bit
7387 7392 of a hack, but allows the name 'shell' not to be hardwired in the
7388 7393 magic (@) handler, which is problematic b/c it requires
7389 7394 polluting the global namespace with 'shell'. This in turn is
7390 7395 fragile: if a user redefines a variable called shell, things
7391 7396 break.
7392 7397
7393 7398 - magic @: all functions available through @ need to be defined
7394 7399 as magic_<name>, even though they can be called simply as
7395 7400 @<name>. This allows the special command @magic to gather
7396 7401 information automatically about all existing magic functions,
7397 7402 even if they are run-time user extensions, by parsing the shell
7398 7403 instance __dict__ looking for special magic_ names.
7399 7404
7400 7405 - mainloop: added *two* local namespace parameters. This allows
7401 7406 the class to differentiate between parameters which were there
7402 7407 before and after command line initialization was processed. This
7403 7408 way, later @who can show things loaded at startup by the
7404 7409 user. This trick was necessary to make session saving/reloading
7405 7410 really work: ideally after saving/exiting/reloading a session,
7406 7411 *everything* should look the same, including the output of @who. I
7407 7412 was only able to make this work with this double namespace
7408 7413 trick.
7409 7414
7410 7415 - added a header to the logfile which allows (almost) full
7411 7416 session restoring.
7412 7417
7413 7418 - prepend lines beginning with @ or !, with a and log
7414 7419 them. Why? !lines: may be useful to know what you did @lines:
7415 7420 they may affect session state. So when restoring a session, at
7416 7421 least inform the user of their presence. I couldn't quite get
7417 7422 them to properly re-execute, but at least the user is warned.
7418 7423
7419 7424 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now