Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
davepeck committed Dec 15, 2023
1 parent 486a7e4 commit 8ebc9df
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 13 deletions.
17 changes: 11 additions & 6 deletions server/data/search.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import datetime
import typing as t
from concurrent.futures import ThreadPoolExecutor

from server.data.contacts import Contact, IContactProvider
from server.data.manager import DataManager
Expand Down Expand Up @@ -34,6 +34,8 @@ def search_and_summarize(
self, contact: Contact
) -> tuple[Contact, ContributionSummary] | None:
"""Search for a contact and summarize their contributions."""
# LOGGING
# print(f"Searching for {contact}")
for alternative in self._alternatives_helper.get_alternatives(contact):
if alternative.duplicate_key in self._seen:
continue
Expand All @@ -48,9 +50,12 @@ def search_and_summarize(

def search_and_summarize_contacts(
self, contacts: IContactProvider
) -> t.Iterable[tuple[Contact, ContributionSummary]]:
) -> list[tuple[Contact, ContributionSummary]]:
"""Search for contacts and summarize their contributions."""
for contact in contacts.get_contacts():
result = self.search_and_summarize(contact)
if result is not None:
yield result
contact_list = list(contacts.get_contacts())
with ThreadPoolExecutor() as executor:
results = []
for result in executor.map(self.search_and_summarize, contact_list):
if result is not None:
results.append(result)
return results
14 changes: 8 additions & 6 deletions server/data/summaries.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,21 +176,21 @@ def _contributions(
contact.last_name, contact.zip5, related_name_set
)

def _summaries_for_contact(
self, contact: Contact
) -> t.Iterable[ContributionSummary]:
def _summaries_for_contact(self, contact: Contact) -> list[ContributionSummary]:
"""Return all possible contribution summaries for a contact."""
related_name_sets = list(
self._names_provider.get_related_names(contact.first_name)
)
# No related names? Just use the first name.
if not related_name_sets:
related_name_sets = [frozenset([contact.first_name])]
summaries = []
for related_name_set in related_name_sets:
contributions = self._contributions(contact, related_name_set)
summary = ContributionSummary(contributions)
if summary.total > 0:
yield summary
summaries.append(summary)
return summaries

def preferred_summary_for_contact(
self, contact: Contact
Expand All @@ -200,9 +200,11 @@ def preferred_summary_for_contact(
try_contacts = [contact]
if contact.has_zip:
try_contacts.append(contact.without_zip())
summaries: list[ContributionSummary] = []

summaries = []
for try_contact in try_contacts:
summaries.extend(list(self._summaries_for_contact(try_contact)))
summaries.extend(self._summaries_for_contact(try_contact))

if not summaries:
return None
return max(summaries, key=lambda s: s.total)
1 change: 0 additions & 1 deletion server/utils/bq.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,6 @@ class BQClient(bigquery.Client):
def execute(self, statement: Statement):
"""Execute the query."""
query = statement.build_query()
# print("EXECUTING: ", query, "WITH PARAMS: ", statement.params)
job_config = statement.build_query_job_config()
job = self.query(query, job_config=job_config)
return job.result()
Expand Down

0 comments on commit 8ebc9df

Please sign in to comment.