Updated this to the latest version of develop, got rid of most of the duplication, might be missing some packages in toml, needs testing
This commit is contained in:
@@ -1,17 +1,12 @@
|
||||
import logging
|
||||
import os
|
||||
import uuid
|
||||
from typing import Dict
|
||||
|
||||
from fastapi import HTTPException
|
||||
from pydantic import ValidationError
|
||||
from typing import Dict, List
|
||||
|
||||
from app.configs.constants import FilePaths
|
||||
from app.controllers.abc import IGradeController
|
||||
from app.dtos.speaking import SpeakingGradeTask1And2DTO, SpeakingGradeTask3DTO
|
||||
from app.dtos.writing import WritingGradeTaskDTO
|
||||
from app.helpers import IOHelper
|
||||
from app.helpers import FileHelper
|
||||
from app.services.abc import ISpeakingService, IWritingService, IGradeService
|
||||
from app.utils import handle_exception
|
||||
|
||||
|
||||
class GradeController(IGradeController):
|
||||
@@ -28,47 +23,20 @@ class GradeController(IGradeController):
|
||||
self._logger = logging.getLogger(__name__)
|
||||
|
||||
async def grade_writing_task(self, task: int, data: WritingGradeTaskDTO):
|
||||
try:
|
||||
return await self._writing_service.grade_writing_task(task, data.question, data.answer)
|
||||
except Exception as e:
|
||||
return str(e)
|
||||
return await self._writing_service.grade_writing_task(task, data.question, data.answer)
|
||||
|
||||
async def grade_speaking_task(self, task: int, data: Dict):
|
||||
try:
|
||||
if task in {1, 2}:
|
||||
body = SpeakingGradeTask1And2DTO(**data)
|
||||
return await self._grade_speaking_task_1_2(task, body.question, body.answer)
|
||||
else:
|
||||
body = SpeakingGradeTask3DTO(**data)
|
||||
return await self._grade_speaking_task3(body.answers)
|
||||
except ValidationError as e:
|
||||
raise HTTPException(status_code=422, detail=e.errors())
|
||||
@handle_exception(400)
|
||||
async def grade_speaking_task(self, task: int, answers: List[Dict]) -> Dict:
|
||||
FileHelper.delete_files_older_than_one_day(FilePaths.AUDIO_FILES_PATH)
|
||||
return await self._speaking_service.grade_speaking_task(task, answers)
|
||||
|
||||
async def grade_short_answers(self, data: Dict):
|
||||
return await self._service.grade_short_answers(data)
|
||||
|
||||
async def grading_summary(self, data: Dict):
|
||||
try:
|
||||
section_keys = ['reading', 'listening', 'writing', 'speaking', 'level']
|
||||
extracted_sections = self._extract_existing_sections_from_body(data, section_keys)
|
||||
return await self._service.calculate_grading_summary(extracted_sections)
|
||||
except Exception as e:
|
||||
return str(e)
|
||||
|
||||
async def _grade_speaking_task_1_2(self, task: int, question: str, answer_firebase_path: str):
|
||||
sound_file_name = FilePaths.AUDIO_FILES_PATH + str(uuid.uuid4())
|
||||
try:
|
||||
IOHelper.delete_files_older_than_one_day(FilePaths.AUDIO_FILES_PATH)
|
||||
return await self._speaking_service.grade_speaking_task_1_and_2(
|
||||
task, question, answer_firebase_path, sound_file_name
|
||||
)
|
||||
except Exception as e:
|
||||
os.remove(sound_file_name)
|
||||
return str(e), 400
|
||||
|
||||
async def _grade_speaking_task3(self, answers: Dict):
|
||||
try:
|
||||
IOHelper.delete_files_older_than_one_day(FilePaths.AUDIO_FILES_PATH)
|
||||
return await self._speaking_service.grade_speaking_task_3(answers)
|
||||
except Exception as e:
|
||||
return str(e), 400
|
||||
section_keys = ['reading', 'listening', 'writing', 'speaking', 'level']
|
||||
extracted_sections = self._extract_existing_sections_from_body(data, section_keys)
|
||||
return await self._service.calculate_grading_summary(extracted_sections)
|
||||
|
||||
@staticmethod
|
||||
def _extract_existing_sections_from_body(my_dict, keys_to_extract):
|
||||
|
||||
Reference in New Issue
Block a user