code: def refresh(self):
          
          if self._expired:
              raise Expired()
  
          obj = {
              # ID is the lease ID for the lease to keep alive.
              u'ID': self.lease_id,
          }
          data = json.dumps(obj).encode('utf8')
  
          url = u'{}/v3alpha/lease/keepalive'.format(self._client._url).encode()
          response = yield treq.post(url, data, headers=self._client._REQ_HEADERS)
  
          obj = yield treq.json_content(response)
  
          if u'result' not in obj:
              raise Exception('bogus lease refresh response (missing "result") in {}'.format(obj))
  
          ttl = obj[u'result'].get(u'TTL', None)
          if not ttl:
              self._expired = True
              raise Expired()
  
          header = Header._parse(obj[u'result'][u'header']) if u'header' in obj[u'result'] else None
  
          self._expired = False
  
          returnValue(header)
docs: Keeps the lease alive by streaming keep alive requests from the client
          to the server and streaming keep alive responses from the server to
          the client.
  
          :returns: Response header.
          :rtype: instance of :class:`txaioetcd.Header`