Source code for rf_info.cli

#!/usr/bin/env python3

import argparse
import json
import sys

import rf_info
from colorama import Fore, Style, deinit, init
from iso3166 import countries


[docs]def get_frequency_obj(frequency, unit, country): if frequency is None: raise ValueError('You must specify a frequency') return rf_info.Frequency(str(frequency), unit=str(unit).lower(), country=str(country))
[docs]def display_raw(frequency_obj): print(frequency_obj.__dict__)
[docs]def display_json(frequency_obj): print(json.dumps(frequency_obj.__dict__, indent=4, sort_keys=False))
[docs]def country_shortlist(): from .countrymap import COUNTRY_MAP clist = [] for key, value in COUNTRY_MAP.items(): clist.append('{} ({})'.format(countries.get(key).name, countries.get(key).alpha2)) print(', '.join(clist))
[docs]def country_list(): from .countrymap import COUNTRY_MAP for key, value in COUNTRY_MAP.items(): print('{} ({})'.format(countries.get(key).name, countries.get(key).alpha2))
[docs]def verify_country(country): from .countrymap import COUNTRY_MAP if country.upper() not in COUNTRY_MAP: raise ValueError('Specified Country is Not Supported')
[docs]def display_results(frequency, unit, country): frequency_obj = get_frequency_obj(frequency, unit, country) fd = frequency_obj print(' ') # DISPLAY print(' {}Display: {}{}{}'.format(KEYCOLOR, VALUECOLOR, fd.display, RESET)) # UNITS print(' {}Hz: {}{:,}{}'.format(KEYCOLOR, VALUECOLOR, fd.units['hz'], RESET)) if fd.units['khz'].is_integer(): print(' {}Khz: {}{:,}{}'.format(KEYCOLOR, VALUECOLOR, int(fd.units['khz']), RESET)) else: print(' {}Khz: {}{:,g}{}'.format(KEYCOLOR, VALUECOLOR, fd.units['khz'], RESET)) if fd.units['mhz'].is_integer(): print(' {}Mhz: {}{:,}{}'.format(KEYCOLOR, VALUECOLOR, int(fd.units['mhz']), RESET)) else: print(' {}Mhz: {}{:,g}{}'.format(KEYCOLOR, VALUECOLOR, fd.units['mhz'], RESET)) if fd.units['ghz'].is_integer(): print(' {}Ghz: {}{:,}{}'.format(KEYCOLOR, VALUECOLOR, int(fd.units['ghz']), RESET)) else: print(' {}Ghz: {}{:,g}{}'.format(KEYCOLOR, VALUECOLOR, fd.units['ghz'], RESET)) print(' {}Wavelength: {}{}{}'.format(KEYCOLOR, VALUECOLOR, fd.wavelength, RESET)) # ITU if fd.itu['number'] is not None: print(' {}ITU Band: {}{} - {} ({}){}'.format(KEYCOLOR, VALUECOLOR, fd.itu['number'], fd.itu['abbr'], fd.itu['band'], RESET)) # IEEE if fd.ieee['band'] is not None: print(' {}IEEE Band: {}{} ({}){}'.format(KEYCOLOR, VALUECOLOR, fd.ieee['band'], fd.ieee['description'], RESET)) else: print(' {}IEEE Band: {}None{}'.format(KEYCOLOR, FALSECOLOR, RESET)) # NATO if fd.nato['band'] is not None: print(' {}NATO Band: {}{}{}'.format(KEYCOLOR, VALUECOLOR, fd.nato['band'], RESET)) else: print(' {}NATO Band: {}None{}'.format(KEYCOLOR, FALSECOLOR, RESET)) # WAVEGUIDE if fd.waveguide['band'] is not None: print(' {}Waveguide Band: {}{}{}'.format(KEYCOLOR, VALUECOLOR, fd.waveguide['band'], RESET)) else: print(' {}Waveguide Band: {}None{}'.format(KEYCOLOR, FALSECOLOR, RESET)) # MICROWAVE if fd.microwave['band'] is not None: print(' {}Microwave Band: {}{} ({}){}'.format(KEYCOLOR, VALUECOLOR, fd.microwave['band'], fd.microwave['allocation'], RESET)) else: print(' {}Microwave Band: {}None{}'.format(KEYCOLOR, FALSECOLOR, RESET)) print(' {}Country: {}{} ({}){}'.format(KEYCOLOR, VALUECOLOR, fd.country['name'], fd.country['abbr'], RESET)) # SERVICES if fd.services is not None: print(' {}Services: {}{}{}'.format(KEYCOLOR, VALUECOLOR, fd.services, RESET)) # BROADCASTING if fd.broadcasting['allocated']: if len(fd.broadcasting['details']) > 0: print(' {}Broadcasting: {}True {}({}){}'.format(KEYCOLOR, TRUECOLOR, VALUECOLOR, fd.broadcasting['details'], RESET)) else: print(' {}Broadcasting: {}True{}'.format(KEYCOLOR, TRUECOLOR, RESET)) else: print(' {}Broadcasting: {}False{}'.format(KEYCOLOR, FALSECOLOR, RESET)) # WIFI if fd.wifi['allocated']: print(' {}Wifi: {}True{}'.format(KEYCOLOR, TRUECOLOR, RESET)) print(' - {}{}{}'.format(VALUECOLOR, fd.wifi['details'], RESET)) else: print(' {}Wifi: {}False{}'.format(KEYCOLOR, FALSECOLOR, RESET)) # AMATEUR if fd.amateur['allocated']: print(' {}Amateur: {}True{}'.format(KEYCOLOR, TRUECOLOR, RESET)) if fd.amateur['modes'] is not None: print(' {}Modes: {}{}{}'.format(KEYCOLOR, VALUECOLOR, fd.amateur['modes'], RESET)) print(' {}License: {}{}{}'.format(KEYCOLOR, VALUECOLOR, fd.amateur['license'], RESET)) print(' {}Power: {}{}{}'.format(KEYCOLOR, VALUECOLOR, fd.amateur['power'], RESET)) else: print(' {}Amateur: {}False{}'.format(KEYCOLOR, FALSECOLOR, RESET)) # SATELLITE if fd.satellite['allocated']: print(' {}Satellite: {}True{}'.format(KEYCOLOR, TRUECOLOR, RESET)) if fd.satellite['name'] is not None: print(' {}Name: {}{} [{}]{}'.format(KEYCOLOR, VALUECOLOR, fd.satellite['name'], fd.satellite['sat-id'], RESET)) print(' {}Link: {}{}{}'.format(KEYCOLOR, VALUECOLOR, fd.satellite['link'], RESET)) print(' {}Modes: {}{}{}'.format(KEYCOLOR, VALUECOLOR, fd.satellite['modes'], RESET)) print(' {}Status: {}{}{}'.format(KEYCOLOR, VALUECOLOR, fd.satellite['status'], RESET)) else: print(' {}Satellite: {}False{}'.format(KEYCOLOR, FALSECOLOR, RESET)) # FIXED STATION if fd.station['fixed']: print(' {}Fixed Station: {}True{}'.format(KEYCOLOR, TRUECOLOR, RESET)) else: print(' {}Fixed Station: {}False{}'.format(KEYCOLOR, FALSECOLOR, RESET)) # MOBILE STATION if fd.station['mobile']: print(' {}Mobile Station: {}True{}'.format(KEYCOLOR, TRUECOLOR, RESET)) else: print(' {}Mobile Station: {}False{}'.format(KEYCOLOR, FALSECOLOR, RESET)) # PRIMARY ALLOCATION if fd.ieee_allocation['primary']: if len(fd.ieee_allocation['primary']) > 0: print(' {}Primary Allocation:{}'.format(KEYCOLOR, RESET)) for each in fd.ieee_allocation['primary']: print(' - {}{}{}'.format(ALLOCATIONCOLOR, each, RESET)) # SECONDARY ALLOCATION if fd.ieee_allocation['secondary']: if len(fd.ieee_allocation['secondary']) > 0: print(' {}Secondary Allocation:{}'.format(KEYCOLOR, RESET)) for each in fd.ieee_allocation['secondary']: print(' - {}{}{}'.format(ALLOCATIONCOLOR, each, RESET)) # ALLOCATION_NOTES if fd.ieee_allocation['notes']: if len(fd.ieee_allocation['notes']) > 0: print(' {}Allocation Notes: {}'.format(KEYCOLOR, RESET)) for each in fd.ieee_allocation['notes']: print(' - {}{}{}'.format(NOTESCOLOR, each, RESET))
[docs]def main(argv=None): global VALUECOLOR, KEYCOLOR, RESET, TRUECOLOR, FALSECOLOR, NOTESCOLOR, ALLOCATIONCOLOR if argv is None: argv = sys.argv[1:] parser = argparse.ArgumentParser() parser.add_argument('--version', action='version', version='%(prog)s {}'.format(rf_info.__version__)) mgroup = parser.add_mutually_exclusive_group() parser.add_argument('frequency', nargs='?', help='radio frequency') parser.add_argument('unit', nargs='?', default='hz', help='hz, khz, mhz, ghz') parser.add_argument('country', nargs='?', default='us', help='us, ca, uk, jp, etc...') mgroup.add_argument('-i', action='store', dest='interactive', metavar='country', help='interactive terminal input for <country>') parser.add_argument('--nocolor', action='store_true', help='no color terminal output') mgroup.add_argument('--raw', action='store_true', help='raw output') mgroup.add_argument('--json', action='store_true', help='json output') mgroup.add_argument('--list', action='store_true', help='list all supported countries') mgroup.add_argument('--shortlist', '-sl', action='store_true', help=argparse.SUPPRESS) parser.add_argument('--debug', action='store_true', help=argparse.SUPPRESS) args = parser.parse_args(argv) if not args.debug: sys.tracebacklimit = 0 # Disable showing tracebacks if not args.nocolor: KEYCOLOR = Style.BRIGHT + Fore.WHITE VALUECOLOR = Style.BRIGHT + Fore.YELLOW RESET = Style.RESET_ALL TRUECOLOR = Fore.GREEN FALSECOLOR = Style.BRIGHT + Fore.RED NOTESCOLOR = Fore.CYAN ALLOCATIONCOLOR = Style.BRIGHT + Fore.YELLOW init() else: KEYCOLOR = '' VALUECOLOR = '' RESET = '' TRUECOLOR = '' FALSECOLOR = '' NOTESCOLOR = '' ALLOCATIONCOLOR = '' if args.shortlist: country_shortlist() return 0 elif args.list: country_list() return 0 elif args.json: display_json(get_frequency_obj(args.frequency, args.unit, args.country)) return 0 elif args.raw: display_raw(get_frequency_obj(args.frequency, args.unit, args.country)) return 0 elif args.interactive: verify_country(args.interactive) answer = '' unit = 'hz' print('Enter q to quit') while answer.lower() != 'quit' and answer.lower() != 'exit' and answer.lower() != 'q': answer = input("Frequency ({})> ".format(args.interactive.lower())) if answer != '' and answer.lower() != 'quit' and answer.lower() != 'exit' and answer.lower() != 'q': if len(answer.split(' ')) > 1: answer = answer.split(' ')[0] unit = answer.split(' ')[1] try: display_results(answer, unit, args.country) except Exception as e: print('{}{}{}'.format(VALUECOLOR, e, RESET)) print('Exiting.') return 0 else: if args.country: verify_country(args.country) display_results(args.frequency, args.unit, args.country) return 0
if __name__ == '__main__': main()