1
# module trackmod.reporter
5
return [n for n, m in sys.modules.iteritems() if m is not None]
8
previous_imports = listmods() # Keep this after sys but before other imports.
14
# This module is does not need explicit thread protection since all calls
15
# to the data entry methods are made while the import lock is acquired.
25
return iterator.next()
27
class Largest(object):
28
"""This object is always greater than any other non Largest object"""
29
def __lt__(self, other):
31
def __le__(self, other):
33
def __eq__(self, other):
34
return isinstance(other, Largest)
35
def __ne__(self, other):
37
def __gt__(self, other):
39
def __ge__(self, other):
42
def process_accessed():
43
acc_names = dict(accessed)
44
for name, attr in accessed:
45
parts = name.split('.')
46
for i in range(1, len(parts)):
47
subname = '.'.join(parts[0:i])
48
if subname not in acc_names:
49
acc_names[subname] = parts[i]
50
return set(acc_names.iteritems())
53
global previous_imports, my_imports, accesses, failed_imports
54
my_imports = list(set(listmods()) - set(previous_imports))
56
failed_imports = set()
63
"""Add a module to the import list
65
Expects to be called in the order in which modules are created:
66
package, submodule, etc.
70
accesses[name] = set()
72
def remove_import(name):
74
failed_imports.add(name)
76
def add_access(name, attr):
78
accesses[name].add(attr)
80
def get_previous_imports():
81
"""Return a new sorted name list of previously imported modules"""
82
return sorted(previous_imports)
85
"""Return a new sorted name list of module imported by this package"""
86
return sorted(my_imports)
89
"""Return a new sorted name list of imported modules"""
90
tracked_types = (module.Module, module.TrackerModule)
91
return sorted(n for n, m in list(sys.modules.iteritems())
92
if isinstance(m, tracked_types))
94
def get_unaccessed_modules():
95
"""Return a new sorted name list of unaccessed imported modules"""
97
iaccessed = iter(get_accessed_modules())
99
for imports_name in get_imports():
100
while accessed_name < imports_name:
102
accessed_name = next(iaccessed)
103
except StopIteration:
104
accessed_name = Largest()
105
if imports_name < accessed_name:
106
unaccessed.append(imports_name)
109
def get_accessed_modules():
110
"""Return a new sorted name list of accessed modules"""
113
for name, ignored in module.get_accesses():
114
if name != previous_name:
115
accessed.append(name)
120
"""Return a new dictionary of sorted lists of attributes by module name"""
123
for name, attribute in module.get_accesses():
124
if name != previous_name:
126
accesses[name] = attributes
128
attributes.append(attribute)