Skip to content

Commit c15624c

Browse files
Merge pull request #171 from ral-facilities/DSEGOG-392-Ensure-there-is-a-12-bit-record-in-the-dev-server-data_delete_subdirectories
Update delete_by_record_id to use subdirectories
2 parents 9fa08d7 + 7b9dba9 commit c15624c

File tree

3 files changed

+84
-18
lines changed

3 files changed

+84
-18
lines changed

operationsgateway_api/src/routes/records.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,17 @@ async def delete_record_by_id(
274274

275275
await Record.delete_record(id_)
276276
echo = EchoInterface()
277+
# In principle historic data might be in the old directory format on Echo, so delete
278+
# in both locations
279+
sub_directories = EchoInterface.format_record_id(record_id=id_)
280+
directory = EchoInterface.format_record_id(record_id=id_, use_subdirectories=False)
281+
277282
log.info("Deleting waveforms for record ID '%s'", id_)
278-
echo.delete_directory(f"{Waveform.echo_prefix}/{id_}/")
283+
echo.delete_directory(f"{Waveform.echo_prefix}/{sub_directories}/")
284+
echo.delete_directory(f"{Waveform.echo_prefix}/{directory}/")
285+
279286
log.info("Deleting images for record ID '%s'", id_)
280-
echo.delete_directory(f"{Image.echo_prefix}/{id_}/")
287+
echo.delete_directory(f"{Image.echo_prefix}/{sub_directories}/")
288+
echo.delete_directory(f"{Image.echo_prefix}/{directory}/")
281289

282290
return Response(status_code=HTTPStatus.NO_CONTENT.value)

test/endpoints/conftest.py

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ async def remove_experiment_fixture():
112112

113113

114114
@pytest_asyncio.fixture(scope="function")
115-
async def data_for_delete_records():
115+
async def record_for_delete_records():
116116
record_id = "19000000000011"
117117
test_record = {
118118
"_id": record_id,
@@ -142,25 +142,51 @@ async def data_for_delete_records():
142142
record_instance = Record(test_record)
143143
await record_instance.insert()
144144

145+
yield record_id
146+
147+
await Record.delete_record(record_id)
148+
149+
150+
@pytest_asyncio.fixture(scope="function")
151+
async def data_for_delete_records(record_for_delete_records: str):
145152
echo = EchoInterface()
153+
image_file = "test-image-channel-id.png"
154+
image_path = f"{Image.echo_prefix}/{record_for_delete_records}/{image_file}"
146155
with open("test/images/original_image.png", "rb") as f:
147-
echo.upload_file_object(
148-
f,
149-
f"{Image.echo_prefix}/{record_id}/test-image-channel-id.png",
150-
)
156+
echo.upload_file_object(f, image_path)
157+
151158
waveform = Waveform(WaveformModel(x=[1.0, 2.0, 3.0], y=[1.0, 2.0, 3.0]))
152159
waveform_bytes = waveform.to_json()
153-
echo.upload_file_object(
154-
waveform_bytes,
155-
f"{Waveform.echo_prefix}/{record_id}/test-waveform-channel-id.json",
160+
waveform_file = "test-waveform-channel-id.json"
161+
waveform_path = (
162+
f"{Waveform.echo_prefix}/{record_for_delete_records}/{waveform_file}"
156163
)
164+
echo.upload_file_object(waveform_bytes, waveform_path)
157165

158-
yield
166+
yield record_for_delete_records
159167

160-
await Record.delete_record(record_id)
161-
echo.delete_file_object(
162-
f"{Image.echo_prefix}/{record_id}/test-image-channel-id.png",
163-
)
164-
echo.delete_file_object(
165-
f"{Waveform.echo_prefix}/{record_id}/test-waveform-channel-id.json",
166-
)
168+
await Record.delete_record(record_for_delete_records)
169+
echo.delete_file_object(image_path)
170+
echo.delete_file_object(waveform_path)
171+
172+
173+
@pytest_asyncio.fixture(scope="function")
174+
async def data_for_delete_records_subdirectories(record_for_delete_records: str):
175+
echo = EchoInterface()
176+
subdirectories = EchoInterface.format_record_id(record_for_delete_records)
177+
image_file = "test-image-channel-id.png"
178+
image_path = f"{Image.echo_prefix}/{subdirectories}/{image_file}"
179+
with open("test/images/original_image.png", "rb") as f:
180+
echo.upload_file_object(f, image_path)
181+
182+
waveform = Waveform(WaveformModel(x=[1.0, 2.0, 3.0], y=[1.0, 2.0, 3.0]))
183+
waveform_bytes = waveform.to_json()
184+
waveform_file = "test-waveform-channel-id.json"
185+
waveform_path = f"{Waveform.echo_prefix}/{subdirectories}/{waveform_file}"
186+
echo.upload_file_object(waveform_bytes, waveform_path)
187+
188+
yield record_for_delete_records
189+
190+
await Record.delete_record(record_for_delete_records)
191+
echo.delete_file_object(image_path)
192+
echo.delete_file_object(waveform_path)

test/endpoints/test_delete_record.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,35 @@ async def test_delete_record_success(
3838
Prefix=f"{Image.echo_prefix}/{record_id}/",
3939
)
4040
assert list(image_query) == []
41+
42+
@pytest.mark.asyncio
43+
async def test_delete_record_subdirectories_success(
44+
self,
45+
test_app: TestClient,
46+
login_and_get_token,
47+
data_for_delete_records_subdirectories: str,
48+
):
49+
delete_response = test_app.delete(
50+
f"/records/{data_for_delete_records_subdirectories}",
51+
headers={"Authorization": f"Bearer {login_and_get_token}"},
52+
)
53+
54+
assert delete_response.status_code == 204
55+
# Checks the record has been deleted from the database
56+
with pytest.raises(MissingDocumentError):
57+
await Record.find_record_by_id(data_for_delete_records_subdirectories, {})
58+
59+
# Check that waveform and image have been removed from Echo
60+
echo = EchoInterface()
61+
subdirectories = EchoInterface.format_record_id(
62+
data_for_delete_records_subdirectories,
63+
)
64+
waveform_query = echo.bucket.objects.filter(
65+
Prefix=f"{Waveform.echo_prefix}/{subdirectories}/",
66+
)
67+
assert list(waveform_query) == []
68+
69+
image_query = echo.bucket.objects.filter(
70+
Prefix=f"{Image.echo_prefix}/{subdirectories}/",
71+
)
72+
assert list(image_query) == []

0 commit comments

Comments
 (0)