from dataclasses import dataclass @dataclass class Callsign: """Data class that defines a callsign and the data associated with it. This will have been retrieved by a callsign lookup provider using data files or online lookup. This can be used to infer missing data for a spot, though if the spot has a SIG (e.g. POTA) reference this data for their home location (or even just their country) will be less accurate and should not be used in preference to that.""" # Callsign as spotted call: str # "Home" call, i.e. with any prefixes and suffixes stripped off home_call: str | None = None # Operator name name : str | None = None # QTH (location), free text qth : str | None = None # Maidenhead grid locator. Depending on the source of lookup this could be a home location from QRZ/HamQTH or just # the centre of the country they're operating in if no other data is available. grid : str | None = None # Latitude. Depending on the source of lookup this could be a home location from QRZ/HamQTH or just # the centre of the country they're operating in if no other data is available. latitude : float | None = None # Longitude. Depending on the source of lookup this could be a home location from QRZ/HamQTH or just # the centre of the country they're operating in if no other data is available. longitude : float | None = None # Country in which the callsign indicates they are operating country: str | None = None # Continent in which the callsign indicates they are operating continent: str | None = None # DXCC ID in which the callsign indicates they are operating dxcc_id: int | None = None # CQ zone in which the callsign indicates they are operating cq_zone: int | None = None # ITU zone in which the callsign indicates they are operating itu_zone: int | None = None # Location source. This can be "HOME QTH" or "DXCC" depending on which provider gave us a location location_source: str | None = None def fully_populated(self): """Utility method to indicate that the callsign data is fully populated. Multiple providers can return data for a callsign, and we try them in sequence until we have all the data we can, in which case there's no point querying any other providers.""" return self.home_call is not None and self.name is not None and self.qth is not None and self.grid is not None\ and self.latitude is not None and self.longitude is not None and self.country is not None and self.continent\ is not None and self.dxcc_id is not None and self.cq_zone is not None and self.itu_zone is not None