...
Every block from every referenced library is copied in, whether or not it’s necessary.
Library-set default values for settings of referenced library blocks are not exported.
Example of how this can cause issues:
reference a problem from a v1 library in a course.
don’t customize the problem’s title within the course; ie, keep the library-set default title.
export the course.
import the course into another instance without the original library.
the imported problem doesn’t have a title.
(I think this is how it works; haven’t verified the above scenario yet. But I know import/export definitely acts weird for v1 libraries. -Kyle)
Here’s a matrix of the approaches we could take:
Decreasing library centralization ➡ Decreasing size of course exports ⬇ | (a) Library only exists on original instance, so course-library relationship is severed when exporting to other instances. | (b) Library versions are centrally managed by original instance, but replicated on other instances. | (c) Library versions managed in a distributed fashion across instances, identifying versions by git-like hashes. | |
---|---|---|---|---|
(1) Entire library is bundled with the course export. 🥡 = ( 🎓 + 📚 ) | (1a) nonsensical) | (1b) The original library is brought to the new instance along with the course, although the library does not become part of the instance’s list of libraries available for authoring. Instead, the library maintains a connection with the original instance, and can receive updates from the library on that instance. In this sense, the library copy is a replicate of the “centrally” managed library. Pro: Libraries can be used across instances, while still maintaining simplicity of central management. Con: Library bundling increases export size. Challenge: Would need to figure out how to stop remote library keys (from original instance) from clashing with local library keys (on new instance). Challenge: We’d need to figure out the replication strategy. Push-by-original-instance? Or pull-by-new-instance? And, how we keep track of the URL of the original instance? | ( | 2) Necessary pieces of library are bundled with course export. (2a) Essentially, library blocks turn into ordinary blocks when a course is exported. Pro: Courses will work out-of-the-box when exported and imported. We avoid wrestling with cross-instance library versioning altogether. Con: Use of a library is confined to a single instance. 1c) Specific version(s) of each library can be chosen for export. Multiple versions of the same library can be imported into an Open edX instance without disrupting one another, and importing a library at a version does not necessarily mark it as the “newest”. Library versions are uniquely identified and referenced by a hash of their contents, avoiding conflicts that may arise between human-friendly version names/numbers across instances. If the required version of the required library exists on an Open edX instance, then the course automatically uses it. Otherwise, library blocks in the course gracefully degrade to rendering hidden blocks. Example story: https://lucid.app/lucidchart/4950383b-a703-4bd8-b08e-f94a6f144c1a/edit?invitationId=inv_73bdba67-80b6-45d3-9c7b-bf2e5d8e0ac3&page=Mm5j-6d_dnBg# (in the “Import/Export Story” tab, start at the very top and read downwards. |
(2) Necessary pieces of library are bundled with course export. 🥡 = ( 🎓 + 📘 ) 🥡 = 📚 | (2a) Essentially, library blocks turn into ordinary blocks when a course is exported. Pro: Courses will work out-of-the-box when exported and imported. We avoid wrestling with cross-instance library versioning altogether. Con: Use of a library is confined to a single instance. Challenge: Would need to develop a non-library version of randomized content banks.(2b-library version of randomized content banks. | (2b) Same pros and cons of 2b, except:
| (2c) Same pros and cons of the 2b1c, except:
| |
(3) Library is excluded from course export. 🥡 = 🎓 🥡 = 📚 | (3a) nonsensical) | (2b3b) Same pros and cons of the 2b1b, except:
| (3c) Same pros and cons of 1c, except:
|
Ideas: I have a couple competing ideas for how import/export could work…
...