Exemple #1
0
def get_image_response(document_root=None, cache_directory=None,
                       size=(500, 500), factor=100,
                       path=None, accel_header=None):
    """helper the get an image response"""
    # FIXME cache_directory can't be None

    dummy, ext = os.path.splitext(path)

    # make sure we got an image
    if ext.lower() not in ('.png', '.jpg', '.jpeg', '.gif'):
        return HTTPNotFound()

    if PY3:
        filename = os.path.join(document_root, path)
    else:
        filename = os.path.join(document_root, path.encode('utf-8'))
    if not os.path.isfile(filename):
        return HTTPNotFound()

    if size is None:
        # get original
        return get_file_response(filename,
                                 accel_header=accel_header,
                                 document_root=document_root)

    factor = int(factor)

    # generate cached direname
    h = u'%s-%s-%s' % (path, size, factor)
    if PY3 or isinstance(h, unicode):
        h = h.encode('utf8')
    h = md5(h).hexdigest()
    d1, d2, d3 = h[0:3], h[3:6], h[6:9]

    cached = os.path.join(cache_directory, d1, d2, d3)
    if not os.path.isdir(cached):
        try:
            os.makedirs(cached)
        except OSError:
            # dir exist...?!
            pass

    cached = os.path.join(cached, os.path.basename(filename))

    if os.path.isfile(cached):
        last_modified = os.stat(filename)[stat.ST_MTIME]
        last_cached = os.stat(cached)[stat.ST_MTIME]
        if last_modified > last_cached:
            os.remove(cached)

    # generate cached thumb if not yet done
    if not os.path.isfile(cached):
        resize(filename, cached, size, factor=factor)

    return get_file_response(cached,
                             document_root=cache_directory,
                             accel_header=accel_header)
def get_image_response(document_root=None, cache_directory=None,
                       size=(500, 500), path=None, accel_header=None,system_cb=None):
    """helper the get an image response"""
    #FIXME cache_directory can't be None

    dummy, ext = os.path.splitext(path)

    # make sure we got an image
    if ext.lower() not in ('.png', '.jpg', '.jpeg', '.gif'):
        return HTTPNotFound()

    filename = os.path.join(document_root, path.encode('utf-8'))
    if not os.path.isfile(filename):
        return HTTPNotFound()

    if size is None:
        # get original
        return get_file_response(filename, accel_header=accel_header,
                                           document_root=document_root)

    # generate cached direname
    h = md5('%s-%s' % (path.encode('utf-8'), size)).hexdigest()
    d1, d2, d3 = h[0:3], h[3:6], h[6:9]

    cached = os.path.join(cache_directory, d1, d2, d3)
    if not os.path.isdir(cached):
        os.makedirs(cached)

    cached = os.path.join(cached, os.path.basename(filename))

    if os.path.isfile(cached):
        last_modified = os.stat(filename)[stat.ST_MTIME]
        last_cached = os.stat(cached)[stat.ST_MTIME]
        if last_modified > last_cached:
            os.remove(cached)

    # generate cached thumb if not yet done
    if not os.path.isfile(cached):
        resize(filename, cached, size)
        if system_cb:
            cb=system_cb
            cb=cb.replace('{file}',cached)
            cb=cb.replace('{url}',urllib.quote(cached))
            cb=cb.replace('{dir}',os.path.dirname(cached))
            os.system(cb)


    return get_file_response(cached,
                             document_root=cache_directory,
                             accel_header=accel_header)
Exemple #3
0
 def view(request):
     path = request.matchdict['path']
     path = '/'.join(path)
     filename = os.path.join(document_root, path)
     return get_file_response(filename,
                              document_root=document_root,
                              accel_header=accel_header)
Exemple #4
0
 def application(environ, start_response):
     path_info = environ['PATH_INFO'].strip('/')
     filename = os.path.join(document_root, path_info)
     return get_file_response(filename=filename,
                              document_root=document_root,
                              accel_header=accel_header)(environ,
                                                         start_response)
Exemple #5
0
 def application(environ, start_response):
     path_info = environ['PATH_INFO'].strip('/')
     filename = os.path.join(document_root, path_info)
     return get_file_response(
         filename=filename,
         document_root=document_root,
         accel_header=accel_header
     )(environ, start_response)
Exemple #6
0
 def view(request):
     path = request.matchdict['path']
     path = '/'.join(path)
     filename = os.path.join(document_root, path)
     return get_file_response(
                 filename,
                 document_root=document_root,
                 accel_header=accel_header
     )