code: def get_full_text(paper_id, idtype, preferred_content_type='text/xml'):
      if preferred_content_type not in \
              ('text/xml', 'text/plain', 'application/pdf'):
          raise ValueError("preferred_content_type must be one of 'text/xml', "
                           "'text/plain', or 'application/pdf'.")
      ids = id_lookup(paper_id, idtype)
      pmcid = ids.get('pmcid')
      pmid = ids.get('pmid')
      doi = ids.get('doi')
      if pmcid:
          nxml = pmc_client.get_xml(pmcid)
          if nxml:
              return nxml, 'pmc_oa_xml'
      if not doi and not pmid:
          return (None, None)
      if doi:
          publisher = crossref_client.get_publisher(doi)
          if publisher == 'Elsevier BV':
              logger.info('Elsevier: %s' % pmid)
              try:
                  article_xml = elsevier_client.download_article(doi)
              except Exception as e:
                  logger.error("Error downloading Elsevier article: %s" % e)
                  article_xml = None
              if article_xml is not None:
                  return (article_xml, 'elsevier_xml')
          if pmid:
              abstract = pubmed_client.get_abstract(pmid)
              if abstract is None:
                  return (None, None)
              else:
                  return abstract, 'abstract'
          else:
              return (None, None)
      else:
          abstract = pubmed_client.get_abstract(pmid)
          if abstract is None:
              return (None, None)
          else:
              return abstract, 'abstract'
      assert False