]> granicus.if.org Git - python/commitdiff
Update to reflect changes to the low-level logreader: share the info
authorFred Drake <fdrake@acm.org>
Mon, 29 Oct 2001 20:57:23 +0000 (20:57 +0000)
committerFred Drake <fdrake@acm.org>
Mon, 29 Oct 2001 20:57:23 +0000 (20:57 +0000)
dictionary instead of building a new one, and provide an overridable method
to allow subclasses to catch ADD_INFO records that are not part of the
initial block of ADD_INFO records created by the profiler itself.

Lib/hotshot/log.py

index df07ddddbbe2b0b6897a76ee42cb9de70c65e471..55dda217f2fcf27410a5aedcd0476f03456e4953 100644 (file)
@@ -34,11 +34,25 @@ class LogReader:
         # (fileno, lineno) -> filename, funcname
         self._funcmap = {}
 
-        self._info = {}
         self._reader = _hotshot.logreader(logfn)
         self._nextitem = self._reader.next
+        self._info = self._reader.info
         self._stack = []
 
+    def addinfo(self, key, value):
+        """This method is called for each additional ADD_INFO record.
+
+        This can be overridden by applications that want to receive
+        these events.  The default implementation does not need to be
+        called by alternate implementations.
+
+        The initial set of ADD_INFO records do not pass through this
+        mechanism; this is only needed to receive notification when
+        new values are added.  Subclasses can inspect self._info after
+        calling LogReader.__init__().
+        """
+        pass
+
     # Iteration support:
     # This adds an optional (& ignored) parameter to next() so that the
     # same bound method can be used as the __getitem__() method -- this
@@ -60,15 +74,10 @@ class LogReader:
                 self._funcmap[(fileno, lineno)] = (filename, tdelta)
                 continue
             if what == WHAT_ADD_INFO:
-                key = tdelta.lower()
-                try:
-                    L = self._info[key]
-                except KeyError:
-                    L = []
-                    self._info[key] = L
-                L.append(lineno)
-                if key == "current-directory":
-                    self.cwd = lineno
+                # value already loaded into self.info; call the
+                # overridable addinfo() handler so higher-level code
+                # can pick up the new value
+                self.addinfo(tdelta, lineno)
                 continue
             if what == WHAT_ENTER:
                 t = self._decode_location(fileno, lineno)