862 lines
33 KiB
Python
Executable File
862 lines
33 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
|
|
# Infos on colors: https://pypi.org/project/colored/
|
|
# Country list extracted from http://www.arrl.org/files/file/dxcclist.txt
|
|
|
|
|
|
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
|
|
import random
|
|
|
|
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()
|
|
|
|
self.print_banner()
|
|
|
|
@staticmethod
|
|
def rnd_col():
|
|
r = lambda: random.randint(0,255)
|
|
return'#%02X%02X%02X' % (r(),r(),r())
|
|
|
|
|
|
def print_banner(self):
|
|
"""print an awesome banner"""
|
|
ver = self.version
|
|
# print the banner
|
|
print(fg(self.rnd_col())+" ___ _ ___ _ ")
|
|
print(fg(self.rnd_col())+" / __|___| |___ _ _/ __|_ __ ___| |_ ")
|
|
print(fg(self.rnd_col())+" | (__/ _ \ / _ \ '_\__ \ '_ \/ _ \ _|")
|
|
print(fg(self.rnd_col())+" \___\___/_\___/_| |___/ .__/\___/\__|")
|
|
print(fg(self.rnd_col())+" -= DK1MI =- |_| ")
|
|
print(attr('reset'))
|
|
|
|
@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": "light_salmon_3b",
|
|
"AN": "white",
|
|
"AS": "orange_red_1",
|
|
"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['alias']= {
|
|
'Asiatic Russia': 'Russia',
|
|
'European Russia': 'Russia'}
|
|
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 in self.config['alias']:
|
|
country = self.config['alias'][country]
|
|
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(fg("grey_27") + line + attr("reset"))
|
|
|
|
#####################################################
|
|
# Main Routine #
|
|
#####################################################
|
|
def main():
|
|
"""the main routine"""
|
|
color_spot = ColorSpot()
|
|
color_spot.get_spots()
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
sys.exit(main())
|
|
except EOFError:
|
|
pass
|
|
|
|
|
|
|