Return meaningful error if there are not enough Ursulas

pull/2772/head
Piotr Roslaniec 2021-08-13 10:17:11 +02:00 committed by derekpierre
parent 3200ef05fc
commit 1dd5eb854e
2 changed files with 7 additions and 1 deletions

View File

@ -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 <https://www.gnu.org/licenses/>.
"""
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:
"""

View File

@ -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: