def create_or_update_events_directly_for_course_timetable(self, course_id, course_section_id=None, events=None, events_code=None, events_end_at=None, events_location_name=None, events_start_at=None):
        """
        Create or update events directly for a course timetable.

        Creates and updates "timetable" events for a course or course section.
        Similar to {api:CalendarEventsApiController#set_course_timetable setting a course timetable},
        but instead of generating a list of events based on a timetable schedule,
        this endpoint expects a complete list of events.
        """
        path = {}
        data = {}
        params = {}

        # REQUIRED - PATH - course_id
        """ID"""
        path["course_id"] = course_id

        # OPTIONAL - course_section_id
        """Events will be created for the course section specified by course_section_id.
        If not present, events will be created for the entire course."""
        if course_section_id is not None:
            data["course_section_id"] = course_section_id

        # OPTIONAL - events
        """An array of event objects to use."""
        if events is not None:
            data["events"] = events

        # OPTIONAL - events[start_at]
        """Start time for the event"""
        if events_start_at is not None:
            data["events[start_at]"] = events_start_at

        # OPTIONAL - events[end_at]
        """End time for the event"""
        if events_end_at is not None:
            data["events[end_at]"] = events_end_at

        # OPTIONAL - events[location_name]
        """Location name for the event"""
        if events_location_name is not None:
            data["events[location_name]"] = events_location_name

        # OPTIONAL - events[code]
        """A unique identifier that can be used to update the event at a later time
        If one is not specified, an identifier will be generated based on the start and end times"""
        if events_code is not None:
            data["events[code]"] = events_code

        self.logger.debug("POST /api/v1/courses/{course_id}/calendar_events/timetable_events with query params: {params} and form data: {data}".format(params=params, data=data, **path))
        return self.generic_request("POST", "/api/v1/courses/{course_id}/calendar_events/timetable_events".format(**path), data=data, params=params, no_data=True)