Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import logging
- import tornado.escape
- import tornado.ioloop
- import tornado.options
- import tornado.web
- from tornado import gen
- import os.path
- import uuid
- import json
- import os
- import datetime
- import random
- import pickle
- from collections import defaultdict
- from tornado.options import define, options
- define("port", default=8009, help="run on the given port", type=int)
- karmas = defaultdict(dict)
- comments = defaultdict(dict)
- if os.path.exists('karmas.db'):
- karmas = pickle.load(open('karmas.db'))
- if os.path.exists('comments.db'):
- comments = pickle.load(open('comments.db'))
- class Application(tornado.web.Application):
- def __init__(self):
- handlers = [
- (r"/", IndexHandler),
- (r"/lorka.user.js", IndexHandler),
- (r"/karma/(\w+)/(up|down|zero)?", KarmaHandler),
- (r"/scores/", ScoresHandler),
- (r"/vote/(\d+)/(up|down|zero)?", VoteHandler),
- ]
- settings = dict(
- cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",
- template_path=os.path.join(os.path.dirname(__file__), "templates"),
- static_path=os.path.join(os.path.dirname(__file__), "static"),
- #xsrf_cookies=True,
- autoreload=True,
- debug=True,
- )
- tornado.web.Application.__init__(self, handlers, **settings)
- class IndexHandler(tornado.web.RequestHandler):
- def get(self):
- self.set_header("Content-Type", "text/javascript; charset=UTF-8")
- self.write(open('lorka.user.js').read())
- #self.render("index.html")
- class KarmaHandler(tornado.web.RequestHandler):
- def get(self, name, vote):
- x_real_ip = self.request.headers.get("X-Real-IP")
- remote_ip = x_real_ip or self.request.remote_ip
- print remote_ip
- if vote == 'up':
- karmas[name][remote_ip] = 1
- elif vote == 'down':
- karmas[name][remote_ip] = -1
- elif vote == 'zero':
- if remote_ip in karmas[name]:
- del karmas[name][remote_ip]
- self.write('%s' % sum(karmas[name].values(), 0))
- class ScoresHandler(tornado.web.RequestHandler):
- def get(self):
- ids = self.get_argument('ids', '').split(',')
- res = {}
- for i in ids:
- if i.isdigit():
- if i in comments:
- res[i] = sum(comments[i].values(), 0)
- else:
- res[i] = 0
- self.write(json.dumps(res))
- class VoteHandler(tornado.web.RequestHandler):
- def get(self, i, vote):
- i = str(i)
- x_real_ip = self.request.headers.get("X-Real-IP")
- remote_ip = x_real_ip or self.request.remote_ip
- print remote_ip
- if vote == 'up':
- comments[i][remote_ip] = 1
- elif vote == 'down':
- comments[i][remote_ip] = -1
- elif vote == 'zero':
- if remote_ip in comments[i]:
- del comments[i][remote_ip]
- self.write('%s' % sum(comments[i].values(), 0))
- def save_db():
- with open('karmas.db', 'w') as f:
- pickle.dump(karmas, f)
- with open('comments.db', 'w') as f:
- pickle.dump(comments, f)
- def main():
- tornado.options.parse_command_line()
- app = Application()
- app.listen(options.port)
- tornado.ioloop.PeriodicCallback(save_db, 3000, io_loop = tornado.ioloop.IOLoop.current()).start()
- tornado.ioloop.IOLoop.current().start()
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement