]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/py/introspect.py
wxCheckListBox doesn't require wxUSE_OWNER_DRAWN when using WXUNIVERSAL
[wxWidgets.git] / wxPython / wx / py / introspect.py
index 5b2702277af6ef1d0f0cbf2fa5501e919fdfc07b..570686dd7fdb4776121e11aa309320ed3962c4c3 100644 (file)
@@ -12,6 +12,7 @@ import inspect
 import sys
 import tokenize
 import types
 import sys
 import tokenize
 import types
+import wx
 
 def getAutoCompleteList(command='', locals=None, includeMagic=1, 
                         includeSingle=1, includeDouble=1):
 
 def getAutoCompleteList(command='', locals=None, includeMagic=1, 
                         includeSingle=1, includeDouble=1):
@@ -49,18 +50,22 @@ def getAttributeNames(object, includeMagic=1, includeSingle=1,
         try: attributes += object._getAttributeNames()
         except: pass
     # Get all attribute names.
         try: attributes += object._getAttributeNames()
         except: pass
     # Get all attribute names.
-    attrdict = getAllAttributeNames(object)
-    # Store the object's dir.
-    object_dir = dir(object)
-    for (str_obj, technique, count), attrlist in attrdict.items():
-        # This complexity is necessary to avoid accessing all the
-        # attributes of the object.  This is very handy for objects
-        # whose attributes are lazily evaluated.
-        if str(object) == str_obj and technique == 'dir':
-            attributes += attrlist
-        else:
-            attributes += [attr for attr in attrlist \
-                           if attr not in object_dir and hasattr(object, attr)]
+    str_type = str(type(object))
+    if str_type == "<type 'array'>":
+        attributes += dir(object)
+    else:
+        attrdict = getAllAttributeNames(object)
+        # Store the object's dir.
+        object_dir = dir(object)
+        for (obj_type_name, technique, count), attrlist in attrdict.items():
+            # This complexity is necessary to avoid accessing all the
+            # attributes of the object.  This is very handy for objects
+            # whose attributes are lazily evaluated.
+            if type(object).__name__ == obj_type_name and technique == 'dir':
+                attributes += attrlist
+            else:
+                attributes += [attr for attr in attrlist \
+                               if attr not in object_dir and hasattr(object, attr)]
             
     # Remove duplicates from the attribute list.
     for item in attributes:
             
     # Remove duplicates from the attribute list.
     for item in attributes:
@@ -93,10 +98,9 @@ def getAllAttributeNames(object):
     # They always return true for hasattr().
     # !!!
     try:
     # They always return true for hasattr().
     # !!!
     try:
-        # Yes, this can fail if object is an instance of a class with
-        # __str__ (or __repr__) having a bug or raising an
-        # exception. :-(
-        key = str(object)
+        # This could(?) fail if the type is poorly defined without
+        # even a name.
+        key = type(object).__name__
     except:
         key = 'anonymous'
     # Wake up sleepy objects - a hack for ZODB objects in "ghost" state.
     except:
         key = 'anonymous'
     # Wake up sleepy objects - a hack for ZODB objects in "ghost" state.
@@ -288,7 +292,14 @@ def getRoot(command, terminator=None):
 
 def getTokens(command):
     """Return list of token tuples for command."""
 
 def getTokens(command):
     """Return list of token tuples for command."""
-    command = str(command)  # In case the command is unicode, which fails.
+
+    # In case the command is unicode try encoding it
+    if type(command) == unicode:
+        try:
+            command = command.encode(wx.GetDefaultPyEncoding())
+        except UnicodeEncodeError:
+            pass # otherwise leave it alone
+                
     f = cStringIO.StringIO(command)
     # tokens is a list of token tuples, each looking like: 
     # (type, string, (srow, scol), (erow, ecol), line)
     f = cStringIO.StringIO(command)
     # tokens is a list of token tuples, each looking like: 
     # (type, string, (srow, scol), (erow, ecol), line)