| Index: third_party/psutil/psutil/_compat.py
 | 
| diff --git a/third_party/psutil/psutil/_compat.py b/third_party/psutil/psutil/_compat.py
 | 
| deleted file mode 100644
 | 
| index 1cac8b7b6721ba99366945ac441761325e25f38f..0000000000000000000000000000000000000000
 | 
| --- a/third_party/psutil/psutil/_compat.py
 | 
| +++ /dev/null
 | 
| @@ -1,154 +0,0 @@
 | 
| -#!/usr/bin/env python
 | 
| -#
 | 
| -# $Id: _compat.py 1142 2011-10-05 18:45:49Z g.rodola $
 | 
| -#
 | 
| -# Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved.
 | 
| -# Use of this source code is governed by a BSD-style license that can be
 | 
| -# found in the LICENSE file.
 | 
| -
 | 
| -"""Module which provides compatibility with older Python versions."""
 | 
| -
 | 
| -__all__ = ["namedtuple", "property"]
 | 
| -
 | 
| -from operator import itemgetter as _itemgetter
 | 
| -from keyword import iskeyword as _iskeyword
 | 
| -import sys as _sys
 | 
| -import __builtin__
 | 
| -
 | 
| -try:
 | 
| -    from collections import namedtuple
 | 
| -except ImportError:
 | 
| -    def namedtuple(typename, field_names, verbose=False, rename=False):
 | 
| -        """A collections.namedtuple implementation written in Python
 | 
| -        to support Python versions < 2.6.
 | 
| -
 | 
| -        Taken from: http://code.activestate.com/recipes/500261/
 | 
| -        """
 | 
| -        # Parse and validate the field names.  Validation serves two
 | 
| -        # purposes, generating informative error messages and preventing
 | 
| -        # template injection attacks.
 | 
| -        if isinstance(field_names, basestring):
 | 
| -             # names separated by whitespace and/or commas
 | 
| -            field_names = field_names.replace(',', ' ').split()
 | 
| -        field_names = tuple(map(str, field_names))
 | 
| -        if rename:
 | 
| -            names = list(field_names)
 | 
| -            seen = set()
 | 
| -            for i, name in enumerate(names):
 | 
| -                if (not min(c.isalnum() or c=='_' for c in name) or _iskeyword(name)
 | 
| -                    or not name or name[0].isdigit() or name.startswith('_')
 | 
| -                    or name in seen):
 | 
| -                        names[i] = '_%d' % i
 | 
| -                seen.add(name)
 | 
| -            field_names = tuple(names)
 | 
| -        for name in (typename,) + field_names:
 | 
| -            if not min(c.isalnum() or c=='_' for c in name):
 | 
| -                raise ValueError('Type names and field names can only contain ' \
 | 
| -                                 'alphanumeric characters and underscores: %r'
 | 
| -                                 % name)
 | 
| -            if _iskeyword(name):
 | 
| -                raise ValueError('Type names and field names cannot be a keyword: %r' \
 | 
| -                                 % name)
 | 
| -            if name[0].isdigit():
 | 
| -                raise ValueError('Type names and field names cannot start with a ' \
 | 
| -                                 'number: %r' % name)
 | 
| -        seen_names = set()
 | 
| -        for name in field_names:
 | 
| -            if name.startswith('_') and not rename:
 | 
| -                raise ValueError('Field names cannot start with an underscore: %r'
 | 
| -                                 % name)
 | 
| -            if name in seen_names:
 | 
| -                raise ValueError('Encountered duplicate field name: %r' % name)
 | 
| -            seen_names.add(name)
 | 
| -
 | 
| -        # Create and fill-in the class template
 | 
| -        numfields = len(field_names)
 | 
| -        # tuple repr without parens or quotes
 | 
| -        argtxt = repr(field_names).replace("'", "")[1:-1]
 | 
| -        reprtxt = ', '.join('%s=%%r' % name for name in field_names)
 | 
| -        template = '''class %(typename)s(tuple):
 | 
| -        '%(typename)s(%(argtxt)s)' \n
 | 
| -        __slots__ = () \n
 | 
| -        _fields = %(field_names)r \n
 | 
| -        def __new__(_cls, %(argtxt)s):
 | 
| -            return _tuple.__new__(_cls, (%(argtxt)s)) \n
 | 
| -        @classmethod
 | 
| -        def _make(cls, iterable, new=tuple.__new__, len=len):
 | 
| -            'Make a new %(typename)s object from a sequence or iterable'
 | 
| -            result = new(cls, iterable)
 | 
| -            if len(result) != %(numfields)d:
 | 
| -                raise TypeError('Expected %(numfields)d arguments, got %%d' %% len(result))
 | 
| -            return result \n
 | 
| -        def __repr__(self):
 | 
| -            return '%(typename)s(%(reprtxt)s)' %% self \n
 | 
| -        def _asdict(self):
 | 
| -            'Return a new dict which maps field names to their values'
 | 
| -            return dict(zip(self._fields, self)) \n
 | 
| -        def _replace(_self, **kwds):
 | 
| -            'Return a new %(typename)s object replacing specified fields with new values'
 | 
| -            result = _self._make(map(kwds.pop, %(field_names)r, _self))
 | 
| -            if kwds:
 | 
| -                raise ValueError('Got unexpected field names: %%r' %% kwds.keys())
 | 
| -            return result \n
 | 
| -        def __getnewargs__(self):
 | 
| -            return tuple(self) \n\n''' % locals()
 | 
| -        for i, name in enumerate(field_names):
 | 
| -            template += '        %s = _property(_itemgetter(%d))\n' % (name, i)
 | 
| -        if verbose:
 | 
| -            print template
 | 
| -
 | 
| -        # Execute the template string in a temporary namespace
 | 
| -        namespace = dict(_itemgetter=_itemgetter, __name__='namedtuple_%s' % typename,
 | 
| -                         _property=property, _tuple=tuple)
 | 
| -        try:
 | 
| -            exec template in namespace
 | 
| -        except SyntaxError, e:
 | 
| -            raise SyntaxError(e.message + ':\n' + template)
 | 
| -        result = namespace[typename]
 | 
| -
 | 
| -        # For pickling to work, the __module__ variable needs to be set
 | 
| -        # to the frame where the named tuple is created.  Bypass this
 | 
| -        # step in enviroments where sys._getframe is not defined (Jython
 | 
| -        # for example) or sys._getframe is not defined for arguments
 | 
| -        # greater than 0 (IronPython).
 | 
| -        try:
 | 
| -            result.__module__ = _sys._getframe(1).f_globals.get('__name__', '__main__')
 | 
| -        except (AttributeError, ValueError):
 | 
| -            pass
 | 
| -
 | 
| -        return result
 | 
| -
 | 
| -
 | 
| -# dirty hack to support property.setter on python < 2.6
 | 
| -property = property
 | 
| -
 | 
| -if not hasattr(property, "setter"):
 | 
| -
 | 
| -    class property(property):
 | 
| -
 | 
| -        def __init__(self, fget, *args, **kwargs):
 | 
| -            self.__doc__ = fget.__doc__
 | 
| -            super(property, self).__init__(fget, *args, **kwargs)
 | 
| -
 | 
| -        def setter(self, fset):
 | 
| -            cls_ns = _sys._getframe(1).f_locals
 | 
| -            for k, v in cls_ns.iteritems():
 | 
| -              if v == self:
 | 
| -                  propname = k
 | 
| -                  break
 | 
| -            cls_ns[propname] = property(self.fget, fset,
 | 
| -                                        self.fdel, self.__doc__)
 | 
| -            return cls_ns[propname]
 | 
| -
 | 
| -        def deleter(self, fdel):
 | 
| -            cls_ns = _sys._getframe(1).f_locals
 | 
| -            for k, v in cls_ns.iteritems():
 | 
| -              if v == self:
 | 
| -                  propname = k
 | 
| -                  break
 | 
| -            cls_ns[propname] = property(self.fget, self.fset,
 | 
| -                                        fdel, self.__doc__)
 | 
| -            return cls_ns[propname]
 | 
| -
 | 
| -    __builtin__.property = property
 | 
| -
 | 
| 
 |