First crack at basic license support.
authorAaron Williamson <aaron@copiesofcopies.org>
Tue, 17 Jan 2012 05:33:55 +0000 (00:33 -0500)
committerAaron Williamson <aaron@copiesofcopies.org>
Tue, 17 Jan 2012 05:33:55 +0000 (00:33 -0500)
mediagoblin/db/models.py
mediagoblin/edit/forms.py
mediagoblin/edit/views.py
mediagoblin/submit/forms.py
mediagoblin/submit/views.py
mediagoblin/templates/mediagoblin/user_pages/media.html

index 0f5174cc71a3632c493c546af76fb84daa7a715c..e085840e7ce3ab9e25deddbb72bc62edec11c13b 100644 (file)
@@ -24,6 +24,7 @@ from mediagoblin.db import migrations
 from mediagoblin.db.util import ASCENDING, DESCENDING, ObjectId
 from mediagoblin.tools.pagination import Pagination
 from mediagoblin.tools import url, common
+from mediagoblin.tools import licenses
 
 ###################
 # Custom validators
@@ -158,6 +159,8 @@ class MediaEntry(Document):
         "unprocessed": uploaded but needs to go through processing for display
         "processed": processed and able to be displayed
 
+     - license: URI for entry's license
+
      - queued_media_file: storage interface style filepath describing a file
        queued for processing.  This is stored in the mg_globals.queue_store
        storage system.
@@ -174,6 +177,7 @@ class MediaEntry(Document):
 
      - fail_error: path to the exception raised 
      - fail_metadata: 
+
     """
     __collection__ = 'media_entries'
 
@@ -189,6 +193,7 @@ class MediaEntry(Document):
         'plugin_data': dict, # plugins can dump stuff here.
         'tags': [dict],
         'state': unicode,
+        'license': unicode, # License URI
 
         # For now let's assume there can only be one main file queued
         # at a time
@@ -304,6 +309,10 @@ class MediaEntry(Document):
         if self['fail_error']:
             return common.import_component(self['fail_error'])
 
+    def get_license_data(self):
+        """Return license dict for requested license"""
+        return licenses.SUPPORTED_LICENSES[self['license']]
+
 
 class MediaComment(Document):
     """
index 7e71722c968cd68eba4c6b2126d1c702d9af5275..3d1d9fd4a751c57814134d34cbd6173f86260f3a 100644 (file)
@@ -18,6 +18,7 @@ import wtforms
 
 from mediagoblin.tools.text import tag_length_validator, TOO_LONG_TAG_WARNING
 from mediagoblin.tools.translate import fake_ugettext_passthrough as _
+from mediagoblin.tools.licenses import licenses_as_choices
 
 class EditForm(wtforms.Form):
     title = wtforms.TextField(
@@ -33,7 +34,9 @@ class EditForm(wtforms.Form):
         description=_(
             "The title part of this media's URL. "
             "You usually don't need to change this."))
-
+    license = wtforms.SelectField(
+        _('License'),
+        choices=licenses_as_choices())
 
 class EditProfileForm(wtforms.Form):
     bio = wtforms.TextAreaField(
index a6ddb553844b188181448e46ec4817dff137d156..f92eabace2593483bfe81d685a437c9a7e8a0039 100644 (file)
@@ -34,6 +34,7 @@ from mediagoblin.tools.translate import pass_to_ugettext as _
 from mediagoblin.tools.text import (
     clean_html, convert_to_tag_list_of_dicts,
     media_tags_as_string, cleaned_markdown_conversion)
+from mediagoblin.tools.licenses import SUPPORTED_LICENSES
 
 @get_user_media_entry
 @require_active_login
@@ -45,7 +46,8 @@ def edit_media(request, media):
         title=media['title'],
         slug=media['slug'],
         description=media['description'],
-        tags=media_tags_as_string(media['tags']))
+        tags=media_tags_as_string(media['tags']),
+        license=media['license'])
 
     form = forms.EditForm(
         request.POST,
@@ -71,6 +73,10 @@ def edit_media(request, media):
             media['description_html'] = cleaned_markdown_conversion(
                 media['description'])
 
+            media['license'] = (
+                unicode(request.POST.get('license'))
+                or '')
+
             media['slug'] = unicode(request.POST['slug'])
             media.save()
 
index 25d6e304d47f27acaa413747c5e3de3b4f00211b..be85b9a9d983d815fee7b70a1f3ef850611bfeff 100644 (file)
@@ -19,7 +19,7 @@ import wtforms
 
 from mediagoblin.tools.text import tag_length_validator
 from mediagoblin.tools.translate import fake_ugettext_passthrough as _
-
+from mediagoblin.tools.licenses import licenses_as_choices
 
 class SubmitStartForm(wtforms.Form):
     file = wtforms.FileField(_('File'))
@@ -31,3 +31,6 @@ class SubmitStartForm(wtforms.Form):
     tags = wtforms.TextField(
         _('Tags'),
         [tag_length_validator])
+    license = wtforms.SelectField(
+        _('License'),
+        choices=licenses_as_choices())
index 7134235e11cf54231cdf58447c2bb82e720c4e8d..ecfa99430ededa1ab00f7652e3e8946b3c718871 100644 (file)
@@ -60,6 +60,10 @@ def submit_start(request):
             entry['description'] = unicode(request.POST.get('description'))
             entry['description_html'] = cleaned_markdown_conversion(
                 entry['description'])
+
+            entry['license'] = (
+                unicode(request.POST.get('license'))
+                or '')
             
             entry['media_type'] = u'image' # heh
             entry['uploader'] = request.user['_id']
index 11fa72cf86de52fc47779ac5e178115bf6fcfea9..efbd7e53ba733e3ba510e2195b16413894d4763d 100644 (file)
       {% if media.tags %}
         {% include "mediagoblin/utils/tags.html" %}
       {% endif %}
+
+      {% include "mediagoblin/utils/license.html" %}
     </div>
   {% else %}
     <p>{% trans %}Sorry, no such media found.{% endtrans %}<p/>