def _add_new_media_file(media, original_filename, file): # FIXME: I think this will raise a KeyError if the uploaded # file doesn't have an extension. file_ext = os.path.splitext(original_filename)[1].lower()[1:] # set the file paths depending on the file type media_file = MediaFile() media_file.display_name = original_filename media_file.container = guess_container_format(file_ext) media_file.type = guess_media_type(media_file.container) # Small files are stored in memory and do not have a tmp file w/ fileno if hasattr(file, 'fileno'): media_file.size = os.fstat(file.fileno())[6] else: # The file may contain multi-byte characters, so we must seek instead of count chars file.seek(0, os.SEEK_END) media_file.size = file.tell() file.seek(0) # update media relations media.files.append(media_file) # add the media file (and its media, if new) to the database to get IDs DBSession.add(media_file) DBSession.flush() # copy the file to its permanent location file_name = '%d_%d_%s.%s' % (media.id, media_file.id, media.slug, file_ext) file_url = _store_media_file(file, file_name) media_file.file_name = file_name return media_file
def media_file_from_filename(filename): """Create and return a MediaFile object representing a given filename. Does not store the file, or add the created MediaFile to the database. """ name, ext, container = base_ext_container_from_uri(filename) # set the file paths depending on the file type media_file = MediaFile() media_file.display_name = '%s.%s' % (name, container) media_file.container = container media_file.type = guess_media_type(ext) # File has not been stored. It has neither URL nor Filename. media_file.url = None media_file.file_name = None return media_file