adopt wire dispatching, log removed modules

pull/25/head
Jan Pochyla 8 years ago committed by Pavol Rusnak
parent e9c7a67c73
commit 883b392fdb
No known key found for this signature in database
GPG Key ID: 91F3B339B9A02A3D

@ -9,5 +9,5 @@ def get_protobuf_type_name(wire_type):
def get_protobuf_type(wire_type): def get_protobuf_type(wire_type):
name = get_protobuf_type_name(wire_type) name = get_protobuf_type_name(wire_type)
module = __import__('.%s' % name, globals(), locals(), (name,), 1) module = __import__('.%s' % name, None, None, (name,), 1)
return getattr(module, name) return getattr(module, name)

@ -1,4 +1,7 @@
import sys import sys
import gc
from trezor import log
type_gen = type((lambda: (yield))()) type_gen = type((lambda: (yield))())
type_genfunc = type((lambda: (yield))) type_genfunc = type((lambda: (yield)))
@ -11,19 +14,25 @@ def _unimport_func(func):
ret = func(*args, **kwargs) ret = func(*args, **kwargs)
finally: finally:
for to_remove in set(sys.modules) - mods: for to_remove in set(sys.modules) - mods:
print('removing module', to_remove)
# log.info(__name__, 'removing module %s', to_remove)
del sys.modules[to_remove] del sys.modules[to_remove]
gc.collect()
return ret return ret
return inner return inner
def _unimport_genfunc(genfunc): def _unimport_genfunc(genfunc):
def inner(*args, **kwargs): async def inner(*args, **kwargs):
mods = set(sys.modules) mods = set(sys.modules)
try: try:
ret = yield from genfunc(*args, **kwargs) ret = await genfunc(*args, **kwargs)
finally: finally:
for to_remove in set(sys.modules) - mods: for to_remove in set(sys.modules) - mods:
print('removing module', to_remove)
# log.info(__name__, 'removing module %s', to_remove)
del sys.modules[to_remove] del sys.modules[to_remove]
gc.collect()
return ret return ret
return inner return inner
@ -35,14 +44,6 @@ def unimport(func):
return _unimport_func(func) return _unimport_func(func)
def coroutine(func):
def inner(*args, **kwargs):
gen = func(*args, **kwargs)
gen.send(None)
return gen
return inner
def chunks(l, n): def chunks(l, n):
for i in range(0, len(l), n): for i in range(0, len(l), n):
yield l[i:i + n] yield l[i:i + n]

@ -3,9 +3,9 @@ from .wire_codec import parse_report, REP_MARKER_OPEN, REP_MARKER_CLOSE
def dispatch_reports_by_session(handlers, def dispatch_reports_by_session(handlers,
open_handler, open_callback,
close_handler, close_callback,
fallback_handler): unknown_callback):
''' '''
Consumes reports adhering to the wire codec and dispatches the report Consumes reports adhering to the wire codec and dispatches the report
payloads by between the passed handlers. payloads by between the passed handlers.
@ -16,21 +16,21 @@ def dispatch_reports_by_session(handlers,
if marker == REP_MARKER_OPEN: if marker == REP_MARKER_OPEN:
log.debug(__name__, 'request for new session') log.debug(__name__, 'request for new session')
open_handler.send(session_id) open_callback()
continue continue
elif marker == REP_MARKER_CLOSE: elif marker == REP_MARKER_CLOSE:
log.debug(__name__, 'request for closing session %d', session_id) log.debug(__name__, 'request for closing session %d', session_id)
close_handler.send(session_id) close_callback(session_id)
continue continue
elif session_id in handlers: elif session_id not in handlers:
log.debug(__name__, 'report on session %d', session_id)
handler = handlers[session_id]
else:
log.debug(__name__, 'report on unknown session %d', session_id) log.debug(__name__, 'report on unknown session %d', session_id)
handler = fallback_handler unknown_callback(session_id, report_data)
continue
log.debug(__name__, 'report on session %d', session_id)
handler = handlers[session_id]
try: try:
handler.send(report_data) handler.send(report_data)

Loading…
Cancel
Save