PyCrust 0.8.1
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@18564 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
406
wxPython/wxPython/lib/PyCrust/CHANGES.txt
Normal file
406
wxPython/wxPython/lib/PyCrust/CHANGES.txt
Normal file
@@ -0,0 +1,406 @@
|
||||
==================================================================
|
||||
CHANGES.txt is a list of code changes for each release of PyCrust.
|
||||
==================================================================
|
||||
|
||||
=====
|
||||
0.8.1 (12/20/2002 to //2002)
|
||||
=====
|
||||
Improved keyboard handling with Autocomplete active. You can now
|
||||
use Enter as well as Tab to select an item from the list.
|
||||
-----
|
||||
Disabled autocomplete for lists of 2000 items or more. The current
|
||||
implementation of wxSTC can't handle lists this big.
|
||||
-----
|
||||
Changed filling to always display docstrings for objects. This is
|
||||
useful for objects whose docstrings have been decorated, rather than
|
||||
coming directly from the source code. (Hmmm. Sounds like someone is
|
||||
doing some decorating. I wonder where that would be helpful. ;-)
|
||||
-----
|
||||
Fixed handling of icon. Added images.py file.
|
||||
-----
|
||||
|
||||
|
||||
=====
|
||||
0.8 (10/29/2002 to 12/16/2002)
|
||||
=====
|
||||
Added "help" to startup banner info.
|
||||
-----
|
||||
Made all wx and stc imports explicit. No more import *.
|
||||
-----
|
||||
Replaced use of wx's true and false with Python's True and False.
|
||||
-----
|
||||
Changed introspect.getRoot() to use tokenize module. This does a
|
||||
slightly better job than the previous parsing routine and the code
|
||||
is clearer.
|
||||
-----
|
||||
Improved handling of whitespace and empty types during introspection.
|
||||
-----
|
||||
Fixed cut/copy clipboard problem under Linux. (Robin Dunn rocks!!!)
|
||||
-----
|
||||
Added shell.about() which works like this:
|
||||
>>> shell.about()
|
||||
PyCrust Version: 0.8
|
||||
Shell Revision: 1.80
|
||||
Interpreter Revision: 1.15
|
||||
Python Version: 2.2.2
|
||||
wxPython Version: 2.3.3.1
|
||||
Platform: linux2
|
||||
-----
|
||||
Added copy plus and paste plus to shell menu.
|
||||
-----
|
||||
Moved shell menu from shell.py to shellmenu.py.
|
||||
-----
|
||||
Added sys.stdin.readlines() support.
|
||||
-----
|
||||
Added time.sleep() in readline() and OnIdle() event handler to free
|
||||
up the CPU.
|
||||
-----
|
||||
|
||||
|
||||
=====
|
||||
0.7.2 (2/22/2002 to 8/27/2002)
|
||||
=====
|
||||
Tweaked getAttributeNames() to pick up a few more attributes:
|
||||
'__bases__', '__class__', '__dict__', '__name__',
|
||||
'func_closure', 'func_code', 'func_defaults', 'func_dict',
|
||||
'func_doc', 'func_globals', 'func_name'
|
||||
-----
|
||||
Added a tests directory and unit tests.
|
||||
-----
|
||||
Improved support for empty types in the shell: [], () and {} as far
|
||||
as when call tips and autocompletion are available.
|
||||
Added support for the other triple string - ''''''.
|
||||
-----
|
||||
Refactored introspect.py to improve testability.
|
||||
-----
|
||||
Improved call tips for unbound methods by leaving the "self"
|
||||
parameter, since unbound methods require an instance be passed.
|
||||
-----
|
||||
Fixed call tip bug where a tip was displayed when a "(" was typed
|
||||
after an object that wasn't callable.
|
||||
-----
|
||||
Fixed getAllAttributeNames when str(object) fails.
|
||||
-----
|
||||
Added brace highlighting. (Thank you, Kevin Altis.)
|
||||
-----
|
||||
Fixed problem displaying unicode objects in PyFilling.
|
||||
-----
|
||||
Changed how filling.py checks for expandable objects.
|
||||
Lists are now expandable objects.
|
||||
-----
|
||||
Made the key handling more robust when there is an active text
|
||||
selection that includes text prior to the last primary prompt.
|
||||
Thanks to Raul Cota for pointing this out.
|
||||
-----
|
||||
Fixed wxSTC problem with brace highlighting and non-us keyboards.
|
||||
(Thank you for the patch, Jean-Michel Fauth.)
|
||||
-----
|
||||
Added busy = wxBusyCursor() to key point in shell and filling.
|
||||
-----
|
||||
Added OnCloseWindow handler to ShellFrame and CrustFrame.
|
||||
-----
|
||||
Default to SetWrapMode(1) for shell and namespace viewer.
|
||||
-----
|
||||
Added shell.wrap() and shell.zoom().
|
||||
-----
|
||||
Added Raul Cota autoCompleteKeys hooks.
|
||||
-----
|
||||
Cleaned up various little key handling bugs.
|
||||
-----
|
||||
Changed input methods to get values from shell, rather than dialog
|
||||
boxes. Renamed readIn to readline and readRaw to raw_input.
|
||||
-----
|
||||
|
||||
|
||||
=====
|
||||
0.7.1 (12/12/2001 to 2/21/2002)
|
||||
=====
|
||||
Fixed OnChar() issues effecting European keyboards, as reported by
|
||||
Jean-Michel Fauth.
|
||||
-----
|
||||
Fixed introspect.py issue with xmlrpc objects reported by Kevin Altis.
|
||||
-----
|
||||
Fixed some introspect/PyFilling issues with regard to Python 2.2.
|
||||
-----
|
||||
Fixed font background color as reported by Keith J. Farmer. (Thanks)
|
||||
-----
|
||||
Fixed problem with call tips and autocompletion inside multiline
|
||||
commands as report by Kevin Altis.
|
||||
-----
|
||||
Improved OnKeyDown handling of cut/copy/paste operations based on
|
||||
feedback from Syver Enstad. (Thanks)
|
||||
-----
|
||||
Added a shell.help() method to display some help info.
|
||||
-----
|
||||
Changed sort of items in the namespace viewer to case insensitive.
|
||||
-----
|
||||
Changed attributes.sort(lambda x, y: cmp(x.upper(), y.upper())) in
|
||||
advance of an upcoming fix to an autocompletion matching bug in wxSTC.
|
||||
-----
|
||||
Improved support for ZODB by allowing namespace drilldown into BTrees.
|
||||
-----
|
||||
Added shell.PasteAndRun() to support pasting multiple commands into
|
||||
the shell from the clipboard. Ctrl+Shift+V or v.
|
||||
-----
|
||||
Enter now always processes a command (or copies down a previous one.)
|
||||
To insert a line break, press Ctrl+Enter.
|
||||
-----
|
||||
Escape key clears the current, unexecuted command.
|
||||
-----
|
||||
History retrieval changed to replace current command. Added new keys
|
||||
to insert from history - Shift+Up and Shift+Down.
|
||||
-----
|
||||
Better call tips on objects with __call__ methods.
|
||||
-----
|
||||
Improved call tip positioning calculation.
|
||||
-----
|
||||
|
||||
|
||||
=====
|
||||
0.7 (10/15/2001 to 12/11/2001)
|
||||
=====
|
||||
Changed how command history retrieval functions work.
|
||||
Added Alt-P, Alt-N as keybindings for Retrieve-Previous, Retrieve-Next.
|
||||
-----
|
||||
Added full support for mult-line commands, similar to IDLE.
|
||||
-----
|
||||
Changed introspect.getAttributeNames() to do a case insensitive sort.
|
||||
-----
|
||||
Changed Cut/Copy/Paste to deal with prompts intelligently. Cut and Copy
|
||||
remove all prompts. Paste can handle prompted or not-prompted text.
|
||||
-----
|
||||
Added CopyWithPrompts() method attached to Ctrl-Shift-C for those times
|
||||
when you really do want all the prompts left intact.
|
||||
-----
|
||||
Improved handling of the shell's read-only zone.
|
||||
-----
|
||||
Changed CrustFrame.__init__ parameter spec to include all parameters
|
||||
allowed by a wxFrame.
|
||||
-----
|
||||
Changed FillingText to be read-only.
|
||||
-----
|
||||
Renamed PyCrust.py to PyCrustApp.py to eliminate package/module name
|
||||
conflicts that kept you from doing "from PyCrust import shell" inside
|
||||
files located in the PyCrust directory.
|
||||
-----
|
||||
Renamed PyFilling.py to PyFillingApp.py and PyShell.py to PyShellApp.py
|
||||
to maintain consistency.
|
||||
-----
|
||||
Removed the __date__ property from all modules.
|
||||
-----
|
||||
Fixed bug in introspect.getCallTip(), reported by Kevin Altis.
|
||||
-----
|
||||
|
||||
|
||||
=====
|
||||
0.6.1 (9/19/2001 to 10/12/2001)
|
||||
=====
|
||||
Changed Shell.run() to always position to the end of existing text, as
|
||||
suggested by Raul Cota.
|
||||
-----
|
||||
Changed introspect.getAllAttributeNames() to break circular references in
|
||||
object.__class__, which occurs in Zope/ZODB extension classes.
|
||||
-----
|
||||
Changed filling.FillingTree.getChildren() to introspect extension classes.
|
||||
-----
|
||||
Fixed minor bugs in introspect.getCallTip() that were interfering with call
|
||||
tips for Zope/ZODB extension class methods.
|
||||
-----
|
||||
In preparation for wxPython 2.3.2, added code to fix a font sizing problem.
|
||||
Versions of wxPython prior to 2.3.2 had a sizing bug on Win platform where
|
||||
the font was 2 points larger than what was specified.
|
||||
-----
|
||||
Added a hack to introspect.getAllAttributeNames() to "wake up" ZODB objects
|
||||
that are asleep - in a "ghost" state. Otherwise it returns incomplete info.
|
||||
-----
|
||||
|
||||
|
||||
=====
|
||||
0.6 (8/21/2001 to 9/12/2001)
|
||||
=====
|
||||
Added PyFilling.py and filling.py.
|
||||
-----
|
||||
PyShell.py and PyFilling.py can now be run standalone, as well as PyCrust.py.
|
||||
-----
|
||||
Added crust.py and moved some code from PyCrust.py to it.
|
||||
-----
|
||||
Added command history retrieval features submitted by Richie Hindle.
|
||||
-----
|
||||
Changed shell.write() to replace line endings with OS-specific endings.
|
||||
Changed shell.py and interpreter.py to use os.linesep in strings having
|
||||
hardcoded line endings.
|
||||
-----
|
||||
Added shell.redirectStdin(), shell.redirectStdout() and
|
||||
shell.redirectStderr() to allow the surrounding app to toggle requests that
|
||||
the specified sys.std* be redirected to the shell. These can also be run
|
||||
from within the shell itself, of course.
|
||||
-----
|
||||
The shell now adds the current working directory "." to the search path:
|
||||
sys.path.insert(0, os.curdir)
|
||||
-----
|
||||
Added support for distutils installations.
|
||||
-----
|
||||
|
||||
|
||||
=====
|
||||
0.5.4 (8/17/2001 to 8/20/2001)
|
||||
=====
|
||||
Changed default font size under *nix to:
|
||||
'size' : 12,
|
||||
'lnsize' : 10,
|
||||
-----
|
||||
Changed Shell to expect a parameter referencing an Interpreter class, rather
|
||||
than an intepreter instance, to facilitate subclassing of Interpreter, which
|
||||
effectively broke when the Editor class was eliminated.
|
||||
-----
|
||||
Fixed PyCrustAlaCarte.py, which had been broken by previous changes.
|
||||
Created InterpreterAlaCarte class as an example for use in the demo.
|
||||
-----
|
||||
Split PyCrust.py into PyCrust.py and PyShell.py in anticipation of PyFilling.
|
||||
-----
|
||||
|
||||
|
||||
=====
|
||||
0.5.3 (8/16/2001)
|
||||
=====
|
||||
Added patch to PyCrust.py to fix wxPython bug:
|
||||
wxID_SELECTALL = NewId() # This *should* be defined by wxPython.
|
||||
-----
|
||||
|
||||
|
||||
=====
|
||||
0.5.2 (8/14/2001 to 8/15/2001)
|
||||
=====
|
||||
Shortened module names by dropping "PyCrust" as a prefix.
|
||||
-----
|
||||
Changed version to VERSION in version module.
|
||||
-----
|
||||
Added Options menu to PyCrust application.
|
||||
-----
|
||||
Eliminated the Editor class (and editor module) by merging with Shell.
|
||||
This means that Shell "is a" wxStyledTextCtrl rather than "has a".
|
||||
There just wasn't enough non-gui code to justify the separation. Plus,
|
||||
Shell will be much easier for gui toolkits/designers to deal with now.
|
||||
-----
|
||||
|
||||
|
||||
=====
|
||||
0.5.1 (8/10/2001 to 8/14/2001)
|
||||
=====
|
||||
Added introspect module.
|
||||
Moved some functionality from PyCrustInterp to introspect.
|
||||
-----
|
||||
Changed introspect.getRoot() to no longer remove whitespace from the command.
|
||||
This was a remnant of a previous approach that, when left as part of the
|
||||
current approach, turned out to be a really bad thing.
|
||||
-----
|
||||
Changed introspect.getRoot() to allow commands of '', "", """""", [], (),
|
||||
and {} to pass through. This allows you to type them, followed by a dot, and
|
||||
get autocomplete options on them.
|
||||
-----
|
||||
Changed introspect.getRoot() to identify some situations where strings
|
||||
shouldn't be considered roots. For example:
|
||||
|
||||
>>> import PyCrust # To illustrate the potential problem.
|
||||
>>> len('PyCrust.py')
|
||||
|
||||
Typing the dot at the end of "PyCrust" in the second line above should NOT
|
||||
result in an autocompletion list because "PyCrust" is part of a string in
|
||||
this context, not a reference to the PyCrust module object. Similar reasoning
|
||||
applies to call tips. For example:
|
||||
|
||||
>>> len('dir(')
|
||||
|
||||
Typing the left paren at the end of "dir" should NOT result in a call tip.
|
||||
|
||||
Both features now behave properly in the examples given. However, there is
|
||||
still the case where whitespace precedes the potential root and that is NOT
|
||||
handled properly. For example:
|
||||
|
||||
>>> len('this is a dir(')
|
||||
|
||||
and
|
||||
|
||||
>>> len('This is PyCrust.py')
|
||||
|
||||
More code needs to be written to handle more complex situations.
|
||||
-----
|
||||
Added locals=None parameter to Shell.__init__().
|
||||
-----
|
||||
Added support for magic attribute retrieval. Users can change this with:
|
||||
>>> shell.editor.autoCompleteIncludeMagic = 0
|
||||
-----
|
||||
Added the ability to set filters on auto completion to exclude attributes
|
||||
prefixed with a single or double underscore. Users can exclude one or the
|
||||
other or both with:
|
||||
>>> shell.editor.autoCompleteExcludeSingle = 1
|
||||
>>> shell.editor.autoCompleteExcludeDouble = 1
|
||||
-----
|
||||
|
||||
|
||||
=====
|
||||
0.5 (8/8/2001)
|
||||
=====
|
||||
Mostly just a final version change before creating a release.
|
||||
|
||||
|
||||
=====
|
||||
0.4 (8/4/2001 to 8/7/2001)
|
||||
=====
|
||||
Changed version/revision handling.
|
||||
Fixed bugs.
|
||||
|
||||
|
||||
=====
|
||||
0.3 (8/2/2001 to 8/3/2001)
|
||||
=====
|
||||
Removed lots of cruft.
|
||||
Added lots of docstrings.
|
||||
Imported to CVS repository at SourceForge.
|
||||
Added call tips.
|
||||
|
||||
|
||||
=====
|
||||
0.2 (7/30/2001 to 8/2/2001)
|
||||
=====
|
||||
Renamed several files.
|
||||
Added command autocompletion.
|
||||
Added menus to PyCrust.py: File, Edit and Help
|
||||
Added sample applications: PyCrustAlaCarte.py, PyCrustAlaMode.py, and
|
||||
PyCrustMinimus.py.
|
||||
|
||||
|
||||
=====
|
||||
0.1 (7/1/2001 to 7/19/2001)
|
||||
=====
|
||||
Added basic syntax coloring much like Boa.
|
||||
Added read-only logging much like IDLE.
|
||||
Can retrieve a previous command by putting the cursor back on that line and
|
||||
hitting enter.
|
||||
Stdin and raw_input operate properly so you can now do help() and license()
|
||||
without hanging.
|
||||
Redefined "quit", "exit", and "close" to display a better-than-nothing
|
||||
response.
|
||||
Home key honors the prompt.
|
||||
Created SourceForge account, but nothing was posted.
|
||||
|
||||
|
||||
==================================
|
||||
In the beginning, there was pie... (7/1/2001)
|
||||
==================================
|
||||
Blame it all on IDLE, Boa and PythonWin. I was using all three, got frustrated
|
||||
with their dissimilarities, and began to let everyone know how I felt. At the
|
||||
same time, Scintilla looked like an interesting tool to build a shell around.
|
||||
And while I didn't receive much in the way of positive feedback, let alone
|
||||
encouragement, I just couldn't let go of the idea of a Scintilla-based Python
|
||||
shell. Then the PythonCard project got to the point where they were talking
|
||||
about including a shell in their development environment. That was all the
|
||||
incentive I needed. PyCrust had to happen...
|
||||
|
||||
|
||||
===============
|
||||
CVS Information
|
||||
===============
|
||||
$Date$
|
||||
$Revision$
|
||||
$Id$
|
@@ -114,11 +114,15 @@ class FillingTree(wx.wxTreeCtrl):
|
||||
|
||||
def OnSelChanged(self, event):
|
||||
busy = wx.wxBusyCursor()
|
||||
self.setText('')
|
||||
item = event.GetItem()
|
||||
if item == self.root:
|
||||
self.setText('')
|
||||
del busy
|
||||
return
|
||||
o = self.GetPyData(item)
|
||||
if o is None: # Windows bug fix.
|
||||
del busy
|
||||
return
|
||||
otype = type(o)
|
||||
text = ''
|
||||
text += self.getFullName(item)
|
||||
@@ -130,25 +134,24 @@ class FillingTree(wx.wxTreeCtrl):
|
||||
if otype is types.StringType or otype is types.UnicodeType:
|
||||
value = repr(o)
|
||||
text += '\n\nValue: ' + value
|
||||
try:
|
||||
text += '\n\nDocstring:\n\n"""\n' + inspect.getdoc(o).strip() + '\n"""'
|
||||
except:
|
||||
pass
|
||||
if otype is types.InstanceType:
|
||||
try:
|
||||
text += '\n\nClass Definition:\n\n' + \
|
||||
inspect.getsource(o.__class__)
|
||||
except:
|
||||
try:
|
||||
text += '\n\n"""' + inspect.getdoc(o).strip() + '"""'
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
try:
|
||||
text += '\n\nSource Code:\n\n' + \
|
||||
inspect.getsource(o)
|
||||
except:
|
||||
try:
|
||||
text += '\n\n"""' + inspect.getdoc(o).strip() + '"""'
|
||||
except:
|
||||
pass
|
||||
self.setText(text)
|
||||
del busy
|
||||
|
||||
def getFullName(self, item, partial=''):
|
||||
"""Return a syntactically proper name for item."""
|
||||
@@ -322,11 +325,8 @@ class FillingFrame(wx.wxFrame):
|
||||
intro = 'Welcome To PyFilling - The Tastiest Namespace Inspector'
|
||||
self.CreateStatusBar()
|
||||
self.SetStatusText(intro)
|
||||
if wx.wxPlatform == '__WXMSW__':
|
||||
import os
|
||||
filename = os.path.join(os.path.dirname(__file__), 'PyCrust.ico')
|
||||
icon = wx.wxIcon(filename, wx.wxBITMAP_TYPE_ICO)
|
||||
self.SetIcon(icon)
|
||||
import images
|
||||
self.SetIcon(images.getPyCrustIcon())
|
||||
self.filling = Filling(parent=self, rootObject=rootObject,
|
||||
rootLabel=rootLabel,
|
||||
rootIsNamespace=rootIsNamespace)
|
||||
@@ -338,6 +338,7 @@ class App(wx.wxApp):
|
||||
"""PyFilling standalone application."""
|
||||
|
||||
def OnInit(self):
|
||||
wx.wxInitAllImageHandlers()
|
||||
self.fillingFrame = FillingFrame()
|
||||
self.fillingFrame.Show(True)
|
||||
self.SetTopWindow(self.fillingFrame)
|
||||
|
@@ -8,8 +8,6 @@ __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
|
||||
__cvsid__ = "$Id$"
|
||||
__revision__ = "$Revision$"[11:-2]
|
||||
|
||||
from wxPython import wx
|
||||
from wxPython import stc
|
||||
import keyword
|
||||
import os
|
||||
import sys
|
||||
@@ -20,6 +18,16 @@ from pseudo import PseudoFileErr
|
||||
from shellmenu import ShellMenu
|
||||
from version import VERSION
|
||||
|
||||
try:
|
||||
from deco.wxpy import wx
|
||||
except ImportError:
|
||||
from wxPython import wx
|
||||
|
||||
try:
|
||||
from deco.wxpy import stc
|
||||
except ImportError:
|
||||
from wxPython import stc
|
||||
|
||||
True, False = 1, 0
|
||||
|
||||
sys.ps3 = '<-- ' # Input prompt.
|
||||
@@ -64,9 +72,8 @@ class ShellFrame(wx.wxFrame, ShellMenu):
|
||||
intro += '\nSponsored by Orbtech - Your source for Python programming expertise.'
|
||||
self.CreateStatusBar()
|
||||
self.SetStatusText(intro.replace('\n', ', '))
|
||||
filename = os.path.join(os.path.dirname(__file__), 'PyCrust.ico')
|
||||
icon = wx.wxIcon(filename, wx.wxBITMAP_TYPE_ICO)
|
||||
self.SetIcon(icon)
|
||||
import images
|
||||
self.SetIcon(images.getPyCrustIcon())
|
||||
self.shell = Shell(parent=self, id=-1, introText=intro,
|
||||
locals=locals, InterpClass=InterpClass,
|
||||
*args, **kwds)
|
||||
@@ -432,6 +439,8 @@ Platform: %s""" % (VERSION, self.revision, self.interp.revision,
|
||||
# Usually the dot (period) key activates auto completion.
|
||||
# Get the command between the prompt and the cursor.
|
||||
# Add the autocomplete character to the end of the command.
|
||||
if self.AutoCompActive():
|
||||
self.AutoCompCancel()
|
||||
command = self.GetTextRange(stoppos, currpos) + chr(key)
|
||||
self.write(chr(key))
|
||||
if self.autoComplete:
|
||||
@@ -455,12 +464,12 @@ Platform: %s""" % (VERSION, self.revision, self.interp.revision,
|
||||
def OnKeyDown(self, event):
|
||||
"""Key down event handler."""
|
||||
|
||||
key = event.KeyCode()
|
||||
# If the auto-complete window is up let it do its thing.
|
||||
if self.AutoCompActive():
|
||||
event.Skip()
|
||||
return
|
||||
# Prevent modification of previously submitted commands/responses.
|
||||
key = event.KeyCode()
|
||||
controlDown = event.ControlDown()
|
||||
altDown = event.AltDown()
|
||||
shiftDown = event.ShiftDown()
|
||||
|
Reference in New Issue
Block a user