Skip to content

Commit 79e5d00

Browse files
committed
fix: COntext manager
1 parent ae04e35 commit 79e5d00

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

src/c2pa/c2pa.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1560,19 +1560,18 @@ def __del__(self):
15601560
self._cleanup_resources()
15611561

15621562
def _ensure_valid_state(self):
1563-
"""Ensure the reader is in a valid state for operations.
1563+
"""Ensure the Reader is in a valid state for operations.
15641564
15651565
Raises:
1566-
C2paError: If the reader is closed, not initialized, invalid, or
1567-
has no manifest to read
1566+
C2paError: If the Reader is closed, not initialized, invalid, or
1567+
has no manifest to read.
15681568
"""
1569+
# self._no_manifest_to_read is a valid state, albeit an empty one
15691570
if self._closed:
15701571
raise C2paError(Reader._ERROR_MESSAGES['closed_error'])
15711572
if not self._initialized:
15721573
raise C2paError(Reader._ERROR_MESSAGES['not_initialized_error'])
1573-
if self._no_manifest_to_read:
1574-
raise C2paError(Reader._ERROR_MESSAGES['no_manifest_error'])
1575-
if not self._reader:
1574+
if not self._reader and not self._no_manifest_to_read:
15761575
raise C2paError(Reader._ERROR_MESSAGES['closed_error'])
15771576

15781577
def _cleanup_resources(self):
@@ -2233,6 +2232,7 @@ class Builder:
22332232
'cleanup_error': "Error during cleanup: {}",
22342233
'builder_cleanup': "Error cleaning up builder: {}",
22352234
'closed_error': "Builder is closed",
2235+
'not_initialized_error': "Builder is not properly initialized",
22362236
'manifest_error': "Invalid manifest data: must be string or dict",
22372237
'url_error': "Error setting remote URL: {}",
22382238
'resource_error': "Error adding resource: {}",
@@ -2415,7 +2415,7 @@ def _ensure_valid_state(self):
24152415
if self._closed:
24162416
raise C2paError(Builder._ERROR_MESSAGES['closed_error'])
24172417
if not self._initialized:
2418-
raise C2paError("Builder is not properly initialized")
2418+
raise C2paError(Builder._ERROR_MESSAGES['not_initialized_error'])
24192419
if not self._builder:
24202420
raise C2paError(Builder._ERROR_MESSAGES['closed_error'])
24212421

tests/test_unit_tests.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ def test_get_active_manifest(self):
8585
expected_label = "contentauth:urn:uuid:c85a2b90-f1a0-4aa4-b17f-f938b475804e"
8686
self.assertEqual(active_manifest["label"], expected_label)
8787

88+
def test_get_active_manifest_no_manifest(self):
89+
with open(INGREDIENT_TEST_FILE, "rb") as file:
90+
reader = Reader("image/jpeg", file)
91+
self.assertIsNone(reader.get_active_manifest())
92+
8893
def test_get_manifest_from_label(self):
8994
with open(self.testPath, "rb") as file:
9095
reader = Reader("image/jpeg", file)
@@ -98,6 +103,15 @@ def test_get_manifest_from_label(self):
98103
active_manifest = reader.get_active_manifest()
99104
self.assertEqual(manifest, active_manifest)
100105

106+
def test_get_manifest_from_label_no_manifest(self):
107+
with open(INGREDIENT_TEST_FILE, "rb") as file:
108+
reader = Reader("image/jpeg", file)
109+
110+
# Test getting manifest by the specific label
111+
label = "contentauth:urn:uuid:c85a2b90-f1a0-4aa4-b17f-f938b475804e"
112+
manifest = reader.get_manifest_from_label(label)
113+
self.assertIsNone(manifest)
114+
101115
def test_stream_get_non_active_manifest_by_label(self):
102116
video_path = os.path.join(FIXTURES_DIR, "video1.mp4")
103117
with open(video_path, "rb") as file:
@@ -184,6 +198,11 @@ def test_stream_read_filepath_as_stream_and_parse(self):
184198
title = manifest_store["manifests"][manifest_store["active_manifest"]]["title"]
185199
self.assertEqual(title, DEFAULT_TEST_FILE_NAME)
186200

201+
def test_read_no_manifest_context_manager(self):
202+
with Reader("image/jpeg", INGREDIENT_TEST_FILE) as reader:
203+
self.assertIsNone(reader.json())
204+
self.assertIsNone(reader.get_active_manifest())
205+
187206
def test_reader_double_close(self):
188207
with open(self.testPath, "rb") as file:
189208
reader = Reader("image/jpeg", file)

0 commit comments

Comments
 (0)