def test_audio_video_url_media(self): """Media with both Audio files and Video files attatched should be Video type.""" try: # Create the media object media = self._new_publishable_media(u'audio-video', u'(Audio + Video)') DBSession.add(media) # Add an audio description media_file = add_new_media_file(media, None, u'http://fakesite.com/fakefile.mp3') media.update_status() # Add a video file media_file = add_new_media_file(media, None, u'http://fakesite.com/fakefile.m4v') media.update_status() # Commit + test DBSession.commit() assert media.type == VIDEO, \ "A Media object with a .m4v file and an audio file " \ "was not labelled as a video type; it was labelled %s" % \ (t, media.type) except SQLAlchemyError, e: DBSession.rollback() raise e
def _get_media(self, unique): """Return the media/mediafiles required for the Helpers tests""" try: media = self._new_publishable_media(u'media-selection-%s' % unique, u'Media Selection Test (%s)' % unique) DBSession.add(media) media_files = {} for t in ['oga', 'ogv', 'm4a', 'm4v', 'flv', 'mp3', 'xml']: media_files[t] = add_new_media_file(media, None, u'http://fakesite.com/fakefile.%s' % t) media_files['youtube'] = add_new_media_file(media, None, u'http://www.youtube.com/watch?v=3RsbmjNLQkc') media.update_status() DBSession.commit() except SQLAlchemyError, e: DBSession.rollback() raise e
def media_file_from_enclosure(enc, media, save_files=False): url = enc['href'] length = enc.get('length', 'unknown') if save_files: print "About to download %s bytes from %s" % (length, url) temp_file = tempfile.TemporaryFile() file = urllib2.urlopen(url) temp_file.write(file.read()) temp_file.seek(0) # Make a fake uploaded file object. uploaded_file = DictWithPropertyAccessors(file=temp_file, filename=url) media_file = add_new_media_file(media, uploaded_file, url) temp_file.close() file.close() else: media_file = add_new_media_file(media, None, url) if message: raise Exception(message) return media_file
def add_file(self, id, file=None, url=None, **kwargs): """Save action for the :class:`~mediacore.forms.admin.media.AddFileForm`. Creates a new :class:`~mediacore.model.media.MediaFile` from the uploaded file or the local or remote URL. :param id: Media ID. If ``"new"`` a new Media stub is created. :type id: :class:`int` or ``"new"`` :param file: The uploaded file :type file: :class:`cgi.FieldStorage` or ``None`` :param url: A URL to a recognizable audio or video file :type url: :class:`unicode` or ``None`` :rtype: JSON dict :returns: success bool message Error message, if unsuccessful media_id The :attr:`~mediacore.model.media.Media.id` which is important if new media has just been created. file_id The :attr:`~mediacore.model.media.MediaFile.id` for the newly created file. edit_form The rendered XHTML :class:`~mediacore.forms.admin.media.EditFileForm` for this file. status_form The rendered XHTML :class:`~mediacore.forms.admin.media.UpdateStatusForm` """ if id == 'new': media = Media() user = request.environ['repoze.who.identity']['user'] media.author = Author(user.display_name, user.email_address) # Create a temp stub until we can set it to something meaningful timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S') media.title = u'Temporary stub %s' % timestamp media.slug = get_available_slug(Media, '_stub_' + timestamp) DBSession.add(media) DBSession.flush() else: media = fetch_row(Media, id) try: media_file = add_new_media_file(media, file, url) except Invalid, e: DBSession.rollback() data = dict( success = False, message = e.message, )
def test_captioned_url_media(self): """Media with only subtitles attatched should be None type.""" try: for t in self.caption_types: media = self._new_publishable_media(u'caption-%s' % t, u'%s (Captioned)' % t.upper()) DBSession.add(media) media_file = add_new_media_file(media, None, u'http://fakesite.com/fakefile.%s' % t) media.update_status() DBSession.commit() assert media.type == None, \ "A Media object with only an .%s file associated was " \ "not labelled as a 'None' type; it was labelled %s" % \ (t, media.type) except SQLAlchemyError, e: DBSession.rollback() raise e
def test_audio_description_url_media(self): """Media with only Audio Descriptions attatched should be None type.""" try: for t in self.audio_types: media = self._new_publishable_media(u'description-%s' % t, u'%s (Audio Description)' % t.upper()) DBSession.add(media) media_file = add_new_media_file(media, None, u'http://fakesite.com/fakefile.%s' % t) media_file.type = AUDIO_DESC media.update_status() DBSession.commit() assert media.type == None, \ "A Media object with only an Audio Description file " \ "associated was not labelled as a None type; it " \ "was labelled %s" % (t, media.type) except SQLAlchemyError, e: DBSession.rollback() raise e