'If more than one idp and if none is selected, I have to do wayf or
disco'

def _pick_idp(self, came_from):

    _cli = self.sp
    logger.debug(('[_pick_idp]    %s' % self.environ))
    if ('HTTP_PAOS' in self.environ):
        if (self.environ['HTTP_PAOS'] == PAOS_HEADER_INFO):
            if ('application/vnd.paos+xml' in self.environ['HTTP_ACCEPT']):
                logger.debug('-    ECP    client    detected    -')
                _rstate = rndstr()
                self.cache.relay_state[_rstate] = geturl(self.environ)
                _entityid = _cli.config.ecp_endpoint(self.environ['REMOTE_ADDR'])
                if (not _entityid):
                    return ((-1), ServiceError('No    IdP    to    talk    to'))
                logger.debug(('IdP    to    talk    to:    %s' % _entityid))
                return ecp.ecp_auth_request(_cli, _entityid, _rstate)
            else:
                return ((-1), ServiceError('Faulty    Accept    header'))
        else:
            return ((-1), ServiceError('unknown    ECP    version'))
    idps = self.sp.metadata.with_descriptor('idpsso')
    idp_entity_id = None
    kaka = self.environ.get('HTTP_COOKIE', '')
    if kaka:
        try:
            (idp_entity_id, _) = parse_cookie('ve_disco', 'SEED_SAW', kaka)
        except ValueError:
            pass
        except TypeError:
            pass
    query = self.environ.get('QUERY_STRING')
    if ((not idp_entity_id) and query):
        try:
            _idp_entity_id = dict(parse_qs(query))[self.idp_query_param][0]
            if (_idp_entity_id in idps):
                idp_entity_id = _idp_entity_id
        except KeyError:
            logger.debug(('No    IdP    entity    ID    in    query:    %s' % query))
            pass
    if (not idp_entity_id):
        if self.wayf:
            if query:
                try:
                    wayf_selected = dict(parse_qs(query))['wayf_selected'][0]
                except KeyError:
                    return self._wayf_redirect(came_from)
                idp_entity_id = wayf_selected
            else:
                return self._wayf_redirect(came_from)
        elif self.discosrv:
            if query:
                idp_entity_id = _cli.parse_discovery_service_response(query=self.environ.get('QUERY_STRING'))
            if (not idp_entity_id):
                sid_ = sid()
                self.cache.outstanding_queries[sid_] = came_from
                logger.debug('Redirect    to    Discovery    Service    function')
                eid = _cli.config.entityid
                ret = _cli.config.getattr('endpoints', 'sp')['discovery_response'][0][0]
                ret += ('?sid=%s' % sid_)
                loc = _cli.create_discovery_service_request(self.discosrv, eid, **{'return': ret})
                return ((-1), SeeOther(loc))
        elif (len(idps) == 1):
            idp_entity_id = idps.keys()[0]
        elif (not len(idps)):
            return ((-1), ServiceError('Misconfiguration'))
        else:
            return ((-1), NotImplemented('No    WAYF    or    DS    present!'))
    logger.info(("Chosen    IdP:    '%s'" % idp_entity_id))
    return (0, idp_entity_id)
