]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/py/introspect.py
Added wxNB_NOPAGETHEME and GetThemeBackgroundColour
[wxWidgets.git] / wxPython / wx / py / introspect.py
index a6df887ea21f05d576be01223aa98e7358aad3bc..5b2702277af6ef1d0f0cbf2fa5501e919fdfc07b 100644 (file)
@@ -13,12 +13,6 @@ import sys
 import tokenize
 import types
 
-try:
-    True
-except NameError:
-    True = 1==1
-    False = 1==0
-
 def getAutoCompleteList(command='', locals=None, includeMagic=1, 
                         includeSingle=1, includeDouble=1):
     """Return list of auto-completion options for command.
@@ -45,31 +39,43 @@ def getAttributeNames(object, includeMagic=1, includeSingle=1,
     attributes = []
     dict = {}
     if not hasattrAlwaysReturnsTrue(object):
-        # Add some attributes that don't always get picked up.  If
-        # they don't apply, they'll get filtered out at the end.
-        attributes += ['__bases__', '__class__', '__dict__', '__name__', 
-                       'func_closure', 'func_code', 'func_defaults', 
-                       'func_dict', 'func_doc', 'func_globals', 'func_name']
+        # Add some attributes that don't always get picked up.
+        special_attrs = ['__bases__', '__class__', '__dict__', '__name__',
+                         'func_closure', 'func_code', 'func_defaults',
+                         'func_dict', 'func_doc', 'func_globals', 'func_name']
+        attributes += [attr for attr in special_attrs \
+                       if hasattr(object, attr)]
     if includeMagic:
         try: attributes += object._getAttributeNames()
         except: pass
     # Get all attribute names.
     attrdict = getAllAttributeNames(object)
-    for attrlist in attrdict.values():
-        attributes += attrlist
+    # 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)]
+            
     # Remove duplicates from the attribute list.
     for item in attributes:
         dict[item] = None
     attributes = dict.keys()
+    # new-style swig wrappings can result in non-string attributes
+    # e.g. ITK http://www.itk.org/
+    attributes = [attribute for attribute in attributes \
+                  if type(attribute) == str]
     attributes.sort(lambda x, y: cmp(x.upper(), y.upper()))
     if not includeSingle:
         attributes = filter(lambda item: item[0]!='_' \
                             or item[1]=='_', attributes)
     if not includeDouble:
         attributes = filter(lambda item: item[:2]!='__', attributes)
-    # Make sure we haven't picked up any bogus attributes somehow.
-    attributes = [attribute for attribute in attributes \
-                  if hasattr(object, attribute)]
     return attributes
 
 def hasattrAlwaysReturnsTrue(object):