def save_media_obj(self, name, email, title, description, tags, uploaded_file, url): # create our media object as a status-less placeholder initially media_obj = Media() media_obj.author = Author(name, email) media_obj.title = title media_obj.slug = get_available_slug(Media, title) media_obj.description = description if request.settings['wording_display_administrative_notes']: media_obj.notes = request.settings['wording_administrative_notes'] media_obj.set_tags(tags) # Give the Media object an ID. DBSession.add(media_obj) DBSession.flush() # Create a MediaFile object, add it to the media_obj, and store the file permanently. media_file = add_new_media_file(media_obj, file=uploaded_file, url=url) # The thumbs may have been created already by add_new_media_file if not has_thumbs(media_obj): create_default_thumbs_for(media_obj) media_obj.update_status() DBSession.flush() return media_obj
def createMediaItem(self, title, author_email=None, author_name=None, slug=None, tags=None, podcast_id=None, category_ids=None, meta=None, **kwargs): mediaItem = Media() log.info("createMediaItem({title})".format(title=title)) if not slug: slug = title elif slug.startswith('_stub_'): slug = slug[len('_stub_'):] if slug != mediaItem.slug: mediaItem.slug = get_available_slug(Media, slug, mediaItem) if podcast_id: podcast_id = int(podcast_id) else: podcast_id = 0 if not meta: meta = {} else: try: meta = json.loads(meta) except Exception as e: return { "success": False, "message": "Invalid JSON object given for `meta`" } mediaItem.title = title mediaItem.author = Author(author_name or "No Author", author_email or "No Email") mediaItem.podcast_id = podcast_id or None mediaItem.set_tags(tags) mediaItem.set_categories(category_ids) mediaItem.update_status() mediaItem.meta = meta DBSession.add(mediaItem) DBSession.flush() return {"success": True, "id": mediaItem.id}
def createMediaItem( self, title, author_email=None, author_name=None, slug=None, tags=None, podcast_id=None, category_ids=None, meta=None, **kwargs ): mediaItem = Media() log.info("createMediaItem({title})".format(title=title)) if not slug: slug = title elif slug.startswith("_stub_"): slug = slug[len("_stub_") :] if slug != mediaItem.slug: mediaItem.slug = get_available_slug(Media, slug, mediaItem) if podcast_id: podcast_id = int(podcast_id) else: podcast_id = 0 if not meta: meta = {} else: try: meta = json.loads(meta) except Exception as e: return {"success": False, "message": "Invalid JSON object given for `meta`"} mediaItem.title = title mediaItem.author = Author(author_name or "No Author", author_email or "No Email") mediaItem.podcast_id = podcast_id or None mediaItem.set_tags(tags) mediaItem.set_categories(category_ids) mediaItem.update_status() mediaItem.meta = meta DBSession.add(mediaItem) DBSession.flush() return {"success": True, "id": mediaItem.id}
def _save_media_obj(self, name, email, title, description, tags, file, url): # create our media object as a status-less placeholder initially media_obj = Media() media_obj.author = Author(name, email) media_obj.title = title media_obj.slug = get_available_slug(Media, title) media_obj.description = description media_obj.notes = fetch_setting('wording_additional_notes') media_obj.set_tags(tags) # Create a media object, add it to the media_obj, and store the file permanently. if file is not None: media_file = _add_new_media_file(media_obj, file.filename, file.file) else: media_file = MediaFile() url = unicode(url) embed = parse_embed_url(url) if embed: media_file.type = embed['type'] media_file.container = embed['container'] media_file.embed = embed['id'] media_file.display_name = '%s ID: %s' % \ (embed['container'].capitalize(), media_file.embed) else: # Check for types we can play ourselves ext = os.path.splitext(url)[1].lower()[1:] container = guess_container_format(ext) if container in accepted_extensions(): media_file.type = guess_media_type(container) media_file.container = container media_file.url = url media_file.display_name = os.path.basename(url) else: # Trigger a validation error on the whole form. raise formencode.Invalid('Please specify a URL or upload a file below.', None, None) media_obj.files.append(media_file) # Add the final changes. media_obj.update_status() DBSession.add(media_obj) DBSession.flush() create_default_thumbs_for(media_obj) return media_obj
def _save_media_obj(self, name, email, title, description, tags, file, url): # create our media object as a status-less placeholder initially media_obj = Media() media_obj.author = Author(name, email) media_obj.title = title media_obj.slug = get_available_slug(Media, title) media_obj.description = description media_obj.notes = fetch_setting('wording_additional_notes') media_obj.set_tags(tags) # Create a media object, add it to the media_obj, and store the file permanently. if file is not None: media_file = _add_new_media_file(media_obj, file.filename, file.file) else: # FIXME: For some reason the media.type isn't ever set to video # during this request. On subsequent requests, when # media_obj.update_type() is called, it is set properly. # This isn't too serious an issue right now because # it is called the first time a moderator goes to review # the new media_obj. media_file = MediaFile() url = unicode(url) for type, info in external_embedded_containers.iteritems(): match = info['pattern'].match(url) if match: media_file.type = guess_media_type(type) media_file.container = type media_file.embed = match.group('id') media_file.display_name = type.capitalize() + ' ID: ' + media_file.embed break else: # Trigger a validation error on the whole form. raise formencode.Invalid('Please specify a URL or upload a file below.', None, None) media_obj.files.append(media_file) # Add the final changes. media_obj.update_type() media_obj.update_status() DBSession.add(media_obj) DBSession.flush() create_default_thumbs_for(media_obj) return media_obj
def _save_media_obj(self, name, email, title, description, tags, file): # cope with anonymous posters if name is None: name = 'Anonymous' # create our media object as a status-less placeholder initially media_obj = Media() media_obj.author = Author(name, email) media_obj.title = title media_obj.slug = get_available_slug(Media, title) media_obj.description = helpers.clean_xhtml(description) media_obj.status = 'draft,unencoded,unreviewed' media_obj.notes = helpers.fetch_setting('wording_additional_notes') media_obj.set_tags(tags) # Create a media object, add it to the media_obj, and store the file permanently. media_file = _add_new_media_file(media_obj, file.filename, file.file) # Add the final changes. media_obj.update_type() media_obj.update_status() DBSession.add(media_obj) return media_obj
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