From 84f531af54f91f7aa1ef7e28afc698db778c49c4 Mon Sep 17 00:00:00 2001 From: ichuang Date: Fri, 12 Jul 2013 13:40:55 +0000 Subject: [PATCH 1/5] add export_all_courses management script to cms --- .../management/commands/export.py | 2 +- .../management/commands/export_all_courses.py | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 cms/djangoapps/contentstore/management/commands/export_all_courses.py diff --git a/cms/djangoapps/contentstore/management/commands/export.py b/cms/djangoapps/contentstore/management/commands/export.py index eb7800d46c..0087fdddcb 100644 --- a/cms/djangoapps/contentstore/management/commands/export.py +++ b/cms/djangoapps/contentstore/management/commands/export.py @@ -14,7 +14,7 @@ unnamed_modules = 0 class Command(BaseCommand): - help = 'Import the specified data directory into the default ModuleStore' + help = 'Export the specified data directory into the default ModuleStore' def handle(self, *args, **options): if len(args) != 2: diff --git a/cms/djangoapps/contentstore/management/commands/export_all_courses.py b/cms/djangoapps/contentstore/management/commands/export_all_courses.py new file mode 100644 index 0000000000..978418ba7b --- /dev/null +++ b/cms/djangoapps/contentstore/management/commands/export_all_courses.py @@ -0,0 +1,49 @@ +### +### Script for exporting all courseware from Mongo to a directory +### +import os + +from django.core.management.base import BaseCommand, CommandError +from xmodule.modulestore.xml_exporter import export_to_xml +from xmodule.modulestore.django import modulestore +from xmodule.contentstore.django import contentstore +from xmodule.course_module import CourseDescriptor + + +unnamed_modules = 0 + + +class Command(BaseCommand): + help = 'Export all courses from mongo to the specified data directory' + + def handle(self, *args, **options): + if len(args) != 1: + raise CommandError("import requires one argument: ") + + output_path = args[0] + + cs = contentstore() + ms = modulestore('direct') + root_dir = output_path + courses = ms.get_courses() + + print "%d courses to export:" % len(courses) + cids = [x.id for x in courses] + print cids + + for course_id in cids: + + print "-"*77 + print "Exporting course id = {0} to {1}".format(course_id, output_path) + + if 1: + try: + location = CourseDescriptor.id_to_location(course_id) + course_dir = course_id.replace('/','...') + export_to_xml(ms, cs, location, root_dir, course_dir) + except Exception as err: + print "="*30 + "> Oops, failed to export %s" % course_id + print "Error:" + print err + + From 84c38b4e9a58e6ea2c317212a8fe96dc58195c32 Mon Sep 17 00:00:00 2001 From: ichuang Date: Fri, 12 Jul 2013 09:43:52 -0400 Subject: [PATCH 2/5] fix two typos in export scripts --- cms/djangoapps/contentstore/management/commands/export.py | 2 +- .../contentstore/management/commands/export_all_courses.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cms/djangoapps/contentstore/management/commands/export.py b/cms/djangoapps/contentstore/management/commands/export.py index 0087fdddcb..52a5eb265b 100644 --- a/cms/djangoapps/contentstore/management/commands/export.py +++ b/cms/djangoapps/contentstore/management/commands/export.py @@ -18,7 +18,7 @@ class Command(BaseCommand): def handle(self, *args, **options): if len(args) != 2: - raise CommandError("import requires two arguments: ") + raise CommandError("export requires two arguments: ") course_id = args[0] output_path = args[1] diff --git a/cms/djangoapps/contentstore/management/commands/export_all_courses.py b/cms/djangoapps/contentstore/management/commands/export_all_courses.py index 978418ba7b..5d0adaa315 100644 --- a/cms/djangoapps/contentstore/management/commands/export_all_courses.py +++ b/cms/djangoapps/contentstore/management/commands/export_all_courses.py @@ -18,7 +18,7 @@ class Command(BaseCommand): def handle(self, *args, **options): if len(args) != 1: - raise CommandError("import requires one argument: ") + raise CommandError("export requires one argument: ") output_path = args[0] From 08b8438dda9a5e6ec2e8b4b3136a189160bf561d Mon Sep 17 00:00:00 2001 From: ichuang Date: Fri, 12 Jul 2013 14:10:16 +0000 Subject: [PATCH 3/5] add extra modulestore() argument to export to make it export drafts also --- .../contentstore/management/commands/export_all_courses.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cms/djangoapps/contentstore/management/commands/export_all_courses.py b/cms/djangoapps/contentstore/management/commands/export_all_courses.py index 5d0adaa315..3c7c398e94 100644 --- a/cms/djangoapps/contentstore/management/commands/export_all_courses.py +++ b/cms/djangoapps/contentstore/management/commands/export_all_courses.py @@ -40,7 +40,7 @@ class Command(BaseCommand): try: location = CourseDescriptor.id_to_location(course_id) course_dir = course_id.replace('/','...') - export_to_xml(ms, cs, location, root_dir, course_dir) + export_to_xml(ms, cs, location, root_dir, course_dir, modulestore()) except Exception as err: print "="*30 + "> Oops, failed to export %s" % course_id print "Error:" From c53dd97f79827a3cfd818cf90f88f6bc94319cd4 Mon Sep 17 00:00:00 2001 From: ichuang Date: Fri, 12 Jul 2013 14:11:20 +0000 Subject: [PATCH 4/5] add extra modulestore() argument to single export script --- cms/djangoapps/contentstore/management/commands/export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cms/djangoapps/contentstore/management/commands/export.py b/cms/djangoapps/contentstore/management/commands/export.py index 52a5eb265b..90db8750d9 100644 --- a/cms/djangoapps/contentstore/management/commands/export.py +++ b/cms/djangoapps/contentstore/management/commands/export.py @@ -30,4 +30,4 @@ class Command(BaseCommand): root_dir = os.path.dirname(output_path) course_dir = os.path.splitext(os.path.basename(output_path))[0] - export_to_xml(modulestore('direct'), contentstore(), location, root_dir, course_dir) + export_to_xml(modulestore('direct'), contentstore(), location, root_dir, course_dir, modulestore()) From 8b6a55e2a85e51b3dfe5e62c465239bd6290c865 Mon Sep 17 00:00:00 2001 From: ichuang Date: Fri, 12 Jul 2013 19:58:16 -0400 Subject: [PATCH 5/5] fix pep-8 in export_all_courses --- .../contentstore/management/commands/export_all_courses.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cms/djangoapps/contentstore/management/commands/export_all_courses.py b/cms/djangoapps/contentstore/management/commands/export_all_courses.py index 3c7c398e94..69cfb298fb 100644 --- a/cms/djangoapps/contentstore/management/commands/export_all_courses.py +++ b/cms/djangoapps/contentstore/management/commands/export_all_courses.py @@ -39,11 +39,9 @@ class Command(BaseCommand): if 1: try: location = CourseDescriptor.id_to_location(course_id) - course_dir = course_id.replace('/','...') + course_dir = course_id.replace('/', '...') export_to_xml(ms, cs, location, root_dir, course_dir, modulestore()) except Exception as err: print "="*30 + "> Oops, failed to export %s" % course_id print "Error:" print err - -