

def do_logout(self, name_id, entity_ids, reason, expire, sign=None, expected_binding=None):
    '\n\n        :param name_id: Identifier of the Subject (a NameID instance)\n        :param entity_ids: List of entity ids for the IdPs that have provided\n            information concerning the subject\n        :param reason: The reason for doing the logout\n        :param expire: Try to logout before this time.\n        :param sign: Whether to sign the request or not\n        :param expected_binding: Specify the expected binding then not try it\n            all\n        :return:\n        '
    if (not not_on_or_after(expire)):
        self.local_logout(name_id)
        return (0, '504 Gateway Timeout', [], [])
    not_done = entity_ids[:]
    responses = {
        
    }
    for entity_id in entity_ids:
        logger.debug(("Logout from '%s'" % entity_id))
        for binding in [BINDING_SOAP, BINDING_HTTP_POST, BINDING_HTTP_REDIRECT]:
            if (expected_binding and (binding != expected_binding)):
                continue
            try:
                srvs = self.metadata.single_logout_service(entity_id, binding, 'idpsso')
            except:
                srvs = None
            if (not srvs):
                logger.debug(("No SLO '%s' service" % binding))
                continue
            destination = destinations(srvs)[0]
            logger.info(('destination to provider: %s' % destination))
            (req_id, request) = self.create_logout_request(destination, entity_id, name_id=name_id, reason=reason, expire=expire)
            if binding.startswith('http://'):
                sign = True
            if (sign is None):
                sign = self.logout_requests_signed
            if sign:
                srequest = self.sign(request)
            else:
                srequest = ('%s' % request)
            relay_state = self._relay_state(req_id)
            http_info = self.apply_binding(binding, srequest, destination, relay_state)
            if (binding == BINDING_SOAP):
                response = self.send(**http_info)
                if (response and (response.status_code == 200)):
                    not_done.remove(entity_id)
                    response = response.text
                    logger.info(('Response: %s' % response))
                    res = self.parse_logout_request_response(response, binding)
                    responses[entity_id] = res
                else:
                    logger.info(('NOT OK response from %s' % destination))
            else:
                self.state[req_id] = {
                    'entity_id': entity_id,
                    'operation': 'SLO',
                    'entity_ids': entity_ids,
                    'name_id': code(name_id),
                    'reason': reason,
                    'not_on_of_after': expire,
                    'sign': sign,
                }
                responses[entity_id] = (binding, http_info)
                not_done.remove(res)
            break
    if not_done:
        raise LogoutError(('%s' % (entity_ids,)))
    return responses

dataset/ETHPy150Open cloudera/hue/desktop/core/ext-py/pysaml2-2.4.0/src/saml2/client.py Saml2Client.do_logout/VarMisuse@465/847 `entity_id`->`res`