def status(self): """ Parses /proc/<pid>/status and returns an AttrDict """ fields = ('real', 'effective', 'saved_set', 'filesystem') with open("status", opener=self._opener) as file: lines = file.read().splitlines() status = AttrDict( {k: try_int(v) for k, v in [_.split(':\t', 1) for _ in lines]}) status.update({ 'Uid': AttrDict(zip(fields, map(Uid, status.Uid.split()))), 'Gid': AttrDict(zip(fields, map(Gid, status.Gid.split()))), 'Groups': list(map(Gid, str(status.Groups).split())) }) status.update({ k: int(status[k].replace('kB', '').strip()) for k in ('HugetlbPages', 'RssAnon', 'RssFile', 'RssShmem', 'VmData', 'VmExe', 'VmHWM', 'VmLck', 'VmLib', 'VmPeak', 'VmPin', 'VmPMD', 'VmPTE', 'VmRSS', 'VmSize', 'VmStk', 'VmSwap') if k in status }) return status
def test_AttrDict(self): d = AttrDict({'a': 1}) self.assertIsInstance(d, AttrDict) self.assertIs(d.a, d['a']) del d.a self.assertEqual(d, {}) d['b'] = 2 self.assertIs(d.b, d['b']) del d['b'] self.assertEqual(d, {}) self.assertIsNone(d.get('a', None)) self.assertEqual(d.get('a', 777), 777) _d = {'a': 888} d.update(_d) self.assertEqual(d, _d)