Commit c0691a8c by Oleg Marshev

Move filtering to clean.

parent a1fae635
......@@ -25,12 +25,12 @@ class Note(models.Model):
"""
Clean the note object or raises a ValidationError.
"""
if note is None:
raise ValidationError('Note must have a body.')
if type(note) is not dict:
if not isinstance(note, dict):
raise ValidationError('Note must be a dictionary.')
if len(note) == 0:
raise ValidationError('Note must have a body.')
self.text = note.get('text', '')
self.quote = note.get('quote', '')
......@@ -125,4 +125,4 @@ class NoteMappingType(MappingType, Indexable):
data[i][k] = v[0]
return data
note_searcher = NoteMappingType.search()
\ No newline at end of file
note_searcher = NoteMappingType.search()
......@@ -10,9 +10,6 @@ from rest_framework.views import APIView
from notesapi.v1.models import Note, NoteMappingType, note_searcher
CREATE_FILTER_FIELDS = ('updated', 'created', 'consumer', 'id')
UPDATE_FILTER_FIELDS = ('updated', 'created', 'user', 'consumer')
log = logging.getLogger(__name__)
......@@ -60,15 +57,10 @@ class AnnotationListView(APIView):
if 'id' in self.request.DATA:
return Response(status=status.HTTP_400_BAD_REQUEST)
filtered_payload = _filter_input(self.request.DATA, CREATE_FILTER_FIELDS)
if len(filtered_payload) == 0:
return Response(status=status.HTTP_400_BAD_REQUEST)
note = Note()
try:
note.clean(filtered_payload)
note.clean(self.request.DATA)
except ValidationError as error:
log.debug(error)
return Response(status=status.HTTP_400_BAD_REQUEST)
......@@ -116,13 +108,8 @@ class AnnotationDetailView(APIView):
if note.user_id != self.request.DATA['user']:
return Response(status=status.HTTP_400_BAD_REQUEST)
filtered_payload = _filter_input(self.request.DATA, UPDATE_FILTER_FIELDS)
# use id from URL, regardless of what arrives in JSON payload.
filtered_payload['id'] = note_id
try:
note.clean(filtered_payload)
note.clean(self.request.DATA)
except ValidationError as e:
log.debug(e)
return Response(status=status.HTTP_400_BAD_REQUEST)
......@@ -151,16 +138,6 @@ class AnnotationDetailView(APIView):
return Response(status=status.HTTP_204_NO_CONTENT)
def _filter_input(annotation, fields):
"""
Pop given fields from annotation.
"""
for field in fields:
annotation.pop(field, None)
return annotation
def _convert_to_int(value, default=None):
"""
Convert given value to int.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment