Skip to content

Commit fdd080b

Browse files
authored
Update get resources by batch API (#3)
* Update get_resources_by_batch to return partial results instead of 404 when resources are not found. * update unit tests to reflect updated api behavior
1 parent 19a51f7 commit fdd080b

File tree

3 files changed

+20
-25
lines changed

3 files changed

+20
-25
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ GET /api/resources/find-resources-in-batch?id=riscv-ubuntu-20.04-boot&resource_v
5353

5454
- Each `id` parameter must have a corresponding `resource_version` parameter
5555
- Use `resource_version=None` to retrieve all versions of a resource
56-
- Returns 404 if any requested resource is missing
56+
- Returns a list of resources that were found even if not all requested resources were found.
57+
- Returns an empty list is no resources were found.
5758

5859
### 2. Advanced Resource Search
5960

functions/get_resources_by_batch.py

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -80,23 +80,6 @@ def find_resources_in_batch(req: func.HttpRequest) -> func.HttpResponse:
8080
collection.find({"$or": queries}, RESOURCE_FIELDS)
8181
)
8282

83-
# Check if any resources were found
84-
if not resources:
85-
return create_error_response(
86-
404, "No requested resources were found"
87-
)
88-
89-
# Check if at least one instance of each requested ID is present
90-
found_ids = {resource.get("id") for resource in resources}
91-
missing_ids = set(ids) - found_ids
92-
93-
if missing_ids:
94-
return create_error_response(
95-
404,
96-
"The following requested resources were not found: "
97-
f"{', '.join(missing_ids)}",
98-
)
99-
10083
return func.HttpResponse(
10184
body=json.dumps(resources),
10285
status_code=200,

tests/resources_api_unit_tests.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,14 @@ def test_get_resources_by_batch_not_found_partial(self):
107107
f"{self.base_url}/resources/find-resources-in-batch?{query_string}"
108108
)
109109
response = requests.get(url)
110-
self.assertEqual(response.status_code, 404)
110+
self.assertEqual(response.status_code, 200)
111111
data = response.json()
112-
self.assertIn("error", data)
113-
self.assertIn("non-existent", data["error"])
112+
self.assertIsInstance(data, list)
113+
self.assertEqual(len(data), 1)
114+
115+
found_ids = [r["id"] for r in data]
116+
self.assertEqual(len(found_ids), 1)
117+
self.assertEqual("arm-hello64-static", found_ids[0])
114118

115119
def test_get_resources_by_batch_not_found_all(self):
116120
"""Test batch retrieval where all resources are missing."""
@@ -128,7 +132,10 @@ def test_get_resources_by_batch_not_found_all(self):
128132
f"{self.base_url}/resources/find-resources-in-batch?{query_string}"
129133
)
130134
response = requests.get(url)
131-
self.assertEqual(response.status_code, 404)
135+
self.assertEqual(response.status_code, 200)
136+
data = response.json()
137+
self.assertIsInstance(data, list)
138+
self.assertEqual(len(data), 0)
132139

133140
def test_get_resources_by_batch_mismatched_parameters(self):
134141
"""Test batch retrieval with mismatched number of id and version
@@ -173,10 +180,14 @@ def test_get_resources_by_batch_valid_id_invalid_version(self):
173180
f"{self.base_url}/resources/find-resources-in-batch?{query_string}"
174181
)
175182
response = requests.get(url)
176-
self.assertEqual(response.status_code, 404)
183+
self.assertEqual(response.status_code, 200)
177184
data = response.json()
178-
self.assertIn("error", data)
179-
self.assertIn("riscv-ubuntu-20.04-boot", data["error"])
185+
self.assertIsInstance(data, list)
186+
self.assertEqual(len(data), 1)
187+
188+
found_ids = [r["id"] for r in data]
189+
self.assertEqual(len(found_ids), 1)
190+
self.assertEqual("arm-hello64-static", found_ids[0])
180191

181192
# FILTER ENDPOINT TESTS
182193
def test_get_filters(self):

0 commit comments

Comments
 (0)