pysonic/pysonic/daemon.py

58 lines
1.8 KiB
Python

import logging
import cherrypy
from pysonic.api import PysonicApi
from pysonic.library import PysonicLibrary
from pysonic.database import PysonicDatabase
def main():
import argparse
import signal
parser = argparse.ArgumentParser(description="Pysonic music streaming server")
parser.add_argument('-p', '--port', default=8080, type=int, help="tcp port to listen on")
parser.add_argument('-d', '--dirs', required=True, nargs='+', help="new music dirs to share")
parser.add_argument('-s', '--database-path', default="./db.sqlite", help="path to persistent sqlite database")
parser.add_argument('--debug', action="store_true", help="enable development options")
args = parser.parse_args()
logging.basicConfig(level=logging.INFO if args.debug else logging.WARNING)
db = PysonicDatabase(path=args.database_path)
library = PysonicLibrary(db)
library.update()
cherrypy.tree.mount(PysonicApi(db, library), '/rest/', {'/': {}})
cherrypy.config.update({
'sessionFilter.on': True,
'tools.sessions.on': True,
'tools.sessions.locking': 'explicit',
'tools.sessions.timeout': 525600,
'request.show_tracebacks': True,
'server.socket_port': args.port,
'server.thread_pool': 25,
'server.socket_host': '0.0.0.0',
'server.show_tracebacks': True,
'server.socket_timeout': 5,
'log.screen': False,
'engine.autoreload.on': args.debug
})
def signal_handler(signum, stack):
print('Got sig {}, exiting...'.format(signum))
cherrypy.engine.exit()
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
try:
cherrypy.engine.start()
cherrypy.engine.block()
finally:
print("API has shut down")
cherrypy.engine.exit()
if __name__ == '__main__':
main()