def testCourseNameExport(self): testFilePath = os.path.join(os.path.dirname(__file__), 'data/modulestore_sample.json') pickleFilePath = os.path.join(os.path.dirname(__file__), 'data/modulestore_sample.pkl') importer = ModulestoreImporter(testFilePath, pickleCachePath=pickleFilePath) dest = tempfile.NamedTemporaryFile(prefix='oolala', suffix='.csv') importer.exportCourseNameLookup(dest, addHeader=True) truthFile = open(os.path.join(os.path.dirname(__file__),"data/modulestore_sampleTruth1.csv"), 'r') if UPDATE_TRUTH: self.updateTruth(dest.name, truthFile.name) else: self.assertFileContentEquals(truthFile, dest.name) dest.close()
def testModulestoreImportLookups(self): testFilePath = os.path.join(os.path.dirname(__file__), 'data/modulestore_sample.json') pickleFilePath = os.path.join(os.path.dirname(__file__), 'data/modulestore_sample.pkl') importer = ModulestoreImporter(testFilePath, useCache=True, pickleCachePath=pickleFilePath) # The hash info: self.assertEqual(importer.getDisplayName("Introduction_to_Sociology"), 'Introduction to Sociology') self.assertEqual(importer.getDisplayName("0c6cf38317be42e0829d10cc68e7451b"), 'Quiz') self.assertEqual(importer.getDisplayName("0d6e5f3139e74c88adfdf4c90773f87f"), 'New Unit') self.assertEqual(importer.getOrg("0d6e5f3139e74c88adfdf4c90773f87f"), 'Medicine') self.assertEqual(importer.getCourseShortName("dc9cb4ff0c9241d2b9e075806490f992"), 'HRP258') self.assertEqual(importer.getCategory("Annotation"), 'annotatable') self.assertEqual(importer.getRevision("18b21999d6424f4ca04fe2bbe188fc9e"), 'draft') # Short coursenames to long coursenames: self.assertEqual(importer['SOC131'], 'LaneCollege/SOC131/Introduction_to_Sociology') self.assertEqual(importer.keys(), [u'SOC131']) self.assertEqual(importer.values(), [u'LaneCollege/SOC131/Introduction_to_Sociology']) self.assertEqual(importer.items(), [(u'SOC131', u'LaneCollege/SOC131/Introduction_to_Sociology')])
def ensureHashMapper(cls): ''' Creates facility, ModulestoreImporter, which turns OpenEdX resource IDs into human readable strings. the ModulestoreImporter instance is placed in class variable hashMapper. The Creation can fail, so that variable may remain None after calling this method. Callers must check for this condition. :param cls: this class instance; passed transparently by Python :type cls: Utils ''' # Create a facility that can map resource name hashes # to human-readable strings: if Utils.hashMapper is None and not Utils.attemptedMakeHashMapper: try: Utils.hashMapper = ModulestoreImporter(os.path.join( os.path.dirname(__file__), '../json_to_relation/data/modulestore_latest.json'), useCache=True) except Exception as e: print( "Could not create a ModulestoreImporter in addAnonToActivityGradesTable.py: %s" % ` e `) Utils.attemptedMakeHashMapper = True
# Add json_to_relation source dir to $PATH # for duration of this execution: source_dir = [ os.path.join(os.path.dirname(os.path.abspath(__file__)), "../json_to_relation/") ] source_dir.extend(sys.path) sys.path = source_dir from modulestoreImporter import ModulestoreImporter from edxTrackLogJSONParser import EdXTrackLogJSONParser if __name__ == '__main__': USAGE = 'Usage: lookupOpenEdxHash.py hashStr1 hashstr2 ...' if len(sys.argv) < 2: print(USAGE) sys.exit() hashLookup = ModulestoreImporter(os.path.join( os.path.dirname(__file__), '../json_to_relation/data/modulestore_latest.json'), useCache=True) for hashStr in sys.argv[1:]: match = EdXTrackLogJSONParser.findHashPattern.search(hashStr) if match is not None: print(hashLookup.getDisplayName(match.group(1))) else: print 'None'