diff options
author | Elrond <elrond+mediagoblin.org@samba-tng.org> | 2013-03-25 15:34:21 +0100 |
---|---|---|
committer | Elrond <elrond+mediagoblin.org@samba-tng.org> | 2013-05-09 00:15:11 +0200 |
commit | c1df8d19630b1e60598db1bd93171926234b633b (patch) | |
tree | 23c04f8ed2d5bfc13fef8541dbda94d73d39f8d2 /mediagoblin/plugins/piwigo | |
parent | 180a0081007532ed7f6adad8fe3f2cde97031a2f (diff) | |
download | mediagoblin-c1df8d19630b1e60598db1bd93171926234b633b.tar.lz mediagoblin-c1df8d19630b1e60598db1bd93171926234b633b.tar.xz mediagoblin-c1df8d19630b1e60598db1bd93171926234b633b.zip |
piwigo: Add .images.add including form handling.
To make things a bit easier, switch to WTForms
for validating the received data.
Diffstat (limited to 'mediagoblin/plugins/piwigo')
-rw-r--r-- | mediagoblin/plugins/piwigo/forms.py | 16 | ||||
-rw-r--r-- | mediagoblin/plugins/piwigo/tools.py | 15 | ||||
-rw-r--r-- | mediagoblin/plugins/piwigo/views.py | 13 |
3 files changed, 41 insertions, 3 deletions
diff --git a/mediagoblin/plugins/piwigo/forms.py b/mediagoblin/plugins/piwigo/forms.py index 5bb12e62..18cbd5c5 100644 --- a/mediagoblin/plugins/piwigo/forms.py +++ b/mediagoblin/plugins/piwigo/forms.py @@ -26,3 +26,19 @@ class AddSimpleForm(wtforms.Form): # tags = wtforms.FieldList(wtforms.TextField()) category = wtforms.IntegerField() level = wtforms.IntegerField() + + +_md5_validator = wtforms.validators.Regexp(r"^[0-9a-fA-F]{32}$") + + +class AddForm(wtforms.Form): + original_sum = wtforms.TextField(None, + [_md5_validator, + wtforms.validators.Required()]) + thumbnail_sum = wtforms.TextField(None, + [wtforms.validators.Optional(False), + _md5_validator]) + file_sum = wtforms.TextField(None, [_md5_validator]) + name = wtforms.TextField() + date_creation = wtforms.TextField() + categories = wtforms.TextField() diff --git a/mediagoblin/plugins/piwigo/tools.py b/mediagoblin/plugins/piwigo/tools.py index 4d2e985a..cd466367 100644 --- a/mediagoblin/plugins/piwigo/tools.py +++ b/mediagoblin/plugins/piwigo/tools.py @@ -18,7 +18,7 @@ import logging import six import lxml.etree as ET -from werkzeug.exceptions import MethodNotAllowed +from werkzeug.exceptions import MethodNotAllowed, BadRequest from mediagoblin.tools.response import Response @@ -106,3 +106,16 @@ class CmdTable(object): _log.warn("Method %s only allowed for POST", cmd_name) raise MethodNotAllowed() return func + + +def check_form(form): + if not form.validate(): + _log.error("form validation failed for form %r", form) + for f in form: + if len(f.error): + _log.error("Errors for %s: %r", f.name, f.errors) + raise BadRequest() + dump = [] + for f in form: + dump.append("%s=%r" % (f.name, f.data)) + _log.debug("form: %s", " ".join(dump)) diff --git a/mediagoblin/plugins/piwigo/views.py b/mediagoblin/plugins/piwigo/views.py index e064b418..837d8eca 100644 --- a/mediagoblin/plugins/piwigo/views.py +++ b/mediagoblin/plugins/piwigo/views.py @@ -23,8 +23,8 @@ from werkzeug.wrappers import BaseResponse from mediagoblin import mg_globals from mediagoblin.meddleware.csrf import csrf_exempt from mediagoblin.submit.lib import check_file_field -from .tools import CmdTable, PwgNamedArray, response_xml -from .forms import AddSimpleForm +from .tools import CmdTable, PwgNamedArray, response_xml, check_form +from .forms import AddSimpleForm, AddForm _log = logging.getLogger(__name__) @@ -133,6 +133,15 @@ def pwg_images_addChunk(request): return True +@CmdTable("pwg.images.add", True) +def pwg_images_add(request): + _log.info("add: %r", request.form) + form = AddForm(request.form) + check_form(form) + + return {'image_id': 123456, 'url': ''} + + @csrf_exempt def ws_php(request): if request.method not in ("GET", "POST"): |