diff options
-rw-r--r-- | mediagoblin/decorators.py | 44 | ||||
-rw-r--r-- | mediagoblin/routing.py | 5 | ||||
-rw-r--r-- | mediagoblin/submit/__init__.py | 0 | ||||
-rw-r--r-- | mediagoblin/submit/forms.py | 26 | ||||
-rw-r--r-- | mediagoblin/submit/routing.py | 22 | ||||
-rw-r--r-- | mediagoblin/submit/views.py | 37 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/submit/start.html | 35 |
7 files changed, 166 insertions, 3 deletions
diff --git a/mediagoblin/decorators.py b/mediagoblin/decorators.py new file mode 100644 index 00000000..c6b4b545 --- /dev/null +++ b/mediagoblin/decorators.py @@ -0,0 +1,44 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 Free Software Foundation, Inc +# +# 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/>. + + +from webob import exc + + +def _make_safe(decorator, original): + """ + Copy the function data from the old function to the decorator. + """ + decorator.__name__ = original.__name__ + decorator.__dict__ = original.__dict__ + decorator.__doc__ = original.__doc__ + return decorator + + +def require_active_login(controller): + """ + Require an active login from the user. + """ + def new_controller_func(request, *args, **kwargs): + if not request.user or not request.user.get('session') == 'active': + # TODO: Indicate to the user that they were redirected + # here because an *active* user is required. + return exc.HTTPFound( + location=request.urlgen("mediagoblin.auth.login")) + + return controller(request, *args, **kwargs) + + return _make_safe(new_controller_func, controller) diff --git a/mediagoblin/routing.py b/mediagoblin/routing.py index 169917f0..b47bec8d 100644 --- a/mediagoblin/routing.py +++ b/mediagoblin/routing.py @@ -17,6 +17,7 @@ from routes import Mapper from mediagoblin.auth.routing import auth_routes +from mediagoblin.submit.routing import submit_routes def get_mapper(): @@ -26,10 +27,8 @@ def get_mapper(): mapping.connect( "index", "/", controller="mediagoblin.views:root_view") - mapping.connect( - "test_submit", "/test_submit/", - controller="mediagoblin.views:submit_test") mapping.extend(auth_routes, '/auth') + mapping.extend(submit_routes, '/submit') return mapping diff --git a/mediagoblin/submit/__init__.py b/mediagoblin/submit/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/mediagoblin/submit/__init__.py diff --git a/mediagoblin/submit/forms.py b/mediagoblin/submit/forms.py new file mode 100644 index 00000000..fe51e7fd --- /dev/null +++ b/mediagoblin/submit/forms.py @@ -0,0 +1,26 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 Free Software Foundation, Inc +# +# 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 SubmitStartForm(wtforms.Form): + title = wtforms.TextField( + 'Title', + [wtforms.validators.Length(min=1, max=500)]) + description = wtforms.TextAreaField('Description of this work') + file = wtforms.FileField('File') diff --git a/mediagoblin/submit/routing.py b/mediagoblin/submit/routing.py new file mode 100644 index 00000000..b2713540 --- /dev/null +++ b/mediagoblin/submit/routing.py @@ -0,0 +1,22 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 Free Software Foundation, Inc +# +# 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/>. + +from routes.route import Route + +submit_routes = [ + Route('mediagoblin.submit.start', '/', + controller='mediagoblin.submit.views:submit_start'), + ] diff --git a/mediagoblin/submit/views.py b/mediagoblin/submit/views.py new file mode 100644 index 00000000..aa0f8121 --- /dev/null +++ b/mediagoblin/submit/views.py @@ -0,0 +1,37 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 Free Software Foundation, Inc +# +# 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/>. + + +from webob import Response, exc + +from mediagoblin.decorators import require_active_login +from mediagoblin.submit import forms as submit_forms + + +@require_active_login +def submit_start(request): + """ + First view for submitting a file. + """ + submit_form = submit_forms.SubmitStartForm() + + # render + template = request.template_env.get_template( + 'mediagoblin/submit/start.html') + return Response( + template.render( + {'request': request, + 'submit_form': submit_form})) diff --git a/mediagoblin/templates/mediagoblin/submit/start.html b/mediagoblin/templates/mediagoblin/submit/start.html new file mode 100644 index 00000000..562d9050 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/submit/start.html @@ -0,0 +1,35 @@ +{# +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 Free Software Foundation, Inc +# +# 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/>. +#} +{% extends "mediagoblin/base.html" %} + +{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %} + +{% block mediagoblin_content %} + <h2>Submit yer media</h2> + + <form action="{{ request.urlgen('mediagoblin.submit.start') }}" + method="POST" enctype="multipart/form-data"> + <table> + {{ wtforms_util.render_table(submit_form) }} + <tr> + <td></td> + <td><input type="submit" value="submit" /></td> + </tr> + </table> + </form> +{% endblock %} |