'Does a attribute request to an attribute authority, this is
by default done over SOAP.
:param entityid: To whom the query should be sent
:param subject_id: The identifier of the subject
:param attribute: A dictionary of attributes and values that is
asked for
:param sp_name_qualifier: The unique identifier of the
service provider or affiliation of providers for whom the
identifier was generated.
:param name_qualifier: The unique identifier of the identity
provider that generated the identifier.
:param nameid_format: The format of the name ID
:param real_id: The identifier which is the key to this entity in the
identity database
:param binding: Which binding to use
:param nsprefix: Namespace prefixes preferred before those automatically
produced.
:return: The attributes returned if BINDING_SOAP was used.
HTTP args if BINDING_HTT_POST was used.'

def do_attribute_query(self, entityid, subject_id, attribute=None, sp_name_qualifier=None, name_qualifier=None, nameid_format=None, real_id=None, consent=None, extensions=None, sign=False, binding=BINDING_SOAP, nsprefix=None):

    if real_id:
        response_args = {'real_id': real_id}
    else:
        response_args = {}
    if (not binding):
        (binding, destination) = self.pick_binding('attribute_service', None, 'attribute_authority', entity_id=entityid)
    else:
        srvs = self.metadata.attribute_service(entityid, binding)
        if (srvs is []):
            raise SAMLError('No    attribute    service    support    at    entity')
        destination = destinations(srvs)[0]
    if (binding == BINDING_SOAP):
        return self._use_soap(destination, 'attribute_query', consent=consent, extensions=extensions, sign=sign, subject_id=subject_id, attribute=attribute, sp_name_qualifier=sp_name_qualifier, name_qualifier=name_qualifier, nameid_format=nameid_format, response_args=response_args)
    elif (binding == BINDING_HTTP_POST):
        mid = sid()
        query = self.create_attribute_query(destination, subject_id, attribute, mid, consent, extensions, sign, nsprefix)
        self.state[query.id] = {'entity_id': entityid, 'operation': 'AttributeQuery', 'subject_id': subject_id, 'sign': sign}
        relay_state = self._relay_state(query.id)
        return self.apply_binding(binding, ('%s' % query), destination, relay_state)
    else:
        raise SAMLError('Unsupported    binding')
