prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Use extra for asyncio dependencies
  Hello!  The latest release for this library pulls in aiohttp and its dependencies unconditionally, which adds non-trivial burden to projects that don’t need it.  Would you consider using a packaging extra so that people can opt-in?
  TODO: undo pin of 'aiohttp' once 'aioresponses' releases a fix
  Environment details
  
    - OS: $ sw_vers
  ProductName:    Mac OS X
  ProductVersion: 10.14.6
  BuildVersion:   18G6020
  
    - Python version: 3.6, 3.7, 3.8
    - pip version: pip 20.2.4
    - `google-auth` version: 5906c8583ca351b5385a079a30521a9a8a0c7c59
  
  #### Steps to reproduce
  
    1. nox -s unit
  
  
  There are 9 tests that fail, all with the same error:
  
  `TypeError: __init__() missing 1 required positional argument: 'limit'`
  
  
  ```
  ====================================================== short test summary info =======================================================
  FAILED tests_async/transport/test_aiohttp_requests.py::TestCombinedResponse::test_content_compressed - TypeError: __init__() missin...
  FAILED tests_async/transport/test_aiohttp_requests.py::TestResponse::test_headers_prop - TypeError: __init__() missing 1 required p...
  FAILED tests_async/transport/test_aiohttp_requests.py::TestResponse::test_status_prop - TypeError: __init__() missing 1 required po...
  FAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_request - TypeError: __init__() missing 1 requir...
  FAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_ctx - TypeError: __init__() missing 1 required p...
  FAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_http_headers - TypeError: __init__() missing 1 r...
  FAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_regexp_example - TypeError: __init__() missing 1...
  FAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_request_no_refresh - TypeError: __init__() missi...
  FAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_request_refresh - TypeError: __init__() missing ...
  ============================================ 9 failed, 609 passed, 12 warnings in 33.41s =============================================
  ```
  
  Here is the traceback for one of the failing tests:
  
  
  ```
  ____________________________________________ TestCombinedResponse.test_content_compressed ____________________________________________
  
  self = <tests_async.transport.test_aiohttp_requests.TestCombinedResponse object at 0x108803160>
  urllib3_mock = <function decompress at 0x10880a820>
  
      @mock.patch(
          "google.auth.transport._aiohttp_requests.urllib3.response.MultiDecoder.decompress",
          return_value="decompressed",
          autospec=True,
      )
      @pytest.mark.asyncio
      async def test_content_compressed(self, urllib3_mock):
          rm = core.RequestMatch(
              "url", headers={"Content-Encoding": "gzip"}, payload="compressed"
          )
  >       response = await rm.build_response(core.URL("url"))
  
  tests_async/transport/test_aiohttp_requests.py:72: 
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
  ../../../.virtualenv/google-auth-library-python/lib/python3.8/site-packages/aioresponses/core.py:192: in build_response
      resp = self._build_response(
  ../../../.virtualenv/google-auth-library-python/lib/python3.8/site-packages/aioresponses/core.py:173: in _build_response
      resp.content = stream_reader_factory(loop)
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
  
  loop = <Mock id='4437587472'>
  
      def stream_reader_factory(  # noqa
          loop: 'Optional[asyncio.AbstractEventLoop]' = None
      ):
          protocol = ResponseHandler(loop=loop)
  >       return StreamReader(protocol, loop=loop)
  E       TypeError: __init__() missing 1 required positional argument: 'limit'
  
  ../../../.virtualenv/google-auth-library-python/lib/python3.8/site-packages/aioresponses/compat.py:48: TypeError
  ========================================================== warnings summary ==========================================================
  ```
  
  The root cause is a change in aiohttp version 3.7.0 which was released a few hours ago. The signature for StreamReader has changed, making the optional argument `limit` a required argument.
  
  https://github.com/aio-libs/aiohttp/blob/56e78836aa7c67292ace9e256711699d51d57285/aiohttp/streams.py#L106
  
  This change breaks aioresponses:
  
  https://github.com/pnuckowski/aioresponses/blob/e61977f42a0164e0c572031dfb18ae95ba198df0/aioresponses/compat.py#L44
  
  
  Add support for Python 3.9
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `synth.py`
  Content:
  ```
  1 import synthtool as s
  2 from synthtool import gcp
  3 
  4 common = gcp.CommonTemplates()
  5 
  6 # ----------------------------------------------------------------------------
  7 # Add templated files
  8 # ----------------------------------------------------------------------------
  9 templated_files = common.py_library(unit_cov_level=100, cov_level=100)
  10 s.move(
  11     templated_files / ".kokoro",
  12     excludes=[
  13         ".kokoro/continuous/common.cfg",
  14         ".kokoro/presubmit/common.cfg",
  15         ".kokoro/build.sh",
  16     ],
  17 )  # just move kokoro configs
  18
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/synth.py b/synth.py
  --- a/synth.py
  +++ b/synth.py
  @@ -10,8 +10,8 @@
   s.move(
       templated_files / ".kokoro",
       excludes=[
  -        ".kokoro/continuous/common.cfg",
  -        ".kokoro/presubmit/common.cfg",
  -        ".kokoro/build.sh",
  +        "continuous/common.cfg",
  +        "presubmit/common.cfg",
  +        "build.sh",
       ],
   )  # just move kokoro configs
  
verification_info: {"golden_diff": "diff --git a/synth.py b/synth.py\n--- a/synth.py\n+++ b/synth.py\n@@ -10,8 +10,8 @@\n s.move(\n     templated_files / \".kokoro\",\n     excludes=[\n-        \".kokoro/continuous/common.cfg\",\n-        \".kokoro/presubmit/common.cfg\",\n-        \".kokoro/build.sh\",\n+        \"continuous/common.cfg\",\n+        \"presubmit/common.cfg\",\n+        \"build.sh\",\n     ],\n )  # just move kokoro configs\n", "issue": "Use extra for asyncio dependencies\nHello!  The latest release for this library pulls in aiohttp and its dependencies unconditionally, which adds non-trivial burden to projects that don\u2019t need it.  Would you consider using a packaging extra so that people can opt-in?\nTODO: undo pin of 'aiohttp' once 'aioresponses' releases a fix\nEnvironment details\r\n\r\n  - OS: $ sw_vers\r\nProductName:    Mac OS X\r\nProductVersion: 10.14.6\r\nBuildVersion:   18G6020\r\n\r\n  - Python version: 3.6, 3.7, 3.8\r\n  - pip version: pip 20.2.4\r\n  - `google-auth` version: 5906c8583ca351b5385a079a30521a9a8a0c7c59\r\n\r\n#### Steps to reproduce\r\n\r\n  1. nox -s unit\r\n\r\n\r\nThere are 9 tests that fail, all with the same error:\r\n\r\n`TypeError: __init__() missing 1 required positional argument: 'limit'`\r\n\r\n\r\n```\r\n====================================================== short test summary info =======================================================\r\nFAILED tests_async/transport/test_aiohttp_requests.py::TestCombinedResponse::test_content_compressed - TypeError: __init__() missin...\r\nFAILED tests_async/transport/test_aiohttp_requests.py::TestResponse::test_headers_prop - TypeError: __init__() missing 1 required p...\r\nFAILED tests_async/transport/test_aiohttp_requests.py::TestResponse::test_status_prop - TypeError: __init__() missing 1 required po...\r\nFAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_request - TypeError: __init__() missing 1 requir...\r\nFAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_ctx - TypeError: __init__() missing 1 required p...\r\nFAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_http_headers - TypeError: __init__() missing 1 r...\r\nFAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_regexp_example - TypeError: __init__() missing 1...\r\nFAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_request_no_refresh - TypeError: __init__() missi...\r\nFAILED tests_async/transport/test_aiohttp_requests.py::TestAuthorizedSession::test_request_refresh - TypeError: __init__() missing ...\r\n============================================ 9 failed, 609 passed, 12 warnings in 33.41s =============================================\r\n```\r\n\r\nHere is the traceback for one of the failing tests:\r\n\r\n\r\n```\r\n____________________________________________ TestCombinedResponse.test_content_compressed ____________________________________________\r\n\r\nself = <tests_async.transport.test_aiohttp_requests.TestCombinedResponse object at 0x108803160>\r\nurllib3_mock = <function decompress at 0x10880a820>\r\n\r\n    @mock.patch(\r\n        \"google.auth.transport._aiohttp_requests.urllib3.response.MultiDecoder.decompress\",\r\n        return_value=\"decompressed\",\r\n        autospec=True,\r\n    )\r\n    @pytest.mark.asyncio\r\n    async def test_content_compressed(self, urllib3_mock):\r\n        rm = core.RequestMatch(\r\n            \"url\", headers={\"Content-Encoding\": \"gzip\"}, payload=\"compressed\"\r\n        )\r\n>       response = await rm.build_response(core.URL(\"url\"))\r\n\r\ntests_async/transport/test_aiohttp_requests.py:72: \r\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r\n../../../.virtualenv/google-auth-library-python/lib/python3.8/site-packages/aioresponses/core.py:192: in build_response\r\n    resp = self._build_response(\r\n../../../.virtualenv/google-auth-library-python/lib/python3.8/site-packages/aioresponses/core.py:173: in _build_response\r\n    resp.content = stream_reader_factory(loop)\r\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r\n\r\nloop = <Mock id='4437587472'>\r\n\r\n    def stream_reader_factory(  # noqa\r\n        loop: 'Optional[asyncio.AbstractEventLoop]' = None\r\n    ):\r\n        protocol = ResponseHandler(loop=loop)\r\n>       return StreamReader(protocol, loop=loop)\r\nE       TypeError: __init__() missing 1 required positional argument: 'limit'\r\n\r\n../../../.virtualenv/google-auth-library-python/lib/python3.8/site-packages/aioresponses/compat.py:48: TypeError\r\n========================================================== warnings summary ==========================================================\r\n```\r\n\r\nThe root cause is a change in aiohttp version 3.7.0 which was released a few hours ago. The signature for StreamReader has changed, making the optional argument `limit` a required argument.\r\n\r\nhttps://github.com/aio-libs/aiohttp/blob/56e78836aa7c67292ace9e256711699d51d57285/aiohttp/streams.py#L106\r\n\r\nThis change breaks aioresponses:\r\n\r\nhttps://github.com/pnuckowski/aioresponses/blob/e61977f42a0164e0c572031dfb18ae95ba198df0/aioresponses/compat.py#L44\r\n\r\n\nAdd support for Python 3.9\n\n", "before_files": [{"content": "import synthtool as s\nfrom synthtool import gcp\n\ncommon = gcp.CommonTemplates()\n\n# ----------------------------------------------------------------------------\n# Add templated files\n# ----------------------------------------------------------------------------\ntemplated_files = common.py_library(unit_cov_level=100, cov_level=100)\ns.move(\n    templated_files / \".kokoro\",\n    excludes=[\n        \".kokoro/continuous/common.cfg\",\n        \".kokoro/presubmit/common.cfg\",\n        \".kokoro/build.sh\",\n    ],\n)  # just move kokoro configs\n", "path": "synth.py"}], "after_files": [{"content": "import synthtool as s\nfrom synthtool import gcp\n\ncommon = gcp.CommonTemplates()\n\n# ----------------------------------------------------------------------------\n# Add templated files\n# ----------------------------------------------------------------------------\ntemplated_files = common.py_library(unit_cov_level=100, cov_level=100)\ns.move(\n    templated_files / \".kokoro\",\n    excludes=[\n        \"continuous/common.cfg\",\n        \"presubmit/common.cfg\",\n        \"build.sh\",\n    ],\n)  # just move kokoro configs\n", "path": "synth.py"}]}