Skip to content

Commit

Permalink
Add dispatch method on base handler to manage sessions.
Browse files Browse the repository at this point in the history
Fix the validations functions on ngforms and also the response abort
  • Loading branch information
gomezjdaniel committed Feb 3, 2013
1 parent ff55f58 commit f365ec8
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 13 deletions.
11 changes: 10 additions & 1 deletion handlers.py
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
35 changes: 23 additions & 12 deletions ngforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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):
Expand All @@ -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):
Expand All @@ -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):
Expand All @@ -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):
Expand Down

0 comments on commit f365ec8

Please sign in to comment.