instructure/canvas-lms · error
unknown format type: #
Error message
unknown format type: #{settings[:format_type]} What it means
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.
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
Example fix
// before settings['format_type'] = 'BannerXml' // after settings['format_type'] = Course.valid_grade_export_types.keys.first # a valid registered format
Defensive patterns
Strategy: validation
Validate before calling
valid = Course.valid_grade_export_types
raise "invalid format_type" unless valid.key?(Canvas::Plugin.find!('grade_export').settings[:format_type]) Type guard
null
Try / catch
begin
course.publish_final_grades(user)
rescue RuntimeError => e
raise unless e.message.start_with?('unknown format type:')
# correct format_type to one of Course.valid_grade_export_types.keys
end Prevention
- 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
When it happens
Trigger: 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).
Common situations: 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.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- endpoint undefined
- final grade publishing disabled
- grade publishing requires a grading standard
- [Accessibility::CategoryBreakdownService] dropping unknown…
- assessor and assessee required
AI-assisted analysis of instructure/canvas-lms@1c9f0bb801 (2026-09-15).
Data as JSON: /api/errors/21b6369d696f9e1e.
Report an issue: GitHub.
Appendix: source
Thrown at app/models/course.rb:2642
# 'publish_final_grades'
recompute_student_scores_without_send_later(user_ids_to_publish)
enrollments = student_enrollments.not_fake.eager_load(:user).preload(:course_section).order_by_sortable_name
enrollments = enrollments.where(user_id: user_ids_to_publish) if user_ids_to_publish
errors = []
posts_to_make = []
posted_enrollment_ids = []
all_enrollment_ids = enrollments.map(&:id)
begin
raise "final grade publishing disabled" unless Canvas::Plugin.find!("grade_export").enabled?
settings = Canvas::Plugin.find!("grade_export").settings
raise "endpoint undefined" if settings[:publish_endpoint].blank?
format_settings = Course.valid_grade_export_types[settings[:format_type]]
raise "unknown format type: #{settings[:format_type]}" unless format_settings
raise "grade publishing requires a grading standard" if !grading_standard_enabled? && format_settings[:requires_grading_standard]
publishing_pseudonym = SisPseudonym.for(publishing_user, self)
raise "publishing disallowed for this publishing user" if publishing_pseudonym.nil? && format_settings[:requires_publishing_pseudonym]
callback = Course.valid_grade_export_types[settings[:format_type]][:callback]
posts_to_make = callback.call(self, enrollments, publishing_user, publishing_pseudonym)
rescue => e
Enrollment.where(id: all_enrollment_ids).update_all(grade_publishing_status: "error", grade_publishing_message: e.to_s)
raise e
end
default_timeout = Setting.get("send_final_grades_to_endpoint_timelimit", 15.seconds.to_s).to_f
timeout_options = { raise_on_timeout: true, fallback_timeout_length: default_timeout }
posts_to_make.each do |enrollment_ids, res, mime_type, headers = {}|
posted_enrollment_ids += enrollment_idsView on GitHub (pinned to 1c9f0bb801)