Skip to content

Commit 04723d0

Browse files
committed
refactor: rename OrgLibraryGlobData and OrgCourseGlobData
1 parent ad4b55f commit 04723d0

2 files changed

Lines changed: 37 additions & 37 deletions

File tree

openedx_authz/api/data.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
"ContentLibraryData",
2828
"CourseOverviewData",
2929
"GroupingPolicyIndex",
30-
"OrgCourseGlobData",
30+
"OrgCourseOverviewGlobData",
3131
"OrgGlobData",
32-
"OrgLibraryGlobData",
32+
"OrgContentLibraryGlobData",
3333
"PermissionData",
3434
"PolicyIndex",
3535
"RoleAssignmentData",
@@ -177,11 +177,11 @@ def __call__(cls, *args, **kwargs):
177177
1. external_key: Determines subclass from the key format. The namespace prefix
178178
before the first ':' is used to look up the appropriate subclass.
179179
Example: ScopeData(external_key='lib:DemoX:CSPROB') → ContentLibraryData
180-
Example: ScopeData(external_key='lib:DemoX:*') → OrgLibraryGlobData
180+
Example: ScopeData(external_key='lib:DemoX:*') → OrgContentLibraryGlobData
181181
182182
2. namespaced_key: Determines subclass from the namespace prefix before '^'.
183183
Example: ScopeData(namespaced_key='lib^lib:DemoX:CSPROB') → ContentLibraryData
184-
Example: ScopeData(namespaced_key='lib^lib:DemoX:*') → OrgLibraryGlobData
184+
Example: ScopeData(namespaced_key='lib^lib:DemoX:*') → OrgContentLibraryGlobData
185185
186186
Usage patterns:
187187
- namespaced_key: Used when retrieving objects from the policy store
@@ -194,7 +194,7 @@ def __call__(cls, *args, **kwargs):
194194
True
195195
>>> # From glob external key
196196
>>> scope = ScopeData(external_key='lib:DemoX:*')
197-
>>> isinstance(scope, OrgLibraryGlobData)
197+
>>> isinstance(scope, OrgContentLibraryGlobData)
198198
True
199199
>>> # From namespaced key (e.g., policy store)
200200
>>> scope = ScopeData(namespaced_key='lib^lib:DemoX:CSPROB')
@@ -241,9 +241,9 @@ def get_subclass_by_namespaced_key(mcs, namespaced_key: str) -> Type["ScopeData"
241241
>>> ScopeMeta.get_subclass_by_namespaced_key('lib^lib:DemoX:CSPROB')
242242
<class 'ContentLibraryData'>
243243
>>> ScopeMeta.get_subclass_by_namespaced_key('course-v1^course-v1:WGU+*')
244-
<class 'OrgCourseGlobData'>
244+
<class 'OrgCourseOverviewGlobData'>
245245
>>> ScopeMeta.get_subclass_by_namespaced_key('lib^lib:DemoX:*')
246-
<class 'OrgLibraryGlobData'>
246+
<class 'OrgContentLibraryGlobData'>
247247
>>> ScopeMeta.get_subclass_by_namespaced_key('global^generic')
248248
<class 'ScopeData'>
249249
"""
@@ -289,9 +289,9 @@ def get_subclass_by_external_key(mcs, external_key: str) -> Type["ScopeData"]:
289289
>>> ScopeMeta.get_subclass_by_external_key('course-v1:OpenedX+CS101+2024')
290290
<class 'CourseOverviewData'>
291291
>>> ScopeMeta.get_subclass_by_external_key('lib:DemoX:*')
292-
<class 'OrgLibraryGlobData'>
292+
<class 'OrgContentLibraryGlobData'>
293293
>>> ScopeMeta.get_subclass_by_external_key('course-v1:OpenedX+*')
294-
<class 'OrgCourseGlobData'>
294+
<class 'OrgCourseOverviewGlobData'>
295295
296296
Notes:
297297
- The external_key format should be 'namespace:some-identifier' (e.g., 'lib:DemoX:CSPROB').
@@ -638,7 +638,7 @@ def exists(self) -> bool:
638638

639639

640640
@define
641-
class OrgLibraryGlobData(OrgGlobData):
641+
class OrgContentLibraryGlobData(OrgGlobData):
642642
"""Organization-level glob pattern for content libraries.
643643
644644
This class represents glob patterns that match multiple libraries within an organization.
@@ -662,7 +662,7 @@ class OrgLibraryGlobData(OrgGlobData):
662662
- Cannot have wildcards at slug level (``lib:ORG:SLUG*`` is invalid)
663663
664664
Examples:
665-
>>> glob = OrgLibraryGlobData(external_key='lib:DemoX:*')
665+
>>> glob = OrgContentLibraryGlobData(external_key='lib:DemoX:*')
666666
>>> glob.org
667667
'DemoX'
668668
>>> glob.get_object()
@@ -782,7 +782,7 @@ def __repr__(self):
782782

783783

784784
@define
785-
class OrgCourseGlobData(OrgGlobData):
785+
class OrgCourseOverviewGlobData(OrgGlobData):
786786
"""Organization-level glob pattern for courses.
787787
788788
This class represents glob patterns that match multiple courses within an organization.
@@ -806,7 +806,7 @@ class OrgCourseGlobData(OrgGlobData):
806806
- Cannot have wildcards at course or run level (course-v1:ORG+COURSE* is invalid)
807807
808808
Examples:
809-
>>> glob = OrgCourseGlobData(external_key='course-v1:OpenedX+*')
809+
>>> glob = OrgCourseOverviewGlobData(external_key='course-v1:OpenedX+*')
810810
>>> glob.org
811811
'OpenedX'
812812
>>> glob.get_object()

openedx_authz/tests/api/test_data.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
ActionData,
1111
ContentLibraryData,
1212
CourseOverviewData,
13-
OrgCourseGlobData,
14-
OrgLibraryGlobData,
13+
OrgCourseOverviewGlobData,
14+
OrgContentLibraryGlobData,
1515
PermissionData,
1616
RoleAssignmentData,
1717
RoleData,
@@ -238,15 +238,15 @@ def test_scope_data_registration(self):
238238

239239
# Glob registries for organization-level scopes
240240
self.assertIn("lib", ScopeMeta.glob_registry)
241-
self.assertIs(ScopeMeta.glob_registry["lib"], OrgLibraryGlobData)
241+
self.assertIs(ScopeMeta.glob_registry["lib"], OrgContentLibraryGlobData)
242242
self.assertIn("course-v1", ScopeMeta.glob_registry)
243-
self.assertIs(ScopeMeta.glob_registry["course-v1"], OrgCourseGlobData)
243+
self.assertIs(ScopeMeta.glob_registry["course-v1"], OrgCourseOverviewGlobData)
244244

245245
@data(
246246
("course-v1^course-v1:WGU+CS002+2025_T1", CourseOverviewData),
247247
("lib^lib:DemoX:CSPROB", ContentLibraryData),
248-
("lib^lib:DemoX*", OrgLibraryGlobData),
249-
("course-v1^course-v1:OpenedX*", OrgCourseGlobData),
248+
("lib^lib:DemoX*", OrgContentLibraryGlobData),
249+
("course-v1^course-v1:OpenedX*", OrgCourseOverviewGlobData),
250250
("global^generic_scope", ScopeData),
251251
)
252252
@unpack
@@ -265,8 +265,8 @@ def test_dynamic_instantiation_via_namespaced_key(self, namespaced_key, expected
265265
@data(
266266
("course-v1^course-v1:WGU+CS002+2025_T1", CourseOverviewData),
267267
("lib^lib:DemoX:CSPROB", ContentLibraryData),
268-
("lib^lib:DemoX:*", OrgLibraryGlobData),
269-
("course-v1^course-v1:OpenedX+*", OrgCourseGlobData),
268+
("lib^lib:DemoX:*", OrgContentLibraryGlobData),
269+
("course-v1^course-v1:OpenedX+*", OrgCourseOverviewGlobData),
270270
("global^generic", ScopeData),
271271
("unknown^something", ScopeData),
272272
)
@@ -286,8 +286,8 @@ def test_get_subclass_by_namespaced_key(self, namespaced_key, expected_class):
286286
@data(
287287
("course-v1:WGU+CS002+2025_T1", CourseOverviewData),
288288
("lib:DemoX:CSPROB", ContentLibraryData),
289-
("lib:DemoX:*", OrgLibraryGlobData),
290-
("course-v1:OpenedX+*", OrgCourseGlobData),
289+
("lib:DemoX:*", OrgContentLibraryGlobData),
290+
("course-v1:OpenedX+*", OrgCourseOverviewGlobData),
291291
("lib:edX:Demo", ContentLibraryData),
292292
("global:generic_scope", ScopeData),
293293
)
@@ -718,8 +718,8 @@ def test_exists_returns_false_when_library_does_not_exist(self, mock_content_lib
718718

719719
@ddt
720720
@override_settings(OPENEDX_AUTHZ_CONTENT_LIBRARY_MODEL="content_libraries.ContentLibrary")
721-
class TestOrgLibraryGlobData(TestCase):
722-
"""Tests for the OrgLibraryGlobData scope."""
721+
class TestOrgContentLibraryGlobData(TestCase):
722+
"""Tests for the OrgContentLibraryGlobData scope."""
723723

724724
@data(
725725
("lib:DemoX:*", True),
@@ -743,7 +743,7 @@ class TestOrgLibraryGlobData(TestCase):
743743
@unpack
744744
def test_validate_external_key(self, external_key, expected_valid):
745745
"""Validate organization-level library glob external keys."""
746-
self.assertEqual(OrgLibraryGlobData.validate_external_key(external_key), expected_valid)
746+
self.assertEqual(OrgContentLibraryGlobData.validate_external_key(external_key), expected_valid)
747747

748748
@data(
749749
("lib:DemoX:*", "DemoX"),
@@ -756,38 +756,38 @@ def test_validate_external_key(self, external_key, expected_valid):
756756
@unpack
757757
def test_get_org(self, external_key, expected_org):
758758
"""Test organization extraction from library glob pattern."""
759-
self.assertEqual(OrgLibraryGlobData.get_org(external_key), expected_org)
759+
self.assertEqual(OrgContentLibraryGlobData.get_org(external_key), expected_org)
760760

761761
def test_exists_true_when_org_has_libraries_in_db(self):
762762
"""exists() returns True when at least one library with the org exists in the DB."""
763763
org_name = "DemoX"
764764
organization = Organization.objects.create(short_name=org_name)
765765
ContentLibrary.objects.create(org=organization, slug="testlib", title="Test Library")
766766

767-
result = OrgLibraryGlobData(external_key=f"lib:{org_name}:*").exists()
767+
result = OrgContentLibraryGlobData(external_key=f"lib:{org_name}:*").exists()
768768

769769
self.assertTrue(result)
770770

771771
def test_exists_false_when_org_does_not_exist_in_db(self):
772772
"""exists() returns False when the org does not exist in the DB."""
773773
org_name = "DemoX"
774774

775-
result = OrgLibraryGlobData(external_key=f"lib:{org_name}:*").exists()
775+
result = OrgContentLibraryGlobData(external_key=f"lib:{org_name}:*").exists()
776776

777777
self.assertFalse(result)
778778

779779
def test_exists_false_when_org_cannot_be_parsed(self):
780780
"""exists() returns False when org property is None (invalid pattern)."""
781-
scope = OrgLibraryGlobData(external_key="lib:Invalid+*")
781+
scope = OrgContentLibraryGlobData(external_key="lib:Invalid+*")
782782

783783
self.assertIsNone(scope.org)
784784
self.assertFalse(scope.exists())
785785

786786

787787
@ddt
788788
@override_settings(OPENEDX_AUTHZ_COURSE_OVERVIEW_MODEL="course_overviews.CourseOverview")
789-
class TestOrgCourseGlobData(TestCase):
790-
"""Tests for the OrgCourseGlobData scope."""
789+
class TestOrgCourseOverviewGlobData(TestCase):
790+
"""Tests for the OrgCourseOverviewGlobData scope."""
791791

792792
@data(
793793
("course-v1:OpenedX+*", True),
@@ -812,7 +812,7 @@ class TestOrgCourseGlobData(TestCase):
812812
@unpack
813813
def test_validate_external_key(self, external_key, expected_valid):
814814
"""Validate organization-level course glob external keys."""
815-
self.assertEqual(OrgCourseGlobData.validate_external_key(external_key), expected_valid)
815+
self.assertEqual(OrgCourseOverviewGlobData.validate_external_key(external_key), expected_valid)
816816

817817
@data(
818818
("course-v1:OpenedX+*", "OpenedX"),
@@ -823,29 +823,29 @@ def test_validate_external_key(self, external_key, expected_valid):
823823
@unpack
824824
def test_get_org(self, external_key, expected_org):
825825
"""Test organization extraction from course glob pattern."""
826-
self.assertEqual(OrgCourseGlobData.get_org(external_key), expected_org)
826+
self.assertEqual(OrgCourseOverviewGlobData.get_org(external_key), expected_org)
827827

828828
def test_exists_true_when_org_has_courses(self):
829829
"""exists() returns True when at least one course with the org exists."""
830830
org_name = "OpenedX"
831831
Organization.objects.create(short_name=org_name)
832832
CourseOverview.objects.create(org=org_name, display_name="Test Course")
833833

834-
result = OrgCourseGlobData(external_key=f"course-v1:{org_name}+*").exists()
834+
result = OrgCourseOverviewGlobData(external_key=f"course-v1:{org_name}+*").exists()
835835

836836
self.assertTrue(result)
837837

838838
def test_exists_false_when_org_does_not_exist(self):
839839
"""exists() returns False when the org does not exist."""
840840
org_name = "OpenedX"
841841

842-
result = OrgCourseGlobData(external_key=f"course-v1:{org_name}+*").exists()
842+
result = OrgCourseOverviewGlobData(external_key=f"course-v1:{org_name}+*").exists()
843843

844844
self.assertFalse(result)
845845

846846
def test_exists_false_when_org_cannot_be_parsed(self):
847847
"""exists() returns False when org property is None (invalid pattern)."""
848-
scope = OrgCourseGlobData(external_key="course-v1:Invalid:*")
848+
scope = OrgCourseOverviewGlobData(external_key="course-v1:Invalid:*")
849849

850850
self.assertIsNone(scope.org)
851851
self.assertFalse(scope.exists())

0 commit comments

Comments
 (0)