use python logging
This commit is contained in:
parent
8189d23da0
commit
6c5a8f484e
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
33
comment.py
33
comment.py
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue