#!/usr/bin/python3.6 # # engine # # Playout Daemon for autoradio project # # # Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at> # # This file is part of engine. # # engine 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 # any later version. # # engine 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 engine. If not, see <http://www.gnu.org/licenses/>. # import time import sys import redis from argparse import ArgumentParser # own libs from modules.cli_tool.padavan import Padavan from libraries.exceptions.auraexceptions import PlaylistException from libraries.base.config import AuraConfig class Guru(AuraConfig): parser = None args = None # ------------------------------------------------------------------------------------------ # def __init__(self): super(Guru, self).__init__() self.init_argument_parser() self.handle_arguments() def handle_arguments(self): if self.args.stoptime: start = time.time() if not self.args.quiet: print("Guru thinking...") try: p = Padavan(self.args, self.config) p.meditate() except PlaylistException as pe: # typically there is no next file found if not self.args.quiet: print(pe) else: print("") exit(4) except redis.exceptions.TimeoutError as te: print("Timeout when waiting for redis message. Is AURA daemon running? Exiting...") exit(3) if not self.args.quiet: print("...result: ") if p.stringreply != "": #print(p.stringreply) if p.stringreply[len(p.stringreply)-1] == "\n": print(p.stringreply[0:len(p.stringreply) - 1]) else: print(p.stringreply[0:len(p.stringreply)]) if self.args.stoptime: end = time.time() exectime = end-start print("execution time: "+str(exectime)+"s") def init_argument_parser(self): try: self.create_parser() self.args = self.parser.parse_args() except (ValueError, TypeError) as e: if self.parser is not None: self.parser.print_help() print() print(e) exit(1) def create_parser(self): self.parser = ArgumentParser() # options self.parser.add_argument("-sep", "--stop-execution-time", action="store_true", dest="stoptime", default=False, help="Prints the execution time at the end of the skript") self.parser.add_argument("-q", "--quiet", action="store_true", dest="quiet", default=False, help="Just the result will outputed to stout") self.parser.add_argument("-rd", "--recreate-database", action="store_true", dest="recreatedb", default=False, help="Do you want to recreate the database?") # getter self.parser.add_argument("-pcs", "--print-connection-status", action="store_true", dest="get_connection_status", default=False, help="Prints the status of the connection to liquidsoap, pv and tank") self.parser.add_argument("-gam", "--get-active-mixer", action="store_true", dest="get_active_mixer", default=False, help="Which mixer is activated?") self.parser.add_argument("-pms", "--print-mixer-status", action="store_true", dest="get_mixer_status", default=False, help="Prints all mixer sources and their states") self.parser.add_argument("-pap", "--print-act-programme", action="store_true", dest="get_act_programme", default=False, help="Prints the actual Programme, the controller holds") # liquid manipulation self.parser.add_argument("-am", "--select-mixer", action="store", dest="select_mixer", default=-1, metavar="MIXERNAME", help="Which mixer should be activated?") self.parser.add_argument("-dm", "--de-select-mixer", action="store", dest="deselect_mixer", default=-1, metavar="MIXERNAME", help="Which mixer should be activated?") self.parser.add_argument("-vm", "--volume", action="store", dest="set_volume", default=0, metavar=("MIXERNUM", "VOLUME"), nargs=2, help="Set volume of a mixer source", type=int) # shutdown server self.parser.add_argument("-sd", "--shutdown", action="store_true", dest="shutdown", default=False, help="Shutting down aura server") # playlist in/output self.parser.add_argument("-fnp", "--fetch-new-programmes", action="store_true", dest="fetch_new_programme", default=False, help="Fetch new programmes from calendarurl in comba.ini") self.parser.add_argument("-pmq", "--print-message-queue", action="store_true", dest="print_message_queue", default=False, help="Prints message queue") # send a redis message self.parser.add_argument("-rm", "--redis-message", action="store", dest="redis_message", default=False, metavar=("CHANNEL", "MESSAGE"), nargs=2, help="Send a redis message to the Listeners") # calls from liquidsoap self.parser.add_argument("-gnf", "--get-next-file-for", action="store", dest="get_file_for", default=False, metavar="PLAYLISTTYPE", help="For which type you wanna GET a next audio file?") self.parser.add_argument("-snf", "--set-next-file-for", action="store", dest="set_file_for", default=False, metavar=("PLAYLISTTYPE", "FILE"), nargs=2, help="For which type you wanna SET a next audio file?") self.parser.add_argument("-np", "--now-playing", action="store_true", dest="now_playing", default=False, help="Which source is now playing") self.parser.add_argument("-ip", "--init-player", action="store_true", dest="init_player", default=False, help="Reset liquidsoap volume and mixer activations?") if len(sys.argv) == 1: raise ValueError("No Argument passed!") def valid_playlist_entry(argument): from datetime import datetime try: index = int(argument[0]) fromtime = datetime.strptime(argument[1], "%Y-%m-%d") source = argument[2] return index, fromtime, source except: msg = "Not a valid date: '{0}'.".format(argument[0]) raise # # ## ## ## ## ## # # # # ENTRY FUNCTION # # # # ## ## ## ## ## # # def main(): Guru() # # ## ## ## ## ## ## # # # # End ENTRY FUNCTION # # # # ## ## ## ## ## ## # # if __name__ == "__main__": main()