Last active
June 22, 2018 19:01
-
-
Save bigoper/7b097e9919d8e8dfbd1b5ea117a57beb to your computer and use it in GitHub Desktop.
app.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from eve import Eve | |
from eve.auth import BasicAuth | |
from myApp.auth import * #this is the auth.py | |
from myApp.rate_limit import * | |
from myApp.callbacks import inject_signature, log_every_get | |
from myApp.middleware import Loggermiddleware | |
from myApp.blueprints import simple_page, page_group_by | |
from myApp.models import db | |
import os | |
import logging | |
from logging.handlers import TimedRotatingFileHandler | |
# from logbook import Logger, StreamHandler | |
import redis | |
r = redis.StrictRedis(host='127.0.0.1', password='blabla') | |
class MyBasicAuth(BasicAuth): | |
def check_auth(self, username, password, allowed_roles, resource, method): | |
return username == 'admin' and password == 'secret' | |
# Eve App Definition | |
SETTINGS_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'instance/settings.py') | |
LOGS_PATH = '/var/log/blabla.log' | |
app = Eve(auth=MyBasicAuth, redis=r, settings=SETTINGS_PATH) | |
# MongoDB | |
db.init_app(app) | |
# BluePrints (routs) | |
app.register_blueprint(simple_page) | |
app.register_blueprint(page_group_by) | |
# Hooks / Callbacks | |
app.on_post_GET += log_every_get | |
app.on_fetched_item += inject_signature | |
# Middleware | |
app.wsgi_app = Loggermiddleware(app.wsgi_app) | |
# Hooks | |
@app.after_request | |
def do_something_whenever_a_request_has_been_handled(response): | |
# we have a response to manipulate, always return one | |
print('after_request --> 02') | |
return response | |
@app.after_request | |
def inject_x_rate_headers(response): | |
print('after_request --> 01') | |
limit = get_view_rate_limit() | |
if limit and limit.send_x_headers: | |
h = response.headers | |
h.add('X-RateLimit-Remaining', str(limit.remaining)) | |
h.add('X-RateLimit-Limit', str(limit.limit)) | |
h.add('X-RateLimit-Reset', str(limit.reset)) | |
return response | |
if __name__ == '__main__': | |
handler = TimedRotatingFileHandler(LOGS_PATH) | |
handler.setFormatter(logging.Formatter( | |
'%(asctime)s %(levelname)s: %(message)s ' | |
'[in %(filename)s:%(lineno)d] -- ip: %(clientip)s, ' | |
'url: %(url)s, method:%(method)s')) | |
app.logger.addHandler(handler) | |
app.logger.setLevel(logging.DEBUG) | |
# let's go | |
app.run(host='0.0.0.0', port=8000) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment