From 6c5a8f484ebb0f7dfd9fb0edbb07bdb1df0f2e8a Mon Sep 17 00:00:00 2001 From: Kevin Matz Date: Sun, 21 Oct 2018 14:14:56 -0400 Subject: [PATCH] use python logging --- OscCommentMacroListener.py | 9 +++-- OscMacroDefinitions.py | 71 +++++++++++++++++++------------------- comment.py | 33 +++++++++++------- 3 files changed, 62 insertions(+), 51 deletions(-) diff --git a/OscCommentMacroListener.py b/OscCommentMacroListener.py index 6e2a815..81eccc8 100644 --- a/OscCommentMacroListener.py +++ b/OscCommentMacroListener.py @@ -15,10 +15,13 @@ __email__ = "kevin@company235.com" __status__ = "Prototype" +import logging from CommentMacroParser import CommentMacroParser from CommentMacroListener import CommentMacroListener from OscMacroDefinitions import HogDevice +logger = logging.getLogger("CommentMacro") + def num(string): try: @@ -69,7 +72,7 @@ class OscCommentMacroListener(CommentMacroListener): def exitMacro(self, ctx: CommentMacroParser.MacroContext): # print the lisp tree of this macro lisp_tree_str = ctx.toStringTree(recog=self.parser) - print(beautify_lisp_string(lisp_tree_str)) + logger.info(beautify_lisp_string(lisp_tree_str)) # execute macro from name ret = -1 @@ -79,7 +82,7 @@ class OscCommentMacroListener(CommentMacroListener): except KeyError: print(name + " macro is not compatable with OSC.") return -1 - print("Exiting Macro") + logger.debug("Exiting Macro") return ret def enterMaster(self, ctx: CommentMacroParser.MasterContext): @@ -109,7 +112,7 @@ class OscCommentMacroListener(CommentMacroListener): for i in (range(minimum, maximum + 1)): ctx.parentCtx.targets.append(i) else: - print("ERROR: Spans must be ranged with intigers.") + logger.error("ERROR: Spans must be ranged with intigers.") ctx.parentCtx.targets.append(-1) def enterTarget(self, ctx: CommentMacroParser.TargetContext): diff --git a/OscMacroDefinitions.py b/OscMacroDefinitions.py index 6fab9e3..a34b9c9 100644 --- a/OscMacroDefinitions.py +++ b/OscMacroDefinitions.py @@ -14,10 +14,12 @@ __email__ = "kevin@company235.com" __status__ = "Prototype" - +import logging from pythonosc import udp_client from time import sleep +logger = logging.getLogger("CommentMacro") + class HogDevice(): def __init__(self, servers): @@ -33,85 +35,84 @@ class HogDevice(): osc = list(self.servers.values())[0] else: if (device.type.getText() != 'h'): - print("Only Hog type devices are curently supported.") - print("WARNIN: macro discarded!") + logger.warn("Only Hog type devices are curently supported.") + logger.error("ERROR: macro discarded!") return -1 else: try: osc = self.servers[device.number.value] except KeyError: - print("Net# "+str(device.number.value)+" not configured.") - print("WARNING: macro discarded!") + logger.warn("Net# "+str(device.number.value)+" not found.") + logger.error("ERROR: macro discarded!") return -1 osc.send_message(path, arg) return 1 def _master_go(self, ctx): if ctx.number is not None: - print("GO MASTER doesn't support goto. " - + "Cue number "+str(ctx.number.value)+" will be ignored.") - + logger.warn("GO MASTER doesn't support goto. " + + "Cue number "+str(ctx.number.value)+" is ignored.") if (len(ctx.master.targets) == 0): - print("Main GO") + logger.info("Main GO") self.osc.button_press(ctx.device, "/hog/hardware/maingo") return 1 else: for i in ctx.master.targets: if isinstance(i, int) is not True: - print("GO MASTER macro targets must be intigers. " - + str(i) + " is not an intigers.") + logger.error("GO MASTER macro targets must be intigers. " + + str(i) + " is not an intigers.") continue if (i < 0): - print("Master "+str(i)+" should have been greater than 0.") + logger.error("Master "+str(i)+" is not greater than 0.") continue master = str(i) - print("GO on master " + master) + logger.info("GO on master " + master) self.osc.button_press(ctx.device, "/hog/hardware/go/" + master) return 1 def _master_halt(self, ctx): if (len(ctx.master.targets) == 0): - print("Main HALT") + logger.info("Main HALT") self.osc.button_press(ctx.device, "/hog/hardware/mainhalt") return 1 else: for i in ctx.master.targets: if isinstance(i, int) is not True: - print("GO MASTER macro targets must be intigers. " - + str(i) + " is not an intigers.") + logger.error("GO MASTER macro targets must be intigers. " + + str(i) + " is not an intigers.") continue if (i < 0): - print("Master "+str(i)+" should have been greater than 0.") + logger.error("Master "+str(i)+" is not greater than 0.") continue master = str(i) - print("HALT on master " + master) + logger.info("HALT on master " + master) self.osc.button_press(ctx.device, "/hog/hardware/pause/" + master) return 1 def _master_fade(self, ctx): if (ctx.number) is None: - print("ERROR: Missing required argument for LEVEL") + logger.error("ERROR: Missing required argument for LEVEL") return -1 else: level = ctx.number.value if (level < 0 or level > 100): - print("Level must be between 0 and 100.") + logger.error("Level must be between 0 and 100.") return -1 if (len(ctx.master.targets) == 0): - print("MASTER FADE doesn't support unspecified current master.") + logger.error("MASTER FADE doesn't support * current master.") return -1 else: for i in ctx.master.targets: if isinstance(i, int) is not True: - print("FADE MASTER macro targets must be intigers. " - + str(i) + " is not an intigers.") + logger.error("FADE MASTER macro targets must be intigers. " + + str(i) + " is not an intigers.") continue if (i < 0): - print("Master "+str(i)+" should have been greater than 0.") + logger.error("Master "+str(i)+" is not greater than 0.") continue master = str(i) - print("Fade Master "+master+" to "+str(level)+"%") + logger.info("Fade Master "+master+" to "+str(level)+"%") level *= 255 / 100 # percent in Macro, 0>255 in OSC self.osc.send_message(ctx.device, "/hog/hardware/fader/" + master, @@ -121,19 +122,19 @@ class HogDevice(): def _master_fade_grand(self, ctx): level = ctx.number.value if (level < 0 or level > 100): - print("Level must be between 0 and 100.") + logger.error("Level must be between 0 and 100.") return -1 - print("Fading Grand Master to " + str(level) + "%") + logger.info("Fading Grand Master to " + str(level) + "%") level *= 255 / 100 # percent in Macro, 0>255 in OSC self.osc.send_message(ctx.device, "/hog/hardware/fader/0", level) return 1 def _master_choose(self, ctx): if (ctx.number.value < 0): - print("Master must be greater than 0.") + logger.error("Master must be greater than 0.") return -1 master = str(ctx.number.value) - print("Choose Master " + master) + logger.info("Choose Master " + master) self.osc.button_press(ctx.device, "/hog/hardware/choose/" + master) return 1 @@ -142,37 +143,37 @@ class HogDevice(): list = str(i) if ctx.number is not None: list += "." + str(ctx.number.value) - print("Go on List " + list) + logger.info("Go on List " + list) self.osc.send_message(ctx.device, "/hog/playback/go/0", list) return 1 def _list_halt(self, ctx): for i in ctx.targets: - print("Halting List " + str(i)) + logger.info("Halting List " + str(i)) self.osc.send_message(ctx.device, "/hog/playback/halt/0", i) return 1 def _list_release(self, ctx): for i in ctx.targets: - print("Releasing List " + str(i)) + logger.info("Releasing List " + str(i)) self.osc.send_message(ctx.device, "/hog/playback/release/0", i) return 1 def _scene_go(self, ctx): for i in ctx.targets: - print("Go on Scene " + str(i)) + logger.info("Go on Scene " + str(i)) self.osc.send_message(ctx.device, "/hog/playback/go/1", i) return 1 def _scene_halt(self, ctx): for i in ctx.targets: - print("Halt Scene " + str(i)) + logger.info("Halt Scene " + str(i)) self.osc.send_message(ctx.device, "/hog/playback/halt/1", i) return 1 def _scene_release(self, ctx): for i in ctx.targets: - print("Release Scene " + str(i)) + logger.info("Release Scene " + str(i)) self.osc.send_message(ctx.device, "/hog/playback/release/1", i) return 1 diff --git a/comment.py b/comment.py index e35bcfe..fd817a1 100755 --- a/comment.py +++ b/comment.py @@ -17,6 +17,7 @@ __status__ = "Prototype" import antlr4 import configparser +import logging import readline import signal import sys @@ -27,12 +28,21 @@ from OscCommentMacroListener import OscCommentMacroListener from pythonosc import udp_client -# refactor this to support multiple net#s +# setup logging +logger = logging.getLogger("CommentMacro") +logger.setLevel(logging.DEBUG) +ch = logging.StreamHandler() # create console handler and +ch.setLevel(logging.INFO) # set console log level to INFO +logger.addHandler(ch) # add console log handler + +# TODO: refactor this to support multiple net#s config = configparser.ConfigParser(allow_no_value=True) -config.read('server.cfg') -server = config['hog4'] -net = server.getint("net", 1) -hog4 = {} +config.read('server.cfg') # open config file +hog4 = {} # init an empty dictionary +server = config['hog4'] # section of config file +net = server.getint("net", 1) # default to net #1 +logger.info("Adding Hog device at net# " + str(net)) +# osc clients are added to the dictionary with the net # as the key hog4[net] = udp_client.SimpleUDPClient(server.get("ip", "10.0.0.1"), server.getint("port", 6600)) @@ -43,24 +53,21 @@ def comment(text): stream = antlr4.CommonTokenStream(lexer) parser = CommentMacroParser(stream) tree = parser.prog() - oscMacro = OscCommentMacroListener(parser, hog4) walker = antlr4.ParseTreeWalker() walker.walk(oscMacro, tree) -def orderly_exit(signal=None, frame=None): - print('Goodbye.') - sys.exit(0) - - if __name__ == '__main__': signal.signal(signal.SIGINT, orderly_exit) if len(sys.argv) > 1: + logger.debug("found macro at argv[1]") comment(sys.argv[1]) else: while True: text = input("comment# ") if text == 'exit': - orderly_exit() - comment(text) + logger.info('Goodbye.') + sys.exit(0) + else: + comment(text)