Skip to content

Commit 59cdfe2

Browse files
committed
feat: adds get_container_by_key to authoring api
1 parent c9cbbac commit 59cdfe2

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

  • openedx_learning/apps/authoring/publishing
  • tests/openedx_learning/apps/authoring/units

openedx_learning/apps/authoring/publishing/api.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
"create_container_version",
7272
"create_next_container_version",
7373
"get_container",
74+
"get_container_by_key",
7475
"get_containers",
7576
"ContainerEntityListEntry",
7677
"get_entities_in_container",
@@ -838,6 +839,25 @@ def get_container(pk: int) -> Container:
838839
return Container.objects.get(pk=pk)
839840

840841

842+
def get_container_by_key(learning_package_id: int, /, key: str) -> Container:
843+
"""
844+
[ 🛑 UNSTABLE ]
845+
Get a container by its learning package and primary key.
846+
847+
Args:
848+
learning_package_id: The ID of the learning package that contains the container.
849+
key: The primary key of the container.
850+
851+
Returns:
852+
The container with the given primary key.
853+
"""
854+
entity = get_publishable_entity_by_key(
855+
learning_package_id,
856+
key=key,
857+
)
858+
return get_container(entity.id)
859+
860+
841861
def get_containers(
842862
learning_package_id: int,
843863
container_cls: type[ContainerModel] = Container, # type: ignore[assignment]

tests/openedx_learning/apps/authoring/units/test_api.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,21 @@ def test_get_container(self):
114114
with self.assertNumQueries(0):
115115
assert result.versioning.has_unpublished_changes
116116

117+
def test_get_container_by_key(self):
118+
"""
119+
Test get_container_by_key()
120+
"""
121+
unit = self.create_unit_with_components([])
122+
with self.assertNumQueries(2):
123+
result = authoring_api.get_container_by_key(
124+
self.learning_package.id,
125+
key=unit.publishable_entity.key,
126+
)
127+
assert result == unit.container
128+
# Versioning data should be pre-loaded via select_related()
129+
with self.assertNumQueries(0):
130+
assert result.versioning.has_unpublished_changes
131+
117132
def test_unit_container_versioning(self):
118133
"""
119134
Test that the .versioning helper of a Unit returns a UnitVersion, and

0 commit comments

Comments
 (0)