colorspot/colorspot.py
Michael Clemens 0eff320419 added colored line by continent
added own country list
added continent to table
2022-05-19 14:15:19 +02:00

835 lines
32 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
import csv
import re
import json
import os
import time as bla
from telnetlib import Telnet
from colored import fg, bg, attr
import configparser
from collections import defaultdict
class ColorSpot():
def __init__(self):
self.version = "0.1.0"
self.config = configparser.ConfigParser()
self.config_file = os.path.expanduser('~/.colorspot.ini')
self.read_config(self.config, self.config_file)
self.qsl_countries = self.get_confirmed_countries()
@staticmethod
def read_config(config, file_name):
"""reads the configuration from the config file or
creates a default config file if none could be found"""
if os.path.isfile(file_name):
config.read(file_name)
else:
config = configparser.ConfigParser()
config['cluster'] = {
'host': 'dxc.nc7j.com',
'port': '7373',
'user': 'N0CALL',
'timeout': '100'}
config['band_colors'] = {
"145": "white",
"144": "white",
"50": "white",
"29": "yellow",
"28": "yellow",
"24": "red",
"21": "orchid",
"18": "green",
"14": "steel_blue_3",
"10": "orange_1",
"7": "cyan",
"5": "white",
"3": "light_cyan",
"1": "white",
'alert_bg': 'indian_red_1a',
'alert_fg': 'white',
'default_bg': 'black'}
config['cont_colors'] = {
"AF": "dark_orange_3b",
"AN": "white",
"AS": "red",
"EU": "cyan",
"NA": "steel_blue_3",
"OC": "orchid",
"SA": "light_goldenrod_2a"}
config['colors']= {
'use_colors': 'yes',
'color_by' : 'continent',
'alert_bg': 'indian_red_1a',
'alert_fg': 'white',
'default_bg': 'black'}
config['aliases'] = {
'fed. rep. of germany': 'federal republic of germany'}
config['dxcc'] = {
"1A": "Sov. Mil. Order of Malta,EU",
"3A": "Monaco,EU",
"3B6": "Agalega & St. Brandon Is.,AF",
"3B7": "Agalega & St. Brandon Is.,AF",
"3B8": "Mauritius,AF",
"3B9": "Rodriguez I.,AF",
"3C": "Equatorial Guinea,AF",
"3C0": "Annobon I.,AF",
"3D2": "Fiji,OC",
"3D2": "Conway Reef,OC",
"3D2": "Rotuma I.,OC",
"3DA": "Swaziland,AF",
"3V": "Tunisia,AF",
"3W": "Viet Nam,AS",
"XV": "Viet Nam,AS",
"3X": "Guinea,AF",
"3Y": "Bouvet,AF",
"3Y": "Peter I I.,AN",
"4J": "Azerbaijan,AS",
"4K": "Azerbaijan,AS",
"4L": "Georgia,AS",
"4O": "Montenegro,EU",
"4S": "Sri Lanka,AS",
"4U_ITU": "ITU HQ,EU",
"4U_UN": "United Nations HQ,NA",
"4W": "Timor - Leste,OC",
"4X": "Israel,AS",
"4Z": "Israel,AS",
"5A": "Libya,AF",
"5B": "Cyprus,AS",
"C4": "Cyprus,AS",
"P3": "Cyprus,AS",
"5H": "Tanzania,AF",
"5I": "Tanzania,AF",
"5N": "Nigeria,AF",
"5R": "Madagascar,AF",
"5T": "Mauritania,AF",
"5U": "Niger,AF",
"5V": "Togo,AF",
"5W": "Samoa,OC",
"5X": "Uganda,AF",
"5Y": "Kenya,AF",
"5Z": "Kenya,AF",
"6V": "Senegal,AF",
"6W": "Senegal,AF",
"6Y": "Jamaica,NA",
"7O": "Yemen,AS",
"7P": "Lesotho,AF",
"7Q": "Malawi,AF",
"7T": "Algeria,AF",
"7U": "Algeria,AF",
"7V": "Algeria,AF",
"7W": "Algeria,AF",
"7X": "Algeria,AF",
"7Y": "Algeria,AF",
"8P": "Barbados,NA",
"8Q": "Maldives,AF",
"8R": "Guyana,SA",
"9A": "Croatia,EU",
"9G": "Ghana,AF",
"9H": "Malta,EU",
"9I": "Zambia,AF",
"9J": "Zambia,AF",
"9K": "Kuwait,AS",
"9L": "Sierra Leone,AF",
"9M2": "West Malaysia,AS",
"9M4": "West Malaysia,AS",
"9M6": "East Malaysia,OC",
"9M8": "East Malaysia,OC",
"9N": "Nepal,AS",
"9Q": "Dem. Rep. of Congo,AF",
"9R": "Dem. Rep. of Congo,AF",
"9S": "Dem. Rep. of Congo,AF",
"9T": "Dem. Rep. of Congo,AF",
"9U": "Burundi,AF",
"9V": "Singapore,AS",
"9X": "Rwanda,AF",
"9Y": "Trinidad & Tobago,SA",
"9Z": "Trinidad & Tobago,SA",
"A2": "Botswana,AF",
"A3": "Tonga,OC",
"A4": "Oman,AS",
"A5": "Bhutan,AS",
"A6": "United Arab Emirates,AS",
"A7": "Qatar,AS",
"A9": "Bahrain,AS",
"AP": "Pakistan,AS",
"B": "China,AS",
"BS7": "Scarborough Reef,AS",
"BV": "Taiwan,AS",
"BV9P": "Pratas I.,AS",
"C2": "Nauru,OC",
"C3": "Andorra,EU",
"C5": "The Gambia,AF",
"C6": "Bahamas,NA",
"C8": "Mozambique,AF",
"C9": "Mozambique,AF",
"CA": "Chile,SA",
"CB": "Chile,SA",
"CC": "Chile,SA",
"CD": "Chile,SA",
"CE": "Chile,SA",
"CE0": "Easter I.,SA",
"CE0": "Juan Fernandez Is.,SA",
"CE0": "San Felix & San Ambrosio,SA",
"CE9": "Antarctica,AN",
"KC4": "Antarctica,AN",
"3Y": "Antarctica,AN",
"8j1": "Antarctica,AN",
"AT0": "Antarctica,AN",
"DP0": "Antarctica,AN",
"VK0": "Antarctica,AN",
"VP8": "Antarctica,AN",
"R1AW": "Antarctica,AN",
"CM": "Cuba,NA",
"CO": "Cuba,NA",
"CN": "Morocco,AF",
"CP": "Bolivia,SA",
"CT": "Portugal,EU",
"CT3": "Madeira Is.,AF",
"CU": "Azores,EU",
"CV": "Uruguay,SA",
"CW": "Uruguay,SA",
"CX": "Uruguay,SA",
"CY0": "Sable I.,NA",
"CY9": "St. Paul I.,NA",
"D2": "Angola,AF",
"D3": "Angola,AF",
"D4": "Cape Verde,AF",
"D6": "Comoros,AF",
"DA": "Federal Republic of Germany,EU",
"DB": "Federal Republic of Germany,EU",
"DC": "Federal Republic of Germany,EU",
"DD": "Federal Republic of Germany,EU",
"DE": "Federal Republic of Germany,EU",
"DF": "Federal Republic of Germany,EU",
"DG": "Federal Republic of Germany,EU",
"DH": "Federal Republic of Germany,EU",
"DI": "Federal Republic of Germany,EU",
"DJ": "Federal Republic of Germany,EU",
"DK": "Federal Republic of Germany,EU",
"DL": "Federal Republic of Germany,EU",
"DM": "Federal Republic of Germany,EU",
"DN": "Federal Republic of Germany,EU",
"DO": "Federal Republic of Germany,EU",
"DP": "Federal Republic of Germany,EU",
"DQ": "Federal Republic of Germany,EU",
"DR": "Federal Republic of Germany,EU",
"DU": "Philippines,OC",
"DV": "Philippines,OC",
"DW": "Philippines,OC",
"DX": "Philippines,OC",
"DY": "Philippines,OC",
"DZ": "Philippines,OC",
"E3": "Eritrea,AF",
"E4": "Palestine,AS",
"E5": "N. Cook Is.,OC",
"E5": "S. Cook Is.,OC",
"E7": "Bosnia-Herzegovina,EU",
"EA": "Spain,EU",
"EB": "Spain,EU",
"EC": "Spain,EU",
"ED": "Spain,EU",
"EE": "Spain,EU",
"EF": "Spain,EU",
"EG": "Spain,EU",
"EH": "Spain,EU",
"EA6": "Balearic Is.,EU",
"EB6": "Balearic Is.,EU",
"EC6": "Balearic Is.,EU",
"ED6": "Balearic Is.,EU",
"EE6": "Balearic Is.,EU",
"EF6": "Balearic Is.,EU",
"EG6": "Balearic Is.,EU",
"EH6": "Balearic Is.,EU",
"EA8": "Canary Is.,AF",
"EB8": "Canary Is.,AF",
"EC8": "Canary Is.,AF",
"ED8": "Canary Is.,AF",
"EE8": "Canary Is.,AF",
"EF8": "Canary Is.,AF",
"EG8": "Canary Is.,AF",
"EH8": "Canary Is.,AF",
"EA9": "Ceuta & Melilla,AF",
"EB9": "Ceuta & Melilla,AF",
"EC9": "Ceuta & Melilla,AF",
"ED9": "Ceuta & Melilla,AF",
"EE9": "Ceuta & Melilla,AF",
"EF9": "Ceuta & Melilla,AF",
"EG9": "Ceuta & Melilla,AF",
"EH9": "Ceuta & Melilla,AF",
"EI": "Ireland,EU",
"EJ": "Ireland,EU",
"EK": "Armenia,AS",
"EL": "Liberia,AF",
"EP": "Iran,AS",
"EQ": "Iran,AS",
"ER": "Moldova,EU",
"ES": "Estonia,EU",
"ET": "Ethiopia,AF",
"EU": "Belarus,EU",
"EV": "Belarus,EU",
"EW": "Belarus,EU",
"EX": "Kyrgyzstan,AS",
"EY": "Tajikistan,AS",
"EZ": "Turkmenistan,AS",
"F": "France,EU",
"FG": "Guadeloupe,NA",
"FH": "Mayotte,AF",
"FJ": "Saint Barthelemy,NA",
"FK": "New Caledonia,OC",
"FK": "Chesterfield Is.,OC",
"FM": "Martinique,NA",
"FO": "Austral I.,OC",
"FO": "Clipperton I.,NA",
"FO": "French Polynesia,OC",
"FO": "Marquesas Is.,OC",
"FP": "St. Pierre & Miquelon,NA",
"FR/G": "Glorioso Is.,AF",
"FR/J": "Juan de Nova, Europa,AF",
"FR/E": "Juan de Nova, Europa,AF",
"FR": "Reunion I.,AF",
"FR/T": "Tromelin I.,AF",
"FS": "Saint Martin,NA",
"FT/W": "Crozet I.,AF",
"FT/X": "Kerguelen Is.,AF",
"FT/Z": "Amsterdam & St. Paul Is.,AF",
"FW": "Wallis & Futuna Is.,OC",
"FY": "French Guiana,SA",
"G": "England,EU",
"GX": "England,EU",
"M": "England,EU",
"GD": "Isle of Man,EU",
"GT": "Isle of Man,EU",
"GI": "Northern Ireland,EU",
"GN": "Northern Ireland,EU",
"GJ": "Jersey,EU",
"GH": "Jersey,EU",
"GM": "Scotland,EU",
"GS": "Scotland,EU",
"GU": "Guernsey,EU",
"GP": "Guernsey,EU",
"GW": "Wales,EU",
"GC": "Wales,EU",
"H4": "Solomon Is.,OC",
"H40": "Temotu Province,OC",
"HA": "Hungary,EU",
"HG": "Hungary,EU",
"HB": "Switzerland,EU",
"HB0": "Liechtenstein,EU",
"HC": "Ecuador,SA",
"HD": "Ecuador,SA",
"HC8": "Galapagos Is.,SA",
"HD8": "Galapagos Is.,SA",
"HH": "Haiti,NA",
"HI": "Dominican Republic,NA",
"HJ": "Colombia,SA",
"HK": "Colombia,SA",
"5J": "Colombia,SA",
"5K": "Colombia,SA",
"HK0": "Malpelo I.,SA",
"HK0": "San Andres & Providencia,NA",
"HL": "Republic of Korea,AS",
"6K": "Republic of Korea,AS",
"6N": "Republic of Korea,AS",
"HO": "Panama,NA",
"HP": "Panama,NA",
"HQ": "Honduras,NA",
"HR": "Honduras,NA",
"HS": "Thailand,AS",
"E2": "Thailand,AS",
"HV": "Vatican,EU",
"HZ": "Saudi Arabia,AS",
"I": "Italy,EU",
"IS0": "Sardinia,EU",
"IM0": "Sardinia,EU",
"J2": "Djibouti,AF",
"J3": "Grenada,NA",
"J5": "Guinea-Bissau,AF",
"J6": "St. Lucia,NA",
"J7": "Dominica,NA",
"J8": "St. Vincent,NA",
"JA": "Japan,AS",
"JB": "Japan,AS",
"JC": "Japan,AS",
"JD": "Japan,AS",
"JE": "Japan,AS",
"JF": "Japan,AS",
"JG": "Japan,AS",
"JH": "Japan,AS",
"JI": "Japan,AS",
"JJ": "Japan,AS",
"JK": "Japan,AS",
"JL": "Japan,AS",
"JM": "Japan,AS",
"JN": "Japan,AS",
"JO": "Japan,AS",
"JP": "Japan,AS",
"JQ": "Japan,AS",
"JR": "Japan,AS",
"JS": "Japan,AS",
"7J": "Japan,AS",
"7K": "Japan,AS",
"7L": "Japan,AS",
"7M": "Japan,AS",
"7N": "Japan,AS",
"JD1": "Minami Torishima,OC",
"JD1": "Ogasawara,AS",
"JT": "Mongolia,AS",
"JU": "Mongolia,AS",
"JV": "Mongolia,AS",
"JW": "Svalbard,EU",
"JX": "Jan Mayen,EU",
"JY": "Jordan,AS",
"K": "United States of America,NA",
"W": "United States of America,NA",
"N": "United States of America,NA",
"AA": "United States of America,NA",
"AB": "United States of America,NA",
"AC": "United States of America,NA",
"AD": "United States of America,NA",
"AE": "United States of America,NA",
"AF": "United States of America,NA",
"AG": "United States of America,NA",
"AH": "United States of America,NA",
"AI": "United States of America,NA",
"AJ": "United States of America,NA",
"AK": "United States of America,NA",
"KG4": "Guantanamo Bay,NA",
"KH0": "Mariana Is.,OC",
"KH1": "Baker & Howland Is.,OC",
"KH2": "Guam,OC",
"KH3": "Johnston I.,OC",
"KH4": "Midway I.,OC",
"KH5": "Palmyra & Jarvis Is.,OC",
"KH5K": "Kingman Reef,OC",
"KH6": "Hawaii,OC",
"KH7": "Hawaii,OC",
"KH7K": "Kure I.,OC",
"KH8": "American Samoa,OC",
"KH8": "Swains I.,OC",
"KH9": "Wake I.,OC",
"KL": "Alaska,NA",
"AL": "Alaska,NA",
"NL": "Alaska,NA",
"WL": "Alaska,NA",
"KP1": "Navassa I.,NA",
"KP2": "Virgin Is.,NA",
"KP3": "Puerto Rico,NA",
"KP4": "Puerto Rico,NA",
"KP5": "Desecheo I.,NA",
"LA": "Norway,EU",
"LB": "Norway,EU",
"LC": "Norway,EU",
"LD": "Norway,EU",
"LE": "Norway,EU",
"LF": "Norway,EU",
"LG": "Norway,EU",
"LH": "Norway,EU",
"LI": "Norway,EU",
"LJ": "Norway,EU",
"LK": "Norway,EU",
"LL": "Norway,EU",
"LM": "Norway,EU",
"LN": "Norway,EU",
"LO": "Argentina,SA",
"LP": "Argentina,SA",
"LQ": "Argentina,SA",
"LR": "Argentina,SA",
"LS": "Argentina,SA",
"LT": "Argentina,SA",
"LU": "Argentina,SA",
"LV": "Argentina,SA",
"LW": "Argentina,SA",
"LX": "Luxembourg,EU",
"LY": "Lithuania,EU",
"LZ": "Bulgaria,EU",
"OA": "Peru,SA",
"OB": "Peru,SA",
"OC": "Peru,SA",
"OD": "Lebanon,AS",
"OE": "Austria,EU",
"OF": "Finland,EU",
"OG": "Finland,EU",
"OH": "Finland,EU",
"OI": "Finland,EU",
"OH0": "Aland Is.,EU",
"OJ0": "Market Reef,EU",
"OK": "Czech Republic,EU",
"OL": "Czech Republic,EU",
"OM": "Slovak Republic,EU",
"ON": "Belgium,EU",
"OO": "Belgium,EU",
"OP": "Belgium,EU",
"OQ": "Belgium,EU",
"OR": "Belgium,EU",
"OS": "Belgium,EU",
"OT": "Belgium,EU",
"OU": "Denmark,EU",
"OV": "Denmark,EU",
"OW": "Denmark,EU",
"OZ": "Denmark,EU",
"OX": "Greenland,NA",
"OY": "Faroe Is.,EU",
"P2": "Papua New Guinea,OC",
"P4": "Aruba,SA",
"P5": "DPR of Korea,AS",
"PA": "Netherlands,EU",
"PB": "Netherlands,EU",
"PC": "Netherlands,EU",
"PD": "Netherlands,EU",
"PE": "Netherlands,EU",
"PF": "Netherlands,EU",
"PG": "Netherlands,EU",
"PH": "Netherlands,EU",
"PI": "Netherlands,EU",
"PJ2": "Bonaire, Curacao,SA",
"PJ4": "Bonaire, Curacao,SA",
"PJ9": "Bonaire, Curacao,SA",
"PJ5": "St. Maarten, Saba, St.Eustatius,NA",
"PJ6": "St. Maarten, Saba, St.Eustatius,NA",
"PJ7": "St. Maarten, Saba, St.Eustatius,NA",
"PJ8": "St. Maarten, Saba, St.Eustatius,NA",
"PP": "Brazil,SA",
"PQ": "Brazil,SA",
"PR": "Brazil,SA",
"PS": "Brazil,SA",
"PT": "Brazil,SA",
"PU": "Brazil,SA",
"PV": "Brazil,SA",
"PW": "Brazil,SA",
"PX": "Brazil,SA",
"PY": "Brazil,SA",
"PP0-PY0F": "Fernando de Noronha,SA",
"PP0-PY0S": "St. Peter & St. Paul Rocks,SA",
"PP0-PY0T": "Trindade & Martim Vaz Is.,SA",
"PZ": "Suriname,SA",
"R1FJ": "Franz Josef Land,EU",
"R1MV": "Malyj Vysotskij I.,EU",
"S0": "Western Sahara,AF",
"S2": "Bangladesh,AS",
"S5": "Slovenia,EU",
"S7": "Seychelles,AF",
"S9": "Sao Tome & Principe,AF",
"SA": "Sweden,EU",
"SB": "Sweden,EU",
"SC": "Sweden,EU",
"SD": "Sweden,EU",
"SE": "Sweden,EU",
"SF": "Sweden,EU",
"SG": "Sweden,EU",
"SH": "Sweden,EU",
"SI": "Sweden,EU",
"SJ": "Sweden,EU",
"SK": "Sweden,EU",
"SL": "Sweden,EU",
"SM": "Sweden,EU",
"SN": "Poland,EU",
"SO": "Poland,EU",
"SP": "Poland,EU",
"SQ": "Poland,EU",
"SR": "Poland,EU",
"ST": "Sudan,AF",
"SU": "Egypt,AF",
"SV": "Greece,EU",
"SW": "Greece,EU",
"SX": "Greece,EU",
"SY": "Greece,EU",
"SZ": "Greece,EU",
"J4": "Greece,EU",
"SV/A": "Mount Athos,EU",
"SV5": "Dodecanese,EU",
"J45": "Dodecanese,EU",
"SV9": "Crete,EU",
"J49": "Crete,EU",
"T2": "Tuvalu,OC",
"T30": "W. Kiribati,OC",
"T31": "C. Kiribati (British Phoenix Is.),OC",
"T32": "E. Kiribati,OC",
"T33": "Banaba I.,OC",
"T5": "Somalia,AF",
"6O": "Somalia,AF",
"T7": "San Marino,EU",
"T8": "Palau,OC",
"TA": "Turkey,EU",
"TB": "Turkey,EU",
"TC": "Turkey,EU",
"TF": "Iceland,EU",
"TG": "Guatemala,NA",
"TD": "Guatemala,NA",
"TI": "Costa Rica,NA",
"TE": "Costa Rica,NA",
"TI9": "Cocos I.,NA",
"TJ": "Cameroon,AF",
"TK": "Corsica,EU",
"TL": "Central Africa,AF",
"TN": "???,AF",
"TR": "Gabon,AF",
"TT": "Chad,AF",
"TU": "Cote d Ivoire,AF",
"TY": "Benin,AF",
"TZ": "Mali,AF",
"UA": "Russia,EU",
"UB": "Russia,EU",
"UC": "Russia,EU",
"UD": "Russia,EU",
"UE": "Russia,EU",
"UF": "Russia,EU",
"UG": "Russia,EU",
"UH": "Russia,EU",
"UI": "Russia,EU",
"R": "Russia,EU",
"UA2": "Kaliningrad,EU",
"UJ": "Uzbekistan,AS",
"UK": "Uzbekistan,AS",
"UL": "Uzbekistan,AS",
"UM": "Uzbekistan,AS",
"UN": "Kazakhstan,AS",
"UO": "Kazakhstan,AS",
"UP": "Kazakhstan,AS",
"UQ": "Kazakhstan,AS",
"UR": "Ukraine,EU",
"US": "Ukraine,EU",
"UT": "Ukraine,EU",
"UU": "Ukraine,EU",
"UV": "Ukraine,EU",
"UW": "Ukraine,EU",
"UX": "Ukraine,EU",
"UY": "Ukraine,EU",
"UZ": "Ukraine,EU",
"EM": "Ukraine,EU",
"EN": "Ukraine,EU",
"EO": "Ukraine,EU",
"V2": "Antigua & Barbuda,NA",
"V3": "Belize,NA",
"V4": "St. Kitts & Nevis,NA",
"V5": "Namibia,AF",
"V6": "Micronesia,OC",
"V7": "Marshall Is.,OC",
"V8": "Brunei Darussalam,OC",
"VE": "Canada,NA",
"VO": "Canada,NA",
"VY": "Canada,NA",
"VK": "Australia,OC",
"VK0": "Heard I.,AF",
"VK0": "Macquarie I.,OC",
"VK9C": "Cocos Is.,OC",
"VK9L": "Lord Howe I.,OC",
"VK9M": "Mellish Reef,OC",
"VK9N": "Norfolk I.,OC",
"VK9W": "Willis I.,OC",
"VK9X": "Christmas I.,OC",
"VP2E": "Anguilla,NA",
"VP2M": "Montserrat,NA",
"VP2V": "British Virgin Is.,NA",
"VP5": "Turks & Caicos Is.,NA",
"VP6": "Pitcairn I.,OC",
"VP6": "Ducie I.,OC",
"VP8": "Falkland Is.,SA",
"VP8": "South Shetland Is.,SA",
"CE9": "South Shetland Is.,SA",
"HF0": "South Shetland Is.,SA",
"4K1": "South Shetland Is.,SA",
"VP9": "Bermuda,NA",
"VQ9": "Chagos Is.,AF",
"VR": "Hong Kong,AS",
"VU": "India,AS",
"VU4": "Andaman & Nicobar Is.,AS",
"VU7": "Lakshadweep Is.,AS",
"XA": "Mexico,NA",
"XB": "Mexico,NA",
"XC": "Mexico,NA",
"XD": "Mexico,NA",
"XE": "Mexico,NA",
"XF": "Mexico,NA",
"XG": "Mexico,NA",
"XH": "Mexico,NA",
"XI": "Mexico,NA",
"XA4": "Revillagigedo,NA",
"XB4": "Revillagigedo,NA",
"XC4": "Revillagigedo,NA",
"XD4": "Revillagigedo,NA",
"XE4": "Revillagigedo,NA",
"XF4": "Revillagigedo,NA",
"XG4": "Revillagigedo,NA",
"XH4": "Revillagigedo,NA",
"XI4": "Revillagigedo,NA",
"XT": "Burkina Faso,AF",
"XU": "Cambodia,AS",
"XW": "Laos,AS",
"XX9": "Macao,AS",
"XY": "Myanmar,AS",
"XZ": "Myanmar,AS",
"YA": "Afghanistan,AS",
"YB": "Indonesia,OC",
"YC": "Indonesia,OC",
"YD": "Indonesia,OC",
"YE": "Indonesia,OC",
"YF": "Indonesia,OC",
"YG": "Indonesia,OC",
"YH": "Indonesia,OC",
"YI": "Iraq,AS",
"YJ": "Vanuatu,OC",
"YK": "Syria,AS",
"YL": "Latvia,EU",
"YN": "Nicaragua,NA",
"H6": "Nicaragua,NA",
"H7": "Nicaragua,NA",
"HT": "Nicaragua,NA",
"YO": "Romania,EU",
"YP": "Romania,EU",
"YQ": "Romania,EU",
"YR": "Romania,EU",
"YS": "El Salvador,NA",
"HU": "El Salvador,NA",
"YT": "Serbia,EU",
"YU": "Serbia,EU",
"YV": "Venezuela,SA",
"YW": "Venezuela,SA",
"YX": "Venezuela,SA",
"YY": "Venezuela,SA",
"4M": "Venezuela,SA",
"YV0": "Aves I.,NA",
"Z2": "Zimbabwe,AF",
"Z3": "Macedonia,EU",
"ZA": "Albania,EU",
"ZB2": "Gibraltar,EU",
"ZC4": "UK Sov. Base Areas on Cyprus,AS",
"ZD7": "St. Helena,AF",
"ZD8": "Ascension I.,AF",
"ZD9": "Tristan da Cunha & Gough I.,AF",
"ZF": "Cayman Is.,NA",
"ZK2": "Niue,OC",
"ZK3": "Tokelau Is.,OC",
"ZL": "New Zealand,OC",
"ZM": "New Zealand,OC",
"ZL7": "Chatham Is.,OC",
"ZL8": "Kermadec Is.,OC",
"ZL9": "Auckland & Campbell Is.,OC",
"ZP": "Paraguay,SA",
"ZR": "South Africa,AF",
"ZS": "South Africa,AF",
"ZT": "South Africa,AF",
"ZU": "South Africa,AF",
"ZS8": "Prince Edward & Marion Is.,AF"
}
with open(file_name, 'w') as configfile:
config.write(configfile)
print("\nNo configuration file found. A new configuration file has been created.")
print("\nPlease edit the file " + file_name + " and restart the application.\n" )
sys.exit()
return config
def get_confirmed_countries(self):
ret = []
#TODO: download file and/or tell user what to do
file = open("lotwreport.adi", "r")
for row in file:
if re.search("COUNTRY", row):
country = row.partition(">")[2].lower().rstrip()
if country not in ret:
ret.append(country)
return ret
@staticmethod
def check_lotw(call):
ret = ""
#TODO: download file and/or tell user what to do
csv_file = csv.reader(open('lotw-user-activity.csv', "r"), delimiter=",")
#loop through the csv file
for row in csv_file:
if call == row[0]:
ret = row[1]
return ret
return ret
@staticmethod
def get_call_details(call, data):
done = False
while not done:
if call in data:
return data[call].split(',')
call = call[:-1]
if call == "":
return ["-", "-"]
return None
def get_spots(self):
with Telnet(self.config['cluster']['host'], int(self.config['cluster']['port']), \
int(self.config['cluster']['timeout'])) as telnet:
while True:
line_enc = telnet.read_until(b"\n") # Read one line
line = line_enc.decode('ascii')
if "enter your call" in line:
my_str_as_bytes = str.encode(self.config['cluster']['user']+"\n")
telnet.write(my_str_as_bytes)
elif "DX de" in line:
try:
band_col = ""
call_de = re.search('DX de (.+?): ', line).group(1)
freq = re.search(': +(.+?) ', line).group(1)
call_dx = re.search(freq + ' +(.+?) ', line).group(1)
time = re.search('[^ ]*$', line).group(0)[0:4]
comment = re.search(call_dx + ' +(.+?) +' + time, line).group(1)
#areaname = self.get_country(call_dx, self.dxcc)
call_details = self.get_call_details(call_dx, self.config['dxcc'])
areaname = call_details[0]
continent = call_details[1]
lotw_date = self.check_lotw(call_dx)
lotw = ""
if lotw_date:
lotw = "[LotW] "
try:
if self.config['colors']['color_by'] == "band":
foreground = self.config['band_colors'][freq[:-5]]
elif self.config['colors']['color_by'] == "continent":
foreground = self.config['cont_colors'][continent]
else:
foreground = "white"
except Exception:
foreground = "white"
freq = freq.replace('.0', '')
if areaname.lower() not in self.qsl_countries:
background = self.config['colors']['alert_bg']
foreground = self.config['colors']['alert_fg']
else:
background = self.config['colors']['default_bg']
sep = fg("grey_27")+'|'+fg(foreground)
row = [call_de, sep, freq, sep, call_dx, \
sep, areaname, sep, continent, sep, lotw + comment, sep, time]
print(bg(background) + fg(foreground) + \
'{:9.9} {:<1} {:>7.7} {:<1} {:<10.10} {:<1} {:<16.16} {:<1} {:<2.2} {:<1} {:<30.30} {:<1} {:<4.4}'.format(*row) + attr("reset"))
except AttributeError:
print(line)
elif "login: " in line:
print(line)
#####################################################
# Main Routine #
#####################################################
def main():
"""the main routine"""
color_spot = ColorSpot()
color_spot.get_spots()
if __name__ == "__main__":
try:
sys.exit(main())
except EOFError:
pass