Merge branch 'master' into python3
authorFredrik Tolf <fredrik@dolda2000.com>
Fri, 27 Sep 2013 05:52:36 +0000 (07:52 +0200)
committerFredrik Tolf <fredrik@dolda2000.com>
Fri, 27 Sep 2013 05:52:36 +0000 (07:52 +0200)
1  2 
pdm/perf.py

diff --combined pdm/perf.py
@@@ -45,7 -45,7 +45,7 @@@ It contains two named PERF objects
      - platform -- An attribute returning the Python build platform.
  """
  
- import os, sys, resource, time, socket, threading
+ import os, sys, time, socket, threading
  
  __all__ = ["attrinfo", "simpleattr", "valueattr", "eventobj",
             "staticdir", "event", "procevent", "startevent",
@@@ -63,7 -63,7 +63,7 @@@ class attrinfo(object)
  
  class perfobj(object):
      def __init__(self, *args, **kwargs):
 -        super(perfobj, self).__init__()
 +        super().__init__()
      
      def pdm_protocols(self):
          return []
@@@ -74,7 -74,7 +74,7 @@@ class simpleattr(perfobj)
      read.
      """
      def __init__(self, func, info = None, *args, **kwargs):
 -        super(simpleattr, self).__init__(*args, **kwargs)
 +        super().__init__(*args, **kwargs)
          self.func = func
          if info is None:
              info = attrinfo()
@@@ -87,7 -87,7 +87,7 @@@
          return self.info
  
      def pdm_protocols(self):
 -        return super(simpleattr, self).pdm_protocols() + ["attr"]
 +        return super().pdm_protocols() + ["attr"]
  
  class valueattr(perfobj):
      """An implementation of the `attr' interface, which is initialized
@@@ -95,7 -95,7 +95,7 @@@
      updates to the value are reflected in subsequent reads.
      """
      def __init__(self, init, info = None, *args, **kwargs):
 -        super(valueattr, self).__init__(*args, **kwargs)
 +        super().__init__(*args, **kwargs)
          self.value = init
          if info is None:
              info = attrinfo()
          return self.info
  
      def pdm_protocols(self):
 -        return super(valueattr, self).pdm_protocols() + ["attr"]
 +        return super().pdm_protocols() + ["attr"]
  
  class eventobj(perfobj):
      """An implementation of the `event' interface. It keeps track of
      subscribers when submitted with the `notify' method.
      """
      def __init__(self, *args, **kwargs):
 -        super(eventobj, self).__init__(*args, **kwargs)
 +        super().__init__(*args, **kwargs)
          self.subscribers = set()
  
      def subscribe(self, cb):
              except: pass
  
      def pdm_protocols(self):
 -        return super(eventobj, self).pdm_protocols() + ["event"]
 +        return super().pdm_protocols() + ["event"]
  
  class staticdir(perfobj):
      """An implementation of the `dir' interface. Put other PERF
      return them to requesting clients.
      """
      def __init__(self, *args, **kwargs):
 -        super(staticdir, self).__init__(*args, **kwargs)
 +        super().__init__(*args, **kwargs)
          self.map = {}
  
      def __setitem__(self, name, ob):
          return self.map.get(name, default)
  
      def listdir(self):
 -        return self.map.keys()
 +        return list(self.map.keys())
  
      def lookup(self, name):
          return self.map[name]
  
      def pdm_protocols(self):
 -        return super(staticdir, self).pdm_protocols() + ["dir"]
 +        return super().pdm_protocols() + ["dir"]
  
  class event(object):
      """This class should be subclassed by all event objects sent via
@@@ -209,7 -209,7 +209,7 @@@ class procevent(event)
      `finishevent' emitted when the connection is closed.
      """
      def __init__(self, id):
 -        super(procevent, self).__init__()
 +        super().__init__()
          if isinstance(id, procevent):
              self.id = id.id
          else:
  class startevent(procevent):
      """A subclass of `procevent'. See its documentation for details."""
      def __init__(self):
 -        super(startevent, self).__init__(getprocid())
 +        super().__init__(getprocid())
  
  class finishevent(procevent):
      """A subclass of `procevent'. Intended to be emitted when a
      distinction is meaningful. The `start' parameter should be the
      `startevent' instance used when the process was initiated."""
      def __init__(self, start, aborted = False):
 -        super(finishevent, self).__init__(start)
 +        super().__init__(start)
          self.aborted = aborted
  
  sysres = staticdir()
  itime = time.time()
- ires = resource.getrusage(resource.RUSAGE_SELF)
- def ct():
-     ru = resource.getrusage(resource.RUSAGE_SELF)
-     return (ru.ru_utime - ires.ru_utime) + (ru.ru_stime - ires.ru_stime)
  sysres["realtime"] = simpleattr(func = lambda: time.time() - itime)
- sysres["cputime"] = simpleattr(func = ct)
- sysres["utime"] = simpleattr(func = lambda: resource.getrusage(resource.RUSAGE_SELF).ru_utime - ires.ru_utime)
- sysres["stime"] = simpleattr(func = lambda: resource.getrusage(resource.RUSAGE_SELF).ru_stime - ires.ru_stime)
- sysres["maxrss"] = simpleattr(func = lambda: resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)
- sysres["rusage"] = simpleattr(func = lambda: resource.getrusage(resource.RUSAGE_SELF))
+ try:
+     import resource
+ except ImportError:
+     pass
+ else:
+     ires = resource.getrusage(resource.RUSAGE_SELF)
+     def ct():
+         ru = resource.getrusage(resource.RUSAGE_SELF)
+         return (ru.ru_utime - ires.ru_utime) + (ru.ru_stime - ires.ru_stime)
+     sysres["cputime"] = simpleattr(func = ct)
+     sysres["utime"] = simpleattr(func = lambda: resource.getrusage(resource.RUSAGE_SELF).ru_utime - ires.ru_utime)
+     sysres["stime"] = simpleattr(func = lambda: resource.getrusage(resource.RUSAGE_SELF).ru_stime - ires.ru_stime)
+     sysres["maxrss"] = simpleattr(func = lambda: resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)
+     sysres["rusage"] = simpleattr(func = lambda: resource.getrusage(resource.RUSAGE_SELF))
  
  sysinfo = staticdir()
  sysinfo["pid"] = simpleattr(func = os.getpid)