X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8d9be42a2821ffed248db455c4976a079e2fe2cb..d0ee33f5c6908b4ac5e1364381f0ef00942e3936:/wxPython/wx/py/introspect.py?ds=inline diff --git a/wxPython/wx/py/introspect.py b/wxPython/wx/py/introspect.py index 5b2702277a..570686dd7f 100644 --- a/wxPython/wx/py/introspect.py +++ b/wxPython/wx/py/introspect.py @@ -12,6 +12,7 @@ import inspect import sys import tokenize import types +import wx 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. - 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 == "": + 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: @@ -93,10 +98,9 @@ def getAllAttributeNames(object): # 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. @@ -288,7 +292,14 @@ def getRoot(command, terminator=None): 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)