mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2026-08-06 02:21:42 +00:00
30 lines
1.4 KiB
Python
30 lines
1.4 KiB
Python
from core.data_providers import DATA_PROVIDERS
|
|
from data.callsign import Callsign
|
|
|
|
|
|
def get_call_info(callsign, lookup_credentials):
|
|
"""Utility method to get the best set of data for a callsign as we can, using all enabled providers.
|
|
lookup_credentials is an optional object that carries the user's QRZ.com/HamQTH credentials, if they provided them,
|
|
to enable lookup using those providers."""
|
|
|
|
callsign_data = Callsign(call=callsign)
|
|
|
|
if callsign:
|
|
# Sort callsign providers by priority order, so we query the highest priority (lowest numbers) first, and only
|
|
# query other providers for data we are missing as we go along.
|
|
for p in sorted(DATA_PROVIDERS.callsign_data_providers, key=lambda p: p.priority):
|
|
if p.enabled:
|
|
# Get new lookup data
|
|
data = p.lookup(callsign, lookup_credentials)
|
|
if data:
|
|
# If we have new data for fields that were previously unpopulated, add them in
|
|
for key, value in data.__dict__.items():
|
|
if value is not None and callsign_data.__dict__.get(key) is None:
|
|
callsign_data.__dict__[key] = value
|
|
|
|
# If callsign data is fully populated, avoid looking up using other providers as their data will not
|
|
# be used
|
|
if callsign_data.fully_populated():
|
|
break
|
|
|
|
return callsign_data |