From 60fa3ffcd424738ef536466f5881b936f85d4d7f Mon Sep 17 00:00:00 2001 From: "Walter A. Boring IV" Date: Wed, 21 Nov 2018 12:41:49 -0800 Subject: [PATCH 1/2] Cleaned up trailing whitespace --- fuzzyclock.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/fuzzyclock.py b/fuzzyclock.py index 85f8f1e..aae0e2c 100644 --- a/fuzzyclock.py +++ b/fuzzyclock.py @@ -23,38 +23,38 @@ def fuzzy(hour, minute, degree=1): Supports two degrees of fuzziness. Set with degree = 1 or degree = 2 When degree = 1, time is in quantum of 5 minutes. When degree = 2, time is in quantum of 15 minutes.''' - + if degree<=0 or degree>2: print 'Please use a degree of 1 or 2. Using fuzziness degree=1' - degree = 1 - + degree = 1 + begin = 'It\'s ' - + f0 = 'almost ' f1 = 'exactly ' f2 = 'around ' - + b0 = ' past ' b1 = ' to ' - + hourList = ('One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve') - + s1 = s2 = s3 = s4 = '' base = 5 - + if degree == 1: base = 5 val = ('Five', 'Ten', 'Quarter', 'Twenty', 'Twenty-Five', 'Half') elif degree == 2: base = 15 val = ('Quarter', 'Half') - + dmin = minute % base # to find whether we have to use 'almost', 'exactly' or 'around' if minute > 30: pos = int((60 - minute) / base) #position in the tuple 'val' else: pos = int(minute / base) - + if dmin == 0: s1 = f1 pos = pos - 1 @@ -66,9 +66,9 @@ def fuzzy(hour, minute, degree=1): s1 = f0 if minute > 30: pos = pos -1 - + s2 = val[pos] - + if minute <= base/2: # Case like "It's around/exactly Ten" s2 = s3 = '' s4 = hourList[hour - 12 - 1] @@ -82,7 +82,7 @@ def fuzzy(hour, minute, degree=1): else: s3 = b0 # past s4 = hourList[hour - 12 - 1] - + return begin + s1 + s2 + s3 + s4 def main(): @@ -90,13 +90,13 @@ def main(): stm = time.localtime() h = stm.tm_hour m = stm.tm_min - + if len(sys.argv)>=2: try: deg = int(sys.argv[1]) except: print 'Please use a degree of 1 or 2. Using fuzziness degree=1' - + if len(sys.argv)>=3: tm = sys.argv[2].split(':') try: From 8b61116fceef117a5d2faa86bde5e8244878f88d Mon Sep 17 00:00:00 2001 From: "Walter A. Boring IV" Date: Wed, 21 Nov 2018 12:55:14 -0800 Subject: [PATCH 2/2] Added argparse for cli options This patch adds the argparser to collect the user/callsign from the command line, so it doesn't have to be hard coded. It can be passed on the command line or set in an environment var python aprsd.py --user KCAMEL1 or export APRS_USER=KCAMEL1 python aprsd.py --- .gitignore | 1 + aprsd.py | 29 +++++++++++++++++++++++++++-- utils.py | 16 ++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 utils.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d20b64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/aprsd.py b/aprsd.py index f3558ec..348d4d2 100644 --- a/aprsd.py +++ b/aprsd.py @@ -19,7 +19,8 @@ # License GPLv2 # -from fuzzyclock import fuzzy +# python included libs +import argparse import json import urllib import sys @@ -33,12 +34,18 @@ from email.mime.text import MIMEText import subprocess import datetime import calendar -from imapclient import IMAPClient, SEEN import email import threading import signal import pprint +# external lib imports +from imapclient import IMAPClient, SEEN + +# local imports here +from fuzzyclock import fuzzy +import utils + # localization, please edit: HOST = "noam.aprs2.net" # north america tier2 servers round robin USER = "KM6XXX-9" # callsign of this aprs client with SSID @@ -54,6 +61,24 @@ shortcuts = { email_sent_dict = {} # message_number:time combos so we don't resend the same email in five mins {int:int} ack_dict = {} # message_nubmer:ack combos so we stop sending a message after an ack from radio {int:int} message_number = 0 # current aprs radio message number, increments for each message we send over rf {int} + +# command line args +parser = argparse.ArgumentParser() +parser.add_argument("--user", + metavar="", + default=utils.env("APRS_USER"), + help="The callsign of this ARPS client with SSID" + " Default=env[APRS_USER]") + +args = parser.parse_args() +if not args.user: + print("Missing the aprs user") + parser.print_help() + parser.exit() +else: + USER = args.user + + try: tn = telnetlib.Telnet(HOST, 14580) except Exception, e: diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..c51b982 --- /dev/null +++ b/utils.py @@ -0,0 +1,16 @@ +"""Utilities and helper functions.""" + +import os +import pprint +import sys + + +def env(*vars, **kwargs): + """This returns the first environment variable set. + if none are non-empty, defaults to '' or keyword arg default + """ + for v in vars: + value = os.environ.get(v, None) + if value: + return value + return kwargs.get('default', '')