retracesoftware-proxy 0.1.5__py3-none-any.whl → 0.1.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- retracesoftware/config.json +0 -1
- retracesoftware/install/patcher.py +12 -2
- retracesoftware/install/tracer.py +4 -0
- retracesoftware/proxy/proxysystem.py +20 -13
- retracesoftware/proxy/proxytype.py +14 -6
- retracesoftware/proxy/record.py +23 -18
- retracesoftware/proxy/replay.py +87 -9
- retracesoftware/proxy/stubfactory.py +23 -7
- {retracesoftware_proxy-0.1.5.dist-info → retracesoftware_proxy-0.1.7.dist-info}/METADATA +1 -1
- {retracesoftware_proxy-0.1.5.dist-info → retracesoftware_proxy-0.1.7.dist-info}/RECORD +12 -12
- {retracesoftware_proxy-0.1.5.dist-info → retracesoftware_proxy-0.1.7.dist-info}/WHEEL +0 -0
- {retracesoftware_proxy-0.1.5.dist-info → retracesoftware_proxy-0.1.7.dist-info}/top_level.txt +0 -0
retracesoftware/config.json
CHANGED
|
@@ -436,6 +436,9 @@ class Patcher:
|
|
|
436
436
|
|
|
437
437
|
def __call__(self, module):
|
|
438
438
|
|
|
439
|
+
# if module.__name__ == 'locale':
|
|
440
|
+
# utils.sigtrap(None)
|
|
441
|
+
|
|
439
442
|
if not hasattr(module, '__retrace__'):
|
|
440
443
|
configs = list(self.configs(module))
|
|
441
444
|
|
|
@@ -484,6 +487,10 @@ def install(mode):
|
|
|
484
487
|
else:
|
|
485
488
|
raise Exception(f'mode: {mode} unsupported')
|
|
486
489
|
|
|
490
|
+
importlib.import_module('locale')
|
|
491
|
+
importlib.import_module('calendar')
|
|
492
|
+
importlib.import_module('_strptime')
|
|
493
|
+
|
|
487
494
|
config = load_config('config.json')
|
|
488
495
|
|
|
489
496
|
states = [x for x in config['states'] if isinstance(x, str)]
|
|
@@ -514,12 +521,15 @@ def install(mode):
|
|
|
514
521
|
|
|
515
522
|
def at_exit(): thread_state.value = 'disabled'
|
|
516
523
|
|
|
524
|
+
# print(f'MODULES: {list(sys.modules.keys())}')
|
|
525
|
+
|
|
517
526
|
with thread_state.select('internal'):
|
|
518
527
|
|
|
519
528
|
atexit.register(lambda: at_exit)
|
|
520
529
|
|
|
521
|
-
for module in sys.modules.
|
|
522
|
-
|
|
530
|
+
for key, module in sys.modules.items():
|
|
531
|
+
if not key.startswith('retracesoftware'):
|
|
532
|
+
patcher(module)
|
|
523
533
|
|
|
524
534
|
for library in config.get('preload', []):
|
|
525
535
|
importlib.import_module(library)
|
|
@@ -56,10 +56,14 @@ class Tracer:
|
|
|
56
56
|
if name in self.config:
|
|
57
57
|
self.writer(name, message)
|
|
58
58
|
|
|
59
|
+
def stacktrace(self):
|
|
60
|
+
self.writer('stacktrace', utils.stacktrace())
|
|
61
|
+
|
|
59
62
|
def __call__(self, name, func = None):
|
|
60
63
|
if name in self.config:
|
|
61
64
|
if name.endswith('.call'):
|
|
62
65
|
def write_call(*args, **kwargs):
|
|
66
|
+
# self.stacktrace()
|
|
63
67
|
self.writer(name, args[0].__name__, args[1:], kwargs)
|
|
64
68
|
|
|
65
69
|
return functional.firstof(write_call, func) if func else write_call
|
|
@@ -55,6 +55,9 @@ class ProxySystem:
|
|
|
55
55
|
def on_ext_error(self, err_type, err_value, err_traceback):
|
|
56
56
|
pass
|
|
57
57
|
|
|
58
|
+
# def stacktrace(self):
|
|
59
|
+
# self.tracer.stacktrace()
|
|
60
|
+
|
|
58
61
|
def __init__(self, thread_state, immutable_types, tracer):
|
|
59
62
|
|
|
60
63
|
self.thread_state = thread_state
|
|
@@ -78,7 +81,7 @@ class ProxySystem:
|
|
|
78
81
|
on_result = tracer('proxy.int.result'),
|
|
79
82
|
on_error = tracer('proxy.int.error'),
|
|
80
83
|
)
|
|
81
|
-
|
|
84
|
+
|
|
82
85
|
ext_spec = SimpleNamespace(
|
|
83
86
|
apply = thread_state.wrap('external', functional.apply),
|
|
84
87
|
proxy = proxyfactory(thread_state.wrap('disabled', self.dynamic_ext_proxytype)),
|
|
@@ -92,9 +95,9 @@ class ProxySystem:
|
|
|
92
95
|
def gateway(name, internal = functional.apply, external = functional.apply):
|
|
93
96
|
default = tracer(name, unproxy_execute)
|
|
94
97
|
return thread_state.dispatch(default, internal = internal, external = external)
|
|
95
|
-
|
|
96
|
-
self.ext_handler =
|
|
97
|
-
self.int_handler =
|
|
98
|
+
|
|
99
|
+
self.ext_handler = self.wrap_int_to_ext(int2ext)
|
|
100
|
+
self.int_handler = self.wrap_ext_to_int(ext2int)
|
|
98
101
|
|
|
99
102
|
self.ext_dispatch = gateway('proxy.int.disabled.event', internal = self.ext_handler)
|
|
100
103
|
self.int_dispatch = gateway('proxy.ext.disabled.event', external = self.int_handler)
|
|
@@ -145,17 +148,21 @@ class ProxySystem:
|
|
|
145
148
|
if utils.is_extendable(cls):
|
|
146
149
|
return self.extend_type(cls)
|
|
147
150
|
else:
|
|
148
|
-
return
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
151
|
+
return self.proxy_function(cls)
|
|
152
|
+
|
|
153
|
+
# return instantiable_dynamic_proxytype(
|
|
154
|
+
# handler = self.ext_dispatch,
|
|
155
|
+
# cls = cls,
|
|
156
|
+
# thread_state = self.thread_state,
|
|
157
|
+
# create_stub = self.create_stub())
|
|
158
|
+
|
|
159
|
+
def basetype(self, cls):
|
|
160
|
+
return cls
|
|
161
|
+
|
|
154
162
|
def extend_type(self, cls):
|
|
155
|
-
|
|
156
163
|
extended = extending_proxytype(
|
|
157
164
|
cls = cls,
|
|
158
|
-
base =
|
|
165
|
+
base = self.basetype(cls),
|
|
159
166
|
thread_state = self.thread_state,
|
|
160
167
|
ext_handler = self.ext_dispatch,
|
|
161
168
|
int_handler = self.int_dispatch,
|
|
@@ -168,7 +175,7 @@ class ProxySystem:
|
|
|
168
175
|
def function_target(self, obj): return obj
|
|
169
176
|
|
|
170
177
|
def proxy_function(self, obj):
|
|
171
|
-
return utils.wrapped_function(handler = self.ext_handler,
|
|
178
|
+
return utils.wrapped_function(handler = self.ext_handler, target = obj)
|
|
172
179
|
|
|
173
180
|
def __call__(self, obj):
|
|
174
181
|
assert not isinstance(obj, BaseException)
|
|
@@ -228,16 +228,17 @@ def dynamic_proxytype(handler, cls):
|
|
|
228
228
|
|
|
229
229
|
target_type = functional.sequence(utils.unwrap, functional.typeof)
|
|
230
230
|
spec['__class__'] = property(target_type)
|
|
231
|
-
|
|
232
|
-
|
|
231
|
+
spec['__name__'] = cls.__name__
|
|
232
|
+
spec['__module__'] = cls.__module__
|
|
233
|
+
# name = f'retrace.proxied.{cls.__module__}.{cls.__name__}'
|
|
233
234
|
|
|
234
|
-
return type(
|
|
235
|
+
return type(cls.__name__, (utils.Wrapped, DynamicProxy), spec)
|
|
235
236
|
|
|
236
237
|
def dynamic_from_extended(cls):
|
|
237
238
|
|
|
238
239
|
base = cls.__base__
|
|
239
240
|
|
|
240
|
-
name = f'retrace.
|
|
241
|
+
name = f'retrace.proxied1.{base.__module__}.{base.__name__}'
|
|
241
242
|
|
|
242
243
|
spec = dict(cls.__dict__)
|
|
243
244
|
|
|
@@ -313,6 +314,11 @@ def create_unproxied_type(cls):
|
|
|
313
314
|
|
|
314
315
|
bases = tuple(map(unproxy_type, cls.__bases__))
|
|
315
316
|
slots = dict(cls.__dict__)
|
|
317
|
+
|
|
318
|
+
if '__slots__' in slots:
|
|
319
|
+
for slot in slots['__slots__']:
|
|
320
|
+
slots.pop(slot)
|
|
321
|
+
|
|
316
322
|
# del slots['__init_subclass__']
|
|
317
323
|
return type(cls.__name__, tuple(bases), slots)
|
|
318
324
|
|
|
@@ -323,7 +329,7 @@ def extending_proxytype(cls, base, thread_state, ext_handler, int_handler, on_su
|
|
|
323
329
|
assert not issubclass(cls, ExtendingProxy)
|
|
324
330
|
|
|
325
331
|
def init_subclass(subclass, **kwargs):
|
|
326
|
-
print(f'In init_subclass: {subclass} {kwargs}')
|
|
332
|
+
# print(f'In init_subclass: {subclass} {subclass.__mro__} {kwargs}')
|
|
327
333
|
unproxied = create_unproxied_type(subclass)
|
|
328
334
|
subclass.__retrace_unproxied__ = unproxied
|
|
329
335
|
|
|
@@ -347,7 +353,7 @@ def extending_proxytype(cls, base, thread_state, ext_handler, int_handler, on_su
|
|
|
347
353
|
for name,value in superdict(cls).items():
|
|
348
354
|
if name not in blacklist:
|
|
349
355
|
if is_method_descriptor(value):
|
|
350
|
-
slots[name] = wrap(getattr(
|
|
356
|
+
slots[name] = wrap(getattr(base, name))
|
|
351
357
|
elif is_descriptor(value):
|
|
352
358
|
descriptors.append(name)
|
|
353
359
|
|
|
@@ -362,6 +368,8 @@ def extending_proxytype(cls, base, thread_state, ext_handler, int_handler, on_su
|
|
|
362
368
|
def unproxied__new__(subclass, *args, **kwargs):
|
|
363
369
|
return subclass.__retrace_unproxied__(*args, **kwargs)
|
|
364
370
|
|
|
371
|
+
assert callable(base.__new__)
|
|
372
|
+
|
|
365
373
|
extended.__new__ = thread_state.dispatch(unproxied__new__, internal = base.__new__)
|
|
366
374
|
|
|
367
375
|
assert not issubclass(extended.__retrace_unproxied__, ExtendingProxy)
|
retracesoftware/proxy/record.py
CHANGED
|
@@ -116,10 +116,13 @@ class RecordProxySystem(ProxySystem):
|
|
|
116
116
|
|
|
117
117
|
self.on_int_call = functional.mapargs(transform = serialize, function = self.writer.handle('CALL'))
|
|
118
118
|
|
|
119
|
-
self.on_ext_result = functional.if_then_else(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
119
|
+
# self.on_ext_result = functional.if_then_else(
|
|
120
|
+
# functional.isinstanceof(str),
|
|
121
|
+
# self.writer.handle('RESULT'),
|
|
122
|
+
# functional.sequence(serialize, self.writer))
|
|
123
|
+
|
|
124
|
+
self.on_ext_result = functional.sequence(serialize,
|
|
125
|
+
self.writer.handle('RESULT'))
|
|
123
126
|
|
|
124
127
|
self.on_ext_error = write_error
|
|
125
128
|
|
|
@@ -131,23 +134,25 @@ class RecordProxySystem(ProxySystem):
|
|
|
131
134
|
|
|
132
135
|
proxytype = super().dynamic_ext_proxytype(cls)
|
|
133
136
|
|
|
134
|
-
|
|
137
|
+
ref = self.writer.handle(StubRef(proxytype))
|
|
138
|
+
|
|
139
|
+
# blacklist = ['__class__', '__dict__', '__module__', '__doc__']
|
|
135
140
|
|
|
136
|
-
methods = []
|
|
137
|
-
members = []
|
|
141
|
+
# methods = []
|
|
142
|
+
# members = []
|
|
138
143
|
|
|
139
|
-
for key,value in proxytype.__dict__.items():
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
144
|
+
# for key,value in proxytype.__dict__.items():
|
|
145
|
+
# if key not in blacklist:
|
|
146
|
+
# if utils.is_method_descriptor(value):
|
|
147
|
+
# methods.append(key)
|
|
148
|
+
# elif not key.startswith("__retrace"):
|
|
149
|
+
# members.append(key)
|
|
145
150
|
|
|
146
|
-
ref = self.writer.handle(StubRef(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
+
# ref = self.writer.handle(StubRef(
|
|
152
|
+
# name = cls.__name__,
|
|
153
|
+
# module = cls.__module__,
|
|
154
|
+
# methods = methods,
|
|
155
|
+
# members = members))
|
|
151
156
|
|
|
152
157
|
# list(proxytype.__dict__.keys())
|
|
153
158
|
|
retracesoftware/proxy/replay.py
CHANGED
|
@@ -13,6 +13,9 @@ from retracesoftware.proxy.stubfactory import StubFactory, StubFunction
|
|
|
13
13
|
import os
|
|
14
14
|
import weakref
|
|
15
15
|
import traceback
|
|
16
|
+
import pprint
|
|
17
|
+
from itertools import count, islice
|
|
18
|
+
|
|
16
19
|
# we can have a dummy method descriptor, its has a __name__ and when called, returns the next element
|
|
17
20
|
|
|
18
21
|
# for types, we can patch the __new__ method
|
|
@@ -22,12 +25,63 @@ import traceback
|
|
|
22
25
|
class ReplayError(RetraceError):
|
|
23
26
|
pass
|
|
24
27
|
|
|
28
|
+
def count_matching(*lists):
|
|
29
|
+
count = 0
|
|
30
|
+
for slice in zip(*lists):
|
|
31
|
+
if len(set(slice)) == 1:
|
|
32
|
+
count += 1
|
|
33
|
+
else:
|
|
34
|
+
break
|
|
35
|
+
|
|
36
|
+
return count
|
|
37
|
+
|
|
38
|
+
def on_stack_mismatch(last_matching, record, replay):
|
|
39
|
+
# print('Common:')
|
|
40
|
+
# for index, common, replay, record in zip(count(), last_matching_stack, args[0], record):
|
|
41
|
+
# if common == replay == record:
|
|
42
|
+
# print(common)
|
|
43
|
+
if last_matching:
|
|
44
|
+
matching = count_matching(reversed(last_matching),
|
|
45
|
+
reversed(record),
|
|
46
|
+
reversed(replay))
|
|
47
|
+
|
|
48
|
+
print('Common stacktrace:')
|
|
49
|
+
for line in reversed(list(islice(reversed(last_matching), matching))):
|
|
50
|
+
print(line)
|
|
51
|
+
|
|
52
|
+
print('last matching stacktrace:')
|
|
53
|
+
for line in islice(last_matching, 0, len(last_matching) - matching):
|
|
54
|
+
print(line)
|
|
55
|
+
|
|
56
|
+
print('Replay stacktrace:')
|
|
57
|
+
for line in islice(replay, 0, len(replay) - matching):
|
|
58
|
+
print(line)
|
|
59
|
+
|
|
60
|
+
print('Record stacktrace:')
|
|
61
|
+
for line in islice(record, 0, len(record) - matching):
|
|
62
|
+
print(line)
|
|
63
|
+
else:
|
|
64
|
+
matching = count_matching(reversed(record), reversed(replay))
|
|
65
|
+
|
|
66
|
+
print('Common stacktrace:')
|
|
67
|
+
for line in reversed(list(islice(reversed(record), matching))):
|
|
68
|
+
print(line)
|
|
69
|
+
|
|
70
|
+
print('Replay stacktrace:')
|
|
71
|
+
for line in islice(replay, 0, len(replay) - matching):
|
|
72
|
+
print(line)
|
|
73
|
+
|
|
74
|
+
print('Record stacktrace:')
|
|
75
|
+
for line in islice(record, 0, len(record) - matching):
|
|
76
|
+
print(line)
|
|
77
|
+
|
|
78
|
+
|
|
25
79
|
class ReplayProxySystem(ProxySystem):
|
|
26
80
|
|
|
27
|
-
def stubtype(self, cls):
|
|
28
|
-
|
|
81
|
+
# def stubtype(self, cls):
|
|
82
|
+
# assert not issubclass(cls, Proxy)
|
|
29
83
|
|
|
30
|
-
|
|
84
|
+
# return dynamic_proxytype(handler = self.ext_handler, cls = cls)
|
|
31
85
|
|
|
32
86
|
def create_stub(self): return True
|
|
33
87
|
|
|
@@ -57,6 +111,7 @@ class ReplayProxySystem(ProxySystem):
|
|
|
57
111
|
|
|
58
112
|
elif next == 'RESULT':
|
|
59
113
|
return self.messages()
|
|
114
|
+
|
|
60
115
|
elif next == 'ERROR':
|
|
61
116
|
err_type = self.messages()
|
|
62
117
|
err_value = self.messages()
|
|
@@ -94,6 +149,9 @@ class ReplayProxySystem(ProxySystem):
|
|
|
94
149
|
|
|
95
150
|
return super().proxy_function(func)
|
|
96
151
|
|
|
152
|
+
def basetype(self, cls):
|
|
153
|
+
return self.stub_factory.create_stubtype(StubRef(cls))
|
|
154
|
+
|
|
97
155
|
def __init__(self,
|
|
98
156
|
thread_state,
|
|
99
157
|
immutable_types,
|
|
@@ -135,11 +193,20 @@ class ReplayProxySystem(ProxySystem):
|
|
|
135
193
|
# debug = debug_level(config)
|
|
136
194
|
|
|
137
195
|
# int_refs = {}
|
|
138
|
-
|
|
196
|
+
last_matching_stack = None
|
|
197
|
+
|
|
139
198
|
def read_required(required):
|
|
140
199
|
obj = readnext()
|
|
141
200
|
if obj != required:
|
|
142
|
-
|
|
201
|
+
if last_matching_stack:
|
|
202
|
+
for line in last_matching_stack:
|
|
203
|
+
print(line)
|
|
204
|
+
|
|
205
|
+
print('---------------------------------')
|
|
206
|
+
print(f'Replay: {required}')
|
|
207
|
+
print('---------------------------------')
|
|
208
|
+
print(f'Record: {obj}')
|
|
209
|
+
print('---------------------------------')
|
|
143
210
|
for i in range(5):
|
|
144
211
|
print(readnext())
|
|
145
212
|
|
|
@@ -149,13 +216,24 @@ class ReplayProxySystem(ProxySystem):
|
|
|
149
216
|
|
|
150
217
|
def trace_writer(name, *args):
|
|
151
218
|
with thread_state.select('disabled'):
|
|
152
|
-
print(f'Trace: {name} {args}')
|
|
153
|
-
|
|
154
219
|
read_required('TRACE')
|
|
155
220
|
read_required(name)
|
|
156
221
|
|
|
157
|
-
|
|
158
|
-
|
|
222
|
+
if name == 'stacktrace':
|
|
223
|
+
record = readnext()
|
|
224
|
+
if args[0] == record:
|
|
225
|
+
nonlocal last_matching_stack
|
|
226
|
+
last_matching_stack = args[0]
|
|
227
|
+
else:
|
|
228
|
+
on_stack_mismatch(
|
|
229
|
+
last_matching= last_matching_stack,
|
|
230
|
+
record = record,
|
|
231
|
+
replay = args[0])
|
|
232
|
+
os._exit(1)
|
|
233
|
+
else:
|
|
234
|
+
print(f'Trace: {name} {args}')
|
|
235
|
+
for arg in args:
|
|
236
|
+
read_required(arg)
|
|
159
237
|
|
|
160
238
|
# self.tracer = Tracer(tracing_config, writer = trace_writer)
|
|
161
239
|
# self.immutable_types = immutable_types
|
|
@@ -13,12 +13,30 @@ class ExtendedRef:
|
|
|
13
13
|
self.module = module
|
|
14
14
|
|
|
15
15
|
class StubRef:
|
|
16
|
-
def __init__(self,
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
def __init__(self, cls):
|
|
17
|
+
blacklist = ['__class__', '__dict__', '__module__', '__doc__', '__new__']
|
|
18
|
+
|
|
19
|
+
methods = []
|
|
20
|
+
members = []
|
|
21
|
+
|
|
22
|
+
for key,value in cls.__dict__.items():
|
|
23
|
+
if key not in blacklist:
|
|
24
|
+
if utils.is_method_descriptor(value):
|
|
25
|
+
methods.append(key)
|
|
26
|
+
elif not key.startswith("__retrace"):
|
|
27
|
+
members.append(key)
|
|
28
|
+
|
|
29
|
+
self.name = cls.__name__
|
|
30
|
+
self.module = cls.__module__
|
|
19
31
|
self.methods = methods
|
|
20
32
|
self.members = members
|
|
21
33
|
|
|
34
|
+
# def __init__(self, module, name, methods, members):
|
|
35
|
+
# self.name = name
|
|
36
|
+
# self.module = module
|
|
37
|
+
# self.methods = methods
|
|
38
|
+
# self.members = members
|
|
39
|
+
|
|
22
40
|
def __str__(self):
|
|
23
41
|
return f'StubRef(module = {self.module}, name = {self.name}, methods = {self.methods}, members = {self.members})'
|
|
24
42
|
|
|
@@ -108,6 +126,7 @@ class StubFactory:
|
|
|
108
126
|
slots = {
|
|
109
127
|
'__module__': spec.module,
|
|
110
128
|
'__qualname__': spec.name,
|
|
129
|
+
'__name__': spec.name,
|
|
111
130
|
}
|
|
112
131
|
|
|
113
132
|
for method in spec.methods:
|
|
@@ -130,11 +149,8 @@ class StubFactory:
|
|
|
130
149
|
return stubtype
|
|
131
150
|
|
|
132
151
|
def __call__(self, spec):
|
|
133
|
-
print(f'In stubFactory.__call__ {spec}')
|
|
134
152
|
if spec not in self.cache:
|
|
135
153
|
self.cache[spec] = self.create_stubtype(spec)
|
|
136
154
|
|
|
137
155
|
stubtype = self.cache[spec]
|
|
138
|
-
|
|
139
|
-
print(f'In stubFactory created new')
|
|
140
|
-
return stub
|
|
156
|
+
return stubtype.__new__(stubtype)
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
retracesoftware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
retracesoftware/config.json,sha256=
|
|
2
|
+
retracesoftware/config.json,sha256=fzfxZF6ES2NuPO9u9fNX8xMZ5rKZStxAHovsVTSJYzs,8276
|
|
3
3
|
retracesoftware/install/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
retracesoftware/install/config.py,sha256=EzE5ifQF2lo--hu2njI4T0FJ-zlnWDJV6i7x0DMkVTw,1364
|
|
5
5
|
retracesoftware/install/edgecases.py,sha256=NR3lyvad9sRsyeDv_Ya8V4xMgPsMPOi9rMcnFOJGOEA,6330
|
|
6
6
|
retracesoftware/install/globals.py,sha256=F8XvIoZQQ10gSRalk30dvdKllxlwxkaggYY6FogLDxY,510
|
|
7
7
|
retracesoftware/install/install.py,sha256=HCD_ji8XCr96b5fNzNdL_8qcEp0Jf05Em7T6GA6u8HU,4969
|
|
8
|
-
retracesoftware/install/patcher.py,sha256=
|
|
8
|
+
retracesoftware/install/patcher.py,sha256=5tRC8XmJW0_loqX1Nqad1rkG--LlX46YwgbbMTbgASc,17598
|
|
9
9
|
retracesoftware/install/predicate.py,sha256=tX7NQc0rGkyyHYO3mduYHcJHbw1wczT53m_Dpkzo6do,2679
|
|
10
10
|
retracesoftware/install/record.py,sha256=tseF_jV4k4HLPTgBPJdjcahl4EQqagoiisMAdGNC52Q,3257
|
|
11
11
|
retracesoftware/install/references.py,sha256=A-G651IDOfuo00MkbAdpbIQh_15ChvJ7uAVTSmE6zd4,1721
|
|
12
12
|
retracesoftware/install/replay.py,sha256=VUiHvQK3mgAJEGmtE2TFs9kXzxdWtsjibEcGkhZVCVE,1830
|
|
13
|
-
retracesoftware/install/tracer.py,sha256=
|
|
13
|
+
retracesoftware/install/tracer.py,sha256=Oqh8BhZVQVo1COfSGkFCipZGPB2Dv1b4DK3xBvloRew,4796
|
|
14
14
|
retracesoftware/install/typeutils.py,sha256=_a1PuwdCsYjG1Nkd77V-flqYtwbD4RkJVKn6Z-xABL4,1813
|
|
15
15
|
retracesoftware/proxy/__init__.py,sha256=ZlDZIuUmKFsE9Tvfd2EKGabTepqv8nrbr5pQhCM3IKc,193
|
|
16
16
|
retracesoftware/proxy/gateway.py,sha256=xESohWXkiNm4ZutU0RgWUwxjxcBWRQ4rQyxIGQXv_F4,1590
|
|
17
17
|
retracesoftware/proxy/proxyfactory.py,sha256=qhOqDfMJnLDNkQs26JqDB431MwjjRhGQi8xupJ45asg,12272
|
|
18
|
-
retracesoftware/proxy/proxysystem.py,sha256=
|
|
19
|
-
retracesoftware/proxy/proxytype.py,sha256=
|
|
20
|
-
retracesoftware/proxy/record.py,sha256=
|
|
21
|
-
retracesoftware/proxy/replay.py,sha256=
|
|
22
|
-
retracesoftware/proxy/stubfactory.py,sha256=
|
|
18
|
+
retracesoftware/proxy/proxysystem.py,sha256=W2v0Tj0tJeAt_bg9LljQm2iwWpjNIbqUTQ92WK22TF8,6861
|
|
19
|
+
retracesoftware/proxy/proxytype.py,sha256=mcg3hBG0auYXv7Dez8SwrrG5dNlDl7nH_mdQUd9Iaj4,12488
|
|
20
|
+
retracesoftware/proxy/record.py,sha256=ZsJV0o-Qy874VFObtsfkSF8u9gvyUSee0UPpf9Jq6Es,7734
|
|
21
|
+
retracesoftware/proxy/replay.py,sha256=RVsezEZcy4bFdPQAAztfEHz6adm8t5lBDMhpnNAqeok,10510
|
|
22
|
+
retracesoftware/proxy/stubfactory.py,sha256=UnRDQHgWv2xTYaMPZPXvsa7WBh10CyItc_hsQdtOhcM,4607
|
|
23
23
|
retracesoftware/proxy/thread.py,sha256=-SvnyVbANkmX2lLRpOvFtkpdpAoF6DhnnYdOOs7Q8vo,1379
|
|
24
|
-
retracesoftware_proxy-0.1.
|
|
25
|
-
retracesoftware_proxy-0.1.
|
|
26
|
-
retracesoftware_proxy-0.1.
|
|
27
|
-
retracesoftware_proxy-0.1.
|
|
24
|
+
retracesoftware_proxy-0.1.7.dist-info/METADATA,sha256=Ug25Z8ULRbcvl7o9RQgSjcQzKC8HDqJhLQ3Z69wLHZc,202
|
|
25
|
+
retracesoftware_proxy-0.1.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
26
|
+
retracesoftware_proxy-0.1.7.dist-info/top_level.txt,sha256=hYHsR6txLidmqvjBMITpIHvmJJbmoCAgr76-IpZPRz8,16
|
|
27
|
+
retracesoftware_proxy-0.1.7.dist-info/RECORD,,
|
|
File without changes
|
{retracesoftware_proxy-0.1.5.dist-info → retracesoftware_proxy-0.1.7.dist-info}/top_level.txt
RENAMED
|
File without changes
|