From e0d4ba5df4609c9bca7950b28ce853c93b0540a1 Mon Sep 17 00:00:00 2001 From: Manuel Lera-Ramirez Date: Tue, 21 May 2024 18:37:26 +0100 Subject: [PATCH 1/2] redirect repository --- main.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/main.py b/main.py index 7936395..dc5de70 100644 --- a/main.py +++ b/main.py @@ -56,6 +56,8 @@ import ncbi_requests import os from record_stub_route import RecordStubRoute +from starlette.responses import RedirectResponse + record_stubs = os.environ['RECORD_STUBS'] == '1' if 'RECORD_STUBS' in os.environ else False @@ -237,6 +239,12 @@ def repository_id_url_error_handler(exception: URLError, source: RepositoryIdSou raise HTTPException(504, f'Unable to connect to {source.repository_name}: {exception}') +# Redirect to the right repository +@router.post('/repository_id') +async def get_from_repository_id(source: RepositoryIdSource | AddGeneIdSource): + return RedirectResponse(f'/repository_id/{source.repository_name}', status_code=307) + + @router.post( '/repository_id/genbank', response_model=create_model( From c1ad6f75821942b6c3bcb8a1a9c72a2964fc3f5b Mon Sep 17 00:00:00 2001 From: Manuel Lera-Ramirez Date: Wed, 22 May 2024 10:43:05 +0100 Subject: [PATCH 2/2] add tests --- test_endpoints.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/test_endpoints.py b/test_endpoints.py index 419f4d5..996f32e 100644 --- a/test_endpoints.py +++ b/test_endpoints.py @@ -131,6 +131,9 @@ def test_request_gene(self): ) response = client.post('/repository_id/genbank', json=source.model_dump()) self.assertEqual(response.status_code, 200) + payload = response.json() + sequence = read_dsrecord_from_json(TextFileSequence.model_validate(payload['sequences'][0])) + self.assertIn('Ase1', sequence.description) def test_request_wrong_id(self): """Test a wrong Genbank id""" @@ -142,6 +145,19 @@ def test_request_wrong_id(self): response = client.post('/repository_id/genbank', json=source.model_dump()) self.assertEqual(response.status_code, 404) + def test_redirect(self): + """The repository_id endpoint should redirect based on repository_name value""" + source = RepositoryIdSource( + id=1, + repository_name='genbank', + repository_id='NM_001018957.2', + ) + response = client.post('/repository_id', json=source.model_dump()) + self.assertEqual(response.status_code, 200) + payload = response.json() + sequence: Dseqrecord = read_dsrecord_from_json(TextFileSequence.model_validate(payload['sequences'][0])) + self.assertIn('Ase1', sequence.description) + class AddGeneTest(unittest.TestCase): def test_request_plasmid(self): @@ -216,6 +232,19 @@ def test_missing_sequences(self): # TODO url exists but does not match id, or does not match + def test_redirect(self): + """Test repository_id endpoint should redirect based on repository_name value""" + source = AddGeneIdSource( + id=1, + repository_name='addgene', + repository_id='39282', + ) + response = client.post('/repository_id', json=source.model_dump()) + self.assertEqual(response.status_code, 200) + payload = response.json() + sequence: Dseqrecord = read_dsrecord_from_json(TextFileSequence.model_validate(payload['sequences'][0])) + self.assertIn('synthetic circular DNA', sequence.description) + class StickyLigationTest(unittest.TestCase): def test_ligation(self):