1
0
Fork 0

use python logging

This commit is contained in:
Kevin Matz 2018-10-21 14:14:56 -04:00
parent 8189d23da0
commit 6c5a8f484e
3 changed files with 62 additions and 51 deletions

View File

@ -15,10 +15,13 @@ __email__ = "kevin@company235.com"
__status__ = "Prototype" __status__ = "Prototype"
import logging
from CommentMacroParser import CommentMacroParser from CommentMacroParser import CommentMacroParser
from CommentMacroListener import CommentMacroListener from CommentMacroListener import CommentMacroListener
from OscMacroDefinitions import HogDevice from OscMacroDefinitions import HogDevice
logger = logging.getLogger("CommentMacro")
def num(string): def num(string):
try: try:
@ -69,7 +72,7 @@ class OscCommentMacroListener(CommentMacroListener):
def exitMacro(self, ctx: CommentMacroParser.MacroContext): def exitMacro(self, ctx: CommentMacroParser.MacroContext):
# print the lisp tree of this macro # print the lisp tree of this macro
lisp_tree_str = ctx.toStringTree(recog=self.parser) 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 # execute macro from name
ret = -1 ret = -1
@ -79,7 +82,7 @@ class OscCommentMacroListener(CommentMacroListener):
except KeyError: except KeyError:
print(name + " macro is not compatable with OSC.") print(name + " macro is not compatable with OSC.")
return -1 return -1
print("Exiting Macro") logger.debug("Exiting Macro")
return ret return ret
def enterMaster(self, ctx: CommentMacroParser.MasterContext): def enterMaster(self, ctx: CommentMacroParser.MasterContext):
@ -109,7 +112,7 @@ class OscCommentMacroListener(CommentMacroListener):
for i in (range(minimum, maximum + 1)): for i in (range(minimum, maximum + 1)):
ctx.parentCtx.targets.append(i) ctx.parentCtx.targets.append(i)
else: else:
print("ERROR: Spans must be ranged with intigers.") logger.error("ERROR: Spans must be ranged with intigers.")
ctx.parentCtx.targets.append(-1) ctx.parentCtx.targets.append(-1)
def enterTarget(self, ctx: CommentMacroParser.TargetContext): def enterTarget(self, ctx: CommentMacroParser.TargetContext):

View File

@ -14,10 +14,12 @@ __email__ = "kevin@company235.com"
__status__ = "Prototype" __status__ = "Prototype"
import logging
from pythonosc import udp_client from pythonosc import udp_client
from time import sleep from time import sleep
logger = logging.getLogger("CommentMacro")
class HogDevice(): class HogDevice():
def __init__(self, servers): def __init__(self, servers):
@ -33,85 +35,84 @@ class HogDevice():
osc = list(self.servers.values())[0] osc = list(self.servers.values())[0]
else: else:
if (device.type.getText() != 'h'): if (device.type.getText() != 'h'):
print("Only Hog type devices are curently supported.") logger.warn("Only Hog type devices are curently supported.")
print("WARNIN: macro discarded!") logger.error("ERROR: macro discarded!")
return -1 return -1
else: else:
try: try:
osc = self.servers[device.number.value] osc = self.servers[device.number.value]
except KeyError: except KeyError:
print("Net# "+str(device.number.value)+" not configured.") logger.warn("Net# "+str(device.number.value)+" not found.")
print("WARNING: macro discarded!") logger.error("ERROR: macro discarded!")
return -1 return -1
osc.send_message(path, arg) osc.send_message(path, arg)
return 1 return 1
def _master_go(self, ctx): def _master_go(self, ctx):
if ctx.number is not None: if ctx.number is not None:
print("GO MASTER doesn't support goto. " logger.warn("GO MASTER doesn't support goto. " +
+ "Cue number "+str(ctx.number.value)+" will be ignored.") "Cue number "+str(ctx.number.value)+" is ignored.")
if (len(ctx.master.targets) == 0): if (len(ctx.master.targets) == 0):
print("Main GO") logger.info("Main GO")
self.osc.button_press(ctx.device, "/hog/hardware/maingo") self.osc.button_press(ctx.device, "/hog/hardware/maingo")
return 1 return 1
else: else:
for i in ctx.master.targets: for i in ctx.master.targets:
if isinstance(i, int) is not True: if isinstance(i, int) is not True:
print("GO MASTER macro targets must be intigers. " logger.error("GO MASTER macro targets must be intigers. "
+ str(i) + " is not an intigers.") + str(i) + " is not an intigers.")
continue continue
if (i < 0): if (i < 0):
print("Master "+str(i)+" should have been greater than 0.") logger.error("Master "+str(i)+" is not greater than 0.")
continue continue
master = str(i) master = str(i)
print("GO on master " + master) logger.info("GO on master " + master)
self.osc.button_press(ctx.device, "/hog/hardware/go/" + master) self.osc.button_press(ctx.device, "/hog/hardware/go/" + master)
return 1 return 1
def _master_halt(self, ctx): def _master_halt(self, ctx):
if (len(ctx.master.targets) == 0): if (len(ctx.master.targets) == 0):
print("Main HALT") logger.info("Main HALT")
self.osc.button_press(ctx.device, "/hog/hardware/mainhalt") self.osc.button_press(ctx.device, "/hog/hardware/mainhalt")
return 1 return 1
else: else:
for i in ctx.master.targets: for i in ctx.master.targets:
if isinstance(i, int) is not True: if isinstance(i, int) is not True:
print("GO MASTER macro targets must be intigers. " logger.error("GO MASTER macro targets must be intigers. "
+ str(i) + " is not an intigers.") + str(i) + " is not an intigers.")
continue continue
if (i < 0): if (i < 0):
print("Master "+str(i)+" should have been greater than 0.") logger.error("Master "+str(i)+" is not greater than 0.")
continue continue
master = str(i) master = str(i)
print("HALT on master " + master) logger.info("HALT on master " + master)
self.osc.button_press(ctx.device, self.osc.button_press(ctx.device,
"/hog/hardware/pause/" + master) "/hog/hardware/pause/" + master)
return 1 return 1
def _master_fade(self, ctx): def _master_fade(self, ctx):
if (ctx.number) is None: if (ctx.number) is None:
print("ERROR: Missing required argument for LEVEL") logger.error("ERROR: Missing required argument for LEVEL")
return -1 return -1
else: else:
level = ctx.number.value level = ctx.number.value
if (level < 0 or level > 100): 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 return -1
if (len(ctx.master.targets) == 0): 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 return -1
else: else:
for i in ctx.master.targets: for i in ctx.master.targets:
if isinstance(i, int) is not True: if isinstance(i, int) is not True:
print("FADE MASTER macro targets must be intigers. " logger.error("FADE MASTER macro targets must be intigers. "
+ str(i) + " is not an intigers.") + str(i) + " is not an intigers.")
continue continue
if (i < 0): if (i < 0):
print("Master "+str(i)+" should have been greater than 0.") logger.error("Master "+str(i)+" is not greater than 0.")
continue continue
master = str(i) 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 level *= 255 / 100 # percent in Macro, 0>255 in OSC
self.osc.send_message(ctx.device, self.osc.send_message(ctx.device,
"/hog/hardware/fader/" + master, "/hog/hardware/fader/" + master,
@ -121,19 +122,19 @@ class HogDevice():
def _master_fade_grand(self, ctx): def _master_fade_grand(self, ctx):
level = ctx.number.value level = ctx.number.value
if (level < 0 or level > 100): 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 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 level *= 255 / 100 # percent in Macro, 0>255 in OSC
self.osc.send_message(ctx.device, "/hog/hardware/fader/0", level) self.osc.send_message(ctx.device, "/hog/hardware/fader/0", level)
return 1 return 1
def _master_choose(self, ctx): def _master_choose(self, ctx):
if (ctx.number.value < 0): if (ctx.number.value < 0):
print("Master must be greater than 0.") logger.error("Master must be greater than 0.")
return -1 return -1
master = str(ctx.number.value) master = str(ctx.number.value)
print("Choose Master " + master) logger.info("Choose Master " + master)
self.osc.button_press(ctx.device, "/hog/hardware/choose/" + master) self.osc.button_press(ctx.device, "/hog/hardware/choose/" + master)
return 1 return 1
@ -142,37 +143,37 @@ class HogDevice():
list = str(i) list = str(i)
if ctx.number is not None: if ctx.number is not None:
list += "." + str(ctx.number.value) 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) self.osc.send_message(ctx.device, "/hog/playback/go/0", list)
return 1 return 1
def _list_halt(self, ctx): def _list_halt(self, ctx):
for i in ctx.targets: 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) self.osc.send_message(ctx.device, "/hog/playback/halt/0", i)
return 1 return 1
def _list_release(self, ctx): def _list_release(self, ctx):
for i in ctx.targets: 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) self.osc.send_message(ctx.device, "/hog/playback/release/0", i)
return 1 return 1
def _scene_go(self, ctx): def _scene_go(self, ctx):
for i in ctx.targets: 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) self.osc.send_message(ctx.device, "/hog/playback/go/1", i)
return 1 return 1
def _scene_halt(self, ctx): def _scene_halt(self, ctx):
for i in ctx.targets: 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) self.osc.send_message(ctx.device, "/hog/playback/halt/1", i)
return 1 return 1
def _scene_release(self, ctx): def _scene_release(self, ctx):
for i in ctx.targets: 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) self.osc.send_message(ctx.device, "/hog/playback/release/1", i)
return 1 return 1

View File

@ -17,6 +17,7 @@ __status__ = "Prototype"
import antlr4 import antlr4
import configparser import configparser
import logging
import readline import readline
import signal import signal
import sys import sys
@ -27,12 +28,21 @@ from OscCommentMacroListener import OscCommentMacroListener
from pythonosc import udp_client 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 = configparser.ConfigParser(allow_no_value=True)
config.read('server.cfg') config.read('server.cfg') # open config file
server = config['hog4'] hog4 = {} # init an empty dictionary
net = server.getint("net", 1) server = config['hog4'] # section of config file
hog4 = {} 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"), hog4[net] = udp_client.SimpleUDPClient(server.get("ip", "10.0.0.1"),
server.getint("port", 6600)) server.getint("port", 6600))
@ -43,24 +53,21 @@ def comment(text):
stream = antlr4.CommonTokenStream(lexer) stream = antlr4.CommonTokenStream(lexer)
parser = CommentMacroParser(stream) parser = CommentMacroParser(stream)
tree = parser.prog() tree = parser.prog()
oscMacro = OscCommentMacroListener(parser, hog4) oscMacro = OscCommentMacroListener(parser, hog4)
walker = antlr4.ParseTreeWalker() walker = antlr4.ParseTreeWalker()
walker.walk(oscMacro, tree) walker.walk(oscMacro, tree)
def orderly_exit(signal=None, frame=None):
print('Goodbye.')
sys.exit(0)
if __name__ == '__main__': if __name__ == '__main__':
signal.signal(signal.SIGINT, orderly_exit) signal.signal(signal.SIGINT, orderly_exit)
if len(sys.argv) > 1: if len(sys.argv) > 1:
logger.debug("found macro at argv[1]")
comment(sys.argv[1]) comment(sys.argv[1])
else: else:
while True: while True:
text = input("comment# ") text = input("comment# ")
if text == 'exit': if text == 'exit':
orderly_exit() logger.info('Goodbye.')
comment(text) sys.exit(0)
else:
comment(text)