diff options
Diffstat (limited to 'web/server.py')
-rwxr-xr-x | web/server.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/web/server.py b/web/server.py new file mode 100755 index 0000000..01475c1 --- /dev/null +++ b/web/server.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 + +import json +from lesscss import lessc +import tornado.gen +import tornado.httpclient +import tornado.ioloop +import tornado.web +import operator +import os + +import config + +class BaseHandler(tornado.web.RequestHandler): + def render(self, *args, **kwargs): + kwargs['host'] = config.web.host + return super(BaseHandler, self).render(*args, **kwargs) + + def render_string(self, *args, **kwargs): + s = super(BaseHandler, self).render_string(*args, **kwargs) + return s.replace(b'\n', b'') # this is like Django's {% spaceless %} + +class MainHandler(BaseHandler): + @tornado.web.asynchronous + @tornado.gen.coroutine + def get(self): + http_client = tornado.httpclient.AsyncHTTPClient() + kills_url = 'https://zkillboard.com/api/kills/corporationID/98182803/limit/1' + losses_url = 'https://zkillboard.com/api/losses/corporationID/98182803/limit/1' + kills_res, losses_res = yield [http_client.fetch(kills_url), http_client.fetch(losses_url)] + kills = json.loads(kills_res.body.decode('utf-8')) + losses = json.loads(losses_res.body.decode('utf-8')) + kills = sorted(kills + losses, key=operator.itemgetter('killTime'), reverse=True) + self.render('home.html', kills=kills) + + +class CSSHandler(tornado.web.RequestHandler): + def get(self, css_path): + css_path = os.path.join(os.path.dirname(__file__), 'static', css_path) + '.less' + with open(css_path, 'r') as f: + self.set_header('Content-Type', 'text/css') + css = lessc.compile(f.read()) + self.write(css) + +if __name__ == '__main__': + tornado.web.Application( + handlers=[ + (r'/', MainHandler), + (r"/(css/.+)\.css", CSSHandler), + ], + template_path=os.path.join(os.path.dirname(__file__), 'templates'), + static_path=os.path.join(os.path.dirname(__file__), 'static'), + cookie_secret=config.web.cookie_secret, + debug=True, + ).listen(config.web.port) + print('Listening on :%d' % config.web.port) + tornado.ioloop.IOLoop.instance().start() |