Group completed work orders by capsule in work_orders_for_capsules()

pull/2244/head
Bogdan Opanchuk 2020-06-01 16:20:46 -07:00
parent af7e9701bf
commit fb55fd349a
1 changed files with 12 additions and 10 deletions

View File

@ -39,6 +39,7 @@ from constant_sorrow.constants import (
READY,
INVALIDATED
)
from collections import OrderedDict, defaultdict
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurve
from cryptography.hazmat.primitives.serialization import Encoding
@ -701,7 +702,7 @@ class Bob(Character):
raise KeyError(f"Bob doesn't have the TreasureMap {map_id}; can't generate work orders.")
incomplete_work_orders = OrderedDict()
complete_work_orders = OrderedDict()
complete_work_orders = defaultdict(list)
if not treasure_map_to_use:
raise ValueError(f"Bob doesn't have a TreasureMap to match any of these capsules: {capsules}")
@ -715,7 +716,7 @@ class Bob(Character):
try:
precedent_work_order = self._completed_work_orders.most_recent_replete(capsule)[node_id]
self.log.debug(f"{capsule} already has a saved WorkOrder for this Node:{node_id}.")
complete_work_orders[node_id] = precedent_work_order
complete_work_orders[capsule].append(precedent_work_order)
except KeyError:
# Don't have a precedent completed WorkOrder for this Ursula for this Capsule.
# We need to make a new one.
@ -737,8 +738,9 @@ class Bob(Character):
# TODO: Presently, the order here is haphazard . Do we want to do the complete or incomplete specifically first? NRN
break
if incomplete_work_orders == OrderedDict():
self.log.warn("No new WorkOrders created. Try calling this with different parameters.") # TODO: Clearer instructions. NRN
if not incomplete_work_orders:
self.log.warn(
"No new WorkOrders created. Try calling this with different parameters.") # TODO: Clearer instructions. NRN
return incomplete_work_orders, complete_work_orders
@ -827,15 +829,15 @@ class Bob(Character):
alice_verifying_key=alice_verifying_key,
*capsules_to_activate)
self.log.info(f"Found {len(complete_work_orders)} for Capsules ({capsules_to_activate}).")
self.log.info(f"Found {len(complete_work_orders)} complete work orders "
f"for Capsules ({capsules_to_activate}).")
if complete_work_orders:
if use_precedent_work_orders:
for capsule in capsules_to_activate:
for work_order in complete_work_orders.values():
if capsule in work_order.tasks:
cfrag_in_question = work_order.tasks[capsule].cfrag
capsule.attach_cfrag(cfrag_in_question)
for capsule, work_orders in complete_work_orders.items():
for work_order in work_orders:
cfrag_in_question = work_order.tasks[capsule].cfrag
capsule.attach_cfrag(cfrag_in_question)
else:
self.log.warn(
"Found existing complete WorkOrders, but use_precedent_work_orders is set to False. To use Bob in 'KMS mode', set retain_cfrags=False as well.")