def session(self, request: Request) -> WebSession:
        '''Return a fetch session.

        Args:
            request: The request to be fetched.

        Example usage::

            client = WebClient()
            session = client.session(Request('http://www.example.com'))

            with session:
                while not session.done():
                    request = session.next_request()
                    print(request)

                    response = yield from session.start()
                    print(response)

                    if session.done():
                        with open('myfile.html') as file:
                            yield from session.download(file)
                    else:
                        yield from session.download()

        Returns:
            WebSession
        '''
        return WebSession(
            request,
            http_client=self._http_client,
            redirect_tracker=self._redirect_tracker_factory(),
            request_factory=self._request_factory,
            cookie_jar=self._cookie_jar,
        )
Return a fetch session.

        Args:
            request: The request to be fetched.

        Example usage::

            client = WebClient()
            session = client.session(Request('http://www.example.com'))

            with session:
                while not session.done():
                    request = session.next_request()
                    print(request)

                    response = yield from session.start()
                    print(response)

                    if session.done():
                        with open('myfile.html') as file:
                            yield from session.download(file)
                    else:
                        yield from session.download()

        Returns:
            WebSession