def _to_python(self, value, state=None): try: return helpers.duration_to_seconds(value) except ValueError: msg = _('Bad duration formatting, use Hour:Min:Sec') # Colons have special meaning in error messages msg.replace(':', ':') raise Invalid(msg, value, state)
def _to_python(self, value, state=None): try: return helpers.duration_to_seconds(value) except ValueError: msg = _('Bad duration formatting, use Hour:Min:Sec') # Colons have special meaning in error messages msg.replace(':', ':') raise formencode.Invalid(msg, value, state)
def save(self, id, slug, title, author_name, author_email, description, notes, details, podcast, tags, topics, delete=None, **kwargs): """Save changes or create a new :class:`~mediacore.model.media.Media` instance. Form handler the :meth:`edit` action and the :class:`~mediacore.forms.media.MediaForm`. Redirects back to :meth:`edit` after successful editing and :meth:`index` after successful deletion. """ media = fetch_row(Media, id, incl_trash=True) if delete: media.status.add('trash') DBSession.add(media) DBSession.flush() redirect(action='index', id=None) if id == 'new': media.status = 'draft,unencoded,unreviewed' media.slug = get_available_slug(Media, slug, media) media.title = title media.author = Author(author_name, author_email) media.description = helpers.clean_admin_xhtml(description) media.notes = notes media.duration = helpers.duration_to_seconds(details['duration']) media.podcast_id = podcast media.set_tags(tags) media.set_topics(topics) media.update_status() DBSession.add(media) DBSession.flush() redirect(action='edit', id=media.id)
def _to_python(self, value, state=None): try: return helpers.duration_to_seconds(value) except ValueError: raise formencode.Invalid(_('Please use the format HH:MM:SS'), value, state)
def media_from_entry(e, tags=False, save_files=False): # Get tags as a list of unicode objects. tags = [t['term'] for t in e['tags']] # Assume not explicit. explicit = 0 if 'itunes_explicit' in e: explicit = e['itunes_explicit'] # Find the duration, if it exists duration = u'' if 'itunes_duration' in e: try: duration = e['itunes_duration'] duration = duration_to_seconds(duration) except ValueError: duration = None # Find the first <img> tag in the summary, if there is one image = None m = img_regex.match(e['summary']) if m is not None: image = m.group(1)[1:-1] title = e['title'] slug = slugify(title) author_name = u"PLACEHOLDER NAME" author_email = u"*****@*****.**" if 'author_detail' in e: if 'name' in e['author_detail']: author_name = e['author_detail']['name'] if 'email' in e['author_detail']: author_email = e['author_detail']['email'] year, month, day, hour, minute, second = e['updated_parsed'][:6] updated = datetime(year, month, day, hour, minute, second) media = Media() media.slug = get_available_slug(Media, slug, media) media.title = e['title'] media.author = Author(author_name, author_email) media.description = e['summary'] media.notes = u'' if tags: media.set_tags(tags) else: media.set_categories(tags) media.publish_on = updated media.created_on = updated media.publishable = True media.reviewed = True media.duration = duration DBSession.add(media) DBSession.flush() # Create thumbs from image, or default thumbs created_images = False if image: temp_imagefile = tempfile.TemporaryFile() imagefile = urllib2.urlopen(image) temp_imagefile.write(imagefile.read()) temp_imagefile.seek(0) filename = urlparse.urlparse(image)[2] create_thumbs_for(media, temp_imagefile, filename) created_images = True if not created_images: create_default_thumbs_for(media) print "Loaded episode:", media # now add all of the files. for enc in e['enclosures']: mf = media_file_from_enclosure(enc, media, save_files) print "Loaded media file:", mf media.update_status() return media
def edit_file(self, id, file_id, file_type=None, duration=None, delete=None, **kwargs): """Save action for the :class:`~mediacore.forms.admin.media.EditFileForm`. Changes or delets a :class:`~mediacore.model.media.MediaFile`. TODO: Use the form validators to validate this form. We only POST one field at a time, so the validate decorator doesn't work, because it doesn't work for partial validation, because none of the kwargs are updated if an Invalid exception is raised by any validator. :param id: Media ID :type id: :class:`int` :rtype: JSON dict :returns: success bool message Error message, if unsuccessful status_form Rendered XHTML for the status form, updated to reflect the changes made. """ media = fetch_row(Media, id) data = dict(success=False) try: file = [file for file in media.files if file.id == file_id][0] except IndexError: file = None if file is None: data['message'] = 'File "%s" does not exist.' % file_id elif file_type: file.type = file_type DBSession.add(file) data['success'] = True elif duration is not None: try: duration = helpers.duration_to_seconds(duration) except ValueError: data['message'] = 'Bad duration formatting, use Hour:Min:Sec' else: media.duration = duration DBSession.add(media) data['success'] = True data['duration'] = helpers.duration_from_seconds(duration) elif delete: file_path = file.file_path DBSession.delete(file) transaction.commit() if file_path: helpers.delete_files([file_path], 'media') media = fetch_row(Media, id) data['success'] = True else: data['message'] = 'No action to perform.' if data['success']: data['file_type'] = file.type media.update_status() DBSession.add(media) DBSession.flush() # Return the rendered widget for injection status_form_xhtml = unicode(update_status_form.display( action=url_for(action='update_status'), media=media)) data['status_form'] = status_form_xhtml return data
def _to_python(self, value, state=None): try: return helpers.duration_to_seconds(value) except ValueError: raise formencode.Invalid( _('Bad duration formatting, use Hour:Min:Sec'), value, state)