Example #1
0
def test_001():
    qs = {"a": "a"}
    t.eq(util.url_encode(qs), "a=a")
    qs = {"a": "a", "b": "b"}
    t.eq(util.url_encode(qs), "a=a&b=b")
    qs = {"a": 1}
    t.eq(util.url_encode(qs), "a=1")
    qs = {"a": [1, 2]}
    t.eq(util.url_encode(qs), "a=1&a=2")
    qs = {"a": [1, 2], "b": [3, 4]}
    t.eq(util.url_encode(qs), "a=1&a=2&b=3&b=4")
    qs = {"a": lambda: 1}
    t.eq(util.url_encode(qs), "a=1")
Example #2
0
def test_001():
    qs = {'a': "a"}
    t.eq(util.url_encode(qs), "a=a")
    qs = {'a': 'a', 'b': 'b'}
    t.eq(util.url_encode(qs), "a=a&b=b")
    qs = {'a': 1}
    t.eq(util.url_encode(qs), "a=1")
    qs = {'a': [1, 2]}
    t.eq(util.url_encode(qs), "a=1&a=2")
    qs = {'a': [1, 2], 'b': [3, 4]}
    t.eq(util.url_encode(qs), "a=1&a=2&b=3&b=4")
    qs = {'a': lambda: 1}
    t.eq(util.url_encode(qs), "a=1")
Example #3
0
    def _make_uri(self, base, *path, **query):
        """Assemble a uri based on a base, any number of path segments, 
        and query string parameters.

        """
        base_trailing_slash = False
        if base and base.endswith("/"):
            base_trailing_slash = True
            base = base[:-1]
        retval = [base]

        # build the path
        _path = []
        trailing_slash = False       
        for s in path:
            if s is not None and isinstance(s, basestring):
                if len(s) > 1 and s.endswith('/'):
                    trailing_slash = True
                else:
                    trailing_slash = False
                _path.append(util.url_quote(s.strip('/'), self.charset, self.safe))
                       
        path_str =""
        if _path:
            path_str = "/".join([''] + _path)
            if trailing_slash:
                path_str = path_str + "/" 
        elif base_trailing_slash:
            path_str = path_str + "/" 
            
        if path_str:
            retval.append(path_str)

        params_str = util.url_encode(query, self.charset, self.encode_keys)
        if params_str:
            retval.extend(['?', params_str])

        return ''.join(retval)
Example #4
0
def form_encode(obj, charset="utf8"):
    encoded = url_encode(obj, charset=charset)
    return to_bytestring(encoded)
Example #5
0
def form_encode(obj, charset="utf8"):
    encoded = url_encode(obj, charset=charset)
    return to_bytestring(encoded)
Example #6
0
    def read(self):
        headers = self.parse_headers()

        length = headers.get("CONTENT_LENGTH")
        if self.line["body"] and self.line["body"] != "undefined":
            length = len(self.line["body"])
            body = StringIO.StringIO(self.line["body"])

        else:
            body = StringIO.StringIO()

        # path
        script_name, path_info = self.line['path'][:2], self.line['path'][2:]
        if path_info:
            path_info = "/%s" % "/".join(path_info)
        else:
            path_info = ""
        script_name = "/%s" % "/".join(script_name)

        # build query string
        args = []
        query_string = None
        for k, v in self.line["query"].items():
            if v is None:
                continue
            else:
                args.append((k, v))
        if args: query_string = url_encode(dict(args))

        # raw path could be useful
        path = "%s%s" % (path_info, query_string)

        # get server address
        if ":" in self.line["headers"]["Host"]:
            server_address = self.line["headers"]["Host"].split(":")
        else:
            server_address = (self.line["headers"]["Host"], 80)

        environ = {
            "wsgi.url_scheme": 'http',
            "wsgi.input": body,
            "wsgi.errors": StringIO.StringIO(),
            "wsgi.version": (1, 0),
            "wsgi.multithread": False,
            "wsgi.multiprocess": True,
            "wsgi.run_once": False,
            "SCRIPT_NAME": script_name,
            "SERVER_SOFTWARE": self.SERVER_VERSION,
            "COUCHDB_INFO": self.line["info"],
            "COUCHDB_REQUEST": self.line,
            "REQUEST_METHOD": self.line["verb"].upper(),
            "PATH_INFO": unquote(path_info),
            "QUERY_STRING": query_string,
            "RAW_URI": path,
            "CONTENT_TYPE": headers.get('CONTENT-TYPE', ''),
            "CONTENT_LENGTH": length,
            "REMOTE_ADDR": self.line['peer'],
            "REMOTE_PORT": 0,
            "SERVER_NAME": server_address[0],
            "SERVER_PORT": int(server_address[1]),
            "SERVER_PROTOCOL": "HTTP/1.1"
        }

        for key, value in headers.items():
            key = 'HTTP_' + key.replace('-', '_')
            if key not in ('HTTP_CONTENT_TYPE', 'HTTP_CONTENT_LENGTH'):
                environ[key] = value

        return environ
Example #7
0
    def read(self):
        headers = self.parse_headers()

        length = headers.get("CONTENT_LENGTH")
        if self.line["body"] and self.line["body"] != "undefined":
            length = len(self.line["body"])
            body = StringIO.StringIO(self.line["body"])

        else:
            body = StringIO.StringIO()

        # path
        script_name, path_info = self.line["path"][:2], self.line["path"][2:]
        if path_info:
            path_info = "/%s" % "/".join(path_info)
        else:
            path_info = ""
        script_name = "/%s" % "/".join(script_name)

        # build query string
        args = []
        query_string = None
        for k, v in self.line["query"].items():
            if v is None:
                continue
            else:
                args.append((k, v))
        if args:
            query_string = url_encode(dict(args))

        # raw path could be useful
        path = "%s%s" % (path_info, query_string)

        # get server address
        if ":" in self.line["headers"]["Host"]:
            server_address = self.line["headers"]["Host"].split(":")
        else:
            server_address = (self.line["headers"]["Host"], 80)

        environ = {
            "wsgi.url_scheme": "http",
            "wsgi.input": body,
            "wsgi.errors": StringIO.StringIO(),
            "wsgi.version": (1, 0),
            "wsgi.multithread": False,
            "wsgi.multiprocess": True,
            "wsgi.run_once": False,
            "SCRIPT_NAME": script_name,
            "SERVER_SOFTWARE": self.SERVER_VERSION,
            "COUCHDB_INFO": self.line["info"],
            "COUCHDB_REQUEST": self.line,
            "REQUEST_METHOD": self.line["verb"].upper(),
            "PATH_INFO": unquote(path_info),
            "QUERY_STRING": query_string,
            "RAW_URI": path,
            "CONTENT_TYPE": headers.get("CONTENT-TYPE", ""),
            "CONTENT_LENGTH": length,
            "REMOTE_ADDR": self.line["peer"],
            "REMOTE_PORT": 0,
            "SERVER_NAME": server_address[0],
            "SERVER_PORT": int(server_address[1]),
            "SERVER_PROTOCOL": "HTTP/1.1",
        }

        for key, value in headers.items():
            key = "HTTP_" + key.replace("-", "_")
            if key not in ("HTTP_CONTENT_TYPE", "HTTP_CONTENT_LENGTH"):
                environ[key] = value

        return environ
Example #8
0
def format_dict2str(kwargs):
    dct = dict([(key, value) for key,value in kwargs.items() if not value == u'' and not value == [u'']])
    return url_encode(dct)