From 1dd5eb854ee4aea1067c91320ed660afa252791e Mon Sep 17 00:00:00 2001 From: Piotr Roslaniec Date: Fri, 13 Aug 2021 10:17:11 +0200 Subject: [PATCH] Return meaningful error if there are not enough Ursulas --- nucypher/policy/reservoir.py | 4 +++- nucypher/utilities/porter/porter.py | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/nucypher/policy/reservoir.py b/nucypher/policy/reservoir.py index cbdb3e717..3a211e58b 100644 --- a/nucypher/policy/reservoir.py +++ b/nucypher/policy/reservoir.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 typing import Iterable, Optional, List +from typing import Iterable, List, Optional from eth_typing import ChecksumAddress @@ -86,6 +86,8 @@ class MergedReservoir: else: return None + def __len__(self): + return len(self.values) + len(self.reservoir) class PrefetchStrategy: """ diff --git a/nucypher/utilities/porter/porter.py b/nucypher/utilities/porter/porter.py index 8271ad299..40f65d3dd 100644 --- a/nucypher/utilities/porter/porter.py +++ b/nucypher/utilities/porter/porter.py @@ -112,6 +112,10 @@ the Pipe for nucypher network operations exclude_ursulas: Optional[Sequence[ChecksumAddress]] = None, include_ursulas: Optional[Sequence[ChecksumAddress]] = None) -> List[UrsulaInfo]: reservoir = self._make_staker_reservoir(quantity, duration_periods, exclude_ursulas, include_ursulas) + + if len(reservoir) < quantity: + raise ValueError(f"Requested quantity={quantity} Ursulas, but only {len(reservoir)} are available") + value_factory = PrefetchStrategy(reservoir, quantity) def get_ursula_info(ursula_address) -> Porter.UrsulaInfo: