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()
示例#4
0
 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
示例#5
0
 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_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()
示例#7
0
 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')
示例#9
0
 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)