docs: def get_primary_text(self, item_url, force_download=False):
          """ Retrieve the primary text for an item from the server
  
          :type item_url: String or Item
          :param item_url: URL of the item, or an Item object
          :type force_download: Boolean
          :param force_download: True to download from the server
              regardless of the cache's contents
  
          :rtype: String
          :returns: the item's primary text if it has one, otherwise None
  
          :raises: APIError if the request was not successful
  
  
          """
          item_url = str(item_url)
          metadata = self.get_item(item_url).metadata()
  
          try:
              primary_text_url = metadata['alveo:primary_text_url']
          except KeyError:
              return None
  
          if primary_text_url == 'No primary text found':
              return None
  
          if (self.use_cache and
                  not force_download and
                  self.cache.has_primary_text(item_url)):
              primary_text = self.cache.get_primary_text(item_url)
          else:
              primary_text = self.api_request(primary_text_url, raw=True)
              if self.update_cache:
                  self.cache.add_primary_text(item_url, primary_text)
  
          return primary_text