Retrieve the data for the given document from the server

        :type doc_url: String or Document
        :param doc_url: the URL of the document, or a Document object
        :type force_download: Boolean
        :param force_download: True to download from the server
            regardless of the cache's contents

        :rtype: String
        :returns: the document data

        :raises: APIError if the API request is not successful

def get_document(self, doc_url, force_download=False):
        """ Retrieve the data for the given document from the server

        :type doc_url: String or Document
        :param doc_url: the URL of the document, or a Document object
        :type force_download: Boolean
        :param force_download: True to download from the server
            regardless of the cache's contents

        :rtype: String
        :returns: the document data

        :raises: APIError if the API request is not successful


        """
        doc_url = str(doc_url)
        if (self.use_cache and
                not force_download and
                self.cache.has_document(doc_url)):
            doc_data = self.cache.get_document(doc_url)
        else:
            doc_data = self.api_request(doc_url, raw=True)
            if self.update_cache:
                self.cache.add_document(doc_url, doc_data)

        return doc_data