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)
docs: Construct a new request with the given tree as its contents, then ship
          it to the OpenProvider API.