# ############################################################################### # Copyright (C) 2020 Simon Adlem, G7RZU # Copyright (C) 2016-2019 Cortney T. Buffington, N0MJS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ############################################################################### #Some utilty functions from dmr_utils3 have been modified. These live here. # Also new FreeDMR specific functions. import ssl from time import time from os.path import isfile, getmtime from urllib.request import urlopen from json import load as jload #Use this try_download instead of that from dmr_utils3 def try_download(_path, _file, _url, _stale,): no_verify = ssl._create_unverified_context() now = time() file_exists = isfile(''.join([_path,_file])) == True if file_exists: file_old = (getmtime(''.join([_path,_file])) + _stale) < now if not file_exists or (file_exists and file_old): try: with urlopen(_url, context=no_verify) as response: data = response.read() #outfile.write(data) response.close() result = 'ID ALIAS MAPPER: \'{}\' successfully downloaded'.format(_file) except IOError: result = 'ID ALIAS MAPPER: \'{}\' could not be downloaded due to an IOError'.format(_file) else: if data and (data != b'{}'): try: with open(''.join([_path,_file]), 'wb') as outfile: outfile.write(data) outfile.close() except IOError: result = 'ID ALIAS mapper \'{}\' file could not be written due to an IOError'.format(_file) else: result = 'ID ALIAS mapper \'{}\' file not written because downloaded data is empty for some reason'.format(_file) else: result = 'ID ALIAS MAPPER: \'{}\' is current, not downloaded'.format(_file) return result # SHORT VERSION - MAKES A SIMPLE {INTEGER ID: 'CALLSIGN'} DICTIONARY def mk_id_dict(_path, _file): _dict = {} try: with open(_path+_file, 'r', encoding='latin1') as _handle: records = jload(_handle) if 'count' in [*records]: records.pop('count') records = records[[*records][0]] _handle.close for record in records: try: _dict[int(record['id'])] = record['callsign'] except: pass return _dict except: raise