From dbe1e0a2bb817a57f40b601b8c578491caaa8c42 Mon Sep 17 00:00:00 2001 From: "Kyle D. McCormick" Date: Wed, 10 Jan 2024 11:46:29 -0500 Subject: [PATCH] feat!: default importdemocourse to the new course & lib --- ...0240110_101228_kyle_importnewdemocourse.md | 1 + tests/commands/test_jobs.py | 19 ++++++++- tutor/commands/jobs.py | 41 +++++++++++++------ 3 files changed, 48 insertions(+), 13 deletions(-) create mode 100644 changelog.d/20240110_101228_kyle_importnewdemocourse.md diff --git a/changelog.d/20240110_101228_kyle_importnewdemocourse.md b/changelog.d/20240110_101228_kyle_importnewdemocourse.md new file mode 100644 index 0000000000..b0a97125e0 --- /dev/null +++ b/changelog.d/20240110_101228_kyle_importnewdemocourse.md @@ -0,0 +1 @@ +- 💥 [Feature] `tutor local do importdemocourse` will now import the new [Open edX Demo Course](https://github.com/openedx/openedx-demo-course), which has been rebuilt from scratch, as well as its new accompanying Demo Content Library. If you wish to import the old demo course instead (which no longer receives updates), you can run: `tutor local do importdemocourse --repo-dir . --version open-release/palm.4`. diff --git a/tests/commands/test_jobs.py b/tests/commands/test_jobs.py index 793931e0db..25147d9535 100644 --- a/tests/commands/test_jobs.py +++ b/tests/commands/test_jobs.py @@ -38,8 +38,25 @@ def test_import_demo_course(self) -> None: self.assertEqual(0, result.exit_code) self.assertIn("cms-job", dc_args) self.assertIn( - "git clone https://github.com/openedx/edx-demo-course", dc_args[-1] + "git clone https://github.com/openedx/openedx-demo-course", dc_args[-1] ) + self.assertIn("Skipped demo library import", dc_args[-1]) + + def test_import_demo_course_and_library(self) -> None: + with temporary_root() as root: + self.invoke_in_root(root, ["config", "save"]) + with patch("tutor.utils.docker_compose") as mock_docker_compose: + result = self.invoke_in_root( + root, ["local", "do", "importdemocourse", "-L", "admin"] + ) + dc_args, _dc_kwargs = mock_docker_compose.call_args + self.assertIsNone(result.exception) + self.assertEqual(0, result.exit_code) + self.assertIn("cms-job", dc_args) + self.assertIn( + "git clone https://github.com/openedx/openedx-demo-course", dc_args[-1] + ) + self.assertIn("./manage.py cms import_content_library ", dc_args[-1]) def test_set_theme(self) -> None: with temporary_root() as root: diff --git a/tutor/commands/jobs.py b/tutor/commands/jobs.py index 562e78d454..49b2ac4daa 100644 --- a/tutor/commands/jobs.py +++ b/tutor/commands/jobs.py @@ -120,20 +120,33 @@ def create_user_template( """ -@click.command(help="Import the demo course") +@click.command(help="Import the demo course and content library") @click.option( "-r", "--repo", - default="https://github.com/openedx/edx-demo-course", + default="https://github.com/openedx/openedx-demo-course", show_default=True, help="Git repository that contains the course to be imported", ) @click.option( "-d", "--repo-dir", - default="", + default="demo-course/course", show_default=True, - help="Git relative subdirectory to import data from", + help="Git relative subdirectory to import course data from", +) +@click.option( + "-l", + "--library-tar", + default="dist/demo-content-library.tar.gz", + show_default=True, + help="Git relative .tar.gz path to import content library from", +) +@click.option( + "-L", + "--library-owner", + show_default=True, + help="Name of Open edX user who will own the library. If omitted, library import will be skipped.", ) @click.option( "-v", @@ -141,16 +154,20 @@ def create_user_template( help="Git branch, tag or sha1 identifier. If unspecified, will default to the value of the OPENEDX_COMMON_VERSION setting.", ) def importdemocourse( - repo: str, repo_dir: str, version: t.Optional[str] + repo: str, + repo_dir: str, + library_tar: str, + library_owner: t.Optional[str], + version: t.Optional[str], ) -> t.Iterable[tuple[str, str]]: version = version or "{{ OPENEDX_COMMON_VERSION }}" - template = f""" -# Import demo course -git clone {repo} --branch {version} --depth 1 /tmp/course -python ./manage.py cms import ../data /tmp/course/{repo_dir} - -# Re-index courses -./manage.py cms reindex_course --all --setup""" + template = f"git clone {repo} --branch {version} --depth 1 /tmp/course" + if library_owner: + template += f"\nyes | ./manage.py cms import_content_library /tmp/course/{library_tar} {library_owner}" + else: + template += "\necho 'WARNING: Skipped demo library import because --library-owner was not provided.'" + template += f"\npython ./manage.py cms import ../data /tmp/course/{repo_dir}" + template += f"\n./manage.py cms reindex_course --all --setup" yield ("cms", template)