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")
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")
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)
def form_encode(obj, charset="utf8"): encoded = url_encode(obj, charset=charset) return to_bytestring(encoded)
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
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
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)