From 6e9436dc15c54c95e219c496b29c160be3c7bfeb Mon Sep 17 00:00:00 2001 From: DrNeumann388 Date: Fri, 6 Mar 2026 23:44:15 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D1=8B=20isor?= =?UTF-8?q?t=20=D0=B8=20black?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rating_api/routes/lecturer.py | 8 ++++++++ tests/test_routes/test_lecturer.py | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/rating_api/routes/lecturer.py b/rating_api/routes/lecturer.py index 2175cb9..34b51b7 100644 --- a/rating_api/routes/lecturer.py +++ b/rating_api/routes/lecturer.py @@ -90,6 +90,14 @@ async def update_lecturer_rating( return response_validated +@lecturer.get("/timetable-id/{timetable_id}", response_model=LecturerGet) +async def get_lecturer_by_timetable_id(timetable_id: int) -> LecturerGet: + lecturer: Lecturer = Lecturer.query(session=db.session).filter(LEcturer.timetable_id == timetable_id).one_or_none() + if lecturer is None: + raise ObjectNotFound(Lecturer, timetable_id) + result = LecturerGet.model_validate(lecturer) + return result + @lecturer.get("/{id}", response_model=LecturerGet) async def get_lecturer(id: int, info: list[Literal["comments"]] = Query(default=[])) -> LecturerGet: diff --git a/tests/test_routes/test_lecturer.py b/tests/test_routes/test_lecturer.py index 3d4beed..54fc225 100644 --- a/tests/test_routes/test_lecturer.py +++ b/tests/test_routes/test_lecturer.py @@ -29,6 +29,28 @@ def test_create_lecturer(client, dbsession, response_status): lecturer = dbsession.query(Lecturer).filter(Lecturer.timetable_id == 0).one_or_none() assert lecturer is None +@pytest.mark.parametrize( + 'lecturer_n, response_status', + [ + (0, status.HTTP_200_OK), + (1, status.HTTP_200_OK), + (2, status.HTTP_200_OK), + (3, status.HTTP_404_NOT_FOUND), + ], +) +def test_get_lecturer_by_timetable_id(client, dbsession, lecturers, lecturer_n, response_status): + lecturer = ( + dbsession.query(Lecturer).filter(Lecturer.timetable_id == lecturers[lecturer_n].timetable_id).one_or_none() + ) + timetable_id = -1 + if lecturer: + timetable_id = lecturer.timetable_id + get_response = client.get(f'{url}/timetable-id/{timetable_id}') + assert get_response.status_code == response_status + if response_status == status.HTTP_200_OK: + json_response = get_response.json() + assert json_response["id"] == Lecturer.id + @pytest.mark.parametrize( 'lecturer_n,response_status', From ba9b26fc5d220e1b7e29afb2be1a5f35f2bd640f Mon Sep 17 00:00:00 2001 From: DrNeumann388 Date: Sat, 7 Mar 2026 11:41:37 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BC=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=B4=D0=BE=D1=87=D0=B5=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rating_api/exceptions.py | 2 +- rating_api/routes/lecturer.py | 9 ++++++--- tests/test_routes/test_lecturer.py | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/rating_api/exceptions.py b/rating_api/exceptions.py index 2ac6ca7..6f74963 100644 --- a/rating_api/exceptions.py +++ b/rating_api/exceptions.py @@ -15,7 +15,7 @@ class ObjectNotFound(RatingAPIError): def __init__(self, obj: type, obj_id_or_name: int | str): super().__init__( f"Object {obj.__name__} {obj_id_or_name=} not found", - f"Объект {obj.__name__} с идентификатором {obj_id_or_name} не найден", + f"Объект {obj.__name__} с идентификатором {obj_id_or_name} не найден", ) diff --git a/rating_api/routes/lecturer.py b/rating_api/routes/lecturer.py index 34b51b7..bbcaba4 100644 --- a/rating_api/routes/lecturer.py +++ b/rating_api/routes/lecturer.py @@ -92,11 +92,14 @@ async def update_lecturer_rating( @lecturer.get("/timetable-id/{timetable_id}", response_model=LecturerGet) async def get_lecturer_by_timetable_id(timetable_id: int) -> LecturerGet: - lecturer: Lecturer = Lecturer.query(session=db.session).filter(LEcturer.timetable_id == timetable_id).one_or_none() + """ + Scopes: `["rating.lecturer.read"]` + Возвращает преподавателя по его ID в таблице timetable_id + """ + lecturer: Lecturer = Lecturer.query(session=db.session).filter(Lecturer.timetable_id == timetable_id).one_or_none() if lecturer is None: raise ObjectNotFound(Lecturer, timetable_id) - result = LecturerGet.model_validate(lecturer) - return result + return LecturerGet.model_validate(lecturer) @lecturer.get("/{id}", response_model=LecturerGet) diff --git a/tests/test_routes/test_lecturer.py b/tests/test_routes/test_lecturer.py index 54fc225..f28fee7 100644 --- a/tests/test_routes/test_lecturer.py +++ b/tests/test_routes/test_lecturer.py @@ -49,7 +49,7 @@ def test_get_lecturer_by_timetable_id(client, dbsession, lecturers, lecturer_n, assert get_response.status_code == response_status if response_status == status.HTTP_200_OK: json_response = get_response.json() - assert json_response["id"] == Lecturer.id + assert json_response["id"] == lecturer.id @pytest.mark.parametrize( From 8a57489c671afb850cc80cf74b127749662047b8 Mon Sep 17 00:00:00 2001 From: DrNeumann388 Date: Sat, 7 Mar 2026 11:55:31 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=20scope?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rating_api/routes/lecturer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/rating_api/routes/lecturer.py b/rating_api/routes/lecturer.py index bbcaba4..7f0487b 100644 --- a/rating_api/routes/lecturer.py +++ b/rating_api/routes/lecturer.py @@ -93,7 +93,6 @@ async def update_lecturer_rating( @lecturer.get("/timetable-id/{timetable_id}", response_model=LecturerGet) async def get_lecturer_by_timetable_id(timetable_id: int) -> LecturerGet: """ - Scopes: `["rating.lecturer.read"]` Возвращает преподавателя по его ID в таблице timetable_id """ lecturer: Lecturer = Lecturer.query(session=db.session).filter(Lecturer.timetable_id == timetable_id).one_or_none() From 66926b9de2de755eb177aa534340e283914cbe74 Mon Sep 17 00:00:00 2001 From: DrNeumann388 Date: Sat, 7 Mar 2026 12:33:41 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=80=D1=83=D1=87=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rating_api/routes/lecturer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rating_api/routes/lecturer.py b/rating_api/routes/lecturer.py index 7f0487b..26e72c5 100644 --- a/rating_api/routes/lecturer.py +++ b/rating_api/routes/lecturer.py @@ -93,7 +93,7 @@ async def update_lecturer_rating( @lecturer.get("/timetable-id/{timetable_id}", response_model=LecturerGet) async def get_lecturer_by_timetable_id(timetable_id: int) -> LecturerGet: """ - Возвращает преподавателя по его ID в таблице timetable_id + Возвращает преподавателя по его timetable_id """ lecturer: Lecturer = Lecturer.query(session=db.session).filter(Lecturer.timetable_id == timetable_id).one_or_none() if lecturer is None: