Configuring platform wide default advanced settings for new courses?

Hi,

Is there a way to configure platform-wide default advanced settings for new courses ?

In particular, I would like to pre-define the list of advanced modules (i.e. Set default advanced modules list for courses - #9 by mboisson ), the LTI passports, the Certificates overrides, …

Thanks,

Maxime Boissonneault

Bumping this, had the same issue and this should be a straightforward thing to do to reduce friction when creating new courses.

The only way I’ve managed to do this is by toying around with the COURSE_RERUN_COMPLETED and COURSE_CREATED events from the “Open edX Events from Hooks Extensions Framework”. GitHub - openedx/openedx-events: Open edX events from the Hooks Extensions Framework · GitHub

# .. event_type: org.openedx.content_authoring.course.created.v1
# .. event_name: COURSE_CREATED
# .. event_description: Emitted when a course is created.
# .. event_data: CourseData
# .. event_trigger_repository: openedx/edx-platform
COURSE_CREATED = OpenEdxPublicSignal(
    event_type="org.openedx.content_authoring.course.created.v1",
    data={
        "course": CourseData,
    }
)
# .. event_type: org.openedx.content_authoring.course.rerun.completed.v1
# .. event_name: COURSE_RERUN_COMPLETED
# .. event_key_field: catalog_info.course_key
# .. event_description: Fired after a course is re-run
# .. event_data: CourseData
# .. event_trigger_repository: openedx/edx-platform
COURSE_RERUN_COMPLETED = OpenEdxPublicSignal(
    event_type="org.openedx.content_authoring.course.rerun.completed.v1",
    data={
        "course": CourseData,
    }
)

It’s however (at least to me) not so straightforward to implement modifying the course with these and it required lots of digging through the backend source code.

From my experience (can depend on the settings you want to modify) using them for that purpose comes with many caveats and nuances such as:
a) interacting with the complex modulestore
b) proper cache clearing after modifications as the course information is cached on multiple levels (thread-level via modulestore and in redis too, I think)
c) waiting for course related entities to be created (e.g. organization entity gets created later than the event is invoked)
d) moving logic to celery tasks as COURSE_CREATED is called from the web container
etc…