docs: def main():
      """
      Main entry point for execution as a program (instead of as a module).
      """
  
      args = parse_args()
      logging.info('coursera_dl version %s', __version__)
      completed_classes = []
      classes_with_errors = []
  
      mkdir_p(PATH_CACHE, 0o700)
      if args.clear_cache:
          shutil.rmtree(PATH_CACHE)
      if args.list_courses:
          logging.info('Listing enrolled courses')
          list_courses(args)
          return
  
      session = get_session()
      login(session, args.username, args.password)
      if args.specialization:
          args.class_names = expand_specializations(session, args.class_names)
  
      for class_index, class_name in enumerate(args.class_names):
          try:
              logging.info('Downloading class: %s (%d / %d)',
                           class_name, class_index + 1, len(args.class_names))
              error_occurred, completed = download_class(
                  session, args, class_name)
              if completed:
                  completed_classes.append(class_name)
              if error_occurred:
                  classes_with_errors.append(class_name)
          except requests.exceptions.HTTPError as e:
              logging.error('HTTPError %s', e)
              if is_debug_run():
                  logging.exception('HTTPError %s', e)
          except requests.exceptions.SSLError as e:
              logging.error('SSLError %s', e)
              print_ssl_error_message(e)
              if is_debug_run():
                  raise
          except ClassNotFound as e:
              logging.error('Could not find class: %s', e)
          except AuthenticationFailed as e:
              logging.error('Could not authenticate: %s', e)
  
          if class_index + 1 != len(args.class_names):
              logging.info('Sleeping for %d seconds before downloading next course. '
                           'You can change this with --download-delay option.',
                           args.download_delay)
              time.sleep(args.download_delay)
  
      if completed_classes:
          logging.info('-' * 80)
          logging.info(
              "Classes which appear completed: " + " ".join(completed_classes))
  
      if classes_with_errors:
          logging.info('-' * 80)
          logging.info('The following classes had errors during the syllabus'
                       ' parsing stage. You may want to review error messages and'
                       ' courses (sometimes enrolling to the course or switching'
                       ' session helps):')
          for class_name in classes_with_errors:
              logging.info('%s (https://www.coursera.org/learn/%s)',
                           class_name, class_name)