From 710306495e35277b6fee5ba5b2b993cc4c09f710 Mon Sep 17 00:00:00 2001 From: Jan Pochyla Date: Tue, 30 Jan 2018 18:50:59 +0100 Subject: [PATCH] apps: reduce unimport usage unimport should be used only on the workflow dispatchers. --- src/apps/common/confirm.py | 4 ---- src/apps/common/request_words.py | 2 -- src/apps/debug/__init__.py | 7 +++++++ src/apps/ethereum/get_address.py | 2 -- src/apps/ethereum/layout.py | 5 +---- src/apps/ethereum/sign_message.py | 3 --- src/apps/ethereum/sign_tx.py | 2 -- src/apps/ethereum/verify_message.py | 3 --- src/apps/management/apply_settings.py | 2 -- src/apps/management/change_pin.py | 2 -- src/apps/management/load_device.py | 2 -- src/apps/management/reset_device.py | 1 - src/apps/management/wipe_device.py | 2 -- src/apps/wallet/cipher_key_value.py | 2 -- src/apps/wallet/get_address.py | 2 -- src/apps/wallet/get_entropy.py | 2 -- src/apps/wallet/get_public_key.py | 3 --- src/apps/wallet/sign_identity.py | 2 -- src/apps/wallet/sign_message.py | 2 -- src/apps/wallet/sign_tx/__init__.py | 2 -- src/apps/wallet/verify_message.py | 2 -- src/trezor/utils.py | 30 +-------------------------- 22 files changed, 9 insertions(+), 75 deletions(-) diff --git a/src/apps/common/confirm.py b/src/apps/common/confirm.py index 0bdb250cc..09cb01b89 100644 --- a/src/apps/common/confirm.py +++ b/src/apps/common/confirm.py @@ -1,5 +1,4 @@ from trezor import wire, ui, loop -from trezor.utils import unimport # used to confirm/cancel the dialogs from outside of this module (i.e. # through debug link) @@ -8,7 +7,6 @@ if __debug__: @ui.layout -@unimport async def confirm(ctx, content, code=None, *args, **kwargs): from trezor.ui.confirm import ConfirmDialog, CONFIRMED from trezor.messages.ButtonRequest import ButtonRequest @@ -31,7 +29,6 @@ async def confirm(ctx, content, code=None, *args, **kwargs): @ui.layout -@unimport async def hold_to_confirm(ctx, content, code=None, *args, **kwargs): from trezor.ui.confirm import HoldToConfirmDialog, CONFIRMED from trezor.messages.ButtonRequest import ButtonRequest @@ -53,7 +50,6 @@ async def hold_to_confirm(ctx, content, code=None, *args, **kwargs): return await waiter == CONFIRMED -@unimport async def require_confirm(*args, **kwargs): from trezor.messages.FailureType import ActionCancelled diff --git a/src/apps/common/request_words.py b/src/apps/common/request_words.py index 338884031..2d06049ec 100644 --- a/src/apps/common/request_words.py +++ b/src/apps/common/request_words.py @@ -1,5 +1,4 @@ from trezor import wire, ui, loop -from trezor.utils import unimport # used to confirm/cancel the dialogs from outside of this module (i.e. # through debug link) @@ -8,7 +7,6 @@ if __debug__: @ui.layout -@unimport async def request_words(ctx, content, code=None, *args, **kwargs): from trezor.ui.word_select import WordSelector from trezor.messages.ButtonRequest import ButtonRequest diff --git a/src/apps/debug/__init__.py b/src/apps/debug/__init__.py index f9bbc1f25..936e28598 100644 --- a/src/apps/debug/__init__.py +++ b/src/apps/debug/__init__.py @@ -1,17 +1,20 @@ from trezor import log from trezor import loop +from trezor.utils import unimport from trezor.wire import register, protobuf_workflow from trezor.messages.wire_types import \ DebugLinkDecision, DebugLinkGetState, DebugLinkStop, \ DebugLinkMemoryRead, DebugLinkMemoryWrite, DebugLinkFlashErase +@unimport async def dispatch_DebugLinkDecision(ctx, msg): from trezor.ui.confirm import CONFIRMED, CANCELLED from apps.common.confirm import signal signal.send(CONFIRMED if msg.yes_no else CANCELLED) +@unimport async def dispatch_DebugLinkGetState(ctx, msg): from trezor.messages.DebugLinkState import DebugLinkState from apps.common import storage @@ -26,10 +29,12 @@ async def dispatch_DebugLinkGetState(ctx, msg): return m +@unimport async def dispatch_DebugLinkStop(ctx, msg): pass +@unimport async def dispatch_DebugLinkMemoryRead(ctx, msg): from trezor.messages.DebugLinkMemory import DebugLinkMemory from uctypes import bytes_at @@ -38,6 +43,7 @@ async def dispatch_DebugLinkMemoryRead(ctx, msg): return m +@unimport async def dispatch_DebugLinkMemoryWrite(ctx, msg): from uctypes import bytearray_at l = len(msg.memory) @@ -45,6 +51,7 @@ async def dispatch_DebugLinkMemoryWrite(ctx, msg): data[0:l] = msg.memory +@unimport async def dispatch_DebugLinkFlashErase(ctx, msg): # TODO: erase(msg.sector) pass diff --git a/src/apps/ethereum/get_address.py b/src/apps/ethereum/get_address.py index 43f105a11..e2e7a162f 100644 --- a/src/apps/ethereum/get_address.py +++ b/src/apps/ethereum/get_address.py @@ -1,8 +1,6 @@ from trezor import wire, ui -from trezor.utils import unimport -@unimport async def layout_ethereum_get_address(ctx, msg): from trezor.messages.EthereumAddress import EthereumAddress from trezor.crypto.curve import secp256k1 diff --git a/src/apps/ethereum/layout.py b/src/apps/ethereum/layout.py index 6f90a5438..cb1de7444 100644 --- a/src/apps/ethereum/layout.py +++ b/src/apps/ethereum/layout.py @@ -1,13 +1,12 @@ from apps.common.confirm import * from trezor import wire, ui -from trezor.utils import unimport, chunks +from trezor.utils import chunks from trezor.messages import ButtonRequestType from trezor.ui.text import Text from ubinascii import hexlify from . import networks -@unimport async def confirm_tx(ctx, to, value, chain_id, token=None): # todo wording str_to = '0x' + hexlify(to).decode() # todo use ethereum address format content = Text('Confirm transaction', ui.ICON_RESET, @@ -17,7 +16,6 @@ async def confirm_tx(ctx, to, value, chain_id, token=None): # todo wording return await confirm(ctx, content, ButtonRequestType.SignTx) # we use SignTx, not ConfirmOutput, for compatibility with T1 -@unimport async def confirm_fee(ctx, spending, gas_price, gas_limit, chain_id, token=None): # todo wording content = Text('Confirm fee', ui.ICON_RESET, 'Sending: %s' % format_amount(spending, token, chain_id), @@ -26,7 +24,6 @@ async def confirm_fee(ctx, spending, gas_price, gas_limit, chain_id, token=None) return await hold_to_confirm(ctx, content, ButtonRequestType.SignTx) -@unimport async def confirm_data(ctx, data, data_total): # todo wording str_data = hexlify(data[:8]).decode() + '..' content = Text('Confirm data:', ui.ICON_RESET, diff --git a/src/apps/ethereum/sign_message.py b/src/apps/ethereum/sign_message.py index 32bf1aac7..f494628f1 100644 --- a/src/apps/ethereum/sign_message.py +++ b/src/apps/ethereum/sign_message.py @@ -1,5 +1,3 @@ -from trezor.utils import unimport - def message_digest(message): from apps.wallet.sign_tx.signing import write_varint @@ -16,7 +14,6 @@ def message_digest(message): return h.get_digest(True) -@unimport async def ethereum_sign_message(ctx, msg): from trezor.messages.EthereumMessageSignature import EthereumMessageSignature from trezor.crypto.curve import secp256k1 diff --git a/src/apps/ethereum/sign_tx.py b/src/apps/ethereum/sign_tx.py index 85d3ed770..2582529e1 100644 --- a/src/apps/ethereum/sign_tx.py +++ b/src/apps/ethereum/sign_tx.py @@ -1,4 +1,3 @@ -from trezor.utils import unimport from trezor.messages.EthereumSignTx import EthereumSignTx from trezor.messages.EthereumTxRequest import EthereumTxRequest from trezor.messages import FailureType @@ -10,7 +9,6 @@ from apps.ethereum import tokens, layout MAX_CHAIN_ID = 2147483630 -@unimport async def ethereum_sign_tx(ctx, msg): from trezor.crypto.hashlib import sha3_256 diff --git a/src/apps/ethereum/verify_message.py b/src/apps/ethereum/verify_message.py index 282ecc36a..821b230fb 100644 --- a/src/apps/ethereum/verify_message.py +++ b/src/apps/ethereum/verify_message.py @@ -1,7 +1,4 @@ -from trezor.utils import unimport - -@unimport async def ethereum_verify_message(ctx, msg): from .sign_message import message_digest from trezor.crypto.curve import secp256k1 diff --git a/src/apps/management/apply_settings.py b/src/apps/management/apply_settings.py index 098477ffa..20112a805 100644 --- a/src/apps/management/apply_settings.py +++ b/src/apps/management/apply_settings.py @@ -1,8 +1,6 @@ from trezor import ui, wire -from trezor.utils import unimport -@unimport async def layout_apply_settings(ctx, msg): from trezor.messages.Success import Success from trezor.messages.FailureType import ProcessError diff --git a/src/apps/management/change_pin.py b/src/apps/management/change_pin.py index 31fe8617a..debc28a81 100644 --- a/src/apps/management/change_pin.py +++ b/src/apps/management/change_pin.py @@ -1,7 +1,6 @@ from trezor import ui from trezor import config from trezor.pin import pin_to_int, show_pin_timeout -from trezor.utils import unimport async def request_pin(ctx): @@ -48,7 +47,6 @@ def confirm_change_pin(ctx, msg): 'set new PIN?')) -@unimport async def layout_change_pin(ctx, msg): from trezor.messages.Success import Success from trezor.messages.Failure import Failure diff --git a/src/apps/management/load_device.py b/src/apps/management/load_device.py index 78567550c..a94620374 100644 --- a/src/apps/management/load_device.py +++ b/src/apps/management/load_device.py @@ -1,9 +1,7 @@ from trezor import wire, ui, config from trezor.pin import pin_to_int -from trezor.utils import unimport -@unimport async def layout_load_device(ctx, msg): from trezor.crypto import bip39 from trezor.messages.Success import Success diff --git a/src/apps/management/reset_device.py b/src/apps/management/reset_device.py index 77fdb7d21..4ed9018ca 100644 --- a/src/apps/management/reset_device.py +++ b/src/apps/management/reset_device.py @@ -8,7 +8,6 @@ if __debug__: current_word = None -@unimport async def reset_device(ctx, msg): from trezor.ui.text import Text from trezor.crypto import hashlib, random, bip39 diff --git a/src/apps/management/wipe_device.py b/src/apps/management/wipe_device.py index b86c6d1be..0da8d067e 100644 --- a/src/apps/management/wipe_device.py +++ b/src/apps/management/wipe_device.py @@ -1,8 +1,6 @@ from trezor import ui -from trezor.utils import unimport -@unimport async def layout_wipe_device(ctx, msg): from trezor.messages.Success import Success from trezor.ui.text import Text diff --git a/src/apps/wallet/cipher_key_value.py b/src/apps/wallet/cipher_key_value.py index fc9bca60a..d66a5706f 100644 --- a/src/apps/wallet/cipher_key_value.py +++ b/src/apps/wallet/cipher_key_value.py @@ -1,5 +1,4 @@ from trezor import ui -from trezor.utils import unimport def cipher_key_value(msg, seckey: bytes) -> bytes: @@ -25,7 +24,6 @@ def cipher_key_value(msg, seckey: bytes) -> bytes: return aes.update(msg.value) -@unimport async def layout_cipher_key_value(ctx, msg): from trezor.messages.CipheredKeyValue import CipheredKeyValue from ..common import seed diff --git a/src/apps/wallet/get_address.py b/src/apps/wallet/get_address.py index ee136ab23..28601cbba 100644 --- a/src/apps/wallet/get_address.py +++ b/src/apps/wallet/get_address.py @@ -1,8 +1,6 @@ from trezor import wire, ui -from trezor.utils import unimport -@unimport async def layout_get_address(ctx, msg): from trezor.messages.Address import Address from trezor.messages.FailureType import ProcessError diff --git a/src/apps/wallet/get_entropy.py b/src/apps/wallet/get_entropy.py index b6510d15b..4e6fe2b15 100644 --- a/src/apps/wallet/get_entropy.py +++ b/src/apps/wallet/get_entropy.py @@ -1,8 +1,6 @@ from trezor import wire, ui -from trezor.utils import unimport -@unimport async def layout_get_entropy(ctx, msg): from trezor.messages.Entropy import Entropy from trezor.crypto import random diff --git a/src/apps/wallet/get_public_key.py b/src/apps/wallet/get_public_key.py index 03784fafc..587747271 100644 --- a/src/apps/wallet/get_public_key.py +++ b/src/apps/wallet/get_public_key.py @@ -1,7 +1,4 @@ -from trezor.utils import unimport - -@unimport async def layout_get_public_key(ctx, msg): from trezor.messages.HDNodeType import HDNodeType from trezor.messages.PublicKey import PublicKey diff --git a/src/apps/wallet/sign_identity.py b/src/apps/wallet/sign_identity.py index 375ce33af..7a439b301 100644 --- a/src/apps/wallet/sign_identity.py +++ b/src/apps/wallet/sign_identity.py @@ -1,5 +1,4 @@ from trezor import ui -from trezor.utils import unimport def serialize_identity(identity): @@ -80,7 +79,6 @@ def sign_challenge(seckey: bytes, return signature -@unimport async def layout_sign_identity(ctx, msg): from trezor.messages.SignedIdentity import SignedIdentity from ..common import coins diff --git a/src/apps/wallet/sign_message.py b/src/apps/wallet/sign_message.py index 0b63a72b5..1eab1a709 100644 --- a/src/apps/wallet/sign_message.py +++ b/src/apps/wallet/sign_message.py @@ -1,8 +1,6 @@ from trezor import ui -from trezor.utils import unimport -@unimport async def layout_sign_message(ctx, msg): from trezor.messages.MessageSignature import MessageSignature from trezor.crypto.curve import secp256k1 diff --git a/src/apps/wallet/sign_tx/__init__.py b/src/apps/wallet/sign_tx/__init__.py index 1f13deece..de3871a4f 100644 --- a/src/apps/wallet/sign_tx/__init__.py +++ b/src/apps/wallet/sign_tx/__init__.py @@ -1,8 +1,6 @@ -from trezor.utils import unimport from trezor import wire -@unimport async def sign_tx(ctx, msg): from trezor.messages.RequestType import TXFINISHED from trezor.messages.wire_types import TxAck diff --git a/src/apps/wallet/verify_message.py b/src/apps/wallet/verify_message.py index 92d348c5a..a67dcec38 100644 --- a/src/apps/wallet/verify_message.py +++ b/src/apps/wallet/verify_message.py @@ -1,8 +1,6 @@ from trezor import ui -from trezor.utils import unimport -@unimport async def layout_verify_message(ctx, msg): from trezor.messages.Success import Success from trezor.crypto.curve import secp256k1 diff --git a/src/trezor/utils.py b/src/trezor/utils.py index d124a1014..0d8209f14 100644 --- a/src/trezor/utils.py +++ b/src/trezor/utils.py @@ -4,28 +4,7 @@ import gc from trezorutils import halt, memcpy -def _gf(): - yield - - -type_gen = type(_gf()) - - -def _unimport_func(func): - def inner(*args, **kwargs): - mods = set(sys.modules) - try: - ret = func(*args, **kwargs) - finally: - for mod in sys.modules: - if mod not in mods: - del sys.modules[mod] - gc.collect() - return ret - return inner - - -def _unimport_gen(genfunc): +def unimport(genfunc): async def inner(*args, **kwargs): mods = set(sys.modules) try: @@ -39,13 +18,6 @@ def _unimport_gen(genfunc): return inner -def unimport(func): - if isinstance(func, type_gen): - return _unimport_gen(func) - else: - return _unimport_func(func) - - def chunks(items, size): for i in range(0, len(items), size): yield items[i:i + size]