From c4937b78bf75fdf09c4ad127fd03efa033a2dd68 Mon Sep 17 00:00:00 2001 From: jMyles Date: Sun, 11 Aug 2019 16:24:56 -0700 Subject: [PATCH] Introducing designation of a WorkOrder that is 'replete' with CFrags for each PRETask. --- nucypher/characters/lawful.py | 2 +- nucypher/policy/collections.py | 15 +++++++++++++++ tests/characters/test_bob_handles_frags.py | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/nucypher/characters/lawful.py b/nucypher/characters/lawful.py index 53ce8c8b9..6871623f5 100644 --- a/nucypher/characters/lawful.py +++ b/nucypher/characters/lawful.py @@ -607,7 +607,7 @@ class Bob(Character): capsules_to_include = [] for capsule in capsules: try: - precedent_work_order = self._completed_work_orders[node_id][capsule] + 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 except KeyError: diff --git a/nucypher/policy/collections.py b/nucypher/policy/collections.py index 90f885136..52373f178 100644 --- a/nucypher/policy/collections.py +++ b/nucypher/policy/collections.py @@ -411,6 +411,21 @@ class WorkOrderHistory: def ursulas(self): return self.by_ursula.keys() + def most_recent_replete(self, capsule): + """ + Returns most recent WorkOrders for each Ursula which contain a complete task (with CFrag attached) for this Capsule. + """ + return self._latest_replete[capsule] + + def save_work_order(self, work_order, as_replete=False): + for task in work_order.tasks.values(): + if as_replete: + work_orders_for_ursula = self._latest_replete.setdefault(task.capsule, {}) + work_orders_for_ursula[work_order.ursula.checksum_address] = work_order + + work_orders_for_ursula = self.by_ursula.setdefault(work_order.ursula.checksum_address, {}) + work_orders_for_ursula[task.capsule] = work_order + def by_checksum_address(self, checksum_address): return self.by_ursula.setdefault(checksum_address, {}) diff --git a/tests/characters/test_bob_handles_frags.py b/tests/characters/test_bob_handles_frags.py index 2572b4714..e4661c7f4 100644 --- a/tests/characters/test_bob_handles_frags.py +++ b/tests/characters/test_bob_handles_frags.py @@ -344,7 +344,7 @@ def test_federated_bob_retrieves(federated_bob, alices_verifying_key = federated_alice.stamp.as_umbral_pubkey() delivered_cleartexts = federated_bob.retrieve(message_kit=the_message_kit, - data_source=the_data_source, + enrico=the_data_source, alice_verifying_key=alices_verifying_key, label=enacted_federated_policy.label)