Files
spothole/core/call_lookup_helper.py
T

34 lines
1.6 KiB
Python

import re
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)
# First check our input looks like a real callsign
if callsign and re.match(r"^[A-Za-z0-9/\-]*$", 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 p2: p2.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