예제 #1
0
def reupload(userid, charid, submitdata):
    submitsize = len(submitdata)
    if not submitsize:
        raise WeasylError("submitSizeZero")
    elif submitsize > 10 * _MEGABYTE:
        raise WeasylError("submitSizeExceedsLimit")

    # Select character data
    query, = define.engine.execute("""
        SELECT userid, settings FROM character WHERE charid = %(character)s AND settings !~ 'h'
    """,
                                   character=charid)

    if userid != query.userid:
        raise WeasylError("Unexpected")

    im = image.from_string(submitdata)
    submitextension = image.image_extension(im)

    # Check invalid file data
    if not submitextension:
        raise WeasylError("submitType")

    # Make submission file
    submitfile = files.make_resource(userid, charid, "char/submit",
                                     submitextension)
    files.ensure_file_directory(submitfile)
    im.write(submitfile)

    # Make cover file
    image.make_cover(
        submitfile,
        files.make_resource(userid, charid, "char/cover", submitextension))

    # Update settings
    settings = re.sub(r'[~=].', '', query.settings)
    settings += files.typeflag("submit", submitextension)
    settings += files.typeflag("cover", submitextension)
    define.engine.execute("""
        UPDATE character
           SET settings = %(settings)s
         WHERE charid = %(character)s
    """,
                          settings=settings,
                          character=charid)
예제 #2
0
파일: image.py 프로젝트: Syfaro/weasyl
def resize(filename, width, height, destination=None, animate=False):
    in_place = False
    if not destination:
        destination = filename + '.new'
        in_place = True

    im = read(filename)
    if not image_extension(im):
        raise WeasylError("FileType")

    files.ensure_file_directory(filename)
    im = correct_image_and_call(_resize, im, width, height)
    if im is not None:
        im.write(destination)
        if in_place:
            os.rename(destination, filename)

    # if there's no need to resize, in-place resize is a no-op. otherwise copy
    # the source to the destination.
    elif not in_place:
        files.copy(filename, destination)
예제 #3
0
def resize(filename, width, height, destination=None, animate=False):
    in_place = False
    if not destination:
        destination = filename + '.new'
        in_place = True

    im = read(filename)
    if not image_extension(im):
        raise WeasylError("FileType")

    files.ensure_file_directory(filename)
    im = correct_image_and_call(_resize, im, width, height)
    if im is not None:
        im.write(destination)
        if in_place:
            os.rename(destination, filename)

    # if there's no need to resize, in-place resize is a no-op. otherwise copy
    # the source to the destination.
    elif not in_place:
        files.copy(filename, destination)
예제 #4
0
def reupload(userid, charid, submitdata):
    submitsize = len(submitdata)
    if not submitsize:
        raise WeasylError("submitSizeZero")
    elif submitsize > 10 * _MEGABYTE:
        raise WeasylError("submitSizeExceedsLimit")

    # Select character data
    query, = define.engine.execute("""
        SELECT userid, settings FROM character WHERE charid = %(character)s AND settings !~ 'h'
    """, character=charid)

    if userid != query.userid:
        raise WeasylError("Unexpected")

    im = image.from_string(submitdata)
    submitextension = image.image_extension(im)

    # Check invalid file data
    if not submitextension:
        raise WeasylError("submitType")

    # Make submission file
    submitfile = files.make_resource(userid, charid, "char/submit", submitextension)
    files.ensure_file_directory(submitfile)
    im.write(submitfile)

    # Make cover file
    image.make_cover(
        submitfile, files.make_resource(userid, charid, "char/cover", submitextension))

    # Update settings
    settings = re.sub(r'[~=].', '', query.settings)
    settings += files.typeflag("submit", submitextension)
    settings += files.typeflag("cover", submitextension)
    define.engine.execute("""
        UPDATE character
           SET settings = %(settings)s
         WHERE charid = %(character)s
    """, settings=settings, character=charid)