Renews a TTL-based session

        Parameters:
            session (ObjectID): Session ID
            dc (str): Specify datacenter that will be used.
                      Defaults to the agent's local datacenter.
        Returns:
            ObjectMeta: where value is session
        Raises:
            NotFound: session is absent

        The response looks like this::

            {
                "LockDelay": datetime.timedelta(0, 15),
                "Checks": [
                    "serfHealth"
                ],
                "Node": "foobar",
                "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e",
                "CreateIndex": 1086449
                "Behavior": "release",
                "TTL": datetime.timedelta(0, 15)
            }

        .. note:: Consul MAY return a TTL value higher than the one
                  specified during session creation. This indicates
                  the server is under high load and is requesting
                  clients renew less often.

async def renew(self, session, *, dc=None):
        """Renews a TTL-based session

        Parameters:
            session (ObjectID): Session ID
            dc (str): Specify datacenter that will be used.
                      Defaults to the agent's local datacenter.
        Returns:
            ObjectMeta: where value is session
        Raises:
            NotFound: session is absent

        The response looks like this::

            {
                "LockDelay": datetime.timedelta(0, 15),
                "Checks": [
                    "serfHealth"
                ],
                "Node": "foobar",
                "ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e",
                "CreateIndex": 1086449
                "Behavior": "release",
                "TTL": datetime.timedelta(0, 15)
            }

        .. note:: Consul MAY return a TTL value higher than the one
                  specified during session creation. This indicates
                  the server is under high load and is requesting
                  clients renew less often.
        """
        session_id = extract_attr(session, keys=["ID"])
        response = await self._api.put("/v1/session/renew", session_id,
                                       params={"dc": dc})
        try:
            result = response.body[0]
        except IndexError:
            meta = extract_meta(response.headers)
            raise NotFound("No session for %r" % session_id, meta=meta)
        return consul(result, meta=extract_meta(response.headers))