From f365ec87d2fe25f276412b12ffd5ca2885174d5b Mon Sep 17 00:00:00 2001 From: Daniel Gomez Jurado Date: Sun, 3 Feb 2013 18:16:15 +0100 Subject: [PATCH] Add dispatch method on base handler to manage sessions. Fix the validations functions on ngforms and also the response abort --- handlers.py | 11 ++++++++++- ngforms.py | 35 +++++++++++++++++++++++------------ 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/handlers.py b/handlers.py index 49440ce..1a397ea 100644 --- a/handlers.py +++ b/handlers.py @@ -1,12 +1,21 @@ import webapp2 -from webapp2_extras import json +from webapp2_extras import json, sessions import os import datetime +from endarch.models.user import User + class Base(webapp2.RequestHandler): + def dispatch(self): + session_store = User.get_session_store() + try: + super(Base, self).dispatch() + finally: + session_store.save_sessions(self.response) + @webapp2.cached_property def jinja2(self): return jinja2.get_jinja2(app=self.app) diff --git a/ngforms.py b/ngforms.py index 8942d1f..8b272fa 100644 --- a/ngforms.py +++ b/ngforms.py @@ -21,20 +21,25 @@ def validate(self): data = json.decode(request.body) if not isinstance(data, dict): - request.abort(403) + webapp2.abort(403) for f in self.fields: + if not f.id in self.validations: + continue + try: value = data[f.id].strip() except KeyError: value = '' - field_values[f.id] = value + self.field_values[f.id] = value for val in self.validations[f.id]: - if not val.validate(self): - request.abort(403) + val.input = f.id + + if not val.validate(self): + webapp2.abort(403) - return field_values + return self.field_values @property def fields(self): @@ -45,14 +50,20 @@ def validations(self): raise NotImplemented() def field(self, id): - if isinstance(field_values[id], basestring): - return field_values[id] + if not id in self.field_values: + return '' + + if isinstance(self.field_values[id], basestring): + return self.field_values[id] request = webapp2.get_request() - request.abort(403) + webapp2.abort(403) class Validation(object): + """Base class for all form validations.""" + + """ID of the input field associated to this validation.""" input = "" def __init__(self, name, message, attrs): @@ -71,7 +82,7 @@ def __init__(self, min, message): self.min = min def validate(self, form): - return len(form.field(self.input)) >= min + return len(form.field(self.input)) >= self.min class ShorterThan(Validation): @@ -81,7 +92,7 @@ def __init__(self, max, message): self.max = max def validate(self, form): - return len(form.field(self.input)) <= max + return len(form.field(self.input)) <= self.max class Required(Validation): @@ -106,8 +117,8 @@ def __init__(self, field, message): super(Match, self).__init__("match", message, {'match': field}) self.field = field - def validate(self, form): - return form.field(field) == form.field(self.input) + def validate(self, form): + return form.field(self.field) == form.field(self.input) class Pattern(Validation):