aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Allan Webber <cwebber@dustycloud.org>2013-03-29 08:09:36 -0500
committerChristopher Allan Webber <cwebber@dustycloud.org>2013-03-29 08:09:36 -0500
commit047d8d5871ee8ee97ea52a78512fe5b2da51b8cc (patch)
treec8bdf7e4ebb83ee8dd25930459c33084cd434ac6
parent6c6e9911f5556bcd1f287afa39d4cc6d14d9c6c1 (diff)
parent2ef2f46e73845dcd55666cad49c5a17908bf5b46 (diff)
downloadmediagoblin-047d8d5871ee8ee97ea52a78512fe5b2da51b8cc.tar.lz
mediagoblin-047d8d5871ee8ee97ea52a78512fe5b2da51b8cc.tar.xz
mediagoblin-047d8d5871ee8ee97ea52a78512fe5b2da51b8cc.zip
Merge branch 'master' of gitorious.org:mediagoblin/mediagoblin
-rw-r--r--mediagoblin/plugins/api/views.py8
-rw-r--r--mediagoblin/plugins/piwigo/forms.py28
-rw-r--r--mediagoblin/plugins/piwigo/views.py17
-rw-r--r--mediagoblin/submit/lib.py11
-rw-r--r--mediagoblin/submit/views.py8
5 files changed, 61 insertions, 11 deletions
diff --git a/mediagoblin/plugins/api/views.py b/mediagoblin/plugins/api/views.py
index 2055a663..fde76fe4 100644
--- a/mediagoblin/plugins/api/views.py
+++ b/mediagoblin/plugins/api/views.py
@@ -18,7 +18,6 @@ import json
import logging
from os.path import splitext
-from werkzeug.datastructures import FileStorage
from werkzeug.exceptions import BadRequest, Forbidden
from werkzeug.wrappers import Response
@@ -27,7 +26,8 @@ from mediagoblin.meddleware.csrf import csrf_exempt
from mediagoblin.media_types import sniff_media
from mediagoblin.plugins.api.tools import api_auth, get_entry_serializable, \
json_response
-from mediagoblin.submit.lib import prepare_queue_task, run_process_media
+from mediagoblin.submit.lib import check_file_field, prepare_queue_task, \
+ run_process_media
_log = logging.getLogger(__name__)
@@ -45,9 +45,7 @@ def post_entry(request):
_log.debug('Must POST against post_entry')
raise BadRequest()
- if not 'file' in request.files \
- or not isinstance(request.files['file'], FileStorage) \
- or not request.files['file'].stream:
+ if not check_file_field(request, 'file'):
_log.debug('File field not found')
raise BadRequest()
diff --git a/mediagoblin/plugins/piwigo/forms.py b/mediagoblin/plugins/piwigo/forms.py
new file mode 100644
index 00000000..5bb12e62
--- /dev/null
+++ b/mediagoblin/plugins/piwigo/forms.py
@@ -0,0 +1,28 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2013 MediaGoblin contributors. See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+import wtforms
+
+
+class AddSimpleForm(wtforms.Form):
+ image = wtforms.FileField()
+ name = wtforms.TextField(
+ validators=[wtforms.validators.Length(min=0, max=500)])
+ comment = wtforms.TextField()
+ # tags = wtforms.FieldList(wtforms.TextField())
+ category = wtforms.IntegerField()
+ level = wtforms.IntegerField()
diff --git a/mediagoblin/plugins/piwigo/views.py b/mediagoblin/plugins/piwigo/views.py
index e9ce6206..3dee09cd 100644
--- a/mediagoblin/plugins/piwigo/views.py
+++ b/mediagoblin/plugins/piwigo/views.py
@@ -24,6 +24,7 @@ from mediagoblin import mg_globals
from mediagoblin.meddleware.csrf import csrf_exempt
from mediagoblin.tools.response import render_404
from .tools import CmdTable, PwgNamedArray, response_xml
+from .forms import AddSimpleForm
_log = logging.getLogger(__name__)
@@ -45,7 +46,7 @@ def pwg_logout(request):
@CmdTable("pwg.getVersion")
def pwg_getversion(request):
- return "piwigo 2.5.0 (MediaGoblin)"
+ return "2.5.0 (MediaGoblin)"
@CmdTable("pwg.session.getStatus")
@@ -80,6 +81,20 @@ def pwg_images_exist(request):
return {}
+@CmdTable("pwg.images.addSimple", True)
+def pwg_images_addSimple(request):
+ form = AddSimpleForm(request.form)
+ if not form.validate():
+ _log.error("addSimple: form failed")
+ raise BadRequest()
+ dump = []
+ for f in form:
+ dump.append("%s=%r" % (f.name, f.data))
+ _log.info("addimple: %r %s %r", request.form, " ".join(dump), request.files)
+
+ return {'image_id': 123456, 'url': ''}
+
+
md5sum_matcher = re.compile(r"^[0-9a-fA-F]{32}$")
def fetch_md5(request, parm_name, optional_parm=False):
diff --git a/mediagoblin/submit/lib.py b/mediagoblin/submit/lib.py
index 679fc543..a5483471 100644
--- a/mediagoblin/submit/lib.py
+++ b/mediagoblin/submit/lib.py
@@ -17,6 +17,7 @@
import logging
import uuid
from werkzeug.utils import secure_filename
+from werkzeug.datastructures import FileStorage
from mediagoblin.processing import mark_entry_failed
from mediagoblin.processing.task import process_media
@@ -25,6 +26,16 @@ from mediagoblin.processing.task import process_media
_log = logging.getLogger(__name__)
+def check_file_field(request, field_name):
+ """Check if a file field meets minimal criteria"""
+ retval = (field_name in request.files
+ and isinstance(request.files[field_name], FileStorage)
+ and request.files[field_name].stream)
+ if not retval:
+ _log.debug("Form did not contain proper file field %s", field_name)
+ return retval
+
+
def prepare_queue_task(app, entry, filename):
"""
Prepare a MediaEntry for the processing queue and get a queue file
diff --git a/mediagoblin/submit/views.py b/mediagoblin/submit/views.py
index def7e839..1e47d259 100644
--- a/mediagoblin/submit/views.py
+++ b/mediagoblin/submit/views.py
@@ -22,7 +22,6 @@ import logging
_log = logging.getLogger(__name__)
-from werkzeug.datastructures import FileStorage
from mediagoblin.tools.text import convert_to_tag_list_of_dicts
from mediagoblin.tools.translate import pass_to_ugettext as _
@@ -32,7 +31,8 @@ from mediagoblin.submit import forms as submit_forms
from mediagoblin.messages import add_message, SUCCESS
from mediagoblin.media_types import sniff_media, \
InvalidFileType, FileTypeNotSupported
-from mediagoblin.submit.lib import run_process_media, prepare_queue_task
+from mediagoblin.submit.lib import check_file_field, prepare_queue_task, \
+ run_process_media
@require_active_login
@@ -44,9 +44,7 @@ def submit_start(request):
license=request.user.license_preference)
if request.method == 'POST' and submit_form.validate():
- if not ('file' in request.files
- and isinstance(request.files['file'], FileStorage)
- and request.files['file'].stream):
+ if not check_file_field(request, 'file'):
submit_form.file.errors.append(
_(u'You must provide a file.'))
else: