#!/usr/bin/env python3

import sys
from urllib.parse import urlparse

from twisted.application.service import Application
from twisted.internet import reactor

from storm.twisted.transact import Transactor

from canonical.twisted.site import MaxMemorySite

from canonical.landscape.packageupload.service import UploadServer
from canonical.landscape.packageupload.incoming import IncomingQueue
from canonical.landscape.packageupload.resource import UploadService
from canonical.landscape.setup import load_config
from canonical.landscape.scripts.packageupload import run


if __name__ == "__main__":
    run()


try:
    config = load_config("package-upload")
except KeyError:
    sys.stderr.write("package-upload is not configured, exiting\n")
    sys.exit(0)

application = Application("package-upload")

package_upload_config = config.get("package-upload")
port = int(package_upload_config["port"])
global_config = config.get("global")

root_url = package_upload_config.get("root-url", None)
if root_url is None:
    path = "/upload/"
else:
    path = urlparse(root_url).path

threadpool = reactor.getThreadPool()
transactor = Transactor(threadpool)

incoming_queue = IncomingQueue(transactor, reactor)
root = UploadService(transactor, incoming_queue, path=path)
site = MaxMemorySite(root, max_memory_mib=global_config.get("max-service-memory", 0))
UploadServer(port, site, incoming_queue).setServiceParent(application)
