Advertisement
Guest User

Untitled

a guest
Dec 31st, 2017
884
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.51 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import logging
  3. import tornado.escape
  4. import tornado.ioloop
  5. import tornado.options
  6. import tornado.web
  7. from tornado import gen
  8. import os.path
  9. import uuid
  10. import json
  11. import os
  12. import datetime
  13. import random
  14. import pickle
  15. from collections import defaultdict
  16.  
  17.  
  18. from tornado.options import define, options
  19.  
  20. define("port", default=8009, help="run on the given port", type=int)
  21.  
  22. karmas = defaultdict(dict)
  23. comments = defaultdict(dict)
  24. if os.path.exists('karmas.db'):
  25.     karmas = pickle.load(open('karmas.db'))
  26. if os.path.exists('comments.db'):
  27.     comments = pickle.load(open('comments.db'))
  28.  
  29. class Application(tornado.web.Application):
  30.     def __init__(self):
  31.         handlers = [
  32.             (r"/", IndexHandler),
  33.             (r"/lorka.user.js", IndexHandler),
  34.             (r"/karma/(\w+)/(up|down|zero)?", KarmaHandler),
  35.             (r"/scores/", ScoresHandler),
  36.             (r"/vote/(\d+)/(up|down|zero)?", VoteHandler),
  37.         ]
  38.         settings = dict(
  39.             cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",
  40.             template_path=os.path.join(os.path.dirname(__file__), "templates"),
  41.             static_path=os.path.join(os.path.dirname(__file__), "static"),
  42.             #xsrf_cookies=True,
  43.             autoreload=True,
  44.             debug=True,
  45.         )
  46.         tornado.web.Application.__init__(self, handlers, **settings)
  47.  
  48. class IndexHandler(tornado.web.RequestHandler):
  49.     def get(self):
  50.         self.set_header("Content-Type", "text/javascript; charset=UTF-8")
  51.         self.write(open('lorka.user.js').read())
  52.         #self.render("index.html")
  53.  
  54. class KarmaHandler(tornado.web.RequestHandler):
  55.     def get(self, name, vote):
  56.         x_real_ip = self.request.headers.get("X-Real-IP")
  57.         remote_ip = x_real_ip or self.request.remote_ip
  58.         print remote_ip
  59.  
  60.         if vote == 'up':
  61.             karmas[name][remote_ip] = 1
  62.         elif vote == 'down':
  63.             karmas[name][remote_ip] = -1
  64.         elif vote == 'zero':
  65.             if remote_ip in karmas[name]:
  66.                 del karmas[name][remote_ip]
  67.  
  68.         self.write('%s' % sum(karmas[name].values(), 0))
  69.  
  70. class ScoresHandler(tornado.web.RequestHandler):
  71.     def get(self):
  72.         ids = self.get_argument('ids', '').split(',')
  73.         res = {}
  74.         for i in ids:
  75.             if i.isdigit():
  76.                 if i in comments:
  77.                     res[i] = sum(comments[i].values(), 0)
  78.                 else:
  79.                     res[i] = 0
  80.         self.write(json.dumps(res))
  81.  
  82. class VoteHandler(tornado.web.RequestHandler):
  83.     def get(self, i, vote):
  84.         i = str(i)
  85.         x_real_ip = self.request.headers.get("X-Real-IP")
  86.         remote_ip = x_real_ip or self.request.remote_ip
  87.         print remote_ip
  88.  
  89.         if vote == 'up':
  90.             comments[i][remote_ip] = 1
  91.         elif vote == 'down':
  92.             comments[i][remote_ip] = -1
  93.         elif vote == 'zero':
  94.             if remote_ip in comments[i]:
  95.                 del comments[i][remote_ip]
  96.  
  97.         self.write('%s' % sum(comments[i].values(), 0))
  98.  
  99. def save_db():
  100.     with open('karmas.db', 'w') as f:
  101.         pickle.dump(karmas, f)
  102.     with open('comments.db', 'w') as f:
  103.         pickle.dump(comments, f)
  104.  
  105. def main():
  106.     tornado.options.parse_command_line()
  107.     app = Application()
  108.     app.listen(options.port)
  109.     tornado.ioloop.PeriodicCallback(save_db, 3000, io_loop = tornado.ioloop.IOLoop.current()).start()
  110.     tornado.ioloop.IOLoop.current().start()
  111.  
  112.  
  113. if __name__ == "__main__":
  114.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement