anki-sync-server/src/ankisyncd/__main__.py
2022-10-14 20:55:08 +01:00

59 lines
1.5 KiB
Python

import os
import sys
import logging
from wsgiref.simple_server import make_server, WSGIRequestHandler
import ankisyncd
import ankisyncd.config
from ankisyncd.sync_app import SyncApp
from ankisyncd.thread import shutdown
logger = logging.getLogger("ankisyncd")
if __package__ is None and not hasattr(sys, "frozen"):
path = os.path.realpath(os.path.abspath(__file__))
sys.path.insert(0, os.path.dirname(os.path.dirname(path)))
class RequestHandler(WSGIRequestHandler):
logger = logging.getLogger("ankisyncd.http")
def log_error(self, format, *args):
self.logger.error("%s %s", self.address_string(), format % args)
def log_message(self, format, *args):
self.logger.info("%s %s", self.address_string(), format % args)
def main():
logging.basicConfig(
level=logging.INFO, format="[%(asctime)s]:%(levelname)s:%(name)s:%(message)s"
)
logger.info(
"ankisyncd {} ({})".format(ankisyncd._get_version(), ankisyncd._homepage)
)
if len(sys.argv) > 1:
# backwards compat
config = ankisyncd.config.load(sys.argv[1])
else:
config = ankisyncd.config.load()
ankiserver = SyncApp(config)
httpd = make_server(
config["host"], int(config["port"]), ankiserver, handler_class=RequestHandler
)
try:
logger.info("Serving HTTP on {} port {}...".format(*httpd.server_address))
httpd.serve_forever()
except KeyboardInterrupt:
logger.info("Exiting...")
finally:
shutdown()
if __name__ == "__main__":
main()