Skip to content

Instantly share code, notes, and snippets.

@horiajurcut
Last active August 29, 2015 14:02
Show Gist options
  • Save horiajurcut/77f27f884b0ecb1b2bc3 to your computer and use it in GitHub Desktop.
Save horiajurcut/77f27f884b0ecb1b2bc3 to your computer and use it in GitHub Desktop.
import json
from functools import wraps
from flask import request
from utils.exceptions import HttpNotFound
from utils.validators import Required
def require(f):
@wraps(f)
def decorated(self):
required_payload = []
for key in self.model.__dict__:
if key.startswith('validate_'):
validators = self.model.__dict__[key].validators
for v in validators:
if isinstance(v, Required):
required_payload.append(key[9:])
data = {}
if request.method in ['POST', 'PUT'] and request.data:
columns = [
str(c).split('.', 1)[1] \
for c in self.model.__table__.columns
]
data = json.loads(request.data)
request.data = json.dumps({
k: v for k, v in data.items() if k in columns
})
if request.method != 'POST':
return f(self)
for field in required_payload:
if field not in data.keys():
raise HttpNotFound({
'error': 'Field %s was not found in payload' % (field)
})
return f(self)
return decorated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment