aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/plugins/piwigo
diff options
context:
space:
mode:
authorElrond <elrond+mediagoblin.org@samba-tng.org>2013-03-25 15:34:21 +0100
committerElrond <elrond+mediagoblin.org@samba-tng.org>2013-05-09 00:15:11 +0200
commitc1df8d19630b1e60598db1bd93171926234b633b (patch)
tree23c04f8ed2d5bfc13fef8541dbda94d73d39f8d2 /mediagoblin/plugins/piwigo
parent180a0081007532ed7f6adad8fe3f2cde97031a2f (diff)
downloadmediagoblin-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.py16
-rw-r--r--mediagoblin/plugins/piwigo/tools.py15
-rw-r--r--mediagoblin/plugins/piwigo/views.py13
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"):