diff --git a/nucypher/blockchain/economics.py b/nucypher/blockchain/economics.py
index c55dbc5e2..10d4b0f42 100644
--- a/nucypher/blockchain/economics.py
+++ b/nucypher/blockchain/economics.py
@@ -20,7 +20,7 @@ from decimal import Decimal, localcontext
from math import log
from typing import Tuple
-from nucypher.blockchain.eth.agents import ContractAgency, NucypherTokenAgent, StakingEscrowAgent, AdjudicatorAgent, \
+from nucypher.blockchain.eth.agents import AdjudicatorAgent, ContractAgency, NucypherTokenAgent, StakingEscrowAgent, \
WorkLockAgent
from nucypher.blockchain.eth.registry import BaseContractRegistry
from nucypher.blockchain.eth.token import NU
diff --git a/nucypher/blockchain/eth/actors.py b/nucypher/blockchain/eth/actors.py
index 5a0ec83de..626e5279c 100644
--- a/nucypher/blockchain/eth/actors.py
+++ b/nucypher/blockchain/eth/actors.py
@@ -15,63 +15,63 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import csv
import json
+import traceback
+
+import click
+import csv
+import maya
import os
import sys
import time
-import traceback
+from constant_sorrow.constants import FULL, NO_WORKER_BONDED, WORKER_NOT_RUNNING
from decimal import Decimal
-from typing import Tuple, List, Dict, Optional
-
-import click
-import maya
from eth_tester.exceptions import TransactionFailed as TestTransactionFailed
-from eth_utils import is_checksum_address, to_checksum_address, to_canonical_address
+from eth_utils import to_canonical_address, to_checksum_address
from twisted.logger import Logger
+from typing import Dict, List, Optional, Tuple
from web3 import Web3
from web3.exceptions import ValidationError
-from constant_sorrow.constants import (
- WORKER_NOT_RUNNING,
- NO_WORKER_BONDED,
- FULL
-)
-from nucypher.blockchain.economics import StandardTokenEconomics, EconomicsFactory, BaseEconomics
+from nucypher.blockchain.economics import BaseEconomics, EconomicsFactory, StandardTokenEconomics
from nucypher.blockchain.eth.agents import (
- NucypherTokenAgent,
- StakingEscrowAgent,
- PolicyManagerAgent,
AdjudicatorAgent,
ContractAgency,
- PreallocationEscrowAgent,
MultiSigAgent,
+ NucypherTokenAgent,
+ PolicyManagerAgent,
+ PreallocationEscrowAgent,
+ StakingEscrowAgent,
WorkLockAgent
)
from nucypher.blockchain.eth.constants import NULL_ADDRESS
from nucypher.blockchain.eth.decorators import only_me, save_receipt, validate_checksum_address
from nucypher.blockchain.eth.deployers import (
- NucypherTokenDeployer,
- StakingEscrowDeployer,
- PolicyManagerDeployer,
- StakingInterfaceDeployer,
AdjudicatorDeployer,
BaseContractDeployer,
- WorklockDeployer,
MultiSigDeployer,
- StakingInterfaceRouterDeployer
+ NucypherTokenDeployer,
+ PolicyManagerDeployer,
+ StakingEscrowDeployer,
+ StakingInterfaceDeployer,
+ StakingInterfaceRouterDeployer,
+ WorklockDeployer
)
from nucypher.blockchain.eth.interfaces import BlockchainDeployerInterface, BlockchainInterfaceFactory
from nucypher.blockchain.eth.multisig import Authorization, Proposal
from nucypher.blockchain.eth.registry import BaseContractRegistry, IndividualAllocationRegistry
-from nucypher.blockchain.eth.signers import Web3Signer, Signer, KeystoreSigner
+from nucypher.blockchain.eth.signers import KeystoreSigner, Signer, Web3Signer
from nucypher.blockchain.eth.token import NU, Stake, StakeList, WorkTracker
-from nucypher.blockchain.eth.utils import datetime_to_period, calculate_period_duration, datetime_at_period, \
+from nucypher.blockchain.eth.utils import (
+ calculate_period_duration,
+ datetime_at_period,
+ datetime_to_period,
prettify_eth_amount
+)
from nucypher.characters.banners import STAKEHOLDER_BANNER
from nucypher.characters.control.emitters import StdoutEmitter
-from nucypher.cli.painting.transactions import paint_receipt_summary
from nucypher.cli.painting.deployment import paint_contract_deployment, paint_input_allocation_file
+from nucypher.cli.painting.transactions import paint_receipt_summary
from nucypher.config.constants import DEFAULT_CONFIG_ROOT
from nucypher.crypto.powers import TransactingPower
from nucypher.network.nicknames import nickname_from_seed
diff --git a/nucypher/blockchain/eth/agents.py b/nucypher/blockchain/eth/agents.py
index 7b2b50602..a103e639b 100644
--- a/nucypher/blockchain/eth/agents.py
+++ b/nucypher/blockchain/eth/agents.py
@@ -17,27 +17,19 @@ along with nucypher. If not, see .
import importlib
import random
-from typing import Generator, List, Tuple, Union, Dict, Optional
import math
from constant_sorrow.constants import NO_CONTRACT_AVAILABLE
from eth_utils.address import to_checksum_address
from twisted.logger import Logger
+from typing import Dict, Generator, List, Tuple, Union
from web3.contract import Contract
-from nucypher.blockchain.eth.constants import (
- DISPATCHER_CONTRACT_NAME,
- STAKING_ESCROW_CONTRACT_NAME,
- POLICY_MANAGER_CONTRACT_NAME,
- PREALLOCATION_ESCROW_CONTRACT_NAME,
- STAKING_INTERFACE_CONTRACT_NAME,
- STAKING_INTERFACE_ROUTER_CONTRACT_NAME,
- ADJUDICATOR_CONTRACT_NAME,
- NUCYPHER_TOKEN_CONTRACT_NAME,
- MULTISIG_CONTRACT_NAME,
- ETH_ADDRESS_BYTE_LENGTH,
- NULL_ADDRESS
-)
+from nucypher.blockchain.eth.constants import (ADJUDICATOR_CONTRACT_NAME, DISPATCHER_CONTRACT_NAME,
+ ETH_ADDRESS_BYTE_LENGTH, MULTISIG_CONTRACT_NAME,
+ NUCYPHER_TOKEN_CONTRACT_NAME, NULL_ADDRESS, POLICY_MANAGER_CONTRACT_NAME,
+ PREALLOCATION_ESCROW_CONTRACT_NAME, STAKING_ESCROW_CONTRACT_NAME,
+ STAKING_INTERFACE_CONTRACT_NAME, STAKING_INTERFACE_ROUTER_CONTRACT_NAME)
from nucypher.blockchain.eth.decorators import validate_checksum_address
from nucypher.blockchain.eth.events import ContractEvents
from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory
diff --git a/nucypher/blockchain/eth/clients.py b/nucypher/blockchain/eth/clients.py
index 9c431900b..b34a8e973 100644
--- a/nucypher/blockchain/eth/clients.py
+++ b/nucypher/blockchain/eth/clients.py
@@ -16,20 +16,18 @@ along with nucypher. If not, see .
"""
import json
-import os
-import shutil
-from typing import Union
import maya
+import os
+import shutil
import time
from constant_sorrow.constants import NOT_RUNNING, UNKNOWN_DEVELOPMENT_CHAIN_ID
from cytoolz.dicttoolz import dissoc
from eth_account import Account
from eth_account.messages import encode_defunct
-from eth_utils import to_canonical_address
-from eth_utils import to_checksum_address
+from eth_utils import to_canonical_address, to_checksum_address
from geth import LoggingMixin
-from geth.accounts import get_accounts, create_new_account
+from geth.accounts import create_new_account, get_accounts
from geth.chain import (
get_chain_data_dir,
initialize_chain,
@@ -38,9 +36,9 @@ from geth.chain import (
)
from geth.process import BaseGethProcess
from twisted.logger import Logger
+from typing import Union
from web3 import Web3
-from nucypher.blockchain.eth.signers import ClefSigner
from nucypher.config.constants import DEFAULT_CONFIG_ROOT, DEPLOY_DIR, USER_LOG_DIR
UNKNOWN_DEVELOPMENT_CHAIN_ID.bool_value(True)
diff --git a/nucypher/blockchain/eth/decorators.py b/nucypher/blockchain/eth/decorators.py
index 7be5ab63c..2469e1164 100644
--- a/nucypher/blockchain/eth/decorators.py
+++ b/nucypher/blockchain/eth/decorators.py
@@ -1,12 +1,9 @@
+import eth_utils
import functools
+import inspect
from datetime import datetime
-
from twisted.logger import Logger
from typing import Callable
-import inspect
-import eth_utils
-
-from nucypher.crypto.api import keccak_digest
__VERIFIED_ADDRESSES = set()
diff --git a/nucypher/blockchain/eth/deployers.py b/nucypher/blockchain/eth/deployers.py
index 21b282691..f6340029b 100644
--- a/nucypher/blockchain/eth/deployers.py
+++ b/nucypher/blockchain/eth/deployers.py
@@ -17,31 +17,16 @@ along with nucypher. If not, see .
from collections import OrderedDict
-from typing import Tuple, Dict, List
-from constant_sorrow.constants import (
- CONTRACT_NOT_DEPLOYED,
- NO_DEPLOYER_CONFIGURED,
- NO_BENEFICIARY,
- BARE,
- IDLE,
- FULL
-)
+from constant_sorrow.constants import (BARE, CONTRACT_NOT_DEPLOYED, FULL, IDLE, NO_BENEFICIARY, NO_DEPLOYER_CONFIGURED)
+from typing import Dict, List, Tuple
from web3 import Web3
from web3.contract import Contract
-from nucypher.blockchain.economics import StandardTokenEconomics, BaseEconomics
-from nucypher.blockchain.eth.agents import (
- EthereumContractAgent,
- StakingEscrowAgent,
- NucypherTokenAgent,
- PolicyManagerAgent,
- PreallocationEscrowAgent,
- AdjudicatorAgent,
- WorkLockAgent,
- MultiSigAgent,
- ContractAgency
-)
+from nucypher.blockchain.economics import BaseEconomics, StandardTokenEconomics
+from nucypher.blockchain.eth.agents import (AdjudicatorAgent, ContractAgency, EthereumContractAgent, MultiSigAgent,
+ NucypherTokenAgent, PolicyManagerAgent, PreallocationEscrowAgent,
+ StakingEscrowAgent, WorkLockAgent)
from nucypher.blockchain.eth.constants import DISPATCHER_CONTRACT_NAME, NULL_ADDRESS, STAKING_ESCROW_CONTRACT_NAME
from nucypher.blockchain.eth.decorators import validate_checksum_address
from nucypher.blockchain.eth.interfaces import (
@@ -49,8 +34,7 @@ from nucypher.blockchain.eth.interfaces import (
BlockchainInterfaceFactory,
VersionedContract,
)
-from nucypher.blockchain.eth.registry import AllocationRegistry
-from nucypher.blockchain.eth.registry import BaseContractRegistry
+from nucypher.blockchain.eth.registry import AllocationRegistry, BaseContractRegistry
class BaseContractDeployer:
diff --git a/nucypher/blockchain/eth/interfaces.py b/nucypher/blockchain/eth/interfaces.py
index 6614faba2..ce8f256ec 100644
--- a/nucypher/blockchain/eth/interfaces.py
+++ b/nucypher/blockchain/eth/interfaces.py
@@ -24,44 +24,29 @@ import os
import pprint
import requests
import time
-from constant_sorrow.constants import (
- NO_BLOCKCHAIN_CONNECTION,
- NO_COMPILATION_PERFORMED,
- UNKNOWN_TX_STATUS,
- NO_PROVIDER_PROCESS,
- READ_ONLY_INTERFACE,
- INSUFFICIENT_ETH
-)
+from constant_sorrow.constants import (INSUFFICIENT_ETH, NO_BLOCKCHAIN_CONNECTION, NO_COMPILATION_PERFORMED,
+ NO_PROVIDER_PROCESS, READ_ONLY_INTERFACE, UNKNOWN_TX_STATUS)
from eth_tester import EthereumTester
from eth_tester.exceptions import TransactionFailed as TestTransactionFailed
from eth_utils import to_checksum_address
from twisted.logger import Logger
-from typing import List, Callable
-from typing import Tuple
-from typing import Union
+from typing import Callable, List, Tuple, Union
from urllib.parse import urlparse
-from web3 import Web3, WebsocketProvider, HTTPProvider, IPCProvider, middleware
-from web3.contract import ContractConstructor, Contract
-from web3.contract import ContractFunction
-from web3.exceptions import TimeExhausted
-from web3.exceptions import ValidationError
+from web3 import HTTPProvider, IPCProvider, Web3, WebsocketProvider, middleware
+from web3.contract import Contract, ContractConstructor, ContractFunction
+from web3.exceptions import TimeExhausted, ValidationError
from web3.gas_strategies import time_based
from web3.middleware import geth_poa_middleware
from nucypher.blockchain.eth.clients import EthereumClient, POA_CHAINS
from nucypher.blockchain.eth.decorators import validate_checksum_address
-from nucypher.blockchain.eth.providers import (
- _get_test_geth_parity_provider,
- _get_auto_provider,
- _get_infura_provider,
- _get_IPC_provider,
- _get_websocket_provider,
- _get_HTTP_provider, _get_mock_test_provider, _get_pyevm_test_provider
-)
+from nucypher.blockchain.eth.providers import (_get_HTTP_provider, _get_IPC_provider, _get_auto_provider,
+ _get_infura_provider, _get_mock_test_provider, _get_pyevm_test_provider,
+ _get_test_geth_parity_provider, _get_websocket_provider)
from nucypher.blockchain.eth.registry import BaseContractRegistry
from nucypher.blockchain.eth.sol.compile import SolidityCompiler
-from nucypher.blockchain.eth.utils import prettify_eth_amount, get_transaction_name
-from nucypher.characters.control.emitters import StdoutEmitter, JSONRPCStdoutEmitter
+from nucypher.blockchain.eth.utils import get_transaction_name, prettify_eth_amount
+from nucypher.characters.control.emitters import JSONRPCStdoutEmitter, StdoutEmitter
from nucypher.utilities.logging import GlobalLoggerSettings
Web3Providers = Union[IPCProvider, WebsocketProvider, HTTPProvider, EthereumTester]
diff --git a/nucypher/blockchain/eth/multisig.py b/nucypher/blockchain/eth/multisig.py
index 67ceae77b..edbd58b5a 100644
--- a/nucypher/blockchain/eth/multisig.py
+++ b/nucypher/blockchain/eth/multisig.py
@@ -17,11 +17,11 @@ along with nucypher. If not, see .
import json
from collections import namedtuple
-from typing import Any, Dict, Tuple
from bytestring_splitter import BytestringSplitter
from eth_abi.packed import encode_single_packed
from eth_account import Account
+from typing import Any, Dict, Tuple
from web3 import Web3
from web3.contract import Contract, ContractFunction
diff --git a/nucypher/blockchain/eth/providers.py b/nucypher/blockchain/eth/providers.py
index 9eb8d201e..409a9c717 100644
--- a/nucypher/blockchain/eth/providers.py
+++ b/nucypher/blockchain/eth/providers.py
@@ -14,15 +14,12 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-from typing import Union
-
import os
+from eth_tester import EthereumTester, PyEVMBackend
from eth_tester.backends.mock.main import MockBackend
+from typing import Union
from urllib.parse import urlparse
-
-from eth_tester import EthereumTester
-from eth_tester import PyEVMBackend
-from web3 import WebsocketProvider, HTTPProvider, IPCProvider
+from web3 import HTTPProvider, IPCProvider, WebsocketProvider
from web3.exceptions import InfuraKeyNotFound
from web3.providers.eth_tester.main import EthereumTesterProvider
diff --git a/nucypher/blockchain/eth/registry.py b/nucypher/blockchain/eth/registry.py
index c7a571c24..ef75b7ab3 100644
--- a/nucypher/blockchain/eth/registry.py
+++ b/nucypher/blockchain/eth/registry.py
@@ -14,19 +14,19 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import hashlib
import json
+from json import JSONDecodeError
+from os.path import abspath, dirname
+
+import hashlib
import os
+import requests
import shutil
import tempfile
from abc import ABC, abstractmethod
-from json import JSONDecodeError
-from os.path import dirname, abspath
-from typing import Union, Iterator, List, Dict, Type, Tuple
-
-import requests
-from constant_sorrow.constants import REGISTRY_COMMITTED, NO_REGISTRY_SOURCE
+from constant_sorrow.constants import NO_REGISTRY_SOURCE, REGISTRY_COMMITTED
from twisted.logger import Logger
+from typing import Dict, Iterator, List, Tuple, Type, Union
from nucypher.blockchain.eth.constants import PREALLOCATION_ESCROW_CONTRACT_NAME
from nucypher.blockchain.eth.networks import NetworksInventory
diff --git a/nucypher/blockchain/eth/signers.py b/nucypher/blockchain/eth/signers.py
index f61c37955..584ca1986 100644
--- a/nucypher/blockchain/eth/signers.py
+++ b/nucypher/blockchain/eth/signers.py
@@ -14,25 +14,23 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-from pathlib import Path
-
import json
-import os
-from abc import ABC, abstractmethod
from json import JSONDecodeError
-from typing import Dict, Tuple
-from typing import List
-from urllib.parse import urlparse
+import os
import sys
+from abc import ABC, abstractmethod
from cytoolz.dicttoolz import dissoc
from eth_account import Account
from eth_account.messages import encode_defunct
from eth_account.signers.local import LocalAccount
-from eth_utils import is_address, to_checksum_address, apply_formatters_to_dict
+from eth_utils import apply_formatters_to_dict, is_address, to_checksum_address
from hexbytes import HexBytes
+from pathlib import Path
from twisted.logger import Logger
-from web3 import Web3, IPCProvider
+from typing import Dict, List, Tuple
+from urllib.parse import urlparse
+from web3 import IPCProvider, Web3
from nucypher.blockchain.eth.constants import NULL_ADDRESS
from nucypher.blockchain.eth.decorators import validate_checksum_address
diff --git a/nucypher/blockchain/eth/token.py b/nucypher/blockchain/eth/token.py
index 26c06a28f..e23ee08b9 100644
--- a/nucypher/blockchain/eth/token.py
+++ b/nucypher/blockchain/eth/token.py
@@ -17,22 +17,16 @@ along with nucypher. If not, see .
from _pydecimal import Decimal
from collections import UserList
-from typing import Dict
-from typing import Union, Tuple, Callable
import maya
-from constant_sorrow.constants import (
- NEW_STAKE,
- NO_STAKING_RECEIPT,
- NOT_STAKING,
- EMPTY_STAKING_SLOT,
- UNKNOWN_WORKER_STATUS
-)
+from constant_sorrow.constants import (EMPTY_STAKING_SLOT, NEW_STAKE, NOT_STAKING, NO_STAKING_RECEIPT,
+ UNKNOWN_WORKER_STATUS)
from eth_utils import currency, is_checksum_address
-from twisted.internet import task, reactor
+from twisted.internet import reactor, task
from twisted.logger import Logger
+from typing import Callable, Dict, Tuple, Union
-from nucypher.blockchain.eth.agents import StakingEscrowAgent, ContractAgency
+from nucypher.blockchain.eth.agents import ContractAgency, StakingEscrowAgent
from nucypher.blockchain.eth.decorators import validate_checksum_address
from nucypher.blockchain.eth.registry import BaseContractRegistry
from nucypher.blockchain.eth.utils import datetime_at_period
diff --git a/nucypher/blockchain/eth/utils.py b/nucypher/blockchain/eth/utils.py
index 469a74260..f1855a3a5 100644
--- a/nucypher/blockchain/eth/utils.py
+++ b/nucypher/blockchain/eth/utils.py
@@ -15,12 +15,11 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-from decimal import Decimal
-from typing import Union
-
import maya
from constant_sorrow.constants import UNKNOWN_DEVELOPMENT_CHAIN_ID
-from eth_utils import is_address, to_checksum_address, is_hex
+from decimal import Decimal
+from eth_utils import is_address, is_hex, to_checksum_address
+from typing import Union
from web3 import Web3
from web3.contract import ContractConstructor, ContractFunction
diff --git a/nucypher/characters/base.py b/nucypher/characters/base.py
index 4677b55a7..790f39d9a 100644
--- a/nucypher/characters/base.py
+++ b/nucypher/characters/base.py
@@ -16,48 +16,28 @@ along with nucypher. If not, see .
"""
import contextlib
from contextlib import suppress
-from typing import Dict, ClassVar, Set
-from typing import Optional
-from typing import Union, List
-from bytestring_splitter import BytestringSplitter
from constant_sorrow import default_constant_splitter
-from constant_sorrow.constants import (
- DO_NOT_SIGN,
- NO_BLOCKCHAIN_CONNECTION,
- NO_CONTROL_PROTOCOL,
- NO_DECRYPTION_PERFORMED,
- NO_NICKNAME,
- NO_SIGNING_POWER,
- SIGNATURE_TO_FOLLOW,
- SIGNATURE_IS_ON_CIPHERTEXT,
- STRANGER,
- FEDERATED_ONLY
-)
+from constant_sorrow.constants import (DO_NOT_SIGN, NO_BLOCKCHAIN_CONNECTION, NO_CONTROL_PROTOCOL,
+ NO_DECRYPTION_PERFORMED, NO_NICKNAME, NO_SIGNING_POWER,
+ SIGNATURE_IS_ON_CIPHERTEXT, SIGNATURE_TO_FOLLOW, STRANGER)
from cryptography.exceptions import InvalidSignature
from eth_keys import KeyAPI as EthKeyAPI
-from eth_utils import to_checksum_address, to_canonical_address
+from eth_utils import to_canonical_address, to_checksum_address
+from typing import ClassVar, Dict, List, Optional, Set, Union
from umbral.keys import UmbralPublicKey
from umbral.signing import Signature
-from nucypher.blockchain.eth.agents import StakingEscrowAgent
-from nucypher.blockchain.eth.interfaces import BlockchainInterface
from nucypher.blockchain.eth.registry import BaseContractRegistry, InMemoryContractRegistry
from nucypher.blockchain.eth.signers import Signer
-from nucypher.characters.control.controllers import JSONRPCController, CLIController
+from nucypher.characters.control.controllers import CLIController, JSONRPCController
from nucypher.config.keyring import NucypherKeyring
from nucypher.config.node import CharacterConfiguration
from nucypher.crypto.api import encrypt_and_sign
from nucypher.crypto.kits import UmbralMessageKit
-from nucypher.crypto.powers import (
- CryptoPower,
- SigningPower,
- DecryptingPower,
- NoSigningPower,
- CryptoPowerUp,
- DelegatingPower
-)
-from nucypher.crypto.signing import signature_splitter, StrangerStamp, SignatureStamp
+from nucypher.crypto.powers import (CryptoPower, CryptoPowerUp, DecryptingPower, DelegatingPower, NoSigningPower,
+ SigningPower)
+from nucypher.crypto.signing import SignatureStamp, StrangerStamp, signature_splitter
from nucypher.network.middleware import RestMiddleware
from nucypher.network.nicknames import nickname_from_seed
from nucypher.network.nodes import Learner
diff --git a/nucypher/characters/chaotic.py b/nucypher/characters/chaotic.py
index fb84d9c6e..d6a55e4f3 100644
--- a/nucypher/characters/chaotic.py
+++ b/nucypher/characters/chaotic.py
@@ -1,33 +1,30 @@
import json
-import os
-from datetime import datetime, timedelta
-from decimal import Decimal
import eth_utils
import math
import maya
+import os
import time
from constant_sorrow.constants import NOT_RUNNING, NO_DATABASE_AVAILABLE
+from datetime import datetime, timedelta
+from decimal import Decimal
from flask import Flask, Response
from hendrix.deploy.base import HendrixDeploy
from nacl.hash import sha256
from sqlalchemy import create_engine, or_
-from twisted.internet import threads, reactor
+from twisted.internet import reactor, threads
from twisted.internet.task import LoopingCall
from twisted.logger import Logger
from nucypher.blockchain.economics import EconomicsFactory
from nucypher.blockchain.eth.actors import NucypherTokenActor
-from nucypher.blockchain.eth.agents import (
- NucypherTokenAgent,
- ContractAgency
-)
+from nucypher.blockchain.eth.agents import (ContractAgency, NucypherTokenAgent)
from nucypher.blockchain.eth.constants import NULL_ADDRESS
from nucypher.blockchain.eth.registry import BaseContractRegistry
from nucypher.blockchain.eth.token import NU
from nucypher.characters.banners import FELIX_BANNER, NU_BANNER
from nucypher.characters.base import Character
-from nucypher.config.constants import TEMPLATES_DIR, MAX_UPLOAD_CONTENT_LENGTH
+from nucypher.config.constants import MAX_UPLOAD_CONTENT_LENGTH, TEMPLATES_DIR
from nucypher.crypto.powers import SigningPower, TransactingPower
from nucypher.datastore.threading import ThreadedSession
diff --git a/nucypher/characters/control/controllers.py b/nucypher/characters/control/controllers.py
index 01539e6ab..74d969089 100644
--- a/nucypher/characters/control/controllers.py
+++ b/nucypher/characters/control/controllers.py
@@ -1,19 +1,19 @@
-import inspect
import json
-from abc import ABC, abstractmethod
from json import JSONDecodeError
+import inspect
import maya
-from flask import Response, Flask
+from abc import ABC, abstractmethod
+from flask import Flask, Response
from hendrix.deploy.base import HendrixDeploy
from twisted.internet import reactor, stdio
from twisted.logger import Logger
-from nucypher.characters.control.emitters import StdoutEmitter, WebEmitter, JSONRPCStdoutEmitter
+from nucypher.characters.control.emitters import JSONRPCStdoutEmitter, StdoutEmitter, WebEmitter
from nucypher.characters.control.interfaces import CharacterPublicInterface
from nucypher.characters.control.specifications.exceptions import SpecificationError
-from nucypher.config.constants import MAX_UPLOAD_CONTENT_LENGTH
from nucypher.cli.processes import JSONRPCLineReceiver
+from nucypher.config.constants import MAX_UPLOAD_CONTENT_LENGTH
from tests.utils.controllers import JSONRPCTestClient
diff --git a/nucypher/characters/control/emitters.py b/nucypher/characters/control/emitters.py
index 2ba8e1964..d41d6df3c 100644
--- a/nucypher/characters/control/emitters.py
+++ b/nucypher/characters/control/emitters.py
@@ -1,14 +1,11 @@
-import io
import json
-import os
-
-import sys
-from functools import partial
-from typing import Callable, Union
import click
+import os
from flask import Response
+from functools import partial
from twisted.logger import Logger
+from typing import Callable, Union
import nucypher
diff --git a/nucypher/characters/control/interfaces.py b/nucypher/characters/control/interfaces.py
index 5002a767e..9e143744d 100644
--- a/nucypher/characters/control/interfaces.py
+++ b/nucypher/characters/control/interfaces.py
@@ -1,8 +1,6 @@
import functools
-from base64 import b64decode
-from typing import Union
-
import maya
+from typing import Union
from umbral.keys import UmbralPublicKey
from nucypher.characters.control.specifications import alice, bob, enrico
diff --git a/nucypher/characters/control/specifications/alice.py b/nucypher/characters/control/specifications/alice.py
index 837366fc2..395607610 100644
--- a/nucypher/characters/control/specifications/alice.py
+++ b/nucypher/characters/control/specifications/alice.py
@@ -1,10 +1,10 @@
import click
from marshmallow import validates_schema
-from nucypher.characters.control.specifications.exceptions import (
- InvalidInputData, InvalidArgumentCombo)
from nucypher.characters.control.specifications import fields
from nucypher.characters.control.specifications.base import BaseSchema
+from nucypher.characters.control.specifications.exceptions import (
+ InvalidArgumentCombo)
from nucypher.cli import options, types
diff --git a/nucypher/characters/control/specifications/base.py b/nucypher/characters/control/specifications/base.py
index cbe12f767..d6ea3691a 100644
--- a/nucypher/characters/control/specifications/base.py
+++ b/nucypher/characters/control/specifications/base.py
@@ -1,6 +1,5 @@
-from functools import wraps
+from marshmallow import INCLUDE, Schema
-from marshmallow import Schema, INCLUDE, EXCLUDE
from nucypher.characters.control.specifications.exceptions import InvalidInputData
diff --git a/nucypher/characters/control/specifications/bob.py b/nucypher/characters/control/specifications/bob.py
index f14f6b6bf..8fc11e95f 100644
--- a/nucypher/characters/control/specifications/bob.py
+++ b/nucypher/characters/control/specifications/bob.py
@@ -1,7 +1,8 @@
import click
-from nucypher.cli import options
+
from nucypher.characters.control.specifications import fields
from nucypher.characters.control.specifications.base import BaseSchema
+from nucypher.cli import options
class JoinPolicy(BaseSchema): #TODO: this doesn't have a cli implementation
diff --git a/nucypher/characters/control/specifications/enrico.py b/nucypher/characters/control/specifications/enrico.py
index 5afc9c274..e44516496 100644
--- a/nucypher/characters/control/specifications/enrico.py
+++ b/nucypher/characters/control/specifications/enrico.py
@@ -1,7 +1,8 @@
import click
-from nucypher.cli import options
+
from nucypher.characters.control.specifications import fields
from nucypher.characters.control.specifications.base import BaseSchema
+from nucypher.cli import options
class EncryptMessage(BaseSchema):
diff --git a/nucypher/characters/control/specifications/fields/cleartext.py b/nucypher/characters/control/specifications/fields/cleartext.py
index 4a57c3539..40e012a7e 100644
--- a/nucypher/characters/control/specifications/fields/cleartext.py
+++ b/nucypher/characters/control/specifications/fields/cleartext.py
@@ -1,7 +1,10 @@
-from base64 import b64decode, b64encode
+from base64 import b64encode
+
from marshmallow import fields
+
from nucypher.characters.control.specifications.fields.base import BaseField
+
class Cleartext(BaseField, fields.String):
def _serialize(self, value, attr, data, **kwargs):
diff --git a/nucypher/characters/control/specifications/fields/datetime.py b/nucypher/characters/control/specifications/fields/datetime.py
index 9501f3a61..7900d30f6 100644
--- a/nucypher/characters/control/specifications/fields/datetime.py
+++ b/nucypher/characters/control/specifications/fields/datetime.py
@@ -1,5 +1,6 @@
-from marshmallow import fields
import maya
+from marshmallow import fields
+
from nucypher.characters.control.specifications.fields.base import BaseField
diff --git a/nucypher/characters/control/specifications/fields/key.py b/nucypher/characters/control/specifications/fields/key.py
index 302aabb78..aa63dde27 100644
--- a/nucypher/characters/control/specifications/fields/key.py
+++ b/nucypher/characters/control/specifications/fields/key.py
@@ -1,7 +1,9 @@
from marshmallow import fields
from umbral.keys import UmbralPublicKey
-from nucypher.characters.control.specifications.fields.base import BaseField
+
from nucypher.characters.control.specifications.exceptions import InvalidInputData, InvalidNativeDataTypes
+from nucypher.characters.control.specifications.fields.base import BaseField
+
class Key(BaseField, fields.Field):
diff --git a/nucypher/characters/control/specifications/fields/label.py b/nucypher/characters/control/specifications/fields/label.py
index b59124382..d7a2bacf9 100644
--- a/nucypher/characters/control/specifications/fields/label.py
+++ b/nucypher/characters/control/specifications/fields/label.py
@@ -1,6 +1,7 @@
-from nucypher.characters.control.specifications.fields.base import BaseField
from marshmallow import fields
+from nucypher.characters.control.specifications.fields.base import BaseField
+
class Label(BaseField, fields.Field):
diff --git a/nucypher/characters/control/specifications/fields/messagekit.py b/nucypher/characters/control/specifications/fields/messagekit.py
index 6bf467e4e..0abae9d50 100644
--- a/nucypher/characters/control/specifications/fields/messagekit.py
+++ b/nucypher/characters/control/specifications/fields/messagekit.py
@@ -1,8 +1,10 @@
from base64 import b64decode, b64encode
+
from marshmallow import fields
+
+from nucypher.characters.control.specifications.exceptions import InvalidInputData, InvalidNativeDataTypes
from nucypher.characters.control.specifications.fields.base import BaseField
from nucypher.crypto.kits import UmbralMessageKit as UmbralMessageKitClass
-from nucypher.characters.control.specifications.exceptions import InvalidInputData, InvalidNativeDataTypes
class UmbralMessageKit(BaseField, fields.Field):
diff --git a/nucypher/characters/control/specifications/fields/misc.py b/nucypher/characters/control/specifications/fields/misc.py
index 454563967..c6b419056 100644
--- a/nucypher/characters/control/specifications/fields/misc.py
+++ b/nucypher/characters/control/specifications/fields/misc.py
@@ -1,7 +1,8 @@
import click
from marshmallow import fields
-from nucypher.characters.control.specifications.fields.base import BaseField
+
from nucypher.characters.control.specifications.exceptions import InvalidInputData
+from nucypher.characters.control.specifications.fields.base import BaseField
from nucypher.cli import types
diff --git a/nucypher/characters/control/specifications/fields/treasuremap.py b/nucypher/characters/control/specifications/fields/treasuremap.py
index 4492c84b1..0abc39bdc 100644
--- a/nucypher/characters/control/specifications/fields/treasuremap.py
+++ b/nucypher/characters/control/specifications/fields/treasuremap.py
@@ -1,11 +1,13 @@
-from marshmallow import fields
from base64 import b64decode, b64encode
+
from bytestring_splitter import BytestringSplitter, VariableLengthBytestring
-from nucypher.characters.control.specifications.fields.base import BaseField
+from marshmallow import fields
+
from nucypher.characters.control.specifications.exceptions import InvalidInputData, InvalidNativeDataTypes
-from nucypher.crypto.signing import Signature
+from nucypher.characters.control.specifications.fields.base import BaseField
from nucypher.crypto.constants import KECCAK_DIGEST_LENGTH
from nucypher.crypto.kits import UmbralMessageKit
+from nucypher.crypto.signing import Signature
class TreasureMap(BaseField, fields.Field):
diff --git a/nucypher/characters/lawful.py b/nucypher/characters/lawful.py
index fbe91f640..e5644cee9 100644
--- a/nucypher/characters/lawful.py
+++ b/nucypher/characters/lawful.py
@@ -16,31 +16,30 @@ along with nucypher. If not, see .
"""
import json
-from base64 import b64encode, b64decode
+from base64 import b64decode, b64encode
from collections import OrderedDict
-from datetime import datetime
-from functools import partial
-from json.decoder import JSONDecodeError
from random import shuffle
-from typing import Dict, Iterable, List, Set, Tuple, Union
import maya
import time
-from bytestring_splitter import BytestringKwargifier, BytestringSplittingError
-from bytestring_splitter import BytestringSplitter, VariableLengthBytestring
+from bytestring_splitter import BytestringKwargifier, BytestringSplitter, BytestringSplittingError, \
+ VariableLengthBytestring
from constant_sorrow import constants
from constant_sorrow.constants import INCLUDED_IN_BYTESTRING, PUBLIC_ONLY, STRANGER_ALICE
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurve
from cryptography.hazmat.primitives.serialization import Encoding
-from cryptography.x509 import load_pem_x509_certificate, Certificate, NameOID
+from cryptography.x509 import Certificate, NameOID, load_pem_x509_certificate
+from datetime import datetime
from eth_utils import to_checksum_address
-from flask import request, Response
+from flask import Response, request
+from functools import partial
+from json.decoder import JSONDecodeError
from sqlalchemy.exc import OperationalError
-from twisted.internet import stdio, reactor
-from twisted.internet import threads
+from twisted.internet import reactor, stdio, threads
from twisted.internet.task import LoopingCall
from twisted.logger import Logger
+from typing import Dict, Iterable, List, Set, Tuple, Union
from umbral import pre
from umbral.keys import UmbralPublicKey
from umbral.kfrags import KFrag
@@ -49,7 +48,7 @@ from umbral.signing import Signature
import nucypher
from nucypher.blockchain.eth.actors import BlockchainPolicyAuthor, Worker
-from nucypher.blockchain.eth.agents import StakingEscrowAgent, ContractAgency
+from nucypher.blockchain.eth.agents import ContractAgency, StakingEscrowAgent
from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory
from nucypher.blockchain.eth.registry import BaseContractRegistry
from nucypher.blockchain.eth.signers import Web3Signer
@@ -62,22 +61,21 @@ from nucypher.characters.control.controllers import (
from nucypher.characters.control.emitters import StdoutEmitter
from nucypher.characters.control.interfaces import AliceInterface, BobInterface, EnricoInterface
from nucypher.cli.processes import UrsulaCommandProtocol
-from nucypher.config.storages import NodeStorage, ForgetfulNodeStorage
-from nucypher.crypto.api import keccak_digest, encrypt_and_sign
-from nucypher.crypto.constants import PUBLIC_KEY_LENGTH, PUBLIC_ADDRESS_LENGTH
+from nucypher.config.storages import ForgetfulNodeStorage, NodeStorage
+from nucypher.crypto.api import encrypt_and_sign, keccak_digest
+from nucypher.crypto.constants import PUBLIC_ADDRESS_LENGTH, PUBLIC_KEY_LENGTH
from nucypher.crypto.kits import UmbralMessageKit
-from nucypher.crypto.powers import SigningPower, DecryptingPower, DelegatingPower, TransactingPower, PowerUpError
+from nucypher.crypto.powers import DecryptingPower, DelegatingPower, PowerUpError, SigningPower, TransactingPower
from nucypher.crypto.signing import InvalidSignature
from nucypher.datastore.keypairs import HostingKeypair
from nucypher.datastore.threading import ThreadedSession
from nucypher.network.exceptions import NodeSeemsToBeDown
from nucypher.network.middleware import RestMiddleware
from nucypher.network.nicknames import nickname_from_seed
-from nucypher.network.nodes import NodeSprout
-from nucypher.network.nodes import Teacher
+from nucypher.network.nodes import NodeSprout, Teacher
from nucypher.network.protocols import InterfaceInfo, parse_node_uri
-from nucypher.network.trackers import AvailabilityTracker
from nucypher.network.server import ProxyRESTServer, TLSHostingPower, make_rest_app
+from nucypher.network.trackers import AvailabilityTracker
class Alice(Character, BlockchainPolicyAuthor):
diff --git a/nucypher/characters/unlawful.py b/nucypher/characters/unlawful.py
index 88d789dcb..3766e472b 100644
--- a/nucypher/characters/unlawful.py
+++ b/nucypher/characters/unlawful.py
@@ -15,11 +15,11 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
from copy import copy
-from unittest.mock import patch
from eth_tester.exceptions import ValidationError
+from unittest.mock import patch
-from nucypher.characters.lawful import Ursula, Alice
+from nucypher.characters.lawful import Alice, Ursula
from nucypher.crypto.powers import CryptoPower, SigningPower
from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD, MOCK_URSULA_DB_FILEPATH
from tests.utils.middleware import EvilMiddleWare
diff --git a/nucypher/cli/commands/deploy.py b/nucypher/cli/commands/deploy.py
index 381cafe11..f1e517882 100644
--- a/nucypher/cli/commands/deploy.py
+++ b/nucypher/cli/commands/deploy.py
@@ -40,8 +40,12 @@ from nucypher.characters.control.emitters import StdoutEmitter
from nucypher.cli.actions.auth import get_client_password
from nucypher.cli.actions.confirm import confirm_deployment
from nucypher.cli.actions.select import select_client_account
-from nucypher.cli.actions.utils import (deployer_pre_launch_warnings, ensure_config_root, establish_deployer_registry,
- initialize_deployer_interface)
+from nucypher.cli.actions.utils import (
+ deployer_pre_launch_warnings,
+ ensure_config_root,
+ establish_deployer_registry,
+ initialize_deployer_interface
+)
from nucypher.cli.config import group_general_config
from nucypher.cli.literature import (
CANNOT_OVERWRITE_REGISTRY,
diff --git a/nucypher/config/base.py b/nucypher/config/base.py
index 81a11ba0a..645f93ef1 100644
--- a/nucypher/config/base.py
+++ b/nucypher/config/base.py
@@ -1,11 +1,11 @@
import json
+
import os
from abc import ABC, abstractmethod
-from typing import Union
-
from constant_sorrow.constants import (
UNKNOWN_VERSION
)
+from typing import Union
from nucypher.config import constants
diff --git a/nucypher/config/characters.py b/nucypher/config/characters.py
index 547e5a9e5..b887dcaf3 100644
--- a/nucypher/config/characters.py
+++ b/nucypher/config/characters.py
@@ -17,14 +17,13 @@ along with nucypher. If not, see .
import os
-from tempfile import TemporaryDirectory
-
from constant_sorrow.constants import (
UNINITIALIZED_CONFIGURATION
)
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurve
from cryptography.x509 import Certificate
+from tempfile import TemporaryDirectory
from nucypher.blockchain.eth.actors import StakeHolder
from nucypher.blockchain.eth.signers import Signer
diff --git a/nucypher/config/constants.py b/nucypher/config/constants.py
index 9206df4d4..2fee7befd 100644
--- a/nucypher/config/constants.py
+++ b/nucypher/config/constants.py
@@ -16,10 +16,10 @@ along with nucypher. If not, see .
"""
-import os
from collections import namedtuple
from os.path import abspath, dirname
+import os
from appdirs import AppDirs
import nucypher
diff --git a/nucypher/config/keyring.py b/nucypher/config/keyring.py
index 90eb9f12d..20ef81132 100644
--- a/nucypher/config/keyring.py
+++ b/nucypher/config/keyring.py
@@ -17,14 +17,12 @@ along with nucypher. If not, see .
import base64
import contextlib
import json
-import os
import stat
from json import JSONDecodeError
from os.path import abspath
-from typing import ClassVar, Tuple, Callable, Union, Dict, List
-from constant_sorrow.constants import FEDERATED_ADDRESS
-from constant_sorrow.constants import KEYRING_LOCKED
+import os
+from constant_sorrow.constants import FEDERATED_ADDRESS, KEYRING_LOCKED
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.backends.openssl.ec import _EllipticCurvePrivateKey
@@ -40,17 +38,13 @@ from eth_utils import to_checksum_address
from nacl.exceptions import CryptoError
from nacl.secret import SecretBox
from twisted.logger import Logger
-from umbral.keys import UmbralPrivateKey, UmbralPublicKey, UmbralKeyingMaterial, derive_key_from_password
+from typing import Callable, ClassVar, Dict, List, Tuple, Union
+from umbral.keys import UmbralKeyingMaterial, UmbralPrivateKey, UmbralPublicKey, derive_key_from_password
from nucypher.config.constants import DEFAULT_CONFIG_ROOT
from nucypher.crypto.api import generate_teacher_certificate
from nucypher.crypto.constants import BLAKE2B
-from nucypher.crypto.powers import (
- SigningPower,
- DecryptingPower,
- KeyPairBasedPower,
- DerivedKeyBasedPower
-)
+from nucypher.crypto.powers import (DecryptingPower, DerivedKeyBasedPower, KeyPairBasedPower, SigningPower)
from nucypher.network.server import TLSHostingPower
FILE_ENCODING = 'utf-8'
diff --git a/nucypher/config/node.py b/nucypher/config/node.py
index 459993d9a..b558446a0 100644
--- a/nucypher/config/node.py
+++ b/nucypher/config/node.py
@@ -17,18 +17,11 @@ along with nucypher. If not, see .
import os
+from constant_sorrow.constants import (DEVELOPMENT_CONFIGURATION, FEDERATED_ADDRESS, LIVE_CONFIGURATION,
+ NO_BLOCKCHAIN_CONNECTION, NO_KEYRING_ATTACHED, UNINITIALIZED_CONFIGURATION)
from tempfile import TemporaryDirectory
-from typing import List, Set, Union, Callable
-
-from constant_sorrow.constants import (
- UNINITIALIZED_CONFIGURATION,
- NO_BLOCKCHAIN_CONNECTION,
- LIVE_CONFIGURATION,
- NO_KEYRING_ATTACHED,
- DEVELOPMENT_CONFIGURATION,
- FEDERATED_ADDRESS
-)
from twisted.logger import Logger
+from typing import Callable, List, Set, Union
from umbral.signing import Signature
from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory
@@ -41,8 +34,8 @@ from nucypher.blockchain.eth.registry import (
from nucypher.blockchain.eth.signers import Signer
from nucypher.config.base import BaseConfiguration
from nucypher.config.keyring import NucypherKeyring
-from nucypher.config.storages import NodeStorage, ForgetfulNodeStorage, LocalFileBasedNodeStorage
-from nucypher.crypto.powers import CryptoPowerUp, CryptoPower
+from nucypher.config.storages import ForgetfulNodeStorage, LocalFileBasedNodeStorage, NodeStorage
+from nucypher.crypto.powers import CryptoPower, CryptoPowerUp
from nucypher.network.middleware import RestMiddleware
diff --git a/nucypher/config/storages.py b/nucypher/config/storages.py
index f89075c55..45989c7bb 100644
--- a/nucypher/config/storages.py
+++ b/nucypher/config/storages.py
@@ -15,20 +15,20 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import binascii
-import os
import sqlite3
-import tempfile
-from abc import abstractmethod, ABC
-from typing import Callable, Tuple, Union, Set, Any
import OpenSSL
+import binascii
+import os
+import tempfile
+from abc import ABC, abstractmethod
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.serialization import Encoding
from cryptography.x509 import Certificate, NameOID
from eth_utils import is_checksum_address
from twisted.logger import Logger
+from typing import Any, Callable, Set, Tuple, Union
from nucypher.blockchain.eth.decorators import validate_checksum_address
from nucypher.blockchain.eth.registry import BaseContractRegistry
diff --git a/nucypher/crypto/api.py b/nucypher/crypto/api.py
index 979e5d4ab..1ddb0b4a2 100644
--- a/nucypher/crypto/api.py
+++ b/nucypher/crypto/api.py
@@ -14,11 +14,9 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import datetime
-from ipaddress import IPv4Address
from random import SystemRandom
-from typing import Tuple
+import datetime
import sha3
from constant_sorrow import constants
from cryptography import x509
@@ -33,7 +31,9 @@ from cryptography.x509 import Certificate
from cryptography.x509.oid import NameOID
from eth_account import Account
from eth_account.messages import encode_defunct
-from eth_utils import to_checksum_address, is_checksum_address
+from eth_utils import is_checksum_address, to_checksum_address
+from ipaddress import IPv4Address
+from typing import Tuple
from umbral import pre
from umbral.keys import UmbralPrivateKey, UmbralPublicKey
from umbral.signing import Signature
diff --git a/nucypher/crypto/kits.py b/nucypher/crypto/kits.py
index 57c84bb1d..9933ef0dd 100644
--- a/nucypher/crypto/kits.py
+++ b/nucypher/crypto/kits.py
@@ -14,9 +14,10 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-from constant_sorrow.constants import UNKNOWN_SENDER, NOT_SIGNED
from bytestring_splitter import BytestringKwargifier, VariableLengthBytestring
-from nucypher.crypto.splitters import key_splitter, capsule_splitter
+from constant_sorrow.constants import NOT_SIGNED, UNKNOWN_SENDER
+
+from nucypher.crypto.splitters import capsule_splitter, key_splitter
class CryptoKit:
diff --git a/nucypher/crypto/powers.py b/nucypher/crypto/powers.py
index 9464a1180..d1f982036 100644
--- a/nucypher/crypto/powers.py
+++ b/nucypher/crypto/powers.py
@@ -17,17 +17,16 @@ along with nucypher. If not, see .
import inspect
-from typing import List, Tuple, Optional
-
from hexbytes import HexBytes
+from typing import List, Optional, Tuple
from umbral import pre
-from umbral.keys import UmbralPublicKey, UmbralPrivateKey, UmbralKeyingMaterial
+from umbral.keys import UmbralKeyingMaterial, UmbralPrivateKey, UmbralPublicKey
from nucypher.blockchain.eth.decorators import validate_checksum_address
-from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory, BlockchainInterface
+from nucypher.blockchain.eth.interfaces import BlockchainInterface, BlockchainInterfaceFactory
from nucypher.blockchain.eth.signers import Signer, Web3Signer
from nucypher.datastore import keypairs
-from nucypher.datastore.keypairs import SigningKeypair, DecryptingKeypair
+from nucypher.datastore.keypairs import DecryptingKeypair, SigningKeypair
class PowerUpError(TypeError):
diff --git a/nucypher/crypto/splitters.py b/nucypher/crypto/splitters.py
index bcfea7c72..367cceb68 100644
--- a/nucypher/crypto/splitters.py
+++ b/nucypher/crypto/splitters.py
@@ -19,7 +19,7 @@ from umbral.config import default_params
from umbral.keys import UmbralPublicKey
from umbral.pre import Capsule
-from nucypher.crypto.constants import PUBLIC_KEY_LENGTH, CAPSULE_LENGTH
+from nucypher.crypto.constants import CAPSULE_LENGTH, PUBLIC_KEY_LENGTH
key_splitter = BytestringSplitter((UmbralPublicKey, PUBLIC_KEY_LENGTH))
capsule_splitter = BytestringSplitter((Capsule, CAPSULE_LENGTH, {"params": default_params()}))
diff --git a/nucypher/crypto/utils.py b/nucypher/crypto/utils.py
index d31c37446..d85e36831 100644
--- a/nucypher/crypto/utils.py
+++ b/nucypher/crypto/utils.py
@@ -15,10 +15,9 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-from typing import Any, Union
-
from coincurve import PublicKey
from eth_keys import KeyAPI as EthKeyAPI
+from typing import Any, Union
from umbral.keys import UmbralPublicKey
from umbral.point import Point
from umbral.signing import Signature
diff --git a/nucypher/datastore/datastore.py b/nucypher/datastore/datastore.py
index e200a5158..f04a54855 100644
--- a/nucypher/datastore/datastore.py
+++ b/nucypher/datastore/datastore.py
@@ -16,13 +16,12 @@ along with nucypher. If not, see .
"""
-from datetime import datetime
-from typing import List
-
import maya
from bytestring_splitter import BytestringSplitter
+from datetime import datetime
from sqlalchemy.exc import OperationalError
from sqlalchemy.orm import sessionmaker
+from typing import List
from umbral.keys import UmbralPublicKey
from umbral.kfrags import KFrag
diff --git a/nucypher/datastore/db/models.py b/nucypher/datastore/db/models.py
index 2728eae64..be67264b6 100644
--- a/nucypher/datastore/db/models.py
+++ b/nucypher/datastore/db/models.py
@@ -15,10 +15,7 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
from datetime import datetime
-
-from sqlalchemy import (
- Column, Integer, LargeBinary, ForeignKey, Boolean, DateTime
-)
+from sqlalchemy import (Boolean, Column, DateTime, ForeignKey, Integer, LargeBinary)
from sqlalchemy.orm import relationship
from nucypher.crypto.utils import fingerprint_from_key
diff --git a/nucypher/datastore/keypairs.py b/nucypher/datastore/keypairs.py
index a4b5da5c8..f01a7cf1f 100644
--- a/nucypher/datastore/keypairs.py
+++ b/nucypher/datastore/keypairs.py
@@ -15,7 +15,6 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
import base64
-from typing import Union
import sha3
from OpenSSL.SSL import TLSv1_2_METHOD
@@ -24,6 +23,7 @@ from constant_sorrow import constants
from cryptography.hazmat.primitives.asymmetric import ec
from hendrix.deploy.tls import HendrixDeployTLS
from hendrix.facilities.services import ExistingKeyTLSContextFactory
+from typing import Union
from umbral import pre
from umbral.keys import UmbralPrivateKey, UmbralPublicKey
from umbral.signing import Signature, Signer
diff --git a/nucypher/datastore/threading.py b/nucypher/datastore/threading.py
index 1ebdae3a1..55d739e3a 100644
--- a/nucypher/datastore/threading.py
+++ b/nucypher/datastore/threading.py
@@ -14,7 +14,7 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-from sqlalchemy.orm import sessionmaker, scoped_session
+from sqlalchemy.orm import scoped_session, sessionmaker
class ThreadedSession:
diff --git a/nucypher/network/exceptions.py b/nucypher/network/exceptions.py
index 9f0340dde..13077e0df 100644
--- a/nucypher/network/exceptions.py
+++ b/nucypher/network/exceptions.py
@@ -1,4 +1,5 @@
-import requests, socket
+import requests
+import socket
NodeSeemsToBeDown = (requests.exceptions.ConnectionError,
requests.exceptions.ReadTimeout,
diff --git a/nucypher/network/middleware.py b/nucypher/network/middleware.py
index 7d581faf5..b9393bf7a 100644
--- a/nucypher/network/middleware.py
+++ b/nucypher/network/middleware.py
@@ -16,17 +16,15 @@ along with nucypher. If not, see .
"""
+import requests
import socket
import ssl
-
-import requests
import time
from bytestring_splitter import BytestringSplitter, VariableLengthBytestring
from constant_sorrow.constants import CERTIFICATE_NOT_SAVED, EXEMPT_FROM_VERIFICATION
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from twisted.logger import Logger
-
from umbral.cfrags import CapsuleFrag
from umbral.signing import Signature
diff --git a/nucypher/network/nodes.py b/nucypher/network/nodes.py
index 8f468aca1..0386180cb 100644
--- a/nucypher/network/nodes.py
+++ b/nucypher/network/nodes.py
@@ -15,50 +15,39 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import binascii
import contextlib
import random
-from collections import defaultdict, OrderedDict
-from collections import deque
-from collections import namedtuple
+from collections import OrderedDict, defaultdict, deque, namedtuple
from contextlib import suppress
-from typing import Set, Tuple, Union
+import binascii
import maya
import requests
import time
-from bytestring_splitter import BytestringSplitter, PartiallyKwargifiedBytes
-from bytestring_splitter import VariableLengthBytestring, BytestringSplittingError
+from bytestring_splitter import BytestringSplitter, BytestringSplittingError, PartiallyKwargifiedBytes, \
+ VariableLengthBytestring
from constant_sorrow import constant_or_bytes
-from constant_sorrow.constants import (
- NO_KNOWN_NODES,
- NOT_SIGNED,
- NEVER_SEEN,
- NO_STORAGE_AVAILIBLE,
- FLEET_STATES_MATCH,
- CERTIFICATE_NOT_SAVED,
- UNKNOWN_FLEET_STATE
-)
+from constant_sorrow.constants import (CERTIFICATE_NOT_SAVED, FLEET_STATES_MATCH, NEVER_SEEN, NOT_SIGNED,
+ NO_KNOWN_NODES, NO_STORAGE_AVAILIBLE, UNKNOWN_FLEET_STATE)
from cryptography.x509 import Certificate
from eth_utils import to_checksum_address
from requests.exceptions import SSLError
-from twisted.internet import reactor, defer
-from twisted.internet import task
+from twisted.internet import defer, reactor, task
from twisted.internet.threads import deferToThread
from twisted.logger import Logger
-
-import nucypher
+from typing import Set, Tuple, Union
from umbral.signing import Signature
+import nucypher
from nucypher.blockchain.economics import EconomicsFactory
from nucypher.blockchain.eth.agents import ContractAgency, StakingEscrowAgent
from nucypher.blockchain.eth.constants import NULL_ADDRESS
from nucypher.blockchain.eth.registry import BaseContractRegistry
from nucypher.config.constants import SeednodeMetadata
from nucypher.config.storages import ForgetfulNodeStorage
-from nucypher.crypto.api import keccak_digest, verify_eip_191, recover_address_eip_191
+from nucypher.crypto.api import keccak_digest, recover_address_eip_191, verify_eip_191
from nucypher.crypto.kits import UmbralMessageKit
-from nucypher.crypto.powers import TransactingPower, SigningPower, DecryptingPower, NoSigningPower
+from nucypher.crypto.powers import DecryptingPower, NoSigningPower, SigningPower, TransactingPower
from nucypher.crypto.signing import signature_splitter
from nucypher.network import LEARNING_LOOP_VERSION
from nucypher.network.exceptions import NodeSeemsToBeDown
diff --git a/nucypher/network/protocols.py b/nucypher/network/protocols.py
index 9bfa62625..6e37f5938 100644
--- a/nucypher/network/protocols.py
+++ b/nucypher/network/protocols.py
@@ -14,11 +14,9 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-from urllib.parse import urlparse
-
-from eth_utils import is_checksum_address
-
from bytestring_splitter import VariableLengthBytestring
+from eth_utils import is_checksum_address
+from urllib.parse import urlparse
class SuspiciousActivity(RuntimeError):
diff --git a/nucypher/network/server.py b/nucypher/network/server.py
index c39517513..418e0788c 100644
--- a/nucypher/network/server.py
+++ b/nucypher/network/server.py
@@ -16,33 +16,28 @@ along with nucypher. If not, see .
"""
import binascii
-import json
import os
-from typing import Tuple
-
-import requests
from bytestring_splitter import BytestringSplitter
from constant_sorrow import constants
-from constant_sorrow.constants import FLEET_STATES_MATCH, NO_KNOWN_NODES
-from constant_sorrow.constants import NO_BLOCKCHAIN_CONNECTION
-from flask import Flask, Response, request
-from flask import jsonify
+from constant_sorrow.constants import FLEET_STATES_MATCH, NO_BLOCKCHAIN_CONNECTION, NO_KNOWN_NODES
+from flask import Flask, Response, jsonify, request
from hendrix.experience import crosstown_traffic
from jinja2 import Template, TemplateError
from twisted.logger import Logger
+from typing import Tuple
from umbral.keys import UmbralPublicKey
from umbral.kfrags import KFrag
from web3.exceptions import TimeExhausted
import nucypher
-from nucypher.config.storages import ForgetfulNodeStorage
from nucypher.config.constants import MAX_UPLOAD_CONTENT_LENGTH
+from nucypher.config.storages import ForgetfulNodeStorage
from nucypher.crypto.kits import UmbralMessageKit
from nucypher.crypto.powers import KeyPairBasedPower, PowerUpError
from nucypher.crypto.signing import InvalidSignature
from nucypher.crypto.utils import canonical_address_from_umbral_key
-from nucypher.datastore.keypairs import HostingKeypair
from nucypher.datastore.datastore import NotFound
+from nucypher.datastore.keypairs import HostingKeypair
from nucypher.datastore.threading import ThreadedSession
from nucypher.network import LEARNING_LOOP_VERSION
from nucypher.network.exceptions import NodeSeemsToBeDown
diff --git a/nucypher/network/trackers.py b/nucypher/network/trackers.py
index f5c01c28f..cd772360b 100644
--- a/nucypher/network/trackers.py
+++ b/nucypher/network/trackers.py
@@ -1,10 +1,10 @@
import random
-from typing import Union
import maya
from twisted.internet import reactor
from twisted.internet.task import LoopingCall
from twisted.logger import Logger
+from typing import Union
from nucypher.network.exceptions import NodeSeemsToBeDown
from nucypher.network.middleware import RestMiddleware
diff --git a/nucypher/policy/collections.py b/nucypher/policy/collections.py
index 014e0d51d..4c08e3209 100644
--- a/nucypher/policy/collections.py
+++ b/nucypher/policy/collections.py
@@ -16,19 +16,18 @@ along with nucypher. If not, see .
"""
-import binascii
import json
from collections import OrderedDict
-from typing import List, Optional, Tuple
+import binascii
import maya
import msgpack
-from bytestring_splitter import BytestringSplitter, VariableLengthBytestring, BytestringSplittingError
-from constant_sorrow.constants import CFRAG_NOT_RETAINED
-from constant_sorrow.constants import NO_DECRYPTION_PERFORMED
+from bytestring_splitter import BytestringSplitter, BytestringSplittingError, VariableLengthBytestring
+from constant_sorrow.constants import CFRAG_NOT_RETAINED, NO_DECRYPTION_PERFORMED
from cryptography.hazmat.backends.openssl import backend
from cryptography.hazmat.primitives import hashes
from eth_utils import to_canonical_address, to_checksum_address
+from typing import List, Optional, Tuple
from umbral.cfrags import CapsuleFrag
from umbral.config import default_params
from umbral.curvebn import CurveBN
@@ -36,11 +35,11 @@ from umbral.keys import UmbralPublicKey
from umbral.pre import Capsule
from nucypher.characters.lawful import Bob, Character
-from nucypher.crypto.api import keccak_digest, encrypt_and_sign
-from nucypher.crypto.constants import PUBLIC_ADDRESS_LENGTH, KECCAK_DIGEST_LENGTH
+from nucypher.crypto.api import encrypt_and_sign, keccak_digest
+from nucypher.crypto.constants import KECCAK_DIGEST_LENGTH, PUBLIC_ADDRESS_LENGTH
from nucypher.crypto.kits import UmbralMessageKit
-from nucypher.crypto.signing import Signature, InvalidSignature, signature_splitter
-from nucypher.crypto.splitters import key_splitter, capsule_splitter
+from nucypher.crypto.signing import InvalidSignature, Signature, signature_splitter
+from nucypher.crypto.splitters import capsule_splitter, key_splitter
from nucypher.crypto.utils import (canonical_address_from_umbral_key,
get_coordinates_as_bytes,
get_signature_recovery_value)
diff --git a/nucypher/policy/policies.py b/nucypher/policy/policies.py
index 23e3585ae..6518e643a 100644
--- a/nucypher/policy/policies.py
+++ b/nucypher/policy/policies.py
@@ -16,21 +16,21 @@ along with nucypher. If not, see .
"""
import random
-from abc import abstractmethod, ABC
from collections import OrderedDict, deque
-from typing import Generator, Set, List
import maya
+from abc import ABC, abstractmethod
from bytestring_splitter import BytestringSplitter, VariableLengthBytestring
-from constant_sorrow.constants import NOT_SIGNED, UNKNOWN_KFRAG, FEDERATED_POLICY, UNKNOWN_ARRANGEMENTS
+from constant_sorrow.constants import NOT_SIGNED, UNKNOWN_KFRAG
from twisted.logger import Logger
+from typing import Generator, List, Set
from umbral.keys import UmbralPublicKey
from umbral.kfrags import KFrag
from nucypher.blockchain.eth.actors import BlockchainPolicyAuthor
-from nucypher.blockchain.eth.agents import StakingEscrowAgent, PolicyManagerAgent
+from nucypher.blockchain.eth.agents import PolicyManagerAgent, StakingEscrowAgent
from nucypher.characters.lawful import Alice, Ursula
-from nucypher.crypto.api import secure_random, keccak_digest
+from nucypher.crypto.api import keccak_digest, secure_random
from nucypher.crypto.constants import PUBLIC_KEY_LENGTH
from nucypher.crypto.kits import RevocationKit
from nucypher.crypto.powers import DecryptingPower, SigningPower
diff --git a/nucypher/utilities/logging.py b/nucypher/utilities/logging.py
index d51ec66ea..8cf588fe4 100644
--- a/nucypher/utilities/logging.py
+++ b/nucypher/utilities/logging.py
@@ -15,16 +15,15 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import pathlib
from contextlib import contextmanager
-from twisted.logger import FileLogObserver, jsonFileLogObserver, formatEvent, formatEventAsClassicLogText
-from twisted.logger import LogLevel
-from twisted.logger import globalLogPublisher
+import pathlib
+from twisted.logger import FileLogObserver, LogLevel, formatEvent, formatEventAsClassicLogText, globalLogPublisher, \
+ jsonFileLogObserver
from twisted.python.logfile import LogFile
import nucypher
-from nucypher.config.constants import USER_LOG_DIR, NUCYPHER_SENTRY_ENDPOINT
+from nucypher.config.constants import NUCYPHER_SENTRY_ENDPOINT, USER_LOG_DIR
ONE_MEGABYTE = 1_048_576
MAXIMUM_LOG_SIZE = ONE_MEGABYTE * 10
diff --git a/tests/blockchain/eth/clients/test_geth_integration.py b/tests/blockchain/eth/clients/test_geth_integration.py
index fd7c44b33..4470027d0 100644
--- a/tests/blockchain/eth/clients/test_geth_integration.py
+++ b/tests/blockchain/eth/clients/test_geth_integration.py
@@ -1,15 +1,11 @@
import os
-
import pytest
-from eth_utils import is_checksum_address
-from eth_utils import to_checksum_address
+from eth_utils import is_checksum_address, to_checksum_address
from nucypher.blockchain.eth.actors import ContractAdministrator
-from nucypher.blockchain.eth.interfaces import BlockchainInterface, BlockchainDeployerInterface, \
+from nucypher.blockchain.eth.interfaces import BlockchainDeployerInterface, BlockchainInterface, \
BlockchainInterfaceFactory
from nucypher.crypto.api import verify_eip_191
-
-
#
# NOTE: This module is skipped on CI
#
diff --git a/tests/blockchain/eth/clients/test_keystore_signer.py b/tests/blockchain/eth/clients/test_keystore_signer.py
index 212d57030..e2732a654 100644
--- a/tests/blockchain/eth/clients/test_keystore_signer.py
+++ b/tests/blockchain/eth/clients/test_keystore_signer.py
@@ -1,17 +1,14 @@
-import shutil
-
import json
-from pathlib import Path
-
import os
-
import pytest
+import shutil
from cytoolz.dicttoolz import assoc
from eth_account import Account
from eth_account._utils.transactions import Transaction
from eth_utils import to_checksum_address
from hexbytes import HexBytes
+from pathlib import Path
from nucypher.blockchain.eth.signers import KeystoreSigner, Signer
from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD
diff --git a/tests/blockchain/eth/clients/test_mocked_clients.py b/tests/blockchain/eth/clients/test_mocked_clients.py
index 305227f07..6dbd48479 100644
--- a/tests/blockchain/eth/clients/test_mocked_clients.py
+++ b/tests/blockchain/eth/clients/test_mocked_clients.py
@@ -1,16 +1,9 @@
import datetime
-
import pytest
from web3 import HTTPProvider, IPCProvider, WebsocketProvider
-from nucypher.blockchain.eth.clients import (
- EthereumClient,
- GethClient,
- ParityClient,
- GanacheClient,
- InfuraClient,
- PUBLIC_CHAINS
-)
+from nucypher.blockchain.eth.clients import (EthereumClient, GanacheClient, GethClient, InfuraClient, PUBLIC_CHAINS,
+ ParityClient)
from nucypher.blockchain.eth.interfaces import BlockchainInterface
diff --git a/tests/blockchain/eth/contracts/integration/test_contract_economics.py b/tests/blockchain/eth/contracts/integration/test_contract_economics.py
index 07f6e4e5f..6ebf18c30 100644
--- a/tests/blockchain/eth/contracts/integration/test_contract_economics.py
+++ b/tests/blockchain/eth/contracts/integration/test_contract_economics.py
@@ -16,7 +16,6 @@ along with nucypher. If not, see .
"""
import pytest
-from nucypher.utilities.sandbox.constants import INSECURE_DEVELOPMENT_PASSWORD
from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD
diff --git a/tests/blockchain/eth/contracts/integration/test_intercontract_integration.py b/tests/blockchain/eth/contracts/integration/test_intercontract_integration.py
index abae9bf93..007083571 100644
--- a/tests/blockchain/eth/contracts/integration/test_intercontract_integration.py
+++ b/tests/blockchain/eth/contracts/integration/test_intercontract_integration.py
@@ -17,7 +17,6 @@ along with nucypher. If not, see .
import os
-
import pytest
from eth_tester.exceptions import TransactionFailed
from eth_utils import to_canonical_address, to_wei
diff --git a/tests/blockchain/eth/contracts/lib/test_reencryption_validator.py b/tests/blockchain/eth/contracts/lib/test_reencryption_validator.py
index f376f2cbc..58382fad4 100644
--- a/tests/blockchain/eth/contracts/lib/test_reencryption_validator.py
+++ b/tests/blockchain/eth/contracts/lib/test_reencryption_validator.py
@@ -17,14 +17,12 @@ along with nucypher. If not, see .
import os
import pytest
-
from eth_tester.exceptions import TransactionFailed
-
from umbral.config import default_params
from umbral.curvebn import CurveBN
from umbral.keys import UmbralPrivateKey
from umbral.point import Point
-from umbral.random_oracles import hash_to_curvebn, ExtendedKeccak
+from umbral.random_oracles import ExtendedKeccak, hash_to_curvebn
from umbral.signing import Signer
from nucypher.crypto.signing import SignatureStamp
diff --git a/tests/blockchain/eth/contracts/lib/test_signature_verifier.py b/tests/blockchain/eth/contracts/lib/test_signature_verifier.py
index 8de46acd6..18195d8e2 100644
--- a/tests/blockchain/eth/contracts/lib/test_signature_verifier.py
+++ b/tests/blockchain/eth/contracts/lib/test_signature_verifier.py
@@ -17,20 +17,18 @@ along with nucypher. If not, see .
import os
-
import pytest
from cryptography.hazmat.backends.openssl import backend
from cryptography.hazmat.primitives import hashes
from eth_account.account import Account
-from eth_account.messages import encode_defunct, SignableMessage, HexBytes
+from eth_account.messages import HexBytes, SignableMessage, encode_defunct
from eth_tester.exceptions import TransactionFailed
-from eth_utils import to_normalized_address, to_checksum_address, to_canonical_address
-
+from eth_utils import to_canonical_address, to_checksum_address, to_normalized_address
from umbral.keys import UmbralPrivateKey
from umbral.signing import Signer
from nucypher.crypto.api import keccak_digest, verify_eip_191
-from nucypher.crypto.utils import get_signature_recovery_value, canonical_address_from_umbral_key
+from nucypher.crypto.utils import canonical_address_from_umbral_key, get_signature_recovery_value
ALGORITHM_KECCAK256 = 0
ALGORITHM_SHA256 = 1
diff --git a/tests/blockchain/eth/contracts/lib/test_umbral_deserializer.py b/tests/blockchain/eth/contracts/lib/test_umbral_deserializer.py
index 874bfe980..436fee6a4 100644
--- a/tests/blockchain/eth/contracts/lib/test_umbral_deserializer.py
+++ b/tests/blockchain/eth/contracts/lib/test_umbral_deserializer.py
@@ -17,11 +17,9 @@ along with nucypher. If not, see .
import os
-
import pytest
from eth_tester.exceptions import TransactionFailed
-
-from umbral import pre, keys
+from umbral import keys, pre
from umbral.signing import Signer
diff --git a/tests/blockchain/eth/contracts/main/adjudicator/test_adjudicator.py b/tests/blockchain/eth/contracts/main/adjudicator/test_adjudicator.py
index df70ab513..46783bd89 100644
--- a/tests/blockchain/eth/contracts/main/adjudicator/test_adjudicator.py
+++ b/tests/blockchain/eth/contracts/main/adjudicator/test_adjudicator.py
@@ -17,19 +17,15 @@ along with nucypher. If not, see .
import os
-
import pytest
from eth_tester.exceptions import TransactionFailed
-from eth_utils import keccak
from typing import Tuple
-from web3.contract import Contract
-
from umbral.keys import UmbralPrivateKey
from umbral.point import Point
+from web3.contract import Contract
from nucypher.crypto.api import sha256_digest
-
ALGORITHM_KECCAK256 = 0
ALGORITHM_SHA256 = 1
diff --git a/tests/blockchain/eth/contracts/main/policy_manager/test_policy_manager.py b/tests/blockchain/eth/contracts/main/policy_manager/test_policy_manager.py
index d99a3c886..d8c02c76f 100644
--- a/tests/blockchain/eth/contracts/main/policy_manager/test_policy_manager.py
+++ b/tests/blockchain/eth/contracts/main/policy_manager/test_policy_manager.py
@@ -17,7 +17,6 @@ along with nucypher. If not, see .
import os
-
import pytest
from eth_tester.exceptions import TransactionFailed
from eth_utils import to_canonical_address
diff --git a/tests/blockchain/eth/contracts/main/policy_manager/test_policy_manager_operations.py b/tests/blockchain/eth/contracts/main/policy_manager/test_policy_manager_operations.py
index c8e11348f..fa7277a7a 100644
--- a/tests/blockchain/eth/contracts/main/policy_manager/test_policy_manager_operations.py
+++ b/tests/blockchain/eth/contracts/main/policy_manager/test_policy_manager_operations.py
@@ -17,7 +17,6 @@ along with nucypher. If not, see .
import os
-
import pytest
from eth_tester.exceptions import TransactionFailed
diff --git a/tests/blockchain/eth/contracts/main/staking_contracts/conftest.py b/tests/blockchain/eth/contracts/main/staking_contracts/conftest.py
index 00ceccb58..093a3a9f0 100644
--- a/tests/blockchain/eth/contracts/main/staking_contracts/conftest.py
+++ b/tests/blockchain/eth/contracts/main/staking_contracts/conftest.py
@@ -15,12 +15,11 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-
-import os
import pytest
from nucypher.blockchain.eth.token import NU
+
@pytest.fixture()
def token(testerchain, deploy_contract):
# Create an ERC20 token
diff --git a/tests/blockchain/eth/contracts/main/staking_escrow/test_staking_escrow_additional.py b/tests/blockchain/eth/contracts/main/staking_escrow/test_staking_escrow_additional.py
index f28b1b0cd..b2e2970d9 100644
--- a/tests/blockchain/eth/contracts/main/staking_escrow/test_staking_escrow_additional.py
+++ b/tests/blockchain/eth/contracts/main/staking_escrow/test_staking_escrow_additional.py
@@ -24,7 +24,7 @@ from web3.contract import Contract
from nucypher.blockchain.eth.constants import NULL_ADDRESS
from nucypher.blockchain.eth.token import NU
-from tests.utils.solidity import to_bytes32, get_mapping_entry_location, get_array_data_location
+from tests.utils.solidity import get_array_data_location, get_mapping_entry_location, to_bytes32
LOCK_RE_STAKE_UNTIL_PERIOD_FIELD = 4
diff --git a/tests/blockchain/eth/contracts/test_contracts_upgradeability.py b/tests/blockchain/eth/contracts/test_contracts_upgradeability.py
index c2b11e8b4..dc4c19e23 100644
--- a/tests/blockchain/eth/contracts/test_contracts_upgradeability.py
+++ b/tests/blockchain/eth/contracts/test_contracts_upgradeability.py
@@ -15,15 +15,15 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
import contextlib
-import os
+import os
import pytest
import requests
from web3.exceptions import ValidationError
-from nucypher.blockchain.eth.deployers import NucypherTokenDeployer, StakingEscrowDeployer, PolicyManagerDeployer, \
- AdjudicatorDeployer, BaseContractDeployer
-from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory, BlockchainDeployerInterface
+from nucypher.blockchain.eth.deployers import AdjudicatorDeployer, BaseContractDeployer, NucypherTokenDeployer, \
+ PolicyManagerDeployer, StakingEscrowDeployer
+from nucypher.blockchain.eth.interfaces import BlockchainDeployerInterface, BlockchainInterfaceFactory
from nucypher.blockchain.eth.registry import InMemoryContractRegistry
from nucypher.blockchain.eth.sol.compile import SolidityCompiler, SourceDirs
from nucypher.crypto.powers import TransactingPower
diff --git a/tests/blockchain/eth/entities/actors/test_deployer.py b/tests/blockchain/eth/entities/actors/test_deployer.py
index e2c551ae3..25b9b8777 100644
--- a/tests/blockchain/eth/entities/actors/test_deployer.py
+++ b/tests/blockchain/eth/entities/actors/test_deployer.py
@@ -26,7 +26,7 @@ from nucypher.characters.control.emitters import StdoutEmitter
from nucypher.crypto.powers import TransactingPower
# Prevents TesterBlockchain to be picked up by py.test as a test class
from tests.utils.blockchain import TesterBlockchain as _TesterBlockchain
-from tests.utils.constants import NUMBER_OF_ALLOCATIONS_IN_TESTS, INSECURE_DEVELOPMENT_PASSWORD
+from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD, NUMBER_OF_ALLOCATIONS_IN_TESTS
@pytest.mark.slow()
diff --git a/tests/blockchain/eth/entities/actors/test_investigator.py b/tests/blockchain/eth/entities/actors/test_investigator.py
index f04c68cef..3870289b8 100644
--- a/tests/blockchain/eth/entities/actors/test_investigator.py
+++ b/tests/blockchain/eth/entities/actors/test_investigator.py
@@ -16,11 +16,10 @@ along with nucypher. If not, see .
"""
import pytest
-
from umbral.keys import UmbralPrivateKey
from umbral.signing import Signer
-from nucypher.blockchain.eth.actors import Staker, Investigator
+from nucypher.blockchain.eth.actors import Investigator, Staker
from nucypher.blockchain.eth.constants import NULL_ADDRESS
from nucypher.blockchain.eth.token import NU
from nucypher.crypto.signing import SignatureStamp
diff --git a/tests/blockchain/eth/entities/actors/test_multisig_actors.py b/tests/blockchain/eth/entities/actors/test_multisig_actors.py
index 54953c605..569c58c62 100644
--- a/tests/blockchain/eth/entities/actors/test_multisig_actors.py
+++ b/tests/blockchain/eth/entities/actors/test_multisig_actors.py
@@ -16,13 +16,11 @@ along with nucypher. If not, see .
"""
import pytest
+from unittest.mock import PropertyMock, patch
from nucypher.blockchain.eth.actors import Trustee
from nucypher.blockchain.eth.agents import MultiSigAgent
from nucypher.blockchain.eth.deployers import MultiSigDeployer
-from nucypher.blockchain.eth.interfaces import BlockchainInterface
-
-from unittest.mock import PropertyMock, patch
@pytest.mark.slow()
diff --git a/tests/blockchain/eth/entities/agents/test_adjudicator_agent.py b/tests/blockchain/eth/entities/agents/test_adjudicator_agent.py
index 2b7f809a6..e80504b16 100644
--- a/tests/blockchain/eth/entities/agents/test_adjudicator_agent.py
+++ b/tests/blockchain/eth/entities/agents/test_adjudicator_agent.py
@@ -16,7 +16,6 @@ along with nucypher. If not, see .
"""
import pytest
-
from umbral.keys import UmbralPrivateKey
from umbral.signing import Signer
diff --git a/tests/blockchain/eth/entities/agents/test_preallocation_escrow_agent.py b/tests/blockchain/eth/entities/agents/test_preallocation_escrow_agent.py
index bf66414e5..d2094012b 100644
--- a/tests/blockchain/eth/entities/agents/test_preallocation_escrow_agent.py
+++ b/tests/blockchain/eth/entities/agents/test_preallocation_escrow_agent.py
@@ -14,9 +14,8 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import os
-
import maya
+import os
import pytest
from eth_tester.exceptions import TransactionFailed
from eth_utils import is_checksum_address, to_wei
diff --git a/tests/blockchain/eth/entities/agents/test_sampling_distribution.py b/tests/blockchain/eth/entities/agents/test_sampling_distribution.py
index 020c9a8a0..5ece5a96b 100644
--- a/tests/blockchain/eth/entities/agents/test_sampling_distribution.py
+++ b/tests/blockchain/eth/entities/agents/test_sampling_distribution.py
@@ -15,9 +15,10 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import pytest
from collections import Counter
+import pytest
+
from nucypher.blockchain.economics import BaseEconomics
from nucypher.blockchain.eth.agents import StakingEscrowAgent
from nucypher.blockchain.eth.constants import NULL_ADDRESS, STAKING_ESCROW_CONTRACT_NAME
diff --git a/tests/blockchain/eth/entities/agents/test_staking_escrow_agent.py b/tests/blockchain/eth/entities/agents/test_staking_escrow_agent.py
index 64c090295..a91f40735 100644
--- a/tests/blockchain/eth/entities/agents/test_staking_escrow_agent.py
+++ b/tests/blockchain/eth/entities/agents/test_staking_escrow_agent.py
@@ -16,12 +16,11 @@ along with nucypher. If not, see .
"""
import os
-
import pytest
from eth_tester.exceptions import TransactionFailed
-from eth_utils.address import to_checksum_address, is_address
+from eth_utils.address import is_address, to_checksum_address
-from nucypher.blockchain.eth.agents import StakingEscrowAgent, ContractAgency
+from nucypher.blockchain.eth.agents import ContractAgency, StakingEscrowAgent
from nucypher.blockchain.eth.constants import NULL_ADDRESS
from nucypher.blockchain.eth.registry import BaseContractRegistry
from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD
diff --git a/tests/blockchain/eth/entities/agents/test_worklock_agent.py b/tests/blockchain/eth/entities/agents/test_worklock_agent.py
index 47e3052da..fee7d696f 100644
--- a/tests/blockchain/eth/entities/agents/test_worklock_agent.py
+++ b/tests/blockchain/eth/entities/agents/test_worklock_agent.py
@@ -1,7 +1,7 @@
import pytest
from eth_tester.exceptions import TransactionFailed
-from nucypher.blockchain.eth.agents import WorkLockAgent, ContractAgency, StakingEscrowAgent
+from nucypher.blockchain.eth.agents import ContractAgency, StakingEscrowAgent, WorkLockAgent
from nucypher.blockchain.eth.interfaces import BlockchainInterface
diff --git a/tests/blockchain/eth/entities/deployers/conftest.py b/tests/blockchain/eth/entities/deployers/conftest.py
index 2a9bdcb1c..bd026b7b8 100644
--- a/tests/blockchain/eth/entities/deployers/conftest.py
+++ b/tests/blockchain/eth/entities/deployers/conftest.py
@@ -17,11 +17,8 @@ along with nucypher. If not, see .
import pytest
-from nucypher.blockchain.eth.deployers import (NucypherTokenDeployer,
- StakingEscrowDeployer,
- PolicyManagerDeployer,
- AdjudicatorDeployer,
- StakingInterfaceDeployer)
+from nucypher.blockchain.eth.deployers import (AdjudicatorDeployer, NucypherTokenDeployer, PolicyManagerDeployer,
+ StakingEscrowDeployer, StakingInterfaceDeployer)
@pytest.fixture(scope="module")
diff --git a/tests/blockchain/eth/entities/deployers/test_deploy_idle_network.py b/tests/blockchain/eth/entities/deployers/test_deploy_idle_network.py
index eee50ec92..f3b1a8f59 100644
--- a/tests/blockchain/eth/entities/deployers/test_deploy_idle_network.py
+++ b/tests/blockchain/eth/entities/deployers/test_deploy_idle_network.py
@@ -16,16 +16,13 @@ along with nucypher. If not, see .
"""
import pytest
-from eth_tester.exceptions import TransactionFailed
from constant_sorrow import constants
+from eth_tester.exceptions import TransactionFailed
from nucypher.blockchain.eth.actors import Staker
-from nucypher.blockchain.eth.agents import NucypherTokenAgent, StakingEscrowAgent, ContractAgency
-from nucypher.blockchain.eth.deployers import (NucypherTokenDeployer,
- StakingEscrowDeployer,
- PolicyManagerDeployer,
- AdjudicatorDeployer,
- BaseContractDeployer)
+from nucypher.blockchain.eth.agents import ContractAgency, NucypherTokenAgent, StakingEscrowAgent
+from nucypher.blockchain.eth.deployers import (AdjudicatorDeployer, BaseContractDeployer, NucypherTokenDeployer,
+ PolicyManagerDeployer, StakingEscrowDeployer)
from nucypher.crypto.powers import TransactingPower
from tests.utils.blockchain import token_airdrop
from tests.utils.constants import DEVELOPMENT_TOKEN_AIRDROP_AMOUNT, INSECURE_DEVELOPMENT_PASSWORD
diff --git a/tests/blockchain/eth/entities/deployers/test_deploy_preallocations.py b/tests/blockchain/eth/entities/deployers/test_deploy_preallocations.py
index d1bf47e5c..1cd44f993 100644
--- a/tests/blockchain/eth/entities/deployers/test_deploy_preallocations.py
+++ b/tests/blockchain/eth/entities/deployers/test_deploy_preallocations.py
@@ -15,12 +15,11 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import os
import random
import pytest
-from nucypher.blockchain.eth.deployers import PreallocationEscrowDeployer, StakingInterfaceDeployer
+from nucypher.blockchain.eth.deployers import PreallocationEscrowDeployer
@pytest.mark.slow()
diff --git a/tests/blockchain/eth/entities/deployers/test_interdeployer_integration.py b/tests/blockchain/eth/entities/deployers/test_interdeployer_integration.py
index b788c65d3..3866b0446 100644
--- a/tests/blockchain/eth/entities/deployers/test_interdeployer_integration.py
+++ b/tests/blockchain/eth/entities/deployers/test_interdeployer_integration.py
@@ -14,19 +14,13 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import os
import pytest
-from eth_utils import keccak
from constant_sorrow import constants
-from nucypher.blockchain.eth.agents import NucypherTokenAgent, StakingEscrowAgent, AdjudicatorAgent, ContractAgency
-from nucypher.blockchain.eth.deployers import (NucypherTokenDeployer,
- StakingEscrowDeployer,
- PolicyManagerDeployer,
- AdjudicatorDeployer,
- BaseContractDeployer,
- DispatcherDeployer)
+from nucypher.blockchain.eth.agents import AdjudicatorAgent, ContractAgency, NucypherTokenAgent, StakingEscrowAgent
+from nucypher.blockchain.eth.deployers import (AdjudicatorDeployer, BaseContractDeployer, NucypherTokenDeployer,
+ PolicyManagerDeployer, StakingEscrowDeployer)
@pytest.mark.slow()
diff --git a/tests/blockchain/eth/entities/deployers/test_policy_manager_deployer.py b/tests/blockchain/eth/entities/deployers/test_policy_manager_deployer.py
index 86994bd2e..11dfea79f 100644
--- a/tests/blockchain/eth/entities/deployers/test_policy_manager_deployer.py
+++ b/tests/blockchain/eth/entities/deployers/test_policy_manager_deployer.py
@@ -15,16 +15,9 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-
-import pytest
-from eth_utils import keccak
-
-from nucypher.blockchain.eth.agents import PolicyManagerAgent, StakingEscrowAgent, ContractAgency
+from nucypher.blockchain.eth.agents import ContractAgency, PolicyManagerAgent, StakingEscrowAgent
from nucypher.blockchain.eth.constants import POLICY_MANAGER_CONTRACT_NAME
-from nucypher.blockchain.eth.deployers import (
- PolicyManagerDeployer,
- DispatcherDeployer
-)
+from nucypher.blockchain.eth.deployers import (DispatcherDeployer, PolicyManagerDeployer)
def test_policy_manager_deployment(policy_manager_deployer, staking_escrow_deployer, deployment_progress):
diff --git a/tests/blockchain/eth/entities/deployers/test_preallocation_escrow_deployer.py b/tests/blockchain/eth/entities/deployers/test_preallocation_escrow_deployer.py
index f8de4583b..fad61e183 100644
--- a/tests/blockchain/eth/entities/deployers/test_preallocation_escrow_deployer.py
+++ b/tests/blockchain/eth/entities/deployers/test_preallocation_escrow_deployer.py
@@ -18,16 +18,9 @@ along with nucypher. If not, see .
import pytest
-from nucypher.blockchain.eth.deployers import (
- PreallocationEscrowDeployer,
- StakingInterfaceDeployer,
- StakingInterfaceRouterDeployer,
- NucypherTokenDeployer,
- StakingEscrowDeployer,
- PolicyManagerDeployer,
- AdjudicatorDeployer
-)
-from nucypher.crypto.api import keccak_digest
+from nucypher.blockchain.eth.deployers import (AdjudicatorDeployer, NucypherTokenDeployer, PolicyManagerDeployer,
+ PreallocationEscrowDeployer, StakingEscrowDeployer,
+ StakingInterfaceDeployer, StakingInterfaceRouterDeployer)
preallocation_escrow_contracts = list()
NUMBER_OF_PREALLOCATIONS = 50
diff --git a/tests/blockchain/eth/entities/deployers/test_staking_escrow_deployer.py b/tests/blockchain/eth/entities/deployers/test_staking_escrow_deployer.py
index af3c428a1..e27c3d341 100644
--- a/tests/blockchain/eth/entities/deployers/test_staking_escrow_deployer.py
+++ b/tests/blockchain/eth/entities/deployers/test_staking_escrow_deployer.py
@@ -15,14 +15,10 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import pytest
from constant_sorrow.constants import BARE
-from eth_utils import keccak
-from nucypher.blockchain.eth.agents import StakingEscrowAgent, ContractAgency
-from nucypher.blockchain.eth.deployers import (StakingEscrowDeployer,
- DispatcherDeployer)
-from nucypher.crypto.api import keccak_digest
+from nucypher.blockchain.eth.agents import ContractAgency, StakingEscrowAgent
+from nucypher.blockchain.eth.deployers import (DispatcherDeployer, StakingEscrowDeployer)
def test_staking_escrow_deployment(staking_escrow_deployer, deployment_progress):
diff --git a/tests/blockchain/eth/interfaces/test_chains.py b/tests/blockchain/eth/interfaces/test_chains.py
index 1aafe4976..51837d656 100644
--- a/tests/blockchain/eth/interfaces/test_chains.py
+++ b/tests/blockchain/eth/interfaces/test_chains.py
@@ -14,9 +14,9 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import os
-from os.path import dirname, abspath
+from os.path import abspath, dirname
+import os
import pytest
from nucypher.blockchain.eth.interfaces import BlockchainDeployerInterface
@@ -25,13 +25,9 @@ from nucypher.blockchain.eth.sol.compile import SolidityCompiler, SourceDirs
from nucypher.crypto.powers import TransactingPower
# Prevents TesterBlockchain to be picked up by py.test as a test class
from tests.utils.blockchain import TesterBlockchain as _TesterBlockchain
-from tests.utils.constants import (
- DEVELOPMENT_ETH_AIRDROP_AMOUNT,
- NUMBER_OF_ETH_TEST_ACCOUNTS,
- NUMBER_OF_STAKERS_IN_BLOCKCHAIN_TESTS,
- NUMBER_OF_URSULAS_IN_BLOCKCHAIN_TESTS,
- INSECURE_DEVELOPMENT_PASSWORD
-)
+from tests.utils.constants import (DEVELOPMENT_ETH_AIRDROP_AMOUNT, INSECURE_DEVELOPMENT_PASSWORD,
+ NUMBER_OF_ETH_TEST_ACCOUNTS, NUMBER_OF_STAKERS_IN_BLOCKCHAIN_TESTS,
+ NUMBER_OF_URSULAS_IN_BLOCKCHAIN_TESTS)
@pytest.fixture()
diff --git a/tests/blockchain/eth/interfaces/test_decorators.py b/tests/blockchain/eth/interfaces/test_decorators.py
index 1d41e8de7..392d59727 100644
--- a/tests/blockchain/eth/interfaces/test_decorators.py
+++ b/tests/blockchain/eth/interfaces/test_decorators.py
@@ -15,12 +15,9 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-import os
import pytest
-from eth_utils import to_checksum_address
-
-from nucypher.blockchain.eth.decorators import validate_checksum_address, InvalidChecksumAddress
+from nucypher.blockchain.eth.decorators import InvalidChecksumAddress, validate_checksum_address
def test_validate_checksum_address(get_random_checksum_address):
diff --git a/tests/blockchain/eth/interfaces/test_registry.py b/tests/blockchain/eth/interfaces/test_registry.py
index 018ad80dd..059f880c6 100644
--- a/tests/blockchain/eth/interfaces/test_registry.py
+++ b/tests/blockchain/eth/interfaces/test_registry.py
@@ -16,11 +16,12 @@ along with nucypher. If not, see .
"""
import json
+
import pytest
from nucypher.blockchain.eth.constants import PREALLOCATION_ESCROW_CONTRACT_NAME
from nucypher.blockchain.eth.interfaces import BaseContractRegistry
-from nucypher.blockchain.eth.registry import LocalContractRegistry, IndividualAllocationRegistry
+from nucypher.blockchain.eth.registry import IndividualAllocationRegistry, LocalContractRegistry
from tests.utils.constants import TEMPORARY_DOMAIN
diff --git a/tests/blockchain/eth/interfaces/test_solidity_compiler.py b/tests/blockchain/eth/interfaces/test_solidity_compiler.py
index f004eac8f..9e6afb6fc 100644
--- a/tests/blockchain/eth/interfaces/test_solidity_compiler.py
+++ b/tests/blockchain/eth/interfaces/test_solidity_compiler.py
@@ -14,8 +14,9 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
+from os.path import abspath, dirname
+
import os
-from os.path import dirname, abspath
from nucypher.blockchain.eth.deployers import NucypherTokenDeployer
from nucypher.blockchain.eth.sol.compile import SolidityCompiler, SourceDirs
diff --git a/tests/blockchain/eth/interfaces/test_token_and_stake.py b/tests/blockchain/eth/interfaces/test_token_and_stake.py
index bc2572b73..9db9d5621 100644
--- a/tests/blockchain/eth/interfaces/test_token_and_stake.py
+++ b/tests/blockchain/eth/interfaces/test_token_and_stake.py
@@ -1,6 +1,5 @@
-from decimal import InvalidOperation, Decimal
-
import pytest
+from decimal import Decimal, InvalidOperation
from web3 import Web3
from nucypher.blockchain.eth.token import NU, Stake
diff --git a/tests/characters/control/blockchain/conftest.py b/tests/characters/control/blockchain/conftest.py
index e475b073c..bdd29ab3c 100644
--- a/tests/characters/control/blockchain/conftest.py
+++ b/tests/characters/control/blockchain/conftest.py
@@ -1,6 +1,6 @@
-import datetime
from base64 import b64encode
+import datetime
import maya
import pytest
diff --git a/tests/characters/control/blockchain/test_rpc_control_blockchain.py b/tests/characters/control/blockchain/test_rpc_control_blockchain.py
index 519eea3a0..86de891a5 100644
--- a/tests/characters/control/blockchain/test_rpc_control_blockchain.py
+++ b/tests/characters/control/blockchain/test_rpc_control_blockchain.py
@@ -1,10 +1,10 @@
+from base64 import b64encode
+
import pytest
-from base64 import b64encode
-from nucypher.policy.collections import TreasureMap
-from nucypher.crypto.powers import DecryptingPower, SigningPower
-from nucypher.characters.lawful import Ursula
from nucypher.characters.control.interfaces import AliceInterface, BobInterface, EnricoInterface
+from nucypher.crypto.powers import DecryptingPower, SigningPower
+from nucypher.policy.collections import TreasureMap
def get_fields(interface, method_name):
diff --git a/tests/characters/control/blockchain/test_web_control_blockchain.py b/tests/characters/control/blockchain/test_web_control_blockchain.py
index 7f0c5e0ca..fcfe86932 100644
--- a/tests/characters/control/blockchain/test_web_control_blockchain.py
+++ b/tests/characters/control/blockchain/test_web_control_blockchain.py
@@ -1,7 +1,7 @@
-import datetime
import json
-from base64 import b64encode, b64decode
+from base64 import b64decode, b64encode
+import datetime
import maya
import pytest
from click.testing import CliRunner
diff --git a/tests/characters/control/federated/conftest.py b/tests/characters/control/federated/conftest.py
index 3bdf6d14a..2fd0531aa 100644
--- a/tests/characters/control/federated/conftest.py
+++ b/tests/characters/control/federated/conftest.py
@@ -1,6 +1,6 @@
-import datetime
from base64 import b64encode
+import datetime
import maya
import pytest
diff --git a/tests/characters/control/federated/test_web_control_federated.py b/tests/characters/control/federated/test_web_control_federated.py
index ca38b5a63..9c659a622 100644
--- a/tests/characters/control/federated/test_web_control_federated.py
+++ b/tests/characters/control/federated/test_web_control_federated.py
@@ -1,7 +1,7 @@
-import datetime
import json
-from base64 import b64encode, b64decode
+from base64 import b64decode, b64encode
+import datetime
import maya
import pytest
from click.testing import CliRunner
diff --git a/tests/characters/test_alice_can_grant_and_revoke.py b/tests/characters/test_alice_can_grant_and_revoke.py
index 4ae77d585..42689e6f3 100644
--- a/tests/characters/test_alice_can_grant_and_revoke.py
+++ b/tests/characters/test_alice_can_grant_and_revoke.py
@@ -16,17 +16,16 @@ along with nucypher. If not, see .
"""
import datetime
-import os
-
import maya
+import os
import pytest
from umbral.kfrags import KFrag
from nucypher.characters.lawful import Bob, Enrico
from nucypher.config.characters import AliceConfiguration
from nucypher.crypto.api import keccak_digest
-from nucypher.crypto.powers import SigningPower, DecryptingPower
-from nucypher.policy.collections import Revocation, PolicyCredential
+from nucypher.crypto.powers import DecryptingPower, SigningPower
+from nucypher.policy.collections import PolicyCredential, Revocation
from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD
from tests.utils.middleware import MockRestMiddleware
diff --git a/tests/characters/test_bob_handles_frags.py b/tests/characters/test_bob_handles_frags.py
index 77476be6f..dde16a442 100644
--- a/tests/characters/test_bob_handles_frags.py
+++ b/tests/characters/test_bob_handles_frags.py
@@ -23,10 +23,9 @@ from umbral.cfrags import CapsuleFrag
from umbral.kfrags import KFrag
from nucypher.crypto.kits import PolicyMessageKit
-from tests.utils.middleware import NodeIsDownMiddleware
from nucypher.crypto.powers import DecryptingPower
from tests.utils.constants import TEMPORARY_DOMAIN
-from tests.utils.middleware import MockRestMiddleware
+from tests.utils.middleware import MockRestMiddleware, NodeIsDownMiddleware
def test_bob_cannot_follow_the_treasure_map_in_isolation(enacted_federated_policy, federated_bob):
diff --git a/tests/characters/test_bob_joins_policy_and_retrieves.py b/tests/characters/test_bob_joins_policy_and_retrieves.py
index 99575c879..be2d9392b 100644
--- a/tests/characters/test_bob_joins_policy_and_retrieves.py
+++ b/tests/characters/test_bob_joins_policy_and_retrieves.py
@@ -1,21 +1,14 @@
import datetime
-import os
-
import maya
+import os
import pytest
import time
-
from constant_sorrow.constants import NO_DECRYPTION_PERFORMED
from twisted.internet.task import Clock
-from nucypher.characters.lawful import Bob, Ursula
-from nucypher.characters.lawful import Enrico
+from nucypher.characters.lawful import Bob, Enrico, Ursula
from nucypher.policy.collections import TreasureMap
-from tests.utils.constants import (
- NUMBER_OF_URSULAS_IN_DEVELOPMENT_NETWORK,
- MOCK_POLICY_DEFAULT_M,
- TEMPORARY_DOMAIN
-)
+from tests.utils.constants import (MOCK_POLICY_DEFAULT_M, NUMBER_OF_URSULAS_IN_DEVELOPMENT_NETWORK, TEMPORARY_DOMAIN)
from tests.utils.middleware import MockRestMiddleware
diff --git a/tests/characters/test_crypto_characters_and_their_powers.py b/tests/characters/test_crypto_characters_and_their_powers.py
index 589633c5a..4fc5b2908 100644
--- a/tests/characters/test_crypto_characters_and_their_powers.py
+++ b/tests/characters/test_crypto_characters_and_their_powers.py
@@ -23,14 +23,10 @@ from eth_account._utils.transactions import Transaction
from eth_utils import to_checksum_address
from nucypher.blockchain.eth.signers import Web3Signer
-from nucypher.characters.lawful import Alice, Character, Bob
-from nucypher.characters.lawful import Enrico
+from nucypher.characters.lawful import Alice, Bob, Character, Enrico
from nucypher.crypto import api
from nucypher.crypto.api import verify_eip_191
-from nucypher.crypto.powers import (CryptoPower,
- SigningPower,
- NoSigningPower,
- TransactingPower)
+from nucypher.crypto.powers import (CryptoPower, NoSigningPower, SigningPower, TransactingPower)
from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD
"""
diff --git a/tests/characters/test_freerider_attacks.py b/tests/characters/test_freerider_attacks.py
index 6de643457..0cb879633 100644
--- a/tests/characters/test_freerider_attacks.py
+++ b/tests/characters/test_freerider_attacks.py
@@ -16,7 +16,6 @@ along with nucypher. If not, see .
"""
import datetime
-
import maya
import pytest
diff --git a/tests/characters/test_specifications.py b/tests/characters/test_specifications.py
index 4c6a3d0c0..2978efc97 100644
--- a/tests/characters/test_specifications.py
+++ b/tests/characters/test_specifications.py
@@ -1,16 +1,14 @@
-from base64 import b64encode, b64decode
+from base64 import b64encode
-import pytest
-from marshmallow import validates_schema
-import maya
import datetime
+import maya
+import pytest
-from nucypher.characters.control.specifications.alice import CreatePolicy, GrantPolicy
-from nucypher.characters.control.specifications.exceptions import (
- InvalidInputData, InvalidArgumentCombo, SpecificationError)
from nucypher.characters.control.specifications import fields
+from nucypher.characters.control.specifications.alice import GrantPolicy
from nucypher.characters.control.specifications.base import BaseSchema
-
+from nucypher.characters.control.specifications.exceptions import (InvalidArgumentCombo, InvalidInputData,
+ SpecificationError)
from nucypher.crypto.powers import DecryptingPower
diff --git a/tests/characters/test_stakeholder.py b/tests/characters/test_stakeholder.py
index 5b05d4e14..3c1046669 100644
--- a/tests/characters/test_stakeholder.py
+++ b/tests/characters/test_stakeholder.py
@@ -3,7 +3,7 @@ import json
import pytest
from nucypher.blockchain.eth.actors import Worker
-from nucypher.blockchain.eth.agents import StakingEscrowAgent, ContractAgency
+from nucypher.blockchain.eth.agents import ContractAgency, StakingEscrowAgent
from nucypher.config.characters import StakeHolderConfiguration
from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD
diff --git a/tests/characters/test_ursula_prepares_to_act_as_mining_node.py b/tests/characters/test_ursula_prepares_to_act_as_mining_node.py
index b6829d5f0..1be1973db 100644
--- a/tests/characters/test_ursula_prepares_to_act_as_mining_node.py
+++ b/tests/characters/test_ursula_prepares_to_act_as_mining_node.py
@@ -15,7 +15,6 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
import datetime
-
import maya
import pytest
from eth_account._utils.signing import to_standard_signature_bytes
@@ -27,7 +26,7 @@ from nucypher.crypto.powers import SigningPower
from nucypher.policy.policies import Policy
from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD
from tests.utils.middleware import MockRestMiddleware, NodeIsDownMiddleware
-from tests.utils.ursula import make_federated_ursulas, make_decentralized_ursulas
+from tests.utils.ursula import make_decentralized_ursulas, make_federated_ursulas
def test_new_federated_ursula_announces_herself(ursula_federated_test_config):
diff --git a/tests/characters/test_ursula_web_status.py b/tests/characters/test_ursula_web_status.py
index 69ef359b1..e7714c6bd 100644
--- a/tests/characters/test_ursula_web_status.py
+++ b/tests/characters/test_ursula_web_status.py
@@ -1,7 +1,6 @@
import os
-import tempfile
-
import pytest
+import tempfile
@pytest.fixture(scope='module')
diff --git a/tests/cli/conftest.py b/tests/cli/conftest.py
index 7e89b5da2..da3b09cdc 100644
--- a/tests/cli/conftest.py
+++ b/tests/cli/conftest.py
@@ -17,8 +17,8 @@ along with nucypher. If not, see .
import contextlib
-
import json
+
import os
import pytest
import shutil
@@ -26,15 +26,9 @@ from click.testing import CliRunner
from datetime import datetime
from nucypher.blockchain.eth.registry import InMemoryContractRegistry, LocalContractRegistry
-from nucypher.config.characters import UrsulaConfiguration, StakeHolderConfiguration
-from tests.utils.constants import (
- BASE_TEMP_DIR,
- BASE_TEMP_PREFIX,
- DATETIME_FORMAT,
- MOCK_CUSTOM_INSTALLATION_PATH,
- MOCK_CUSTOM_INSTALLATION_PATH_2,
- MOCK_ALLOCATION_INFILE
-)
+from nucypher.config.characters import StakeHolderConfiguration, UrsulaConfiguration
+from tests.utils.constants import (BASE_TEMP_DIR, BASE_TEMP_PREFIX, DATETIME_FORMAT, MOCK_ALLOCATION_INFILE,
+ MOCK_CUSTOM_INSTALLATION_PATH, MOCK_CUSTOM_INSTALLATION_PATH_2)
@pytest.fixture(scope='module')
diff --git a/tests/cli/functional/conftest.py b/tests/cli/functional/conftest.py
index 77568606d..18b563f25 100644
--- a/tests/cli/functional/conftest.py
+++ b/tests/cli/functional/conftest.py
@@ -25,11 +25,11 @@ from nucypher.blockchain.eth.agents import ContractAgency
from nucypher.blockchain.eth.interfaces import BlockchainInterface, BlockchainInterfaceFactory
from nucypher.blockchain.eth.registry import InMemoryContractRegistry
from nucypher.config.characters import UrsulaConfiguration
-from tests.cli.functional.test_ursula_local_keystore_cli_functionality import NUMBER_OF_MOCK_ACCOUNTS, \
- KEYFILE_NAME_TEMPLATE
+from tests.cli.functional.test_ursula_local_keystore_cli_functionality import KEYFILE_NAME_TEMPLATE, \
+ NUMBER_OF_MOCK_ACCOUNTS
from tests.fixtures import _make_testerchain, make_token_economics
-from tests.mock.interfaces import make_mock_registry_source_manager, MockBlockchain
from tests.mock.agents import FAKE_RECEIPT, MockContractAgency
+from tests.mock.interfaces import MockBlockchain, make_mock_registry_source_manager
@pytest.fixture(scope='module', autouse=True)
diff --git a/tests/cli/functional/test_ursula_local_keystore_cli_functionality.py b/tests/cli/functional/test_ursula_local_keystore_cli_functionality.py
index 739908e59..b93185be5 100644
--- a/tests/cli/functional/test_ursula_local_keystore_cli_functionality.py
+++ b/tests/cli/functional/test_ursula_local_keystore_cli_functionality.py
@@ -16,6 +16,7 @@ along with nucypher. If not, see .
"""
import json
+
import pytest
from eth_account import Account
from pathlib import Path
@@ -25,13 +26,8 @@ from nucypher.blockchain.eth.token import StakeList
from nucypher.cli.main import nucypher_cli
from nucypher.config.characters import UrsulaConfiguration
from nucypher.config.constants import NUCYPHER_ENVVAR_KEYRING_PASSWORD, NUCYPHER_ENVVAR_WORKER_ETH_PASSWORD
-from tests.utils.constants import (
- MOCK_IP_ADDRESS,
- TEST_PROVIDER_URI,
- MOCK_URSULA_STARTING_PORT,
- INSECURE_DEVELOPMENT_PASSWORD,
- TEMPORARY_DOMAIN,
-)
+from tests.utils.constants import (INSECURE_DEVELOPMENT_PASSWORD, MOCK_IP_ADDRESS, MOCK_URSULA_STARTING_PORT,
+ TEMPORARY_DOMAIN, TEST_PROVIDER_URI)
# TODO: Move to fixtures
CLI_ENV = {NUCYPHER_ENVVAR_KEYRING_PASSWORD: INSECURE_DEVELOPMENT_PASSWORD,
diff --git a/tests/cli/functional/test_worklock_cli_functionality.py b/tests/cli/functional/test_worklock_cli_functionality.py
index 4a5b621a0..8d269595a 100644
--- a/tests/cli/functional/test_worklock_cli_functionality.py
+++ b/tests/cli/functional/test_worklock_cli_functionality.py
@@ -24,11 +24,9 @@ from nucypher.blockchain.eth.actors import Bidder
from nucypher.blockchain.eth.interfaces import BlockchainInterface
from nucypher.blockchain.eth.token import NU
from nucypher.cli.commands.worklock import worklock
-from tests.utils.constants import (
- TEMPORARY_DOMAIN, MOCK_PROVIDER_URI, YES,
-)
from tests.cli.functional.test_ursula_local_keystore_cli_functionality import CLI_ENV
from tests.mock.agents import FAKE_RECEIPT, MockWorkLockAgent
+from tests.utils.constants import (MOCK_PROVIDER_URI, TEMPORARY_DOMAIN, YES)
@pytest.fixture(scope='function')
diff --git a/tests/cli/test_alice.py b/tests/cli/test_alice.py
index 9902b2fd5..00b0faa7f 100644
--- a/tests/cli/test_alice.py
+++ b/tests/cli/test_alice.py
@@ -1,16 +1,13 @@
-import os
from unittest import mock
+import os
+
from nucypher.cli.literature import SUCCESSFUL_DESTRUCTION
from nucypher.cli.main import nucypher_cli
from nucypher.config.characters import AliceConfiguration
from nucypher.config.constants import NUCYPHER_ENVVAR_KEYRING_PASSWORD
-from tests.utils.constants import (
- INSECURE_DEVELOPMENT_PASSWORD,
- MOCK_IP_ADDRESS,
- MOCK_CUSTOM_INSTALLATION_PATH,
- TEMPORARY_DOMAIN
-)
+from tests.utils.constants import (INSECURE_DEVELOPMENT_PASSWORD, MOCK_CUSTOM_INSTALLATION_PATH, MOCK_IP_ADDRESS,
+ TEMPORARY_DOMAIN)
@mock.patch('nucypher.config.characters.AliceConfiguration.default_filepath', return_value='/non/existent/file')
diff --git a/tests/cli/test_bob.py b/tests/cli/test_bob.py
index 0b6c141f1..01475777e 100644
--- a/tests/cli/test_bob.py
+++ b/tests/cli/test_bob.py
@@ -14,8 +14,8 @@ from nucypher.config.characters import BobConfiguration
from nucypher.crypto.kits import UmbralMessageKit
from nucypher.crypto.powers import SigningPower
from nucypher.utilities.logging import GlobalLoggerSettings
-from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD, TEMPORARY_DOMAIN
-from tests.utils.constants import MOCK_IP_ADDRESS, MOCK_CUSTOM_INSTALLATION_PATH
+from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD, MOCK_CUSTOM_INSTALLATION_PATH, MOCK_IP_ADDRESS, \
+ TEMPORARY_DOMAIN
log = Logger()
diff --git a/tests/cli/test_cli_config.py b/tests/cli/test_cli_config.py
index 5d7014a14..587c38c5a 100644
--- a/tests/cli/test_cli_config.py
+++ b/tests/cli/test_cli_config.py
@@ -1,19 +1,14 @@
import json
-import os
+import os
import pytest
from nucypher.blockchain.eth.registry import InMemoryContractRegistry
from nucypher.cli.main import nucypher_cli
from nucypher.config.characters import AliceConfiguration, BobConfiguration, UrsulaConfiguration
from nucypher.config.constants import NUCYPHER_ENVVAR_KEYRING_PASSWORD, NUCYPHER_ENVVAR_WORKER_IP_ADDRESS
-from tests.utils.constants import (
- TEMPORARY_DOMAIN,
- INSECURE_DEVELOPMENT_PASSWORD,
- MOCK_CUSTOM_INSTALLATION_PATH,
- MOCK_IP_ADDRESS,
- TEST_PROVIDER_URI
-)
+from tests.utils.constants import (INSECURE_DEVELOPMENT_PASSWORD, MOCK_CUSTOM_INSTALLATION_PATH, MOCK_IP_ADDRESS,
+ TEMPORARY_DOMAIN, TEST_PROVIDER_URI)
CONFIG_CLASSES = (AliceConfiguration, BobConfiguration, UrsulaConfiguration)
diff --git a/tests/cli/test_cli_lifecycle.py b/tests/cli/test_cli_lifecycle.py
index 0065c2847..3c64fa5fb 100644
--- a/tests/cli/test_cli_lifecycle.py
+++ b/tests/cli/test_cli_lifecycle.py
@@ -1,14 +1,14 @@
-import datetime
import json
-import os
-import shutil
from base64 import b64decode
from collections import namedtuple
from json import JSONDecodeError
+import datetime
import maya
+import os
import pytest
import pytest_twisted as pt
+import shutil
from twisted.internet import threads
from web3 import Web3
diff --git a/tests/cli/test_deploy.py b/tests/cli/test_deploy.py
index ea8d33c20..658efe33d 100644
--- a/tests/cli/test_deploy.py
+++ b/tests/cli/test_deploy.py
@@ -1,24 +1,18 @@
import json
-import os
+import os
import pytest
from eth_utils import to_checksum_address
from nucypher.blockchain.eth.actors import ContractAdministrator
-from nucypher.blockchain.eth.agents import (
- NucypherTokenAgent,
- StakingEscrowAgent,
- PolicyManagerAgent,
- AdjudicatorAgent,
- ContractAgency
-)
+from nucypher.blockchain.eth.agents import (AdjudicatorAgent, ContractAgency, NucypherTokenAgent, PolicyManagerAgent,
+ StakingEscrowAgent)
from nucypher.blockchain.eth.interfaces import BlockchainInterface
from nucypher.blockchain.eth.registry import LocalContractRegistry
from nucypher.blockchain.eth.sol.compile import SOLIDITY_COMPILER_VERSION
from nucypher.cli.commands.deploy import deploy
from tests.utils.constants import TEST_PROVIDER_URI
-
PLANNED_UPGRADES = 4
CONTRACTS_TO_UPGRADE = ('StakingEscrow', 'PolicyManager', 'Adjudicator', 'StakingInterface')
diff --git a/tests/cli/test_deploy_commands.py b/tests/cli/test_deploy_commands.py
index 43dc7143f..7166328de 100644
--- a/tests/cli/test_deploy_commands.py
+++ b/tests/cli/test_deploy_commands.py
@@ -1,25 +1,13 @@
import os
-from nucypher.blockchain.eth.agents import (
- PolicyManagerAgent,
- StakingEscrowAgent,
- AdjudicatorAgent,
- ContractAgency
-)
-from nucypher.blockchain.eth.constants import (
- NUCYPHER_TOKEN_CONTRACT_NAME,
- STAKING_ESCROW_CONTRACT_NAME,
- POLICY_MANAGER_CONTRACT_NAME,
- ADJUDICATOR_CONTRACT_NAME,
- DISPATCHER_CONTRACT_NAME
-)
+from nucypher.blockchain.eth.agents import (AdjudicatorAgent, ContractAgency, PolicyManagerAgent, StakingEscrowAgent)
+from nucypher.blockchain.eth.constants import (ADJUDICATOR_CONTRACT_NAME, DISPATCHER_CONTRACT_NAME,
+ NUCYPHER_TOKEN_CONTRACT_NAME, POLICY_MANAGER_CONTRACT_NAME,
+ STAKING_ESCROW_CONTRACT_NAME)
from nucypher.blockchain.eth.deployers import StakingEscrowDeployer
-from nucypher.blockchain.eth.registry import LocalContractRegistry, InMemoryContractRegistry
+from nucypher.blockchain.eth.registry import InMemoryContractRegistry, LocalContractRegistry
from nucypher.cli.commands.deploy import deploy
-from tests.utils.constants import (
- TEST_PROVIDER_URI,
- INSECURE_DEVELOPMENT_PASSWORD,
-)
+from tests.utils.constants import (INSECURE_DEVELOPMENT_PASSWORD, TEST_PROVIDER_URI)
ALTERNATE_REGISTRY_FILEPATH = '/tmp/nucypher-test-registry-alternate.json'
ALTERNATE_REGISTRY_FILEPATH_2 = '/tmp/nucypher-test-registry-alternate-2.json'
diff --git a/tests/cli/test_enrico.py b/tests/cli/test_enrico.py
index 4faa952d9..d47e13672 100644
--- a/tests/cli/test_enrico.py
+++ b/tests/cli/test_enrico.py
@@ -1,6 +1,7 @@
-from nucypher.cli.main import nucypher_cli
from umbral.keys import UmbralPrivateKey
+from nucypher.cli.main import nucypher_cli
+
def test_enrico_encrypt(click_runner):
policy_encrypting_key = UmbralPrivateKey.gen_key().get_pubkey().to_bytes().hex()
diff --git a/tests/cli/test_felix.py b/tests/cli/test_felix.py
index 806742f1a..2ae0f042f 100644
--- a/tests/cli/test_felix.py
+++ b/tests/cli/test_felix.py
@@ -1,25 +1,20 @@
-import os
from unittest import mock
+import os
import pytest_twisted
-
-from nucypher.blockchain.eth.registry import LocalContractRegistry
from twisted.internet import threads
from twisted.internet.task import Clock
from nucypher.blockchain.eth.actors import Staker
+from nucypher.blockchain.eth.registry import LocalContractRegistry
from nucypher.blockchain.eth.token import NU
from nucypher.characters.chaotic import Felix
from nucypher.cli.literature import SUCCESSFUL_DESTRUCTION
from nucypher.cli.main import nucypher_cli
from nucypher.config.characters import FelixConfiguration
from nucypher.config.constants import NUCYPHER_ENVVAR_KEYRING_PASSWORD
-from tests.utils.constants import (
- TEMPORARY_DOMAIN,
- TEST_PROVIDER_URI,
- INSECURE_DEVELOPMENT_PASSWORD,
- MOCK_CUSTOM_INSTALLATION_PATH_2,
-)
+from tests.utils.constants import (INSECURE_DEVELOPMENT_PASSWORD, MOCK_CUSTOM_INSTALLATION_PATH_2, TEMPORARY_DOMAIN,
+ TEST_PROVIDER_URI)
@mock.patch('nucypher.config.characters.FelixConfiguration.default_filepath', return_value='/non/existent/file')
diff --git a/tests/cli/test_help.py b/tests/cli/test_help.py
index 85a7f789b..a8814176c 100644
--- a/tests/cli/test_help.py
+++ b/tests/cli/test_help.py
@@ -20,7 +20,7 @@ import pytest
import nucypher
from nucypher.cli.commands.deploy import deploy
-from nucypher.cli.main import nucypher_cli, ENTRY_POINTS
+from nucypher.cli.main import ENTRY_POINTS, nucypher_cli
def test_echo_nucypher_version(click_runner):
diff --git a/tests/cli/test_mixed_configurations.py b/tests/cli/test_mixed_configurations.py
index 55df56562..4b15eca65 100644
--- a/tests/cli/test_mixed_configurations.py
+++ b/tests/cli/test_mixed_configurations.py
@@ -5,17 +5,12 @@ from pathlib import Path
from nucypher.blockchain.eth.actors import Worker
from nucypher.cli.main import nucypher_cli
-from nucypher.config.characters import FelixConfiguration, UrsulaConfiguration, AliceConfiguration
+from nucypher.config.characters import AliceConfiguration, FelixConfiguration, UrsulaConfiguration
from nucypher.config.constants import NUCYPHER_ENVVAR_KEYRING_PASSWORD
from nucypher.config.keyring import NucypherKeyring
from nucypher.network.nodes import Teacher
-from tests.utils.constants import (
- TEMPORARY_DOMAIN,
- INSECURE_DEVELOPMENT_PASSWORD,
- TEST_PROVIDER_URI,
- MOCK_IP_ADDRESS,
- MOCK_IP_ADDRESS_2, MOCK_CUSTOM_INSTALLATION_PATH,
-)
+from tests.utils.constants import (INSECURE_DEVELOPMENT_PASSWORD, MOCK_CUSTOM_INSTALLATION_PATH, MOCK_IP_ADDRESS,
+ MOCK_IP_ADDRESS_2, TEMPORARY_DOMAIN, TEST_PROVIDER_URI)
@pytest.fixture(scope='function')
diff --git a/tests/cli/test_multisig_cli.py b/tests/cli/test_multisig_cli.py
index b10509eea..00fa3dac9 100644
--- a/tests/cli/test_multisig_cli.py
+++ b/tests/cli/test_multisig_cli.py
@@ -1,6 +1,6 @@
import json
-import os
+import os
import pytest
from nucypher.blockchain.eth.agents import (
@@ -12,7 +12,6 @@ from tests.utils.constants import (
TEST_PROVIDER_URI,
)
-
MULTISIG_THRESHOLD = 4
diff --git a/tests/cli/test_rpc_ipc_transport.py b/tests/cli/test_rpc_ipc_transport.py
index f4603e8f6..d8efe195e 100644
--- a/tests/cli/test_rpc_ipc_transport.py
+++ b/tests/cli/test_rpc_ipc_transport.py
@@ -1,10 +1,9 @@
import json
-import sys
from collections import deque
import pytest
+import sys
-from nucypher.cli.config import GroupGeneralConfig
from nucypher.cli.processes import JSONRPCLineReceiver
diff --git a/tests/cli/test_worklock_cli.py b/tests/cli/test_worklock_cli.py
index f14bb0a3c..99900de7d 100644
--- a/tests/cli/test_worklock_cli.py
+++ b/tests/cli/test_worklock_cli.py
@@ -22,7 +22,7 @@ import pytest
from eth_utils import to_wei
from web3 import Web3
-from nucypher.blockchain.eth.actors import Staker, Bidder
+from nucypher.blockchain.eth.actors import Bidder, Staker
from nucypher.blockchain.eth.agents import (
ContractAgency,
WorkLockAgent
@@ -30,12 +30,8 @@ from nucypher.blockchain.eth.agents import (
from nucypher.blockchain.eth.token import NU
from nucypher.characters.lawful import Ursula
from nucypher.cli.commands.worklock import worklock
-from tests.utils.constants import (
- INSECURE_DEVELOPMENT_PASSWORD,
- TEST_PROVIDER_URI,
- MOCK_IP_ADDRESS,
- select_test_port, TEMPORARY_DOMAIN
-)
+from tests.utils.constants import (INSECURE_DEVELOPMENT_PASSWORD, MOCK_IP_ADDRESS, TEMPORARY_DOMAIN, TEST_PROVIDER_URI,
+ select_test_port)
@pytest.fixture(scope='module')
diff --git a/tests/cli/ursula/test_federated_ursula.py b/tests/cli/ursula/test_federated_ursula.py
index 66330f5cd..66f3c98f7 100644
--- a/tests/cli/ursula/test_federated_ursula.py
+++ b/tests/cli/ursula/test_federated_ursula.py
@@ -16,9 +16,9 @@ along with nucypher. If not, see .
"""
import json
-import os
from json import JSONDecodeError
+import os
import pytest
from nucypher.cli.literature import SUCCESSFUL_DESTRUCTION
diff --git a/tests/cli/ursula/test_local_keystore_integration.py b/tests/cli/ursula/test_local_keystore_integration.py
index 70b678c22..b6f29c7cc 100644
--- a/tests/cli/ursula/test_local_keystore_integration.py
+++ b/tests/cli/ursula/test_local_keystore_integration.py
@@ -14,29 +14,23 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-from pathlib import Path
-
import json
+
import os
import pytest
from eth_account import Account
+from pathlib import Path
from web3 import Web3
from nucypher.blockchain.eth.signers import KeystoreSigner
from nucypher.blockchain.eth.token import StakeList
from nucypher.cli.main import nucypher_cli
from nucypher.config.characters import UrsulaConfiguration
-from tests.utils.constants import (
- MOCK_IP_ADDRESS,
- TEST_PROVIDER_URI,
- MOCK_URSULA_STARTING_PORT,
- INSECURE_DEVELOPMENT_PASSWORD,
- TEMPORARY_DOMAIN,
-)
-from tests.cli.functional.test_ursula_local_keystore_cli_functionality import (
- NUMBER_OF_MOCK_ACCOUNTS,
- KEYFILE_NAME_TEMPLATE, MOCK_SIGNER_URI, CLI_ENV, MOCK_KEYSTORE_PATH
-)
+from tests.cli.functional.test_ursula_local_keystore_cli_functionality import (CLI_ENV, KEYFILE_NAME_TEMPLATE,
+ MOCK_KEYSTORE_PATH, MOCK_SIGNER_URI,
+ NUMBER_OF_MOCK_ACCOUNTS)
+from tests.utils.constants import (INSECURE_DEVELOPMENT_PASSWORD, MOCK_IP_ADDRESS, MOCK_URSULA_STARTING_PORT,
+ TEMPORARY_DOMAIN, TEST_PROVIDER_URI)
@pytest.fixture(scope='module')
diff --git a/tests/cli/ursula/test_run_ursula.py b/tests/cli/ursula/test_run_ursula.py
index faa3abb0c..3f49054ad 100644
--- a/tests/cli/ursula/test_run_ursula.py
+++ b/tests/cli/ursula/test_run_ursula.py
@@ -32,13 +32,8 @@ from nucypher.cli.main import nucypher_cli
from nucypher.config.characters import UrsulaConfiguration
from nucypher.config.constants import NUCYPHER_ENVVAR_KEYRING_PASSWORD
from nucypher.network.nodes import Teacher
-from tests.utils.constants import (
- INSECURE_DEVELOPMENT_PASSWORD,
- MOCK_URSULA_STARTING_PORT,
- TEMPORARY_DOMAIN,
- TEST_PROVIDER_URI,
- MOCK_IP_ADDRESS
-)
+from tests.utils.constants import (INSECURE_DEVELOPMENT_PASSWORD, MOCK_IP_ADDRESS, MOCK_URSULA_STARTING_PORT,
+ TEMPORARY_DOMAIN, TEST_PROVIDER_URI)
from tests.utils.ursula import start_pytest_ursula_services
diff --git a/tests/cli/ursula/test_stake_via_allocation_contract.py b/tests/cli/ursula/test_stake_via_allocation_contract.py
index 47af33dce..756e45a47 100644
--- a/tests/cli/ursula/test_stake_via_allocation_contract.py
+++ b/tests/cli/ursula/test_stake_via_allocation_contract.py
@@ -16,40 +16,29 @@ along with nucypher. If not, see .
"""
import json
-import os
import random
import maya
+import os
import pytest
from twisted.logger import Logger
from web3 import Web3
from nucypher.blockchain.eth.actors import Staker
-from nucypher.blockchain.eth.agents import (
- StakingEscrowAgent,
- ContractAgency,
- PreallocationEscrowAgent,
- NucypherTokenAgent
-)
+from nucypher.blockchain.eth.agents import (ContractAgency, NucypherTokenAgent, PreallocationEscrowAgent,
+ StakingEscrowAgent)
from nucypher.blockchain.eth.deployers import PreallocationEscrowDeployer
-from nucypher.blockchain.eth.registry import IndividualAllocationRegistry, InMemoryAllocationRegistry
+from nucypher.blockchain.eth.registry import InMemoryAllocationRegistry, IndividualAllocationRegistry
from nucypher.blockchain.eth.token import NU, Stake, StakeList
from nucypher.characters.lawful import Enrico, Ursula
from nucypher.cli.main import nucypher_cli
from nucypher.config.characters import UrsulaConfiguration
-from tests.utils.constants import (
- TEST_PROVIDER_URI,
- INSECURE_DEVELOPMENT_PASSWORD,
- MOCK_IP_ADDRESS,
- MOCK_URSULA_STARTING_PORT,
- TEMPORARY_DOMAIN,
- MOCK_KNOWN_URSULAS_CACHE,
- select_test_port,
- MOCK_INDIVIDUAL_ALLOCATION_FILEPATH,
- ONE_YEAR_IN_SECONDS
-)
+from tests.utils.constants import (INSECURE_DEVELOPMENT_PASSWORD, MOCK_INDIVIDUAL_ALLOCATION_FILEPATH, MOCK_IP_ADDRESS,
+ MOCK_KNOWN_URSULAS_CACHE, MOCK_URSULA_STARTING_PORT, ONE_YEAR_IN_SECONDS,
+ TEMPORARY_DOMAIN, TEST_PROVIDER_URI, select_test_port)
from tests.utils.middleware import MockRestMiddleware
+
#
# This test module is intended to mirror tests/cli/ursula/test_stakeholder_and_ursula.py,
# but using a staking contract (namely, PreallocationEscrow)
diff --git a/tests/cli/ursula/test_stakeholder_and_ursula.py b/tests/cli/ursula/test_stakeholder_and_ursula.py
index c56938fee..c431cb242 100644
--- a/tests/cli/ursula/test_stakeholder_and_ursula.py
+++ b/tests/cli/ursula/test_stakeholder_and_ursula.py
@@ -21,14 +21,14 @@ from unittest import mock
import maya
import os
-from nucypher.utilities.sandbox.middleware import MockRestMiddleware
-from tests.utils.constants import (INSECURE_DEVELOPMENT_PASSWORD,
- MOCK_IP_ADDRESS,
- MOCK_KNOWN_URSULAS_CACHE,
- MOCK_URSULA_STARTING_PORT,
- TEMPORARY_DOMAIN,
- TEST_PROVIDER_URI,
- select_test_port
+from tests.constants import (
+ INSECURE_DEVELOPMENT_PASSWORD,
+ MOCK_IP_ADDRESS,
+ MOCK_KNOWN_URSULAS_CACHE,
+ MOCK_URSULA_STARTING_PORT,
+ TEMPORARY_DOMAIN,
+ TEST_PROVIDER_URI,
+ select_test_port
)
from twisted.logger import Logger
diff --git a/tests/cli/ursula/test_ursula_command.py b/tests/cli/ursula/test_ursula_command.py
index 9ba3b9399..0a9265903 100644
--- a/tests/cli/ursula/test_ursula_command.py
+++ b/tests/cli/ursula/test_ursula_command.py
@@ -1,11 +1,10 @@
-import sys
from contextlib import contextmanager
import pytest
+import sys
from io import StringIO
from nucypher.characters.control.emitters import StdoutEmitter
-from nucypher.cli.config import GroupGeneralConfig
from nucypher.cli.processes import UrsulaCommandProtocol
diff --git a/tests/config/test_base_configuration.py b/tests/config/test_base_configuration.py
index a9073181d..699520ab8 100644
--- a/tests/config/test_base_configuration.py
+++ b/tests/config/test_base_configuration.py
@@ -1,8 +1,8 @@
import json
-import os
-import shutil
+import os
import pytest
+import shutil
from nucypher.config.base import BaseConfiguration
from nucypher.config.constants import DEFAULT_CONFIG_ROOT
diff --git a/tests/config/test_character_configuration.py b/tests/config/test_character_configuration.py
index fd89e3895..f96a4de43 100644
--- a/tests/config/test_character_configuration.py
+++ b/tests/config/test_character_configuration.py
@@ -1,16 +1,13 @@
import os
-import tempfile
-
import pytest
-from constant_sorrow.constants import NO_KEYRING_ATTACHED, CERTIFICATE_NOT_SAVED
+import tempfile
+from constant_sorrow.constants import CERTIFICATE_NOT_SAVED, NO_KEYRING_ATTACHED
from nucypher.blockchain.eth.actors import StakeHolder
from nucypher.characters.chaotic import Felix
-from nucypher.characters.lawful import Alice, Bob
-from nucypher.characters.lawful import Ursula
-from nucypher.config.characters import AliceConfiguration, BobConfiguration, \
- FelixConfiguration, StakeHolderConfiguration
-from nucypher.config.characters import UrsulaConfiguration
+from nucypher.characters.lawful import Alice, Bob, Ursula
+from nucypher.config.characters import AliceConfiguration, BobConfiguration, FelixConfiguration, \
+ StakeHolderConfiguration, UrsulaConfiguration
from nucypher.config.storages import ForgetfulNodeStorage
from tests.utils.constants import TEMPORARY_DOMAIN
diff --git a/tests/config/test_keyring.py b/tests/config/test_keyring.py
index baeec37aa..0a7867e27 100644
--- a/tests/config/test_keyring.py
+++ b/tests/config/test_keyring.py
@@ -1,14 +1,12 @@
import pytest
-
+from constant_sorrow.constants import FEDERATED_ADDRESS
from umbral.keys import UmbralPrivateKey
from umbral.signing import Signer
-from nucypher.config.keyring import NucypherKeyring
-from nucypher.crypto.powers import DelegatingPower, DecryptingPower
-from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD
-from constant_sorrow.constants import FEDERATED_ADDRESS
-
from nucypher.characters.lawful import Alice, Bob, Ursula
+from nucypher.config.keyring import NucypherKeyring
+from nucypher.crypto.powers import DecryptingPower, DelegatingPower
+from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD
def test_generate_alice_keyring(tmpdir):
diff --git a/tests/config/test_storages.py b/tests/config/test_storages.py
index 0cfcdc714..e17c88852 100644
--- a/tests/config/test_storages.py
+++ b/tests/config/test_storages.py
@@ -18,11 +18,8 @@ along with nucypher. If not, see .
import pytest
from nucypher.characters.lawful import Ursula
-from nucypher.config.storages import (
- ForgetfulNodeStorage,
- SQLiteForgetfulNodeStorage,
- TemporaryFileBasedNodeStorage,
- NodeStorage)
+from nucypher.config.storages import (ForgetfulNodeStorage, NodeStorage, SQLiteForgetfulNodeStorage,
+ TemporaryFileBasedNodeStorage)
from tests.utils.constants import (
MOCK_URSULA_DB_FILEPATH,
MOCK_URSULA_STARTING_PORT)
diff --git a/tests/crypto/test_signature.py b/tests/crypto/test_signature.py
index 01f2c3cfe..415a82082 100644
--- a/tests/crypto/test_signature.py
+++ b/tests/crypto/test_signature.py
@@ -21,7 +21,7 @@ from umbral.keys import UmbralPrivateKey
from nucypher.crypto.api import ecdsa_sign, verify_ecdsa
from nucypher.crypto.signing import Signature, Signer
-from nucypher.crypto.utils import recover_pubkey_from_signature, get_signature_recovery_value
+from nucypher.crypto.utils import get_signature_recovery_value, recover_pubkey_from_signature
def test_signature_can_verify():
diff --git a/tests/crypto/test_transacting_power.py b/tests/crypto/test_transacting_power.py
index 41a794dea..8ea1531d4 100644
--- a/tests/crypto/test_transacting_power.py
+++ b/tests/crypto/test_transacting_power.py
@@ -5,8 +5,8 @@ from eth_utils import to_checksum_address
from nucypher.blockchain.eth.agents import NucypherTokenAgent
from nucypher.crypto.api import verify_eip_191
from nucypher.crypto.powers import TransactingPower
-from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD
from tests.conftest import LOCK_FUNCTION
+from tests.utils.constants import INSECURE_DEVELOPMENT_PASSWORD
TransactingPower.lock_account = LOCK_FUNCTION
diff --git a/tests/crypto/test_utils.py b/tests/crypto/test_utils.py
index 1a64a3946..55c3f0c8f 100644
--- a/tests/crypto/test_utils.py
+++ b/tests/crypto/test_utils.py
@@ -16,7 +16,6 @@ along with nucypher. If not, see .
"""
import pytest
-
from umbral.keys import UmbralPrivateKey
from nucypher.crypto.signing import SignatureStamp
diff --git a/tests/datastore/test_keypairs.py b/tests/datastore/test_keypairs.py
index bbacef1e3..6bb456f6f 100644
--- a/tests/datastore/test_keypairs.py
+++ b/tests/datastore/test_keypairs.py
@@ -15,6 +15,7 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
import base64
+
import sha3
from constant_sorrow.constants import PUBLIC_ONLY
from umbral.keys import UmbralPrivateKey
diff --git a/tests/fixtures.py b/tests/fixtures.py
index 91a2fd588..229359a13 100644
--- a/tests/fixtures.py
+++ b/tests/fixtures.py
@@ -31,18 +31,12 @@ from umbral.keys import UmbralPrivateKey
from umbral.signing import Signer
from web3 import Web3
-from nucypher.blockchain.economics import StandardTokenEconomics, BaseEconomics
-from nucypher.blockchain.eth.actors import Staker, StakeHolder
+from nucypher.blockchain.economics import BaseEconomics, StandardTokenEconomics
+from nucypher.blockchain.eth.actors import StakeHolder, Staker
from nucypher.blockchain.eth.agents import NucypherTokenAgent, PolicyManagerAgent, StakingEscrowAgent
from nucypher.blockchain.eth.clients import NuCypherGethDevProcess
-from nucypher.blockchain.eth.deployers import (
- NucypherTokenDeployer,
- StakingEscrowDeployer,
- PolicyManagerDeployer,
- AdjudicatorDeployer,
- StakingInterfaceDeployer,
- WorklockDeployer
-)
+from nucypher.blockchain.eth.deployers import (AdjudicatorDeployer, NucypherTokenDeployer, PolicyManagerDeployer,
+ StakingEscrowDeployer, StakingInterfaceDeployer, WorklockDeployer)
from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory
from nucypher.blockchain.eth.registry import (
InMemoryContractRegistry,
@@ -51,52 +45,28 @@ from nucypher.blockchain.eth.registry import (
from nucypher.blockchain.eth.signers import Web3Signer
from nucypher.blockchain.eth.sol.compile import SolidityCompiler
from nucypher.blockchain.eth.token import NU
-from nucypher.characters.lawful import Enrico, Bob
-from nucypher.config.characters import AliceConfiguration
-from nucypher.config.characters import (
- UrsulaConfiguration,
- BobConfiguration,
- StakeHolderConfiguration
-)
+from nucypher.characters.lawful import Bob, Enrico
+from nucypher.config.characters import AliceConfiguration, BobConfiguration, StakeHolderConfiguration, \
+ UrsulaConfiguration
from nucypher.crypto.powers import TransactingPower
from nucypher.crypto.utils import canonical_address_from_umbral_key
from nucypher.datastore import datastore
from nucypher.datastore.db import Base
from nucypher.policy.collections import IndisputableEvidence, WorkOrder
from nucypher.utilities.logging import GlobalLoggerSettings
-from tests.utils.blockchain import token_airdrop, TesterBlockchain
-from tests.utils.constants import (
- DEVELOPMENT_ETH_AIRDROP_AMOUNT,
- DEVELOPMENT_TOKEN_AIRDROP_AMOUNT,
- MIN_STAKE_FOR_TESTS,
- BONUS_TOKENS_FOR_TESTS,
- MOCK_POLICY_DEFAULT_M,
- MOCK_URSULA_STARTING_PORT,
- MOCK_REGISTRY_FILEPATH,
- NUMBER_OF_URSULAS_IN_DEVELOPMENT_NETWORK,
- TEMPORARY_DOMAIN,
- TEST_PROVIDER_URI,
- INSECURE_DEVELOPMENT_PASSWORD,
- TEST_GAS_LIMIT,
-)
-from tests.utils.middleware import MockRestMiddleware
-from tests.utils.middleware import MockRestMiddlewareForLargeFleetTests
+from tests.mock.interfaces import MockBlockchain, make_mock_registry_source_manager
+from tests.performance_mocks import (mock_cert_generation, mock_cert_loading, mock_cert_storage, mock_keep_learning,
+ mock_message_verification, mock_record_fleet_state, mock_remember_node,
+ mock_rest_app_creation, mock_secret_source, mock_verify_node)
+from tests.utils.blockchain import TesterBlockchain, token_airdrop
+from tests.utils.constants import (BONUS_TOKENS_FOR_TESTS, DEVELOPMENT_ETH_AIRDROP_AMOUNT,
+ DEVELOPMENT_TOKEN_AIRDROP_AMOUNT, INSECURE_DEVELOPMENT_PASSWORD, MIN_STAKE_FOR_TESTS,
+ MOCK_POLICY_DEFAULT_M, MOCK_REGISTRY_FILEPATH, MOCK_URSULA_STARTING_PORT,
+ NUMBER_OF_URSULAS_IN_DEVELOPMENT_NETWORK, TEMPORARY_DOMAIN, TEST_GAS_LIMIT,
+ TEST_PROVIDER_URI)
+from tests.utils.middleware import MockRestMiddleware, MockRestMiddlewareForLargeFleetTests
from tests.utils.policy import generate_random_label
-from tests.utils.ursula import make_decentralized_ursulas
-from tests.utils.ursula import make_federated_ursulas
-from tests.mock.interfaces import make_mock_registry_source_manager, MockBlockchain
-from tests.performance_mocks import (
- mock_cert_storage,
- mock_cert_loading,
- mock_rest_app_creation,
- mock_cert_generation,
- mock_secret_source,
- mock_remember_node,
- mock_verify_node,
- mock_record_fleet_state,
- mock_message_verification,
- mock_keep_learning
-)
+from tests.utils.ursula import make_decentralized_ursulas, make_federated_ursulas
test_logger = Logger("test-logger")
FEE_RATE_RANGE = (5, 10, 15)
diff --git a/tests/learning/test_discovery_phases.py b/tests/learning/test_discovery_phases.py
index c0427cc8c..45cc006b4 100644
--- a/tests/learning/test_discovery_phases.py
+++ b/tests/learning/test_discovery_phases.py
@@ -14,19 +14,17 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-from unittest.mock import patch
-
import maya
import pytest
import time
from flask import Response
from umbral.keys import UmbralPublicKey
+from unittest.mock import patch
from nucypher.characters.lawful import Ursula
-from tests.performance_mocks import mock_cert_storage, mock_cert_loading, mock_verify_node, \
- mock_message_verification, \
- mock_metadata_validation, mock_signature_bytes, mock_stamp_call, mock_pubkey_from_bytes, VerificationTracker, \
- NotARestApp, mock_secret_source, NotAPublicKey
+from tests.performance_mocks import NotAPublicKey, NotARestApp, VerificationTracker, mock_cert_loading, \
+ mock_cert_storage, mock_message_verification, mock_metadata_validation, mock_pubkey_from_bytes, mock_secret_source, \
+ mock_signature_bytes, mock_stamp_call, mock_verify_node
"""
Node Discovery happens in phases. The first step is for a network actor to learn about the mere existence of a Node.
diff --git a/tests/learning/test_domains.py b/tests/learning/test_domains.py
index 12d1201f2..c817abcb3 100644
--- a/tests/learning/test_domains.py
+++ b/tests/learning/test_domains.py
@@ -2,6 +2,7 @@ from functools import partial
from tests.utils.ursula import make_federated_ursulas
+
def test_learner_learns_about_domains_separately(ursula_federated_test_config, caplog):
lonely_ursula_maker = partial(make_federated_ursulas,
ursula_config=ursula_federated_test_config,
diff --git a/tests/learning/test_fault_tolerance.py b/tests/learning/test_fault_tolerance.py
index 8b8312ce7..51dc9ed3a 100644
--- a/tests/learning/test_fault_tolerance.py
+++ b/tests/learning/test_fault_tolerance.py
@@ -1,12 +1,11 @@
-import os
from collections import namedtuple
+import os
import pytest
-from eth_utils.address import to_checksum_address
-from twisted.logger import globalLogPublisher, LogLevel
-
from bytestring_splitter import VariableLengthBytestring
from constant_sorrow.constants import NOT_SIGNED
+from eth_utils.address import to_checksum_address
+from twisted.logger import LogLevel, globalLogPublisher
from nucypher.characters.base import Character
from nucypher.crypto.powers import TransactingPower
diff --git a/tests/learning/test_firstula_circumstances.py b/tests/learning/test_firstula_circumstances.py
index 0e9f355ae..decdf4e09 100644
--- a/tests/learning/test_firstula_circumstances.py
+++ b/tests/learning/test_firstula_circumstances.py
@@ -15,9 +15,8 @@ You should have received a copy of the GNU Affero General Public License
along with nucypher. If not, see .
"""
-from functools import partial
-
import pytest_twisted as pt
+from functools import partial
from twisted.internet.threads import deferToThread
from nucypher.network.middleware import RestMiddleware
diff --git a/tests/learning/test_fleet_state.py b/tests/learning/test_fleet_state.py
index b12771741..49d2bd775 100644
--- a/tests/learning/test_fleet_state.py
+++ b/tests/learning/test_fleet_state.py
@@ -1,8 +1,9 @@
from constant_sorrow.constants import FLEET_STATES_MATCH, NO_KNOWN_NODES
+from functools import partial
from hendrix.experience import crosstown_traffic
from hendrix.utils.test_utils import crosstownTaskListDecoratorFactory
+
from tests.utils.ursula import make_federated_ursulas
-from functools import partial
def test_learning_from_node_with_no_known_nodes(ursula_federated_test_config):
diff --git a/tests/metrics/estimate_gas.py b/tests/metrics/estimate_gas.py
index 7f000f4e2..c8c34424e 100755
--- a/tests/metrics/estimate_gas.py
+++ b/tests/metrics/estimate_gas.py
@@ -19,28 +19,26 @@ along with nucypher. If not, see .
"""
import json
-import os
-import sys
+from os.path import abspath, dirname
import io
+import os
import re
-
+import sys
import tabulate
import time
-from os.path import abspath, dirname
+from twisted.logger import ILogObserver, Logger, globalLogPublisher, jsonFileLogObserver
+from umbral.keys import UmbralPrivateKey
+from umbral.signing import Signer
from unittest.mock import Mock
-
-from twisted.logger import globalLogPublisher, Logger, jsonFileLogObserver, ILogObserver
from zope.interface import provider
from nucypher.blockchain.economics import StandardTokenEconomics
-from nucypher.blockchain.eth.agents import NucypherTokenAgent, StakingEscrowAgent, PolicyManagerAgent, AdjudicatorAgent
+from nucypher.blockchain.eth.agents import AdjudicatorAgent, NucypherTokenAgent, PolicyManagerAgent, StakingEscrowAgent
from nucypher.blockchain.eth.constants import NUCYPHER_CONTRACT_NAMES
from nucypher.crypto.signing import SignatureStamp
from nucypher.policy.policies import Policy
from tests.utils.blockchain import TesterBlockchain
-from umbral.keys import UmbralPrivateKey
-from umbral.signing import Signer
# FIXME: Needed to use a fixture here, but now estimate_gas.py only runs if executed from main directory
sys.path.insert(0, abspath('tests'))
diff --git a/tests/mock/agents.py b/tests/mock/agents.py
index d940b0f84..e55ae2ff0 100644
--- a/tests/mock/agents.py
+++ b/tests/mock/agents.py
@@ -1,11 +1,11 @@
from collections import defaultdict
-from typing import Tuple
from hexbytes import HexBytes
+from typing import Tuple
from unittest.mock import Mock
from nucypher.blockchain.economics import EconomicsFactory
-from nucypher.blockchain.eth.agents import WorkLockAgent, StakingEscrowAgent, NucypherTokenAgent, PolicyManagerAgent
+from nucypher.blockchain.eth.agents import NucypherTokenAgent, PolicyManagerAgent, StakingEscrowAgent, WorkLockAgent
from nucypher.blockchain.eth.constants import NULL_ADDRESS
from nucypher.blockchain.eth.interfaces import BlockchainInterfaceFactory
from tests.utils.constants import MOCK_PROVIDER_URI
diff --git a/tests/mock/interfaces.py b/tests/mock/interfaces.py
index dfbfdf369..7e567649b 100644
--- a/tests/mock/interfaces.py
+++ b/tests/mock/interfaces.py
@@ -4,14 +4,10 @@ from typing import Union
from nucypher.blockchain.eth.constants import PREALLOCATION_ESCROW_CONTRACT_NAME
from nucypher.blockchain.eth.networks import NetworksInventory
-from nucypher.blockchain.eth.registry import (
- CanonicalRegistrySource,
- BaseContractRegistry,
- IndividualAllocationRegistry,
- RegistrySourceManager
-)
+from nucypher.blockchain.eth.registry import (BaseContractRegistry, CanonicalRegistrySource,
+ IndividualAllocationRegistry, RegistrySourceManager)
from tests.utils.blockchain import TesterBlockchain
-from tests.utils.constants import TEMPORARY_DOMAIN, MOCK_PROVIDER_URI
+from tests.utils.constants import MOCK_PROVIDER_URI, TEMPORARY_DOMAIN
def make_mock_registry_source_manager(blockchain, test_registry, mock_backend: bool = False):
diff --git a/tests/network/test_availability.py b/tests/network/test_availability.py
index 62da2c184..a119fca7e 100644
--- a/tests/network/test_availability.py
+++ b/tests/network/test_availability.py
@@ -1,8 +1,7 @@
import maya
import pytest
-import time
-
import pytest_twisted as pt
+import time
from flask import Response
from twisted.internet import threads
diff --git a/tests/network/test_failure_modes.py b/tests/network/test_failure_modes.py
index 667d14bd3..b936471a0 100644
--- a/tests/network/test_failure_modes.py
+++ b/tests/network/test_failure_modes.py
@@ -1,17 +1,17 @@
import datetime
import maya
-import pytest
import os
-import requests
-from twisted.internet import threads
+import pytest
import pytest_twisted
+import requests
+from bytestring_splitter import BytestringSplittingError
+from functools import partial
+from twisted.internet import threads
from nucypher.policy.collections import TreasureMap
from nucypher.policy.policies import Policy
-from tests.utils.middleware import NodeIsDownMiddleware, EvilMiddleWare
+from tests.utils.middleware import EvilMiddleWare, NodeIsDownMiddleware
from tests.utils.ursula import make_federated_ursulas
-from bytestring_splitter import BytestringSplittingError
-from functools import partial
def test_bob_does_not_let_a_connection_error_stop_him(enacted_federated_policy,
diff --git a/tests/performance_mocks.py b/tests/performance_mocks.py
index 38c38776b..26cef85a8 100644
--- a/tests/performance_mocks.py
+++ b/tests/performance_mocks.py
@@ -1,9 +1,9 @@
from contextlib import contextmanager
-from unittest.mock import patch
from umbral.config import default_params
from umbral.keys import UmbralPublicKey
from umbral.signing import Signature
+from unittest.mock import patch
from nucypher.network.server import make_rest_app
diff --git a/tests/run_tests.py b/tests/run_tests.py
index 38e853c9f..46ac8c4cf 100644
--- a/tests/run_tests.py
+++ b/tests/run_tests.py
@@ -16,9 +16,8 @@ along with nucypher. If not, see .
"""
-import os
-
import maya
+import os
import pytest
diff --git a/tests/utils/blockchain.py b/tests/utils/blockchain.py
index 3605432b3..2619ef3e2 100644
--- a/tests/utils/blockchain.py
+++ b/tests/utils/blockchain.py
@@ -16,17 +16,15 @@ along with nucypher. If not, see .
"""
-import os
-from typing import List
-from typing import Tuple
-
import maya
+import os
from eth_tester.exceptions import TransactionFailed
from eth_utils import to_canonical_address
from twisted.logger import Logger
+from typing import List, Tuple
from web3 import Web3
-from nucypher.blockchain.economics import StandardTokenEconomics, BaseEconomics
+from nucypher.blockchain.economics import BaseEconomics, StandardTokenEconomics
from nucypher.blockchain.eth.actors import ContractAdministrator
from nucypher.blockchain.eth.interfaces import BlockchainDeployerInterface, BlockchainInterfaceFactory
from nucypher.blockchain.eth.registry import InMemoryContractRegistry
@@ -35,13 +33,9 @@ from nucypher.blockchain.eth.token import NU
from nucypher.blockchain.eth.utils import epoch_to_period
from nucypher.config.constants import BASE_DIR
from nucypher.crypto.powers import TransactingPower
-from tests.utils.constants import (
- NUMBER_OF_ETH_TEST_ACCOUNTS,
- NUMBER_OF_STAKERS_IN_BLOCKCHAIN_TESTS,
- NUMBER_OF_URSULAS_IN_BLOCKCHAIN_TESTS,
- DEVELOPMENT_ETH_AIRDROP_AMOUNT,
- INSECURE_DEVELOPMENT_PASSWORD
-)
+from tests.utils.constants import (DEVELOPMENT_ETH_AIRDROP_AMOUNT, INSECURE_DEVELOPMENT_PASSWORD,
+ NUMBER_OF_ETH_TEST_ACCOUNTS, NUMBER_OF_STAKERS_IN_BLOCKCHAIN_TESTS,
+ NUMBER_OF_URSULAS_IN_BLOCKCHAIN_TESTS)
def token_airdrop(token_agent, amount: NU, origin: str, addresses: List[str]):
diff --git a/tests/utils/constants.py b/tests/utils/constants.py
index 6bd80b283..61028cf50 100644
--- a/tests/utils/constants.py
+++ b/tests/utils/constants.py
@@ -17,20 +17,19 @@ along with nucypher. If not, see .
import contextlib
-import os
-import socket
import string
-import tempfile
-from datetime import datetime
from random import SystemRandom
+import os
+import socket
+import tempfile
import time
+from datetime import datetime
from web3 import Web3
from nucypher.blockchain.eth.token import NU
from nucypher.config.characters import UrsulaConfiguration
from nucypher.config.constants import BASE_DIR, NUCYPHER_ENVVAR_KEYRING_PASSWORD
-from nucypher.crypto.api import keccak_digest
def select_test_port() -> int:
diff --git a/tests/utils/controllers.py b/tests/utils/controllers.py
index 0eef50d19..847046116 100644
--- a/tests/utils/controllers.py
+++ b/tests/utils/controllers.py
@@ -1,10 +1,8 @@
import json
+
from io import StringIO
-
from typing import Union
-from io import BytesIO
-
import nucypher
diff --git a/tests/utils/middleware.py b/tests/utils/middleware.py
index c2621cdc1..737cacadd 100644
--- a/tests/utils/middleware.py
+++ b/tests/utils/middleware.py
@@ -18,15 +18,14 @@ along with nucypher. If not, see .
import requests
import socket
-
from bytestring_splitter import VariableLengthBytestring
-from nucypher.characters.lawful import Ursula
-from nucypher.network.middleware import RestMiddleware, NucypherMiddlewareClient
-from tests.utils.constants import MOCK_KNOWN_URSULAS_CACHE
from constant_sorrow.constants import CERTIFICATE_NOT_SAVED
-
from flask import Response
+from nucypher.characters.lawful import Ursula
+from nucypher.network.middleware import NucypherMiddlewareClient, RestMiddleware
+from tests.utils.constants import MOCK_KNOWN_URSULAS_CACHE
+
class _TestMiddlewareClient(NucypherMiddlewareClient):
timeout = None
diff --git a/tests/utils/policy.py b/tests/utils/policy.py
index 2960c8231..ba40e5c9f 100644
--- a/tests/utils/policy.py
+++ b/tests/utils/policy.py
@@ -16,12 +16,12 @@ along with nucypher. If not, see .
"""
-import os
import random
from collections import OrderedDict
-from typing import Set
import maya
+import os
+from typing import Set
from nucypher.characters.lawful import Ursula
from nucypher.network.middleware import RestMiddleware
diff --git a/tests/utils/ursula.py b/tests/utils/ursula.py
index 81b4ac091..1f45d2cd7 100644
--- a/tests/utils/ursula.py
+++ b/tests/utils/ursula.py
@@ -16,18 +16,14 @@ along with nucypher. If not, see .
"""
from cryptography.x509 import Certificate
-from typing import Set, List, Iterable, Optional
+from typing import Iterable, List, Optional, Set
from nucypher.blockchain.eth.actors import Staker
from nucypher.blockchain.eth.interfaces import BlockchainInterface
from nucypher.characters.lawful import Ursula
from nucypher.config.characters import UrsulaConfiguration
-from tests.utils.constants import (
- MOCK_KNOWN_URSULAS_CACHE,
- MOCK_URSULA_STARTING_PORT,
- NUMBER_OF_URSULAS_IN_DEVELOPMENT_NETWORK,
- MOCK_URSULA_DB_FILEPATH
-)
+from tests.utils.constants import (MOCK_KNOWN_URSULAS_CACHE, MOCK_URSULA_DB_FILEPATH, MOCK_URSULA_STARTING_PORT,
+ NUMBER_OF_URSULAS_IN_DEVELOPMENT_NETWORK)
def make_federated_ursulas(ursula_config: UrsulaConfiguration,