Пример #1
0
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
Пример #2
0
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