updated contents from Atlas repo
This commit is contained in:
61
objects/attr_list.py
Normal file
61
objects/attr_list.py
Normal file
@@ -0,0 +1,61 @@
|
||||
import sys
|
||||
|
||||
from collections import Counter
|
||||
|
||||
def fn():
|
||||
pass
|
||||
|
||||
class Class():
|
||||
pass
|
||||
|
||||
# int, str,
|
||||
sample_types = [object, list, Class, type(Class), type(fn)]
|
||||
if '-' in sys.argv:
|
||||
del sample_types[0] # exlude `object`
|
||||
sample_objs = [type_() for type_ in sample_types[:-2]] + [Class, fn]
|
||||
sample_oids = [id(obj) for obj in sample_objs]
|
||||
|
||||
fmt = '{attr:17}' + '|{:8}' * len(sample_types)
|
||||
|
||||
headings = [t.__name__ for t in sample_types]
|
||||
headings[headings.index('Class')] = 'instance'
|
||||
headings[headings.index('type')] = 'class'
|
||||
|
||||
common_attrs = set()
|
||||
for obj in sample_objs:
|
||||
for attr_name in dir(obj):
|
||||
common_attrs.add(attr_name)
|
||||
|
||||
print(fmt.format(*headings, attr=''))
|
||||
|
||||
counter = Counter()
|
||||
for attr_name in sorted(common_attrs):
|
||||
if not attr_name.startswith('__'):
|
||||
continue
|
||||
flags = []
|
||||
found = 0
|
||||
for obj in sample_objs:
|
||||
try:
|
||||
attr = getattr(obj, attr_name)
|
||||
if type(attr) == type:
|
||||
flag = 'type'
|
||||
elif callable(attr):
|
||||
flag = 'method'
|
||||
else:
|
||||
flag = 'data'
|
||||
counter[id(obj)] += 1
|
||||
found += 1
|
||||
except AttributeError:
|
||||
flag = ''
|
||||
flags.append(flag)
|
||||
if '-' in sys.argv:
|
||||
include = found < len(sample_objs)
|
||||
else:
|
||||
include = found == len(sample_objs)
|
||||
if include:
|
||||
print(fmt.format(*flags, attr=attr_name))
|
||||
|
||||
counts = [counter[oid] for oid in sample_oids]
|
||||
print(fmt.format(*counts, attr='TOTALS'))
|
||||
|
||||
print(sys.argv)
|
||||
Reference in New Issue
Block a user