]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/samples/ide/activegrid/util/objutils.py
Fix "warning: operation on 'y' may be undefined".
[wxWidgets.git] / wxPython / samples / ide / activegrid / util / objutils.py
index 97bd2f79e013228174c415afcf27dc15fc709303..9658aa2a2aa5a52816c46ed3a241323739a1f17e 100644 (file)
@@ -14,98 +14,7 @@ import logging
 import traceback
 import sys
 import os
-import xmlmarshaller
-
-AG_TYPE_MAPPING =    { "ag:append"      : "activegrid.model.processmodel.AppendOperation",
-                       "ag:body"        : "activegrid.model.processmodel.Body",
-                       "ag:copy"        : "activegrid.model.processmodel.CopyOperation",
-                       "ag:cssRule"     : "activegrid.model.processmodel.CssRule",
-                       "ag:datasource"  : "activegrid.data.dataservice.DataSource",
-                       "ag:debug"       : "activegrid.model.processmodel.DebugOperation",
-                       "ag:deployment"  : "activegrid.server.deployment.Deployment",
-                       "ag:glue"        : "activegrid.model.processmodel.Glue",
-                       "ag:hr"          : "activegrid.model.processmodel.HorizontalRow",
-                       "ag:image"       : "activegrid.model.processmodel.Image",
-                       "ag:inputs"      : "activegrid.model.processmodel.Inputs",
-                       "ag:label"       : "activegrid.model.processmodel.Label",
-                       "ag:processmodel": "activegrid.model.processmodel.ProcessModel",
-                       "ag:processmodelref" : "activegrid.server.deployment.ProcessModelRef",
-                       "ag:query"       : "activegrid.model.processmodel.Query",
-                       "ag:schemaOptions" : "activegrid.model.schema.SchemaOptions",
-                       "ag:schemaref"   : "activegrid.server.deployment.SchemaRef",
-                       "ag:set"         : "activegrid.model.processmodel.SetOperation",
-                       "ag:text"        : "activegrid.model.processmodel.Text",
-                       "ag:title"       : "activegrid.model.processmodel.Title",
-                       "ag:view"        : "activegrid.model.processmodel.View",
-                       "bpws:case"      : "activegrid.model.processmodel.BPELCase",
-                       "bpws:catch"     : "activegrid.model.processmodel.BPELCatch",
-                       "bpws:faultHandlers" : "activegrid.model.processmodel.BPELFaultHandlers",
-                       "bpws:invoke"    : "activegrid.model.processmodel.BPELInvoke",
-                       "bpws:onMessage" : "activegrid.model.processmodel.BPELOnMessage",
-                       "bpws:otherwise" : "activegrid.model.processmodel.BPELOtherwise",
-                       "bpws:pick"      : "activegrid.model.processmodel.BPELPick",
-                       "bpws:process"   : "activegrid.model.processmodel.BPELProcess",
-                       "bpws:receive"   : "activegrid.model.processmodel.BPELReceive",
-                       "bpws:reply"     : "activegrid.model.processmodel.BPELReply",
-                       "bpws:scope"     : "activegrid.model.processmodel.BPELScope",
-                       "bpws:sequence"  : "activegrid.model.processmodel.BPELSequence",
-                       "bpws:switch"    : "activegrid.model.processmodel.BPELSwitch",
-                       "bpws:terminate" : "activegrid.model.processmodel.BPELTerminate",
-                       "bpws:variable"  : "activegrid.model.processmodel.BPELVariable",
-                       "bpws:variables" : "activegrid.model.processmodel.BPELVariables",
-                       "bpws:while"     : "activegrid.model.processmodel.BPELWhile",
-                       "wsdl:message"   : "activegrid.model.processmodel.WSDLMessage",
-                       "wsdl:part"      : "activegrid.model.processmodel.WSDLPart",
-                       "xforms:group"   : "activegrid.model.processmodel.XFormsGroup",
-                       "xforms:input"   : "activegrid.model.processmodel.XFormsInput",
-                       "xforms:label"   : "activegrid.model.processmodel.XFormsLabel",
-                       "xforms:output"  : "activegrid.model.processmodel.XFormsOutput",
-                       "xforms:secret"  : "activegrid.model.processmodel.XFormsSecret",
-                       "xforms:submit"  : "activegrid.model.processmodel.XFormsSubmit",
-                       "xs:all"         : "activegrid.model.schema.XsdSequence",
-                       "xs:complexType" : "activegrid.model.schema.XsdComplexType",
-                       "xs:element"     : "activegrid.model.schema.XsdElement",
-                       "xs:field"       : "activegrid.model.schema.XsdKeyField",
-                       "xs:key"         : "activegrid.model.schema.XsdKey",
-                       "xs:keyref"      : "activegrid.model.schema.XsdKeyRef",
-                       "xs:schema"      : "activegrid.model.schema.Schema",
-                       "xs:selector"    : "activegrid.model.schema.XsdKeySelector",              
-                       "xs:sequence"    : "activegrid.model.schema.XsdSequence",
-                       "projectmodel"   : "activegrid.tool.ProjectEditor.ProjectModel",
-                     }
-
-def defaultLoad(fileObject, knownTypes=None):
-    xml = fileObject.read()
-    loadedObject = defaultUnmarshal(xml, knownTypes=knownTypes)
-    if hasattr(fileObject, 'name'):
-        loadedObject.fileName = os.path.abspath(fileObject.name)
-    loadedObject.initialize()
-    return loadedObject
-
-def defaultUnmarshal(xml, knownTypes=None):
-    if not knownTypes: knownTypes = AG_TYPE_MAPPING
-    return xmlmarshaller.unmarshal(xml, knownTypes=knownTypes)    
-
-def defaultSave(fileObject, objectToSave, prettyPrint=True, knownTypes=None, withEncoding=1, encoding='utf-8'):
-    xml = defaultMarshal(objectToSave, prettyPrint=prettyPrint, knownTypes=knownTypes, withEncoding=withEncoding, encoding=encoding)
-    fileObject.write(xml)
-    fileObject.flush()
-
-def defaultMarshal(objectToSave, prettyPrint=True, knownTypes=None, withEncoding=1, encoding='utf-8'):
-    if not knownTypes: knownTypes = AG_TYPE_MAPPING
-    return xmlmarshaller.marshal(objectToSave, prettyPrint=prettyPrint, knownTypes=knownTypes, withEncoding=withEncoding, encoding=encoding)
-    
-def clone(objectToClone, knownTypes=None, encoding='utf-8'):
-    if not knownTypes: knownTypes = AG_TYPE_MAPPING
-    xml = xmlmarshaller.marshal(objectToClone, prettyPrint=True, knownTypes=knownTypes, encoding=encoding)
-    clonedObject = xmlmarshaller.unmarshal(xml, knownTypes=knownTypes)
-    if hasattr(objectToClone, 'fileName'):
-        clonedObject.fileName = objectToClone.fileName
-    try:
-        clonedObject.initialize()
-    except AttributeError:
-        pass
-    return clonedObject
+from types import *
 
 def classForName(className):
     pathList = className.split('.')
@@ -115,31 +24,6 @@ def classForName(className):
         code = code.__dict__[name]
     return code
 
-def hasattrignorecase(object, name):
-    namelow = name.lower()
-    for attr in dir(object):
-        if attr.lower() == namelow:
-            return True
-    for attr in dir(object):
-        if attr.lower() == '_' + namelow:
-            return True
-    return False
-
-def setattrignorecase(object, name, value):
-    namelow = name.lower()
-    for attr in object.__dict__:
-        if attr.lower() == namelow:
-            object.__dict__[attr] = value
-            return
-    object.__dict__[name] = value
-    
-def getattrignorecase(object, name):
-    namelow = name.lower()
-    for attr in object.__dict__:
-        if attr.lower() == namelow:
-            return object.__dict__[attr]
-    return object.__dict__[name]
-
 def hasPropertyValue(obj, attr):
     hasProp = False
     try:
@@ -159,7 +43,7 @@ def hasPropertyValue(obj, attr):
     return hasProp
 
 def toDiffableString(value):
-    s = repr(value)
+    s = str(value)
     ds = ""
     i = s.find(" at 0x") 
     start = 0
@@ -171,19 +55,51 @@ def toDiffableString(value):
         start = j
         i = s.find(" at 0x", start) 
     return ds + s[start:]
-    
+
+def toString(value, options=0):
+    if ((options & PRINT_OBJ_DIFFABLE) > 0):
+        return toDiffableString(value)
+    return value
+
+def toTypeString(obj):
+    if (isinstance(obj, BooleanType)):
+        return "bool"
+    elif (isinstance(obj, UnicodeType)):
+        return "unicode"
+    elif (isinstance(obj, basestring)):
+        return "string"
+    elif (isinstance(obj, IntType)):
+        return "int"
+    elif (isinstance(obj, FloatType)):
+        return "float"
+    elif (type(obj) == ListType):
+        return "list"
+    elif (isinstance(obj, DictType)):
+        return "dict"
+    elif (isinstance(obj, TupleType)):
+        return "tuple"
+    elif (isinstance(obj, InstanceType)):
+        return type(obj)
+    else:
+        return type(obj)
+            
 PRINT_OBJ_GETATTR = 1
 PRINT_OBJ_HIDE_INTERNAL = 2
 PRINT_OBJ_COMPACT = 4
 PRINT_OBJ_NONONE = 8
+PRINT_OBJ_DIFFABLE = 16
 PRINT_OBJ_INTERNAL = 512
 
 def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent=30):
     if ((maxIndent != None) and (indent > maxIndent)):
-        print >> out, " "*indent, name, str(object)
+        print >> out, " "*indent, "%s: %s" % (name, toString(str(object), flags)),
+        if ((flags & PRINT_OBJ_INTERNAL) == 0):
+            print >> out
         return True
     finalNewLine = False
     printed = True
+##    if (exclude == None):
+##        exclude = []
     if ((flags & PRINT_OBJ_COMPACT) > 0):
         if (exclude and object in exclude):
             return
@@ -191,7 +107,7 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
     if ((flags & PRINT_OBJ_INTERNAL) == 0):
         finalNewLine = True
     flags |= PRINT_OBJ_INTERNAL
-    if (object == None):
+    if (object is None):
         if (flags & PRINT_OBJ_NONONE) == 0:
             print >> out, " "*indent, name, " = None",
         else:
@@ -201,21 +117,21 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
         finalNewLine = False
         printed = False
     elif (isinstance(object, (list, tuple))):
-        if (exclude and object in exclude):
-            print >> out, " "*indent, name, " : ", type(object), " of length = ", len(object), " (already printed)",
-        elif (exclude and name in exclude):
-            print >> out, " "*indent, name, " : ", type(object), " of length = ", len(object), " (excluded)",
+        if ((exclude != None) and object in exclude):
+            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (already printed)",
+        elif ((exclude != None) and name in exclude):
+            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (excluded)",
         else:
-            if (exclude != None): exclude.append(object)
-            print >> out, " "*indent, name, " : ", type(object), " of length = %i" % len(object),
+            if ((exclude != None) and (len(object) > 0)): exclude.append(object)
+            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = %d" % len(object),
             for i, o in enumerate(object):
                 print >> out
-                printObject(out, o, name="[%i]" % i, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent)
+                printObject(out, o, name="[%d]" % i, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent)
     elif (isinstance(object, dict)):
-        if (exclude and object in exclude):
-            print >> out, " "*indent, name, " : ", type(object), " (already printed)",
+        if ((exclude != None) and object in exclude):
+            print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed)",
         else:
-            if (exclude != None): exclude.append(object)
+            if ((exclude != None) and (len(object) > 0)): exclude.append(object)
             if (len(name) > 0):
                 print >> out, " "*indent, name,
                 if ((flags & PRINT_OBJ_COMPACT) == 0):
@@ -226,25 +142,29 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
                 print >> out
             keys = object.keys()
             keys.sort()
-            for n in keys:
-                if ((n != None) and (not n.startswith("_") or ((flags & PRINT_OBJ_HIDE_INTERNAL) == 0))):
-                    if printObject(out, object[n], name=n, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent):
-                        if ((flags & PRINT_OBJ_COMPACT) == 0):
-                            print >> out
-                        else:
-                            print >> out, ",",
+            for key in keys:
+                if (key != None):
+                    n = key
+                    if (not (isinstance(n, basestring))):
+                        n = str(n)
+                    if ((not n.startswith("_") or ((flags & PRINT_OBJ_HIDE_INTERNAL) == 0))):
+                        if printObject(out, object[key], name=n, indent=indent+2, flags=(flags | PRINT_OBJ_INTERNAL), exclude=exclude, maxIndent=maxIndent):
+                            if ((flags & PRINT_OBJ_COMPACT) == 0):
+                                print >> out
+                            else:
+                                print >> out, ",",
             print >> out, " "*indent, "}",
     elif (hasattr(object, "__dict__")):
-        if (exclude and object in exclude):
-            print >> out, " "*indent, name, " : ", type(object), " (already printed) = ", toDiffableString(object),
+        if ((exclude != None) and object in exclude):
+            print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed) = ", toDiffableString(object),
         else:
             if (exclude != None): exclude.append(object)
-            if (name.startswith("_")):
-                print >> out, " "*indent, name, " : ", type(object),
-            elif (exclude and object.__dict__ in exclude):
-                print >> out, " "*indent, name, " : ", type(object), " (already printed)",
+            if (name.startswith("_")): ## and ((flags & PRINT_OBJ_HIDE_INTERNAL) > 0)):
+                print >> out, " "*indent, name, " : ", toTypeString(object),
+            elif ((exclude != None) and object.__dict__ in exclude):
+                print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed)",
             else:
-                print >> out, " "*indent, name, " : ", type(object),
+                print >> out, " "*indent, name, " : ", toTypeString(object),
                 if ((flags & PRINT_OBJ_GETATTR) == 0):
                     if ((flags & PRINT_OBJ_COMPACT) == 0):
                         print >> out
@@ -259,14 +179,19 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
     elif (indent < 0):
         print >> out, object,
     elif isinstance(object, basestring):
-        if (exclude and name in exclude):
-            print >> out, " "*indent, name, " : ", type(object), " of length = ", len(object), " (excluded)",
+        if ((exclude != None) and name in exclude):
+            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (excluded)",
         elif (len(object) > 100):
-            print >> out, " "*indent, name, ":", type(object), "[%i] = %s...%s" % (len(object), object[:50], object[-50:]),
+            print >> out, " "*indent, name, ":", toTypeString(object), "[%d] = %s...%s" % (len(object), object[:50], object[-50:]),
         else:
-            print >> out, " "*indent, name, ":", type(object), "=", str(object),
+            print >> out, " "*indent, name, ":", toTypeString(object), "=", str(object),
+##    elif (isinstance(object, float)):
+##        val = str(object)
+##        if (len(val) > 17):
+##            val = val[:17]
+##        print >> out, " "*indent, name, ":", type(object), "=", val,
     else:
-        print >> out, " "*indent, name, ":", type(object), "=", str(object),
+        print >> out, " "*indent, name, ":", toTypeString(object), "=", str(object),
     if (finalNewLine):
         print >> out
     return printed