docs: def _download_article(self, article_number, max_retries=10):
          """Download a given article.
  
          :type article_number: str
          :param article_number: the article number to download.
  
          :type group: str
          :param group: the group that contains the article to be downloaded.
  
          :returns: nntplib article response object if successful, else False.
  
          """
          log.debug('downloading article {0} from {1}'.format(article_number, self.name))
          _connection = self.session.connections.get()
          try:
              i = 0
              while True:
                  if i >= max_retries:
                      return False
  
                  try:
                      _connection.group(self.name)
                      resp = _connection.article(article_number)
                      log.debug('downloaded article {0} from {1}'.format(article_number,
                                                                         self.name))
                      return resp
  
                  # Connection closed, transient error, retry forever.
                  except EOFError:
                      log.warning('EOFError, refreshing connection retrying -- '
                                  'article={0}, group={1}'.format(article_number, self.name))
                      self.session.refresh_connection(_connection)
                      time.sleep(2)
                      _connection = self.session.connections.get()
  
                  # NNTP Error.
                  except nntplib.NNTPError as exc:
                      log.warning('NNTPError: {0} -- article={1}, '
                                  'group={2}'.format(exc, article_number, self.name))
                      if any(s in exc.response for s in ['430', '423']):
                          # Don't retry, article probably doesn't exist.
                          i = max_retries
                      else:
                          i += 1
                  except:
                      self.session.refresh_connection(_connection)
                      time.sleep(2)
                      _connection = self.session.connections.get()
  
          # Always return connection back to the pool!
          finally:
              self.session.connections.put(_connection)