def METHOD_NAME(self, fields):
    """ Returns a validated list of course fields """
    all_fields = list(CourseFields.__dict__.keys())
    non_course_fields = [
        "__doc__",
        "__module__",
        "__weakref__",
        "__dict__"
    ]
    for field in non_course_fields:
        all_fields.remove(field)
    # Non-primitive course fields
    date_fields = [
        "certificate_available_date",
        "announcement",
        "enrollment_start",
        "enrollment_end",
        "start",
        "end"
    ]
    course_tab_list_fields = [
        "tabs"
    ]
    for field in dict(fields):
        if field not in all_fields:
            # field does not exist as a CourseField
            del fields[field]
            logger.info(field + "is not a valid CourseField")  # lint-amnesty, pylint: disable=logging-not-lazy
        elif fields[field] is None:
            # field is unset
            del fields[field]
        elif field in date_fields:
            # Generate Date object from the json value
            try:
                date_json = fields[field]
                fields[field] = Date().from_json(date_json)
                logger.info(field + " has been set to " + date_json)
            except Exception:  # pylint: disable=broad-except
                logger.info("The date string could not be parsed for " + field)  # lint-amnesty, pylint: disable=logging-not-lazy
                del fields[field]
        elif field in course_tab_list_fields:
            # Generate CourseTabList object from the json value
            try:
                course_tab_list_json = fields[field]
                fields[field] = CourseTabList().from_json(course_tab_list_json)
                logger.info(field + " has been set to " + course_tab_list_json)
            except Exception:  # pylint: disable=broad-except
                logger.info("The course tab list string could not be parsed for " + field)  # lint-amnesty, pylint: disable=logging-not-lazy
                del fields[field]
        else:
            # CourseField is valid and has been set
            logger.info(field + " has been set to " + str(fields[field]))  # lint-amnesty, pylint: disable=logging-not-lazy
    for field in all_fields:
        if field not in fields:
            logger.info(field + " has not been set")  # lint-amnesty, pylint: disable=logging-not-lazy
    return fields