]> git.ipfire.org Git - people/jschlag/pbs.git/blame - hub/__init__.py
Second import.
[people/jschlag/pbs.git] / hub / __init__.py
CommitLineData
9137135a
MT
1#!/usr/bin/python
2
3import logging
4import os.path
5import tornado.httpserver
6import tornado.locale
7import tornado.options
8import tornado.web
9
10import backend
f6e6ff79 11import handlers
9137135a
MT
12
13BASEDIR = os.path.join(os.path.dirname(__file__), "..", "data")
14
15# Enable logging
16tornado.options.parse_command_line()
17
f6e6ff79 18class Application(tornado.web.Application):
9137135a 19 def __init__(self):
f6e6ff79
MT
20 self.__pakfire = None
21
9137135a 22 settings = dict(
f6e6ff79
MT
23 debug = False,
24 gzip = True,
9137135a
MT
25 )
26
27 # Load translations.
28 tornado.locale.load_gettext_translations(
29 os.path.join(BASEDIR, "translations"), "pakfire")
30
31 tornado.web.Application.__init__(self, **settings)
32
f6e6ff79
MT
33 self.add_handlers(r"pakfirehub.ipfire.org", [
34 # Redirect strayed users.
35 (r"/", handlers.RedirectHandler),
36
9137135a 37 # API
f6e6ff79
MT
38 (r"/builder", handlers.BuilderHandler),
39 (r"/user", handlers.UserHandler),
9137135a
MT
40 ])
41
f6e6ff79
MT
42 # This is the deprecated version. It will be removed some time.
43 self.add_handlers(r"pakfire.ipfire.org", [
44 # API
45 (r"/pakfirehub/builder", handlers.BuilderHandler),
46 (r"/pakfirehub/user", handlers.UserHandler),
47 ])
9137135a
MT
48
49 logging.info("Successfully initialied application")
50
f6e6ff79
MT
51 @property
52 def pakfire(self):
53 if self.__pakfire is None:
54 self.__pakfire = backend.Pakfire()
55
56 return self.__pakfire
57
9137135a
MT
58 def __del__(self):
59 logging.info("Shutting down application")
60
61 @property
62 def ioloop(self):
63 return tornado.ioloop.IOLoop.instance()
64
65 def shutdown(self, *args):
66 logging.debug("Caught shutdown signal")
67 self.ioloop.stop()
68
69 def run(self, port=81):
70 logging.debug("Going to background")
71
9137135a
MT
72 http_server = tornado.httpserver.HTTPServer(self, xheaders=True)
73
74 # If we are not running in debug mode, we can actually run multiple
75 # frontends to get best performance out of our service.
76 if not self.settings["debug"]:
77 http_server.bind(port)
78 http_server.start(num_processes=4)
79 else:
80 http_server.listen(port)
81
f6e6ff79
MT
82 # All requests should be done after 30 seconds or they will be killed.
83 self.ioloop.set_blocking_log_threshold(30)
84
9137135a
MT
85 self.ioloop.start()
86
87 def reload(self):
88 logging.debug("Caught reload signal")