Exemplo n.º 1
0
def safe_request(prog, method, *args, arg_encoding="UTF-8", out=stdout):
    parser = ArgumentParser(prog, usage="%(prog)s {:s} [options] uri [uri ...]".format(method))
    parser.add_argument("-1", "--single-receiver", action="store_true")
    parser.add_argument("-r", "--rx-buffer-size", metavar="SIZE", default=4194304)
    parser.add_argument("-v", "--verbose", action="store_true")
    parser.add_argument("-vv", "--very-verbose", action="store_true")
    parser.add_argument("uri", nargs="+")
    parsed = parser.parse_args(args)
    if parsed.verbose:
        watch("shortwave.http", level=INFO)
    if parsed.very_verbose:
        watch("shortwave.transmission", level=DEBUG)
    if parsed.single_receiver:
        receiver = HTTP.Rx()
        receiver.start()
    else:
        receiver = None

    connections = []
    http = None
    try:
        for uri in parsed.uri:
            scheme, authority, path, query, fragment = parse_uri(uri.encode(arg_encoding))
            if scheme and scheme != b"http":
                raise ValueError("Non-HTTP URI: %r" % uri)
            if authority:
                http = HTTP(authority, receiver, rx_buffer_size=parsed.rx_buffer_size)
                connections.append(http)
            target = build_uri(path=path, query=query, fragment=fragment)
            http.append(getattr(HTTPRequest, method)(target), ResponseWriter(out))
    finally:
        for http in connections:
            http.close()
        if receiver:
            receiver.stop()
Exemplo n.º 2
0
 def test_can_parse_uri_without_scheme_but_with_port(self):
     scheme, authority, path, query, fragment = parse_uri(b"//example.com:8080")
     assert scheme is None
     assert authority == b"example.com:8080"
     assert path == b""
     assert query is None
     assert fragment is None
Exemplo n.º 3
0
 def test_can_parse_uri_with_root_path(self):
     scheme, authority, path, query, fragment = parse_uri(b"foo://example.com/")
     assert scheme == b"foo"
     assert authority == b"example.com"
     assert path == b"/"
     assert query is None
     assert fragment is None
Exemplo n.º 4
0
 def test_can_parse_only_fragment(self):
     scheme, authority, path, query, fragment = parse_uri(b"#foo")
     assert scheme is None
     assert authority is None
     assert path == b""
     assert query is None
     assert fragment == b"foo"
Exemplo n.º 5
0
 def test_can_parse_only_query(self):
     scheme, authority, path, query, fragment = parse_uri(b"?foo=bar")
     assert scheme is None
     assert authority is None
     assert path == b""
     assert query == b"foo=bar"
     assert fragment is None
Exemplo n.º 6
0
 def test_can_parse_relative_path_uri(self):
     scheme, authority, path, query, fragment = parse_uri(b"foo/bar")
     assert scheme is None
     assert authority is None
     assert path == b"foo/bar"
     assert query is None
     assert fragment is None
Exemplo n.º 7
0
 def test_can_parse_empty_string_uri(self):
     scheme, authority, path, query, fragment = parse_uri(b"")
     assert scheme is None
     assert authority is None
     assert path == b""
     assert query is None
     assert fragment is None
Exemplo n.º 8
0
 def test_can_parse_none_uri(self):
     scheme, authority, path, query, fragment = parse_uri(None)
     assert scheme is None
     assert authority is None
     assert path is None
     assert query is None
     assert fragment is None
Exemplo n.º 9
0
 def test_can_parse_full_uri(self):
     scheme, authority, path, query, fragment = parse_uri(b"foo://bob@[email protected]:8042"
                                                          b"/over/there?name=ferret#nose")
     assert scheme == b"foo"
     assert authority == b"bob@[email protected]:8042"
     assert path == b"/over/there"
     assert query == b"name=ferret"
     assert fragment == b"nose"
Exemplo n.º 10
0
def delete(prog, method, *args, arg_encoding="UTF-8", out=stdout):
    parser = ArgumentParser(prog, usage="%(prog)s {:s} [options] uri".format(method))
    parser.add_argument("-r", "--rx-buffer-size", metavar="SIZE", default=4194304)
    parser.add_argument("-v", "--verbose", action="store_true")
    parser.add_argument("-vv", "--very-verbose", action="store_true")
    parser.add_argument("uri")
    parsed = parser.parse_args(args)
    if parsed.verbose:
        watch("shortwave.http", level=INFO)
    if parsed.very_verbose:
        watch("shortwave.transmission", level=DEBUG)

    scheme, authority, path, query, fragment = parse_uri(parsed.uri.encode(arg_encoding))
    http = HTTP(authority, rx_buffer_size=parsed.rx_buffer_size, connection="close")
    target = build_uri(path=path, query=query, fragment=fragment)
    headers = {}
    try:
        http.append(HTTPRequest.delete(target, **headers), ResponseWriter(out))
    finally:
        http.close()