def request(self, tree, **kwargs):
        """
        Construct a new request with the given tree as its contents, then ship
        it to the OpenProvider API.
        """

        apirequest = lxml.etree.tostring(
            E.openXML(
                E.credentials(
                    E.username(self.username),
                    OE('password', self.password),
                    OE('hash', self.password_hash),
                ),
                tree
            ),

            method='c14n'
        )

        try:
            apiresponse = self.session.post(self.url, data=apirequest)
            apiresponse.raise_for_status()
        except requests.RequestException as e:
            raise ServiceUnavailable(str(e))

        tree = lxml.objectify.fromstring(apiresponse.content)

        if tree.reply.code == 0:
            return Response(tree)
        else:
            klass = from_code(tree.reply.code)
            desc = tree.reply.desc
            code = tree.reply.code
            data = getattr(tree.reply, 'data', '')
            raise klass(u"{0} ({1}) {2}".format(desc, code, data), code)
def request ( self , tree , ** kwargs ) : apirequest = lxml . etree . tostring ( E . openXML ( E . credentials ( E . username ( self . username ) , OE ( 'password' , self . password ) , OE ( 'hash' , self . password_hash ) , ) , tree ) , method = 'c14n' ) try : apiresponse = self . session . post ( self . url , data = apirequest ) apiresponse . raise_for_status ( ) except requests . RequestException as e : raise ServiceUnavailable ( str ( e ) ) tree = lxml . objectify . fromstring ( apiresponse . content ) if tree . reply . code == 0 : return Response ( tree ) else : klass = from_code ( tree . reply . code ) desc = tree . reply . desc code = tree . reply . code data = getattr ( tree . reply , 'data' , '' ) raise klass ( u"{0} ({1}) {2}" . format ( desc , code , data ) , code )
Construct a new request with the given tree as its contents, then ship
        it to the OpenProvider API.