- filename = request.POST['file'].filename
-
- # create entry and save in database
- entry = request.db.MediaEntry()
- entry['_id'] = ObjectId()
- entry['title'] = (
- unicode(request.POST['title'])
- or unicode(splitext(filename)[0]))
-
- entry['description'] = unicode(request.POST.get('description'))
- entry['description_html'] = cleaned_markdown_conversion(
- entry['description'])
-
- entry['media_type'] = u'image' # heh
- entry['uploader'] = request.user['_id']
-
- # Process the user's folksonomy "tags"
- entry['tags'] = convert_to_tag_list_of_dicts(
- request.POST.get('tags'))
-
- # Generate a slug from the title
- entry.generate_slug()
-
- # Now store generate the queueing related filename
- queue_filepath = request.app.queue_store.get_unique_filepath(
- ['media_entries',
- unicode(entry['_id']),
- secure_filename(filename)])
-
- # queue appropriately
- queue_file = request.app.queue_store.get_file(
- queue_filepath, 'wb')
-
- with queue_file:
- queue_file.write(request.POST['file'].file.read())
-
- # Add queued filename to the entry
- entry['queued_media_file'] = queue_filepath
-
- # We generate this ourselves so we know what the taks id is for
- # retrieval later.
- # (If we got it off the task's auto-generation, there'd be a risk of
- # a race condition when we'd save after sending off the task)
- task_id = unicode(uuid.uuid4())
- entry['queued_task_id'] = task_id
-
- # Save now so we have this data before kicking off processing
- entry.save(validate=True)
-
- # Pass off to processing
- #
- # (... don't change entry after this point to avoid race
- # conditions with changes to the document via processing code)