Advertisement
Guest User

Untitled

a guest
Apr 26th, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. import threading
  2. from datetime import timedelta
  3. import time
  4.  
  5. import flask
  6. from flask import Flask, Response, redirect, url_for, request, session, abort
  7. from flask.ext.login import LoginManager, UserMixin,
  8. login_required, login_user, logout_user
  9.  
  10. class ResettableTimer(threading.Timer):
  11. """Call a function after a specified number of seconds:
  12.  
  13. t = Timer(30.0, f, args=None, kwargs=None)
  14. t.start()
  15. t.reset() # after starting, it reset the time back to 0
  16. t.cancel() # stop the timer's action if it's still waiting
  17.  
  18.  
  19. """
  20.  
  21. def __init__(self, interval, function, args=None, kwargs=None):
  22. super().__init__(interval, function, args, kwargs)
  23. self.daemon = True
  24. self.time_to_wait_per_cycle = 0.3
  25. self.time_to_wait = interval
  26.  
  27. def reset(self):
  28. if not self.finished.is_set():
  29. self.time_to_wait = self.interval
  30.  
  31. def run(self):
  32. while self.time_to_wait > 0 and not self.finished.is_set():
  33. s = time.perf_counter()
  34. self.finished.wait(self.time_to_wait_per_cycle)
  35. self.time_to_wait -= time.perf_counter() - s
  36.  
  37. if not self.finished.is_set():
  38. self.function(*self.args, **self.kwargs)
  39. self.finished.set()
  40.  
  41. app = Flask(__name__)
  42.  
  43. # config
  44. app.config.update(
  45. DEBUG = True,
  46. SECRET_KEY = 'secret_xxx'
  47. )
  48.  
  49. # flask-login
  50. login_manager = LoginManager()
  51. login_manager.init_app(app)
  52.  
  53.  
  54. # silly user model
  55. class User(UserMixin):
  56.  
  57. def __init__(self, id):
  58. self.id = id
  59. self.name = "user" + str(id)
  60. self.password = self.name + "_secret"
  61.  
  62. def __repr__(self):
  63. return "%d/%s/%s" % (self.id, self.name, self.password)
  64.  
  65.  
  66. # create some users with ids 1 to 20
  67. users = [User(id) for id in range(1, 21)]
  68.  
  69. # some protected url
  70. @app.route('/')
  71. @login_required
  72. def home():
  73. return Response("Hello World!")
  74.  
  75. @app.route("/foo")
  76. @login_required
  77. def foo():
  78. try:
  79. session['counter'] += 1
  80. except Exception:
  81. session['counter'] = 1
  82. return Response("Hello world %d" % (session['counter'],))
  83.  
  84. # somewhere to login
  85. @app.route("/login", methods=["GET", "POST"])
  86. def login():
  87.  
  88. user = User(1)
  89. login_user(user)
  90.  
  91. @flask.copy_current_request_context
  92. def auto_logout():
  93. print("auto logout")
  94. logout_user()
  95. flask.session.clear()
  96.  
  97. auto_logout_timer = ResettableTimer(10, auto_logout)
  98. auto_logout_timer.start()
  99. return "<p>OK</p>", 200#redirect(request.args.get("next"))
  100.  
  101.  
  102. # somewhere to logout
  103. @app.route("/logout")
  104. @login_required
  105. def logout():
  106. logout_user()
  107. return Response('<p>Logged out</p>')
  108.  
  109.  
  110. # callback to reload the user object
  111. @login_manager.user_loader
  112. def load_user(userid):
  113. return User(userid)
  114.  
  115.  
  116. if __name__ == "__main__":
  117. app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement