diff --git a/app/apis/v0/projects.py b/app/apis/v0/projects.py index d8d722160233a89855fcdf6557f27045b4296935..0f9c06f895a79889cd3fc7296738af708bd16388 100644 --- a/app/apis/v0/projects.py +++ b/app/apis/v0/projects.py @@ -100,3 +100,14 @@ def _update_server_available_size( .values(available_size=available_size) ) session.execute(stmt) + + +@router.get('/{project}', summary='Gets a project.', response_model=Project) +def get_project(project: str, *, session: Session = Depends(get_session)) -> DBProject: + """Gets a project visible to a user.""" + stmt = select(DBProject).where(DBProject.name == project) + db_project = session.execute(stmt).scalars().first() + if db_project is None: + msg = f"The project '{project}' is not known." + raise HTTPException(status.HTTP_404_NOT_FOUND, msg) + return db_project diff --git a/tests/functional/v0/test_projects.py b/tests/functional/v0/test_projects.py index e0c70a1659005de67ca7a753ec92dd1b9d8d4bf5..1e4ba767443e5f97cc5e1c656ac88a997d4af708 100644 --- a/tests/functional/v0/test_projects.py +++ b/tests/functional/v0/test_projects.py @@ -14,13 +14,18 @@ def test_create_project(client: TestClient) -> None: ) response = client.post(f'{settings.API_V0_STR}/projects', json=project.dict()) assert response.status_code == 200, response.json()['detail'] - actual = Project(**response.json()) - assert actual.id is not None - actual.id = project.id - assert actual == project + project_post = Project(**response.json()) + assert project_post.id is not None + project.id = project_post.id + assert project_post == project + + response = client.get(f'{settings.API_V0_STR}/projects/{project.name}') + assert response.status_code == 200, response.json()['detail'] + project_get = Project(**response.json()) + assert project_get == project_post -def test_list_project(client: TestClient) -> None: +def test_list_projects(client: TestClient) -> None: project = Project( name=uid('project'), description=uid(),