Created
March 30, 2014 16:49
-
-
Save cuibonobo/9875664 to your computer and use it in GitHub Desktop.
A good example of using event hooks to modify Eve data. Taken from: https://github.com/nicolaiarocci/eve/issues/270
This file contains 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
# settings | |
settings = {...} | |
# authentication | |
from eve.auth import TokenAuth | |
import requests | |
from flask import request, g | |
class TokenAuth(TokenAuth): | |
def check_auth(self, token, allowed_roles, resource, method): | |
# check token against user api | |
try: | |
r = requests.get('http://user-api/', params={'token':token}, verify=False) | |
data = r.json() | |
if data['authenticated'] == True: | |
g.user = data['user']['id'] | |
return True | |
except: | |
print 'Uh oh, I cannot communicate to the user API!' | |
return False | |
# auto fill _created_by and _modified_by user fields | |
created_by_field = '_created_by' | |
modified_by_field = '_modified_by' | |
for resource in settings['DOMAIN']: | |
settings['DOMAIN'][resource]['schema'][created_by_field] = {'type': 'string'} | |
settings['DOMAIN'][resource]['schema'][modified_by_field] = {'type': 'string'} | |
def before_insert(resource, documents): | |
user = g.get('user', None) | |
if user is not None: | |
for document in documents: | |
document[created_by_field] = user | |
document[modified_by_field] = user | |
def before_replace(resource, document): | |
user = g.get('user', None) | |
if user is not None: | |
document[modified_by_field] = user | |
# create eve app | |
from eve import Eve | |
app = Eve(settings=settings, auth=TokenAuth) | |
app.on_insert += before_insert | |
app.on_replace += before_replace |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Eve github url changed, is now at pyeve/eve#270