from urllib.parse import quote
from uuid import uuid4
-from tornado import gen, httpclient
+from tornado import httpclient
from tornado.options import define, options
# Using HTTP POST, upload one or more files in a single multipart-form-encoded
# request.
-@gen.coroutine
-def multipart_producer(boundary, filenames, write):
+async def multipart_producer(boundary, filenames, write):
boundary_bytes = boundary.encode()
for filename in filenames:
+ (b"Content-Type: %s\r\n" % mtype.encode())
+ b"\r\n"
)
- yield write(buf)
+ await write(buf)
with open(filename, "rb") as f:
while True:
# 16k at a time.
chunk = f.read(16 * 1024)
if not chunk:
break
- yield write(chunk)
+ await write(chunk)
- yield write(b"\r\n")
+ await write(b"\r\n")
- yield write(b"--%s--\r\n" % (boundary_bytes,))
+ await write(b"--%s--\r\n" % (boundary_bytes,))
# Using HTTP PUT, upload one raw file. This is preferred for large files since
# the server can stream the data instead of buffering it entirely in memory.
-@gen.coroutine
-def post(filenames):
+async def post(filenames):
client = httpclient.AsyncHTTPClient()
boundary = uuid4().hex
headers = {"Content-Type": "multipart/form-data; boundary=%s" % boundary}
producer = partial(multipart_producer, boundary, filenames)
- response = yield client.fetch(
+ response = await client.fetch(
"http://localhost:8888/post",
method="POST",
headers=headers,
print(response)
-@gen.coroutine
-def raw_producer(filename, write):
+async def raw_producer(filename, write):
with open(filename, "rb") as f:
while True:
# 16K at a time.
# Complete.
break
- yield write(chunk)
+ await write(chunk)
-@gen.coroutine
-def put(filenames):
+async def put(filenames):
client = httpclient.AsyncHTTPClient()
for filename in filenames:
mtype = mimetypes.guess_type(filename)[0] or "application/octet-stream"
headers = {"Content-Type": mtype}
producer = partial(raw_producer, filename)
url_path = quote(os.path.basename(filename))
- response = yield client.fetch(
+ response = await client.fetch(
"http://localhost:8888/%s" % url_path,
method="PUT",
headers=headers,