Пример #1
0
 def __init__(self, className, classesToCollectInfoAbout, classesToIgnore):
     self.className = className
     self.classesToCollectInfoAbout = classesToCollectInfoAbout
     self.classesToIgnore = classesToIgnore
     self.baseClasses = BaseClassesGatherer(self.classesToCollectInfoAbout,
                                            self.classesToIgnore)
     self.attributeInfo = AttributeInfoGatherer(
         self.classesToCollectInfoAbout, self.classesToIgnore)
     self.selfReferences = SelfReferencesGatherer(
         self.classesToCollectInfoAbout, self.classesToIgnore)
     self.localReferences = LocalReferencesGatherer(
         self.classesToCollectInfoAbout, self.classesToIgnore)
     self.methodArgumentsOrder = MethodArgumentsOrderGatherer(
         self.classesToCollectInfoAbout, self.classesToIgnore)
     self.methodArgumentsDefaults = MethodArgumentsDefaultsGatherer(
         self.classesToCollectInfoAbout, self.classesToIgnore)
     self.methodArgumentsInfo = MethodArgumentsInfoGatherer(
         self.classesToCollectInfoAbout, self.classesToIgnore)
     self.methodInfo = MethodInfoGatherer(self.classesToCollectInfoAbout,
                                          self.classesToIgnore)
     self.methodReturnValueClassNames = MethodReturnValueClassNamesGatherer(
         self.classesToCollectInfoAbout, self.classesToIgnore)
Пример #2
0
 def __init__(self, className, classesToCollectInfoAbout, classesToIgnore):
    self.className = className
    self.classesToCollectInfoAbout = classesToCollectInfoAbout
    self.classesToIgnore = classesToIgnore
    self.baseClasses = BaseClassesGatherer(self.classesToCollectInfoAbout,
                                           self.classesToIgnore)
    self.attributeInfo = AttributeInfoGatherer(self.classesToCollectInfoAbout, 
                                               self.classesToIgnore)
    self.selfReferences = SelfReferencesGatherer(self.classesToCollectInfoAbout, 
                                                 self.classesToIgnore)
    self.localReferences = LocalReferencesGatherer(self.classesToCollectInfoAbout, 
                                                   self.classesToIgnore)
    self.methodArgumentsOrder = MethodArgumentsOrderGatherer(self.classesToCollectInfoAbout, 
                                                             self.classesToIgnore)
    self.methodArgumentsDefaults = MethodArgumentsDefaultsGatherer(self.classesToCollectInfoAbout, 
                                                                   self.classesToIgnore)
    self.methodArgumentsInfo = MethodArgumentsInfoGatherer(self.classesToCollectInfoAbout, 
                                                           self.classesToIgnore)      
    self.methodInfo = MethodInfoGatherer(self.classesToCollectInfoAbout, 
                                         self.classesToIgnore)
    self.methodReturnValueClassNames = MethodReturnValueClassNamesGatherer(self.classesToCollectInfoAbout, 
                                                                           self.classesToIgnore)
Пример #3
0
class ClassInfo:
   def __init__(self, className, classesToCollectInfoAbout, classesToIgnore):
      self.className = className
      self.classesToCollectInfoAbout = classesToCollectInfoAbout
      self.classesToIgnore = classesToIgnore
      self.baseClasses = BaseClassesGatherer(self.classesToCollectInfoAbout,
                                             self.classesToIgnore)
      self.attributeInfo = AttributeInfoGatherer(self.classesToCollectInfoAbout, 
                                                 self.classesToIgnore)
      self.selfReferences = SelfReferencesGatherer(self.classesToCollectInfoAbout, 
                                                   self.classesToIgnore)
      self.localReferences = LocalReferencesGatherer(self.classesToCollectInfoAbout, 
                                                     self.classesToIgnore)
      self.methodArgumentsOrder = MethodArgumentsOrderGatherer(self.classesToCollectInfoAbout, 
                                                               self.classesToIgnore)
      self.methodArgumentsDefaults = MethodArgumentsDefaultsGatherer(self.classesToCollectInfoAbout, 
                                                                     self.classesToIgnore)
      self.methodArgumentsInfo = MethodArgumentsInfoGatherer(self.classesToCollectInfoAbout, 
                                                             self.classesToIgnore)      
      self.methodInfo = MethodInfoGatherer(self.classesToCollectInfoAbout, 
                                           self.classesToIgnore)
      self.methodReturnValueClassNames = MethodReturnValueClassNamesGatherer(self.classesToCollectInfoAbout, 
                                                                             self.classesToIgnore)

   def collectInfo(self, frame, event, arg):
      self.baseClasses.collectInfo(frame, event, arg)
      self.localReferences.collectInfo(frame, event, arg)
      self.selfReferences.collectInfo(frame, event, arg)
      self.attributeInfo.collectInfo(frame, event, arg)
      self.methodArgumentsOrder.collectInfo(frame, event, arg)
      self.methodArgumentsDefaults.collectInfo(frame, event, arg)
      self.methodArgumentsInfo.collectInfo(frame, event, arg)
      self.methodInfo.collectInfo(frame, event, arg)
      self.methodReturnValueClassNames.collectInfo(frame, event, arg)

   def getInfo(self):
      info = self.__dict__.copy()
      for key in info.keys():
         if key[0] == "_":
            del info[key]
      return info

   def getFormattedInfo(self):
      return self.getInfo().__repr__()

   def getYamlInfo(self):
      info = self.getInfo()
      for key, value in info.items():
         if type(value) == types.InstanceType:
            info[key] = info[key].getInfo()
      return info

   def getDotRepresentation(self, **options):
      detailLevel = options["detailLevel"]
      if self.className in commonTypes:
         if not self.detailLevelMatches(detailLevel, TYPES):
            return ""
      dotRepr = ""
      dotRepr += "    // class %s \n" % self.className 
      dotRepr += "    %s %s\n" % (self.className, self.getDotNodeAttributes(detailLevel, options))
      dotRepr += self.getDotEdgesForNode(detailLevel)
      dotRepr += "\n"
      return dotRepr
   
   def detailLevelMatches(self, detailLevel, detailLevelDesired):
      "private"
      if detailLevel == detailLevelDesired:
         return True
      if detailLevel == 0 or detailLevelDesired == 0:
         return False
      elif detailLevel & detailLevelDesired == detailLevelDesired:
         return True
      else:
         return False

   def getDotNodeAttributes(self, detailLevel, options):
      "private"
      
      #return '[color=black, shape=record, label="%s"];' % self.getDotNodeLabel(detailLevel)
      newOptions = options.copy()
      newOptions["nodeLabel"] = self.getDotNodeLabel(detailLevel)
      return '[fillcolor="%(nodeFillColor)s", shape="%(nodeShape)s", style="%(nodeStyle)s", label="%(nodeLabel)s"];' % newOptions

   def getDotNodeLabel(self, detailLevel):
      "private"
      if self.detailLevelMatches(detailLevel, MIN):
         return self.className
      dotNodeLabel = '{%s\\n' % self.className
      if self.detailLevelMatches(detailLevel, ATTRIBUTES):
         dotNodeLabel += '|%s' % self.getDotNodeClassAttributeInfo()
      if self.detailLevelMatches(detailLevel, METHODS):
         dotNodeLabel += '|%s' % self.getDotNodeClassMethodInfo()
      dotNodeLabel += '}'
      return dotNodeLabel

   def getDotNodeClassAttributeInfo(self):
      dotClassAttributeInfo = ""
      attributeList = self.attributeInfo.getInfo().keys()
      attributeList.sort()
      for attribute in attributeList:
         attributeClassNames = self.attributeInfo.getInfo()[attribute]
         attributeClassNames.sort()
         dotClassAttributeInfo += "%s: " % attribute
         for className in attributeClassNames:
            dotClassAttributeInfo += "%s," % className
         if dotClassAttributeInfo[-1] == ",":
            dotClassAttributeInfo = dotClassAttributeInfo[:-1]
         dotClassAttributeInfo += "\l"
      return dotClassAttributeInfo

   def getDotNodeClassMethodInfo(self):
      dotClassMethodInfo = ""
      methodNameList = self.methodReturnValueClassNames.getInfo().keys()
      for methodName in methodNameList:
         methodReturnValueClassNames = self.methodReturnValueClassNames.getInfo()[methodName]
         methodReturnValueClassNames.sort()
         dotClassMethodInfo += "%s: " % methodName
         for className in methodReturnValueClassNames:
            dotClassMethodInfo += "%s," % className
         if dotClassMethodInfo[-1] == ",":
            dotClassMethodInfo = dotClassMethodInfo[:-1]
         dotClassMethodInfo += "\l"
      return dotClassMethodInfo

   def canDisplayClass(self, classToDisplay, detailLevel):
      "private"
      if classToDisplay in commonTypes:
         if not self.detailLevelMatches(detailLevel, TYPES):
            return False
      return True


   def getBaseClassEdges(self, detailLevel):
      "private"
      dotEdges = ""
      for baseClass in self.baseClasses.baseClasses:
         if self.canDisplayClass(baseClass, detailLevel):
            dotEdges += "      %s -- %s [arrowhead=empty];\n" % (self.className, baseClass)
      return dotEdges

   def getTemporarilyReferencedEdges(self, detailLevel):
      "private"
      dotEdges = ""
      for temporarilyReferencedClass in self.localReferences.localReferences:
         if self.canDisplayClass(temporarilyReferencedClass, detailLevel):
            dotEdges += "      %s -- %s [arrowtail=odiamond];\n" % \
                        (self.className, temporarilyReferencedClass)
      return dotEdges

   def getSelfReferencedEdges(self, detailLevel):
      "private"
      dotEdges = ""
      for selfReferencedClass in self.selfReferences.selfReferences:
         if self.canDisplayClass(selfReferencedClass, detailLevel):
            dotEdges += "       %s -- %s [arrowtail=diamond];\n" % \
                        (self.className, selfReferencedClass)
      return dotEdges


   def getAllReferencedEdges(self, detailLevel):
      "private"
      dotEdges = ""
      referencedClasses = self.localReferences.localReferences + \
                          self.selfReferences.selfReferences
      referencedClasses = self.uniqueList(referencedClasses)
      referencedClasses.sort()
      for referencedClass in referencedClasses:
         if self.canDisplayClass(referencedClass, detailLevel):
            dotEdges += "      %s -- %s [arrowtail=odiamond];\n" % \
                        (self.className, referencedClass)
      return dotEdges


   def getReferenceEdges(self, detailLevel):
      "private"
      dotEdges = ""
      if self.detailLevelMatches(detailLevel, REFERENCES):
         dotEdges = self.getTemporarilyReferencedEdges(detailLevel) + \
                    self.getSelfReferencedEdges(detailLevel)
      else:
         dotEdges = self.getAllReferencedEdges(detailLevel)
      return dotEdges

   def getDotEdgesForNode(self, detailLevel):
      "private"
      dotEdges = ""
      dotEdges += self.getBaseClassEdges(detailLevel)
      dotEdges += self.getReferenceEdges(detailLevel)
      return dotEdges

   def uniqueList(self, list):
      "private"
      u = {}
      for item in list:
         u[item] = 1
      return u.keys()
Пример #4
0
class ClassInfo:
    def __init__(self, className, classesToCollectInfoAbout, classesToIgnore):
        self.className = className
        self.classesToCollectInfoAbout = classesToCollectInfoAbout
        self.classesToIgnore = classesToIgnore
        self.baseClasses = BaseClassesGatherer(self.classesToCollectInfoAbout,
                                               self.classesToIgnore)
        self.attributeInfo = AttributeInfoGatherer(
            self.classesToCollectInfoAbout, self.classesToIgnore)
        self.selfReferences = SelfReferencesGatherer(
            self.classesToCollectInfoAbout, self.classesToIgnore)
        self.localReferences = LocalReferencesGatherer(
            self.classesToCollectInfoAbout, self.classesToIgnore)
        self.methodArgumentsOrder = MethodArgumentsOrderGatherer(
            self.classesToCollectInfoAbout, self.classesToIgnore)
        self.methodArgumentsDefaults = MethodArgumentsDefaultsGatherer(
            self.classesToCollectInfoAbout, self.classesToIgnore)
        self.methodArgumentsInfo = MethodArgumentsInfoGatherer(
            self.classesToCollectInfoAbout, self.classesToIgnore)
        self.methodInfo = MethodInfoGatherer(self.classesToCollectInfoAbout,
                                             self.classesToIgnore)
        self.methodReturnValueClassNames = MethodReturnValueClassNamesGatherer(
            self.classesToCollectInfoAbout, self.classesToIgnore)

    def collectInfo(self, frame, event, arg):
        self.baseClasses.collectInfo(frame, event, arg)
        self.localReferences.collectInfo(frame, event, arg)
        self.selfReferences.collectInfo(frame, event, arg)
        self.attributeInfo.collectInfo(frame, event, arg)
        self.methodArgumentsOrder.collectInfo(frame, event, arg)
        self.methodArgumentsDefaults.collectInfo(frame, event, arg)
        self.methodArgumentsInfo.collectInfo(frame, event, arg)
        self.methodInfo.collectInfo(frame, event, arg)
        self.methodReturnValueClassNames.collectInfo(frame, event, arg)

    def getInfo(self):
        info = self.__dict__.copy()
        for key in info.keys():
            if key[0] == "_":
                del info[key]
        return info

    def getFormattedInfo(self):
        return self.getInfo().__repr__()

    def getYamlInfo(self):
        info = self.getInfo()
        for key, value in info.items():
            if type(value) == types.InstanceType:
                info[key] = info[key].getInfo()
        return info

    def getDotRepresentation(self, **options):
        detailLevel = options["detailLevel"]
        if self.className in commonTypes:
            if not self.detailLevelMatches(detailLevel, TYPES):
                return ""
        dotRepr = ""
        dotRepr += "    // class %s \n" % self.className
        dotRepr += "    %s %s\n" % (
            self.className, self.getDotNodeAttributes(detailLevel, options))
        dotRepr += self.getDotEdgesForNode(detailLevel)
        dotRepr += "\n"
        return dotRepr

    def detailLevelMatches(self, detailLevel, detailLevelDesired):
        "private"
        if detailLevel == detailLevelDesired:
            return True
        if detailLevel == 0 or detailLevelDesired == 0:
            return False
        elif detailLevel & detailLevelDesired == detailLevelDesired:
            return True
        else:
            return False

    def getDotNodeAttributes(self, detailLevel, options):
        "private"

        #return '[color=black, shape=record, label="%s"];' % self.getDotNodeLabel(detailLevel)
        newOptions = options.copy()
        newOptions["nodeLabel"] = self.getDotNodeLabel(detailLevel)
        return '[fillcolor="%(nodeFillColor)s", shape="%(nodeShape)s", style="%(nodeStyle)s", label="%(nodeLabel)s"];' % newOptions

    def getDotNodeLabel(self, detailLevel):
        "private"
        if self.detailLevelMatches(detailLevel, MIN):
            return self.className
        dotNodeLabel = '{%s\\n' % self.className
        if self.detailLevelMatches(detailLevel, ATTRIBUTES):
            dotNodeLabel += '|%s' % self.getDotNodeClassAttributeInfo()
        if self.detailLevelMatches(detailLevel, METHODS):
            dotNodeLabel += '|%s' % self.getDotNodeClassMethodInfo()
        dotNodeLabel += '}'
        return dotNodeLabel

    def getDotNodeClassAttributeInfo(self):
        dotClassAttributeInfo = ""
        attributeList = self.attributeInfo.getInfo().keys()
        attributeList.sort()
        for attribute in attributeList:
            attributeClassNames = self.attributeInfo.getInfo()[attribute]
            attributeClassNames.sort()
            dotClassAttributeInfo += "%s: " % attribute
            for className in attributeClassNames:
                dotClassAttributeInfo += "%s," % className
            if dotClassAttributeInfo[-1] == ",":
                dotClassAttributeInfo = dotClassAttributeInfo[:-1]
            dotClassAttributeInfo += "\l"
        return dotClassAttributeInfo

    def getDotNodeClassMethodInfo(self):
        dotClassMethodInfo = ""
        methodNameList = self.methodReturnValueClassNames.getInfo().keys()
        for methodName in methodNameList:
            methodReturnValueClassNames = self.methodReturnValueClassNames.getInfo(
            )[methodName]
            methodReturnValueClassNames.sort()
            dotClassMethodInfo += "%s: " % methodName
            for className in methodReturnValueClassNames:
                dotClassMethodInfo += "%s," % className
            if dotClassMethodInfo[-1] == ",":
                dotClassMethodInfo = dotClassMethodInfo[:-1]
            dotClassMethodInfo += "\l"
        return dotClassMethodInfo

    def canDisplayClass(self, classToDisplay, detailLevel):
        "private"
        if classToDisplay in commonTypes:
            if not self.detailLevelMatches(detailLevel, TYPES):
                return False
        return True

    def getBaseClassEdges(self, detailLevel):
        "private"
        dotEdges = ""
        for baseClass in self.baseClasses.baseClasses:
            if self.canDisplayClass(baseClass, detailLevel):
                dotEdges += "      %s -- %s [arrowhead=empty];\n" % (
                    self.className, baseClass)
        return dotEdges

    def getTemporarilyReferencedEdges(self, detailLevel):
        "private"
        dotEdges = ""
        for temporarilyReferencedClass in self.localReferences.localReferences:
            if self.canDisplayClass(temporarilyReferencedClass, detailLevel):
                dotEdges += "      %s -- %s [arrowtail=odiamond];\n" % \
                            (self.className, temporarilyReferencedClass)
        return dotEdges

    def getSelfReferencedEdges(self, detailLevel):
        "private"
        dotEdges = ""
        for selfReferencedClass in self.selfReferences.selfReferences:
            if self.canDisplayClass(selfReferencedClass, detailLevel):
                dotEdges += "       %s -- %s [arrowtail=diamond];\n" % \
                            (self.className, selfReferencedClass)
        return dotEdges

    def getAllReferencedEdges(self, detailLevel):
        "private"
        dotEdges = ""
        referencedClasses = self.localReferences.localReferences + \
                            self.selfReferences.selfReferences
        referencedClasses = self.uniqueList(referencedClasses)
        referencedClasses.sort()
        for referencedClass in referencedClasses:
            if self.canDisplayClass(referencedClass, detailLevel):
                dotEdges += "      %s -- %s [arrowtail=odiamond];\n" % \
                            (self.className, referencedClass)
        return dotEdges

    def getReferenceEdges(self, detailLevel):
        "private"
        dotEdges = ""
        if self.detailLevelMatches(detailLevel, REFERENCES):
            dotEdges = self.getTemporarilyReferencedEdges(detailLevel) + \
                       self.getSelfReferencedEdges(detailLevel)
        else:
            dotEdges = self.getAllReferencedEdges(detailLevel)
        return dotEdges

    def getDotEdgesForNode(self, detailLevel):
        "private"
        dotEdges = ""
        dotEdges += self.getBaseClassEdges(detailLevel)
        dotEdges += self.getReferenceEdges(detailLevel)
        return dotEdges

    def uniqueList(self, list):
        "private"
        u = {}
        for item in list:
            u[item] = 1
        return u.keys()