def test_replace(self): # pylint: disable=no-member org1, lib1, block_type1, block_id1 = "org1", "lib1", "type1", "id1" lib_key1 = LibraryLocator(org=org1, library=lib1) usage1 = LibraryUsageLocator(library_key=lib_key1, block_type=block_type1, block_id=block_id1) self.assertEqual(usage1.org, org1) self.assertEqual(usage1.library_key, lib_key1) org2, lib2 = "org2", "lib2" lib_key2 = LibraryLocator(org=org2, library=lib2) usage2 = usage1.replace(library_key=lib_key2) self.assertEqual(usage2.library_key, lib_key2) self.assertEqual(usage2.course_key, lib_key2) self.assertEqual(usage2.block_type, block_type1) # Unchanged self.assertEqual(usage2.block_id, block_id1) # Unchanged block_id3 = "id3" lib3 = "lib3" usage3 = usage1.replace(block_id=block_id3, library=lib3) self.assertEqual(usage3.library_key.org, org1) self.assertEqual(usage3.library_key.library, lib3) self.assertEqual(usage2.block_type, block_type1) # Unchanged self.assertEqual(usage3.block_id, block_id3) lib_key4 = LibraryLocator(org="org4", library="lib4") usage4 = usage1.replace(course_key=lib_key4) self.assertEqual(usage4.library_key, lib_key4) self.assertEqual(usage4.course_key, lib_key4) self.assertEqual(usage4.block_type, block_type1) # Unchanged self.assertEqual(usage4.block_id, block_id1) # Unchanged usage5a = usage1.replace(version='aaaaaaaaaaaaaaaaaaaaaaaa') usage5b = usage1.replace( version_guid=ObjectId('bbbbbbbbbbbbbbbbbbbbbbbb')) usage5c = usage1.for_version(ObjectId('cccccccccccccccccccccccc')) self.assertEqual(usage5a.library_key.version_guid, ObjectId('aaaaaaaaaaaaaaaaaaaaaaaa')) self.assertEqual(usage5b.course_key.version_guid, ObjectId('bbbbbbbbbbbbbbbbbbbbbbbb')) self.assertEqual(usage5c.version_guid, ObjectId('cccccccccccccccccccccccc')) self.assertEqual(usage5a.block_type, block_type1) # Unchanged self.assertEqual(usage5a.block_id, block_id1) # Unchanged self.assertEqual(usage5b.block_type, block_type1) # Unchanged self.assertEqual(usage5b.block_id, block_id1) # Unchanged self.assertEqual(usage5c.block_type, block_type1) # Unchanged self.assertEqual(usage5c.block_id, block_id1) # Unchanged usage6 = usage5a.version_agnostic() self.assertEqual(usage6, usage1) usage7 = usage1.for_branch('tribble') self.assertEqual(usage7.branch, 'tribble') self.assertEqual(usage7.library_key.branch, 'tribble')
def test_no_deprecated_support(self): lib_key = LibraryLocator(org="TestX", library="problem-bank-15") with self.assertRaises(InvalidKeyError): LibraryUsageLocator(library_key=lib_key, block_type="html", block_id="html1", deprecated=True)
def test_lib_usage_locator_no_deprecated_support(self): with self.assertRaises(NotImplementedError): LibraryUsageLocator._from_deprecated_string("1/2/3") # pylint: disable=protected-access lib_key = LibraryLocator(org="TestX", library="lib") usage = LibraryUsageLocator(library_key=lib_key, block_type="html", block_id="123") with self.assertRaises(NotImplementedError): usage._to_deprecated_string() # pylint: disable=protected-access with self.assertRaises(NotImplementedError): LibraryUsageLocator._from_deprecated_son("", "") # pylint: disable=protected-access with self.assertRaises(NotImplementedError): usage.to_deprecated_son()
def _display_name_filter(self, library, display_name): """ Filters library children by capa type""" search_engine = SearchEngine.get_search_engine(index="library_index") if search_engine: log.warn("search engine found") filter_clause = { "library": unicode(normalize_key_for_search(library.location.library_key)), # "content_type": CapaDescriptor.INDEX_CONTENT_TYPE, # "display_name": display_name } search_result = search_engine.search(field_dictionary=filter_clause) new_results = search_result.get('results', []) results = [] for r in new_results: v = self.deep_search(["display_name"], r) if v['display_name'] == display_name: results.append(r) return [LibraryUsageLocator.from_string(item['data']['id']) for item in results] else: log.warn("search engine NOT found") #return [key for key in library.children if self._filter_child_name(key, display_name)] results = [] for r in library.children: p = self.store.get_item(r, 1) v = {} for field in p.fields.values(): v[field.name] = field.read_json(p) # v = p.get_explicitly_set_fields_by_scope(Scope.settings) if v.get('display_name') == display_name: results.append(r) return results
def _problem_type_filter(self, library, capa_type): """ Filters library children by capa type""" search_engine = SearchEngine.get_search_engine(index="library_index") if search_engine: filter_clause = { "library": six.text_type( normalize_key_for_search(library.location.library_key)), "content_type": ProblemBlock.INDEX_CONTENT_TYPE, "problem_types": capa_type } search_result = search_engine.search( field_dictionary=filter_clause) results = search_result.get('results', []) return [ LibraryUsageLocator.from_string(item['data']['id']) for item in results ] else: return [ key for key in library.children if self._filter_child(key, capa_type) ]
def test_lib_key_make_usage_key(self): lib_key = CourseKey.from_string('library-v1:TestX+lib1') usage_key = LibraryUsageLocator(lib_key, 'html', 'html17') made = lib_key.make_usage_key('html', 'html17') self.assertEqual(usage_key, made) self.assertEqual( text_type(usage_key), text_type(made) )
def test_replace(self): # pylint: disable=no-member org1, lib1, block_type1, block_id1 = "org1", "lib1", "type1", "id1" lib_key1 = LibraryLocator(org=org1, library=lib1) usage1 = LibraryUsageLocator(library_key=lib_key1, block_type=block_type1, block_id=block_id1) self.assertEqual(usage1.org, org1) self.assertEqual(usage1.library_key, lib_key1) org2, lib2 = "org2", "lib2" lib_key2 = LibraryLocator(org=org2, library=lib2) usage2 = usage1.replace(library_key=lib_key2) self.assertEqual(usage2.library_key, lib_key2) self.assertEqual(usage2.course_key, lib_key2) self.assertEqual(usage2.block_type, block_type1) # Unchanged self.assertEqual(usage2.block_id, block_id1) # Unchanged block_id3 = "id3" lib3 = "lib3" usage3 = usage1.replace(block_id=block_id3, library=lib3) self.assertEqual(usage3.library_key.org, org1) self.assertEqual(usage3.library_key.library, lib3) self.assertEqual(usage2.block_type, block_type1) # Unchanged self.assertEqual(usage3.block_id, block_id3) lib_key4 = LibraryLocator(org="org4", library="lib4") usage4 = usage1.replace(course_key=lib_key4) self.assertEqual(usage4.library_key, lib_key4) self.assertEqual(usage4.course_key, lib_key4) self.assertEqual(usage4.block_type, block_type1) # Unchanged self.assertEqual(usage4.block_id, block_id1) # Unchanged usage5a = usage1.replace(version='aaaaaaaaaaaaaaaaaaaaaaaa') usage5b = usage1.replace(version_guid=ObjectId('bbbbbbbbbbbbbbbbbbbbbbbb')) usage5c = usage1.for_version(ObjectId('cccccccccccccccccccccccc')) self.assertEqual(usage5a.library_key.version_guid, ObjectId('aaaaaaaaaaaaaaaaaaaaaaaa')) self.assertEqual(usage5b.course_key.version_guid, ObjectId('bbbbbbbbbbbbbbbbbbbbbbbb')) self.assertEqual(usage5c.version_guid, ObjectId('cccccccccccccccccccccccc')) self.assertEqual(usage5a.block_type, block_type1) # Unchanged self.assertEqual(usage5a.block_id, block_id1) # Unchanged self.assertEqual(usage5b.block_type, block_type1) # Unchanged self.assertEqual(usage5b.block_id, block_id1) # Unchanged self.assertEqual(usage5c.block_type, block_type1) # Unchanged self.assertEqual(usage5c.block_id, block_id1) # Unchanged usage6 = usage5a.version_agnostic() self.assertEqual(usage6, usage1) usage7 = usage1.for_branch('tribble') self.assertEqual(usage7.branch, 'tribble') self.assertEqual(usage7.library_key.branch, 'tribble')
def _problem_type_filter(self, library, capa_type): """ Filters library children by capa type""" search_engine = SearchEngine.get_search_engine(index="library_index") if search_engine: filter_clause = { "library": unicode(normalize_key_for_search(library.location.library_key)), "content_type": CapaDescriptor.INDEX_CONTENT_TYPE, "problem_types": capa_type } search_result = search_engine.search(field_dictionary=filter_clause) results = search_result.get('results', []) return [LibraryUsageLocator.from_string(item['data']['id']) for item in results] else: return [key for key in library.children if self._filter_child(key, capa_type)]
def test_constructor(self, org, lib, block_type, block_id): lib_key = LibraryLocator(org=org, library=lib) lib_usage_key = LibraryUsageLocator(library_key=lib_key, block_type=block_type, block_id=block_id) lib_usage_key2 = UsageKey.from_string( f"lib-block-v1:{org}+{lib}+{BLOCK_TYPE_PREFIX}" f"@{block_type}+{BLOCK_PREFIX}@{block_id}") self.assertEqual(lib_usage_key, lib_usage_key2) self.assertEqual(lib_usage_key.library_key, lib_key) self.assertEqual(lib_usage_key.library_key, lib_key) self.assertEqual(lib_usage_key.branch, None) self.assertEqual(lib_usage_key.run, LibraryLocator.RUN) self.assertIsInstance(lib_usage_key2, LibraryUsageLocator) self.assertIsInstance(lib_usage_key2.library_key, LibraryLocator)
def test_constructor(self, org, lib, block_type, block_id): lib_key = LibraryLocator(org=org, library=lib) lib_usage_key = LibraryUsageLocator(library_key=lib_key, block_type=block_type, block_id=block_id) lib_usage_key2 = UsageKey.from_string( u"lib-block-v1:{}+{}+{}@{}+{}@{}".format(org, lib, BLOCK_TYPE_PREFIX, block_type, BLOCK_PREFIX, block_id)) self.assertEqual(lib_usage_key, lib_usage_key2) self.assertEqual(lib_usage_key.library_key, lib_key) self.assertEqual(lib_usage_key.library_key, lib_key) self.assertEqual(lib_usage_key.branch, None) self.assertEqual(lib_usage_key.run, LibraryLocator.RUN) self.assertIsInstance(lib_usage_key2, LibraryUsageLocator) self.assertIsInstance(lib_usage_key2.library_key, LibraryLocator)
def test_constructor_invalid(self, kwargs): lib_key = LibraryLocator(org="TestX", library="problem-bank-15") with self.assertRaises(InvalidKeyError): LibraryUsageLocator(library_key=lib_key, **kwargs)