from tornado.escape import _unicode
-from tornado import gen
+from tornado import gen, version
from tornado.httpclient import (
HTTPResponse,
HTTPError,
)
if self.request.user_agent:
self.request.headers["User-Agent"] = self.request.user_agent
+ elif self.request.headers.get("User-Agent") is None:
+ self.request.headers["User-Agent"] = "Tornado/{}".format(version)
if not self.request.allow_nonstandard_methods:
# Some HTTP methods nearly always have bodies while others
# almost never do. Fail in this case unless the user has
import typing # noqa: F401
from tornado.escape import to_unicode, utf8
-from tornado import gen
+from tornado import gen, version
from tornado.httpclient import AsyncHTTPClient
from tornado.httputil import HTTPHeaders, ResponseStartLine
from tornado.ioloop import IOLoop
CountdownHandler,
HelloWorldHandler,
RedirectHandler,
+ UserAgentHandler,
)
from tornado.test import httpclient_test
from tornado.testing import (
url("/echo_post", EchoPostHandler),
url("/respond_in_prepare", RespondInPrepareHandler),
url("/redirect", RedirectHandler),
+ url("/user_agent", UserAgentHandler),
],
gzip=True,
)
self.fetch("/hello", headers=headers)
self.assertEqual(list(headers.get_all()), [("User-Agent", "Foo")])
+ def test_default_user_agent(self: typing.Any):
+ response = self.fetch("/user_agent", method="GET")
+ self.assertEqual(200, response.code)
+ self.assertEqual(response.body.decode(), "Tornado/{}".format(version))
+
def test_see_other_redirect(self: typing.Any):
for code in (302, 303):
response = self.fetch("/see_other_post", method="POST", body="%d" % code)