'Construct the Assertion
:param sp_entity_id: The entityid of the SP
:param in_response_to: An identifier of the message, this message is
a response to
:param consumer_url: The intended consumer of the assertion
:param name_id: An NameID instance
:param attrconvs: AttributeConverters
:param policy: The policy that should be adhered to when replying
:param issuer: Who is issuing the statement
:param authn_class: The authentication class
:param authn_auth: The authentication instance
:param authn_decl: An Authentication Context declaration
:param encrypt: Whether to encrypt parts or all of the Assertion
:param sec_context: The security context used when encrypting
:param authn_decl_ref: An Authentication Context declaration reference
:param authn_instant: When the Authentication was performed
:param subject_locality: Specifies the DNS domain name and IP address
for the system from which the assertion subject was apparently
authenticated.
:param authn_statem: A AuthnStatement instance
:return: An Assertion instance'

def construct(self, sp_entity_id, in_response_to, consumer_url, name_id, attrconvs, policy, issuer, authn_class=None, authn_auth=None, authn_decl=None, encrypt=None, sec_context=None, authn_decl_ref=None, authn_instant='', subject_locality='', authn_statem=None):

    if policy:
        _name_format = policy.get_name_form(sp_entity_id)
    else:
        _name_format = NAME_FORMAT_URI
    attr_statement = saml.AttributeStatement(attribute=from_local(attrconvs, self, _name_format))
    if (encrypt == 'attributes'):
        for attr in attr_statement.attribute:
            enc = sec_context.encrypt(text=('%s' % attr))
            encd = xmlenc.encrypted_data_from_string(enc)
            encattr = saml.EncryptedAttribute(encrypted_data=encd)
            attr_statement.encrypted_attribute.append(encattr)
        attr_statement.attribute = []
    conds = policy.conditions(sp_entity_id)
    if authn_statem:
        _authn_statement = authn_statem
    elif (authn_auth or authn_class or authn_decl or authn_decl_ref):
        _authn_statement = authn_statement(authn_class, authn_auth, authn_decl, authn_decl_ref, authn_instant, subject_locality)
    else:
        _authn_statement = None
    _ass = assertion_factory(issuer=issuer, conditions=conds, subject=factory(saml.Subject, name_id=name_id, subject_confirmation=[factory(saml.SubjectConfirmation, method=saml.SCM_BEARER, subject_confirmation_data=factory(saml.SubjectConfirmationData, in_response_to=in_response_to, recipient=consumer_url, not_on_or_after=policy.not_on_or_after(sp_entity_id)))]))
    if _authn_statement:
        _ass.authn_statement = [_authn_statement]
    if (not attr_statement.empty()):
        _ass.attribute_statement = [attr_statement]
    return _ass
