summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--alot/commands/envelope.py24
-rw-r--r--alot/commands/utils.py14
-rw-r--r--tests/commands/envelope_test.py6
-rw-r--r--tests/commands/utils_tests.py22
4 files changed, 28 insertions, 38 deletions
diff --git a/alot/commands/envelope.py b/alot/commands/envelope.py
index 80e13fba..e6d139d5 100644
--- a/alot/commands/envelope.py
+++ b/alot/commands/envelope.py
@@ -11,8 +11,6 @@ import re
import tempfile
import textwrap
-from twisted.internet.defer import inlineCallbacks
-
from . import Command, registerCommand
from . import globals
from . import utils
@@ -167,8 +165,7 @@ class SendCommand(Command):
self.envelope = envelope
self.envelope_buffer = None
- @inlineCallbacks
- def apply(self, ui):
+ async def apply(self, ui):
if self.mail is None:
if self.envelope is None:
# needed to close later
@@ -184,7 +181,7 @@ class SendCommand(Command):
warning = 'A modified version of ' * mod
warning += 'this message has been sent at %s.' % when
warning += ' Do you want to resend?'
- if (yield ui.choice(warning, cancel='no',
+ if (await ui.choice(warning, cancel='no',
msg_position='left')) == 'no':
return
@@ -201,7 +198,7 @@ class SendCommand(Command):
warning = textwrap.dedent("""\
Any BCC recipients will not be able to decrypt this
message. Do you want to send anyway?""").replace('\n', ' ')
- if (yield ui.choice(warning, cancel='no',
+ if (await ui.choice(warning, cancel='no',
msg_position='left')) == 'no':
return
@@ -417,8 +414,7 @@ class SetCommand(Command):
self.reset = not append
Command.__init__(self, **kwargs)
- @inlineCallbacks
- def apply(self, ui):
+ async def apply(self, ui):
envelope = ui.current_buffer.envelope
if self.reset:
if self.key in envelope:
@@ -429,7 +425,7 @@ class SetCommand(Command):
# as the key of the person BCC'd will be available to other recievers,
# defeating the purpose of BCCing them
if self.key.lower() in ['to', 'from', 'cc'] and envelope.encrypt:
- yield utils.update_keys(ui, envelope)
+ await utils.update_keys(ui, envelope)
ui.current_buffer.rebuild()
@@ -445,15 +441,14 @@ class UnsetCommand(Command):
self.key = key
Command.__init__(self, **kwargs)
- @inlineCallbacks
- def apply(self, ui):
+ async def apply(self, ui):
del ui.current_buffer.envelope[self.key]
# FIXME: handle BCC as well
# Currently we don't handle bcc because it creates a side channel leak,
# as the key of the person BCC'd will be available to other recievers,
# defeating the purpose of BCCing them
if self.key.lower() in ['to', 'from', 'cc']:
- yield utils.update_keys(ui, ui.current_buffer.envelope)
+ await utils.update_keys(ui, ui.current_buffer.envelope)
ui.current_buffer.rebuild()
@@ -578,8 +573,7 @@ class EncryptCommand(Command):
self.trusted = trusted
Command.__init__(self, **kwargs)
- @inlineCallbacks
- def apply(self, ui):
+ async def apply(self, ui):
envelope = ui.current_buffer.envelope
if self.action == 'rmencrypt':
try:
@@ -604,7 +598,7 @@ class EncryptCommand(Command):
tmp_key = crypto.get_key(keyid)
envelope.encrypt_keys[tmp_key.fpr] = tmp_key
else:
- yield utils.update_keys(ui, envelope, signed_only=self.trusted)
+ await utils.update_keys(ui, envelope, signed_only=self.trusted)
envelope.encrypt = encrypt
if not envelope.encrypt:
# This is an extra conditional as it can even happen if encrypt is
diff --git a/alot/commands/utils.py b/alot/commands/utils.py
index decaeae2..ace63b03 100644
--- a/alot/commands/utils.py
+++ b/alot/commands/utils.py
@@ -4,16 +4,13 @@
import re
import logging
-from twisted.internet.defer import inlineCallbacks, returnValue
-
from ..errors import GPGProblem, GPGCode
from ..settings.const import settings
from ..settings.errors import NoMatchingAccount
from .. import crypto
-@inlineCallbacks
-def update_keys(ui, envelope, block_error=False, signed_only=False):
+async def update_keys(ui, envelope, block_error=False, signed_only=False):
"""Find and set the encryption keys in an envolope.
:param ui: the main user interface object
@@ -41,7 +38,7 @@ def update_keys(ui, envelope, block_error=False, signed_only=False):
encrypt_keys.append(recipient)
logging.debug("encryption keys: " + str(encrypt_keys))
- keys = yield _get_keys(ui, encrypt_keys, block_error=block_error,
+ keys = await _get_keys(ui, encrypt_keys, block_error=block_error,
signed_only=signed_only)
if keys:
envelope.encrypt_keys = keys
@@ -63,8 +60,7 @@ def update_keys(ui, envelope, block_error=False, signed_only=False):
envelope.encrypt = False
-@inlineCallbacks
-def _get_keys(ui, encrypt_keyids, block_error=False, signed_only=False):
+async def _get_keys(ui, encrypt_keyids, block_error=False, signed_only=False):
"""Get several keys from the GPG keyring. The keys are selected by keyid
and are checked if they can be used for encryption.
@@ -93,7 +89,7 @@ def _get_keys(ui, encrypt_keyids, block_error=False, signed_only=False):
choices = {str(i): t for i, t in enumerate(tmp_choices, 1)}
keys_to_return = {str(i): t for i, t in enumerate([k for k in
crypto.list_keys(hint=keyid)], 1)}
- choosen_key = yield ui.choice("ambiguous keyid! Which " +
+ choosen_key = await ui.choice("ambiguous keyid! Which " +
"key do you want to use?",
choices=choices,
choices_to_return=keys_to_return)
@@ -104,4 +100,4 @@ def _get_keys(ui, encrypt_keyids, block_error=False, signed_only=False):
ui.notify(str(e), priority='error', block=block_error)
continue
keys[key.fpr] = key
- returnValue(keys)
+ return keys
diff --git a/tests/commands/envelope_test.py b/tests/commands/envelope_test.py
index 5f69ae43..d3908be8 100644
--- a/tests/commands/envelope_test.py
+++ b/tests/commands/envelope_test.py
@@ -22,7 +22,7 @@ import tempfile
import textwrap
from twisted.trial import unittest
-from twisted.internet.defer import inlineCallbacks
+from twisted.internet.defer import inlineCallbacks, ensureDeferred
import mock
@@ -360,7 +360,7 @@ class TestSendCommand(unittest.TestCase):
with mock.patch(
'alot.commands.envelope.settings.get_account_by_address',
mock.Mock(return_value=account)) as get_account_by_address:
- yield cmd.apply(mock.Mock())
+ yield ensureDeferred(cmd.apply(mock.Mock()))
get_account_by_address.assert_called_once_with('foo@example.com',
return_default=True)
# check that the apply did run through till the end.
@@ -374,7 +374,7 @@ class TestSendCommand(unittest.TestCase):
with mock.patch(
'alot.commands.envelope.settings.get_account_by_address',
mock.Mock(return_value=account)) as get_account_by_address:
- yield cmd.apply(mock.Mock())
+ yield ensureDeferred(cmd.apply(mock.Mock()))
get_account_by_address.assert_called_once_with('foo@example.com',
return_default=True)
# check that the apply did run through till the end.
diff --git a/tests/commands/utils_tests.py b/tests/commands/utils_tests.py
index db304552..bce85c14 100644
--- a/tests/commands/utils_tests.py
+++ b/tests/commands/utils_tests.py
@@ -21,7 +21,7 @@ import shutil
import gpg
import mock
from twisted.trial import unittest
-from twisted.internet.defer import inlineCallbacks
+from twisted.internet.defer import inlineCallbacks, ensureDeferred
from alot import crypto
from alot import errors
@@ -80,7 +80,7 @@ class TestGetKeys(unittest.TestCase):
signed_only=False)
ui = utilities.make_ui()
ids = [FPR]
- actual = yield utils._get_keys(ui, ids)
+ actual = yield ensureDeferred(utils._get_keys(ui, ids))
self.assertIn(FPR, actual)
self.assertEqual(actual[FPR].fpr, expected.fpr)
@@ -91,7 +91,7 @@ class TestGetKeys(unittest.TestCase):
signed_only=False)
ui = utilities.make_ui()
ids = [FPR, "6F6B15509CF8E59E6E469F327F438280EF8D349F"]
- actual = yield utils._get_keys(ui, ids)
+ actual = yield ensureDeferred(utils._get_keys(ui, ids))
self.assertIn(FPR, actual)
self.assertEqual(actual[FPR].fpr, expected.fpr)
@@ -100,7 +100,7 @@ class TestGetKeys(unittest.TestCase):
"""Test gettings keys when signed only is required."""
ui = utilities.make_ui()
ids = [FPR]
- actual = yield utils._get_keys(ui, ids, signed_only=True)
+ actual = yield ensureDeferred(utils._get_keys(ui, ids, signed_only=True))
self.assertEqual(actual, {})
@inlineCallbacks
@@ -123,7 +123,7 @@ class TestGetKeys(unittest.TestCase):
'test', errors.GPGCode.AMBIGUOUS_NAME))):
with mock.patch('alot.commands.utils.crypto.list_keys',
mock.Mock(return_value=[key])):
- yield utils._get_keys(ui, ids, signed_only=False)
+ yield ensureDeferred(utils._get_keys(ui, ids, signed_only=False))
ui.choice.assert_called_once()
@@ -140,7 +140,7 @@ class TestSetEncrypt(unittest.TestCase):
ui = utilities.make_ui()
envelope = Envelope()
envelope['To'] = 'ambig@example.com, test@example.com'
- yield utils.update_keys(ui, envelope)
+ yield ensureDeferred(utils.update_keys(ui, envelope))
self.assertTrue(envelope.encrypt)
self.assertCountEqual(
[f.fpr for f in envelope.encrypt_keys.values()],
@@ -151,7 +151,7 @@ class TestSetEncrypt(unittest.TestCase):
ui = utilities.make_ui()
envelope = Envelope()
envelope['Cc'] = 'ambig@example.com, test@example.com'
- yield utils.update_keys(ui, envelope)
+ yield ensureDeferred(utils.update_keys(ui, envelope))
self.assertTrue(envelope.encrypt)
self.assertCountEqual(
[f.fpr for f in envelope.encrypt_keys.values()],
@@ -162,7 +162,7 @@ class TestSetEncrypt(unittest.TestCase):
ui = utilities.make_ui()
envelope = Envelope()
envelope['Cc'] = 'foo@example.com, test@example.com'
- yield utils.update_keys(ui, envelope)
+ yield ensureDeferred(utils.update_keys(ui, envelope))
self.assertTrue(envelope.encrypt)
self.assertCountEqual(
[f.fpr for f in envelope.encrypt_keys.values()],
@@ -173,7 +173,7 @@ class TestSetEncrypt(unittest.TestCase):
ui = utilities.make_ui()
envelope = Envelope()
envelope['To'] = 'foo@example.com'
- yield utils.update_keys(ui, envelope)
+ yield ensureDeferred(utils.update_keys(ui, envelope))
self.assertFalse(envelope.encrypt)
self.assertEqual(envelope.encrypt_keys, {})
@@ -187,7 +187,7 @@ class TestSetEncrypt(unittest.TestCase):
account = _Account(encrypt_to_self=True, gpg_key=gpg_key)
with mock.patch('alot.commands.thread.settings.get_account_by_address',
mock.Mock(return_value=account)):
- yield utils.update_keys(ui, envelope)
+ yield ensureDeferred(utils.update_keys(ui, envelope))
self.assertTrue(envelope.encrypt)
self.assertIn(FPR, envelope.encrypt_keys)
self.assertEqual(gpg_key, envelope.encrypt_keys[FPR])
@@ -202,6 +202,6 @@ class TestSetEncrypt(unittest.TestCase):
account = _Account(encrypt_to_self=False, gpg_key=gpg_key)
with mock.patch('alot.commands.thread.settings.get_account_by_address',
mock.Mock(return_value=account)):
- yield utils.update_keys(ui, envelope)
+ yield ensureDeferred(utils.update_keys(ui, envelope))
self.assertTrue(envelope.encrypt)
self.assertNotIn(FPR, envelope.encrypt_keys)