docs: def upload_all_books(book_id_start, book_id_end, rdf_library=None):
      """ Uses the fetch, make, push subcommands to
          mirror Project Gutenberg to a github3 api
      """
  
      # TODO refactor appname into variable
      logger.info(
          "starting a gitberg mass upload: {0} -> {1}".format(
              book_id_start, book_id_end
          )
      )
  
      for book_id in range(int(book_id_start), int(book_id_end) + 1):
          cache = {}
          errors = 0
          try:
              if int(book_id) in missing_pgid:
                  print(u'missing\t{}'.format(book_id))
                  continue
              upload_book(book_id, rdf_library=rdf_library, cache=cache)
          except Exception as e:
              print(u'error\t{}'.format(book_id))
              logger.error(u"Error processing: {}\r{}".format(book_id, e))
              errors += 1
              if errors > 10:
                  print('error limit reached!')
                  break