Ejemplo n.º 1
0
def image_handle(environ, start_response):
    """main url process"""
    path = environ.get('PATH_INFO', '')
    image_url_regex = r'/([a-z0-9]{2})/([a-z0-9]{2})/([a-z0-9]{19,36})(-[sc]\d{2,4})?\.(gif|jpg|jpeg|png)$'
    match = re.search(image_url_regex, path)
    #print(image_url_regex, path, match)
    if match is not None:
        ids = match.groups()
        #print(ids)
        id = '{0}{1}{2}'.format(*ids)
        from store import ImSto
        imsto = ImSto()
        file = imsto.get(id)
        if file is None:
            imsto.close()
            return not_found(environ, start_response)

        org_path = '{0}/{1}/{2}.{4}'.format(*ids)
        org_file = '{0}/{1}'.format(THUMB_ROOT, org_path)
        if not os.path.exists(org_file):
            save_file(file, org_file)
        if ids[3] is None:
            dst_path = org_path
            dst_file = org_file
        else:
            dst_path = '{0}/{1}/{2}{3}.{4}'.format(*ids)
            dst_file = '{0}/{1}'.format(THUMB_ROOT, dst_path)
            #print(ids[3][1:])
            size = int(ids[3][2:])
            if size not in SUPPORTED_SIZE:
                print('unsupported size: {0}'.format(size))
                imsto.close()
                return not_found(environ, start_response)
            thumb_image(org_file, size, dst_file)
        #print(dst_file)
        server_soft = environ.get('SERVER_SOFTWARE', '')
        if server_soft[:5] == 'nginx' and os.name != 'nt':
            imsto.close()
            start_response(
                '200 OK',
                [('X-Accel-Redirect', '{0}/{1}'.format(THUMB_PATH, dst_path))])
            return []
        #print(file.type)
        headers = [('Content-Type', str(file.type)),
                   ('Content-Length', '{0.length}'.format(file)),
                   ('Via', 'imsto')]
        #print(headers)
        start_response('200 OK', headers)
        # TODO: response file content
        #data = file.read()
        imsto.close()
        #return [data]
        fd = open(dst_file, 'r')
        return environ['wsgi.file_wrapper'](fd, 4096)

    return not_found(environ, start_response)
Ejemplo n.º 2
0
def manage(environ, start_response):
    path_info = environ.get('PATH_INFO', '')

    man_regex = r'^/([A-Za-z]+)/(env|Gallery|Stored)'
    match = re.search(man_regex, path_info)
    #print('match: {0}'.format(match))
    if match is None:
        return not_found(environ, start_response)

    action = match.groups()[1]
    if (action == 'Gallery'):
        from cgi import FieldStorage
        form = FieldStorage(environ=environ)
        limit = 20
        start = 0
        if form.has_key("page") and form["page"].value != "":
            page = int(form["page"].value)
            if page < 1:
                page = 1
            start = limit * (page - 1)

        start_response('200 OK', [('Content-type', 'text/plain')])

        imsto = ImSto()
        gallery = imsto.browse(limit, start)
        import datetime
        dthandler = lambda obj: obj.isoformat() if isinstance(
            obj, datetime.datetime) else None
        if hasattr(imsto, 'close'):
            imsto.close()
        return [json.dumps(gallery, default=dthandler)]
    elif (action == 'Stored'):
        return stored_process(environ, start_response)
        #start_response('200 OK', [('Content-type', 'text/plain')])
        #return ['Stored']
    elif (action == 'env'):
        from _respond import print_env
        return print_env(environ, start_response)

    start_response('200 OK', [('Content-type', 'text/plain')])
    return [path_info]
Ejemplo n.º 3
0
def stored_process(environ, start_response):
    from cgi import FieldStorage
    form = FieldStorage(environ=environ)
    #print(form.keys())
    start_response('200 Ok', [('Content-type', 'text/javascript')])
    method = environ['REQUEST_METHOD'].upper()
    if method == 'GET' or method == 'HEAD':
        return [json.dumps([False, 'bad request'])]
    oper = form['oper']
    print(oper)
    from store import ImSto
    imsto = ImSto()
    if oper.value == 'delete':
        id = form['id']
        return [json.dumps(imsto.delete(id.value))]
    if oper.value == 'add':
        new_file = form['new_file']
        if new_file is None:
            return [json.dumps([False, 'invalid upload field'])]
        print(type(new_file))
        result = []
        if type(new_file) == type([]):
            for f in new_file:
                print('%r %r %r %r %r %r' % (f.name, f.filename, f.type,
                                             f.disposition, f.file, f.length))
                id = imsto.store(f.file, ctype=f.type, name=f.filename)
                print('new_id: %r' % id)
                result.append(id)
        else:
            f = new_file
            print('single file %r %r' % (f.name, f.filename))
            id = imsto.store(f.file, ctype=f.type, name=f.filename)
            print('new_id: %r' % id)
            result.append(id)
        if hasattr(imsto, 'close'):
            imsto.close()

        return [json.dumps(result)]
    else:
        return [json.dumps([False, 'invalid operation'])]
Ejemplo n.º 4
0
def main(argv=None):
    if argv is None:
        argv = sys.argv

    try:
        try:
            opts, args = getopt.getopt(argv[1:], "hi:q:lt:v", [
                "help", "import=", "id=", "list", "test", "verbose", "limit=",
                "start="
            ])
        except getopt.error, msg:
            raise Usage(msg)

        #print(opts)
        #print(args)
        action = None
        store_file = None
        # option processing
        for option, value in opts:
            if option == "-v":
                verbose = True
            if option in ("-h", "--help"):
                raise Usage(help_message)
            if option in ("-i", "--import"):
                store_file = value
                print('store file: {0}'.format(store_file))
                action = 'import'
            elif option in ("-l", "--list"):
                action = 'list'
            elif option in ("-t", "--test"):
                action = 'test'
                filename = value
            elif option in ("-q", "--id"):
                action = 'get'
                id = value
            else:
                pass

        print('action: {}'.format(action))
        if (action == 'list'):
            imsto = ImSto()
            gallery = imsto.browse()
            for img in gallery['items']:
                #print(img)
                print("{0[filename]}\t{0[length]:8,d}".format(img))
            return 0
        elif (action == 'get') and id is not None:
            imsto = ImSto()
            if not imsto.getFs().exists(id):
                print('not found')
                return 1
            gf = imsto.get(id)
            #print(gf)
            print("found: {0.name}\t{0.length}".format(gf))
            return 0
        elif (action == 'test'):
            print('filename: %r' % filename)
            fp = open(filename, 'rb')
            h = fp.read(32)
            print(getImageType(h))
            return 0