{"record":{"id":"21b6369d696f9e1e","repo":"instructure/canvas-lms","slug":"unknown-format-type-settings-format-type","errorCode":null,"errorMessage":"unknown format type: #{settings[:format_type]}","messagePattern":"unknown format type: #(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/models/course.rb","lineNumber":2642,"sourceCode":"    # 'publish_final_grades'\n\n    recompute_student_scores_without_send_later(user_ids_to_publish)\n    enrollments = student_enrollments.not_fake.eager_load(:user).preload(:course_section).order_by_sortable_name\n    enrollments = enrollments.where(user_id: user_ids_to_publish) if user_ids_to_publish\n\n    errors = []\n    posts_to_make = []\n    posted_enrollment_ids = []\n    all_enrollment_ids = enrollments.map(&:id)\n\n    begin\n      raise \"final grade publishing disabled\" unless Canvas::Plugin.find!(\"grade_export\").enabled?\n\n      settings = Canvas::Plugin.find!(\"grade_export\").settings\n      raise \"endpoint undefined\" if settings[:publish_endpoint].blank?\n\n      format_settings = Course.valid_grade_export_types[settings[:format_type]]\n      raise \"unknown format type: #{settings[:format_type]}\" unless format_settings\n      raise \"grade publishing requires a grading standard\" if !grading_standard_enabled? && format_settings[:requires_grading_standard]\n\n      publishing_pseudonym = SisPseudonym.for(publishing_user, self)\n      raise \"publishing disallowed for this publishing user\" if publishing_pseudonym.nil? && format_settings[:requires_publishing_pseudonym]\n\n      callback = Course.valid_grade_export_types[settings[:format_type]][:callback]\n      posts_to_make = callback.call(self, enrollments, publishing_user, publishing_pseudonym)\n    rescue => e\n      Enrollment.where(id: all_enrollment_ids).update_all(grade_publishing_status: \"error\", grade_publishing_message: e.to_s)\n      raise e\n    end\n\n    default_timeout = Setting.get(\"send_final_grades_to_endpoint_timelimit\", 15.seconds.to_s).to_f\n\n    timeout_options = { raise_on_timeout: true, fallback_timeout_length: default_timeout }\n\n    posts_to_make.each do |enrollment_ids, res, mime_type, headers = {}|\n      posted_enrollment_ids += enrollment_ids","sourceCodeStart":2624,"sourceCodeEnd":2660,"githubUrl":"https://github.com/instructure/canvas-lms/blob/1c9f0bb8013ed69c4f2efe11fd483025469b7e6c/app/models/course.rb#L2624-L2660","documentation":"Guard in Course#publish_final_grades: the grade_export plugin's settings specify a format_type not present in Course.valid_grade_export_types, i.e. an unsupported/unknown publishing format, so this error aborts grade publishing.","triggerScenarios":"publish_final_grades running with settings[:format_type] set to a value not registered in Course.valid_grade_export_types (typo, plugin format removed, or format supplied by an uninstalled export plugin).","commonSituations":"Changing SIS export format to one provided by a plugin that is no longer installed; typo'd YAML/DB setting; Canvas version change dropping a legacy format.","solutions":["Set format_type to a valid key from Course.valid_grade_export_types (e.g. 'isis', 'csv' depending on installed plugins)","Install/enable the plugin that provides the requested export format","Log Course.valid_grade_export_types.keys to confirm acceptable values before changing settings"],"exampleFix":"// before\nsettings['format_type'] = 'BannerXml'\n// after\nsettings['format_type'] = Course.valid_grade_export_types.keys.first # a valid registered format","handlingStrategy":"validation","validationCode":"valid = Course.valid_grade_export_types\nraise \"invalid format_type\" unless valid.key?(Canvas::Plugin.find!('grade_export').settings[:format_type])","typeGuard":"null","tryCatchPattern":"begin\n  course.publish_final_grades(user)\nrescue RuntimeError => e\n  raise unless e.message.start_with?('unknown format type:')\n  # correct format_type to one of Course.valid_grade_export_types.keys\nend","preventionTips":["Only set format_type from Course.valid_grade_export_types.keys","Re-validate settings after installing/removing export plugins","Check format availability after Canvas upgrades"],"tags":["ruby","rails","grades","config","enum"],"backgroundTag":"invalid-enum-value","analyzedSha":"1c9f0bb8013ed69c4f2efe11fd483025469b7e6c","analyzedAt":"2026-09-15T20:33:18.891Z","contentChangedAt":"2026-09-15T20:33:18.891Z","schemaVersion":2},"datasetVersion":"2026-09-23T02:17:17.105Z"}