Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ exclude = [
]
venvPath = "."
venv = ".venv"
reportShadowedImports = false

[tool.ruff]
line-length = 88
Expand Down
6 changes: 5 additions & 1 deletion wacruit/src/apps/announcement/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
from .views import v1_router as router
from .views import v1_router

router = v1_router

__all__ = ["router"]
2 changes: 1 addition & 1 deletion wacruit/src/apps/announcement/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

from sqlalchemy import DateTime
from sqlalchemy import String
from sqlalchemy import text
from sqlalchemy import Text
from sqlalchemy import text
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column

Expand Down
2 changes: 1 addition & 1 deletion wacruit/src/apps/announcement/repositories.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
from sqlalchemy.orm import Session

from wacruit.src.apps.announcement.models import Announcement
from wacruit.src.database.connection import get_db_session
from wacruit.src.database.connection import Transaction
from wacruit.src.database.connection import get_db_session


class AnnouncementRepository:
Expand Down
5 changes: 4 additions & 1 deletion wacruit/src/apps/common/schemas.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
from typing import Any, Generic, Iterable, TypeVar
from typing import Any
from typing import Generic
from typing import Iterable
from typing import TypeVar

from pydantic import BaseModel
from pydantic.generics import GenericModel
Expand Down
6 changes: 5 additions & 1 deletion wacruit/src/apps/dummy/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
from .views import v1_router as router
from .views import v1_router

router = v1_router

__all__ = ["router"]
6 changes: 5 additions & 1 deletion wacruit/src/apps/faq/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
from .views import v3_router as router
from .views import v3_router

router = v3_router

__all__ = ["router"]
2 changes: 1 addition & 1 deletion wacruit/src/apps/faq/repositories.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
from sqlalchemy.orm import Session

from wacruit.src.apps.faq.models import FAQ
from wacruit.src.database.connection import get_db_session
from wacruit.src.database.connection import Transaction
from wacruit.src.database.connection import get_db_session


class QuestionRepository:
Expand Down
3 changes: 1 addition & 2 deletions wacruit/src/apps/faq/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from fastapi import Depends

from wacruit.src.apps.common.schemas import ListResponse
from wacruit.src.apps.faq.models import FAQ
from wacruit.src.apps.faq.schemas import CreateQuestionRequest
from wacruit.src.apps.faq.schemas import QuestionResponse
from wacruit.src.apps.faq.schemas import UpdateQuestionRequest
Expand All @@ -17,7 +16,7 @@

@v3_router.get(path="", status_code=HTTPStatus.OK)
def get_questions(
question_service: Annotated[QuestionService, Depends()]
question_service: Annotated[QuestionService, Depends()],
) -> ListResponse[QuestionResponse]:
res = question_service.get_questions()
items = []
Expand Down
6 changes: 5 additions & 1 deletion wacruit/src/apps/history/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
from .views import v3_router as router
from .views import v3_router

router = v3_router

__all__ = ["router"]
3 changes: 1 addition & 2 deletions wacruit/src/apps/history/repositories.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@
from typing import List

from fastapi import Depends
from sqlalchemy import delete
from sqlalchemy import select
from sqlalchemy.orm import Session

from wacruit.src.apps.history.models import History
from wacruit.src.database.connection import get_db_session
from wacruit.src.database.connection import Transaction
from wacruit.src.database.connection import get_db_session


class HistoryRepository:
Expand Down
2 changes: 0 additions & 2 deletions wacruit/src/apps/history/services.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from datetime import datetime

from fastapi import Depends

from wacruit.src.apps.history.exceptions import HistoryNotFoundException
Expand Down
3 changes: 1 addition & 2 deletions wacruit/src/apps/hodu/config.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from fastapi.security import api_key
from pydantic import BaseSettings

from wacruit.src.secrets import OCISecretManager
Expand All @@ -9,7 +8,7 @@ class HoduAPIConfig(BaseSettings):
url: str = ""
api_key: str = ""

class Config:
class Config(BaseSettings.Config):
case_sensitive = False
env_prefix = "HODU_"
env_file = settings.env_files
Expand Down
6 changes: 3 additions & 3 deletions wacruit/src/apps/hodu/repositories.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from datetime import timedelta
from typing import Iterable

from fastapi import Depends
from httpx import AsyncClient
Expand All @@ -9,14 +8,15 @@
from tenacity.stop import stop_after_attempt
from tenacity.wait import wait_fixed

from wacruit.src.apps.hodu.schemas import HoduSubmitError
from wacruit.src.apps.hodu.schemas import HoduSubmitErrorResponse
from wacruit.src.apps.hodu.schemas import HoduSubmitRequest
from wacruit.src.apps.hodu.schemas import HoduSubmitResponse
from wacruit.src.utils.mixins import LoggingMixin

from .connections import get_hodu_api_client

HTTP_CLIENT_ERROR_STATUS_CODE = 400


class HoduApiRepository(LoggingMixin):
def __init__(self, client: AsyncClient = Depends(get_hodu_api_client)):
Expand All @@ -37,7 +37,7 @@ def _parse_response(
self, response: Response
) -> HoduSubmitResponse | HoduSubmitErrorResponse:
try:
if response.status_code >= 400:
if response.status_code >= HTTP_CLIENT_ERROR_STATUS_CODE:
self.logger.error(
"HODU API ERROR for sending %s / status code: %d / response: %s",
response.url,
Expand Down
71 changes: 35 additions & 36 deletions wacruit/src/apps/hodu/schemas.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
from enum import StrEnum
from subprocess import STDOUT
from typing import Self
from xmlrpc.client import INTERNAL_ERROR

from MySQLdb import TIME
from pydantic import BaseModel
from pydantic import Field

Expand Down Expand Up @@ -68,43 +64,46 @@ class HoduSubmitStatus(StrEnum):
INTERNAL_ERROR = "INTERNAL_ERROR"

def to_submission_result_status(self) -> CodeSubmissionResultStatus:
match self:
case HoduSubmitStatus.CORRECT:
return CodeSubmissionResultStatus.CORRECT
case HoduSubmitStatus.WRONG:
return CodeSubmissionResultStatus.WRONG
case HoduSubmitStatus.COMPILE_ERROR:
return CodeSubmissionResultStatus.COMPILE_ERROR
case HoduSubmitStatus.RUNTIME_ERROR:
return CodeSubmissionResultStatus.RUNTIME_ERROR
case HoduSubmitStatus.TIME_LIMIT_EXCEEDED:
return CodeSubmissionResultStatus.TIME_LIMIT_EXCEEDED
case HoduSubmitStatus.MEMORY_LIMIT_EXCEEDED:
return CodeSubmissionResultStatus.MEMORY_LIMIT_EXCEEDED
case HoduSubmitStatus.INTERNAL_ERROR:
return CodeSubmissionResultStatus.INTERNAL_SERVER_ERROR
status_map = {
HoduSubmitStatus.CORRECT: CodeSubmissionResultStatus.CORRECT,
HoduSubmitStatus.WRONG: CodeSubmissionResultStatus.WRONG,
HoduSubmitStatus.COMPILE_ERROR: CodeSubmissionResultStatus.COMPILE_ERROR,
HoduSubmitStatus.RUNTIME_ERROR: CodeSubmissionResultStatus.RUNTIME_ERROR,
HoduSubmitStatus.TIME_LIMIT_EXCEEDED: (
CodeSubmissionResultStatus.TIME_LIMIT_EXCEEDED
),
HoduSubmitStatus.MEMORY_LIMIT_EXCEEDED: (
CodeSubmissionResultStatus.MEMORY_LIMIT_EXCEEDED
),
HoduSubmitStatus.INTERNAL_ERROR: (
CodeSubmissionResultStatus.INTERNAL_SERVER_ERROR
),
}
return status_map[self]

@staticmethod
def from_submission_result_status(
status: CodeSubmissionResultStatus,
) -> "HoduSubmitStatus":
match status:
case CodeSubmissionResultStatus.CORRECT:
return HoduSubmitStatus.CORRECT
case CodeSubmissionResultStatus.WRONG:
return HoduSubmitStatus.WRONG
case CodeSubmissionResultStatus.COMPILE_ERROR:
return HoduSubmitStatus.COMPILE_ERROR
case CodeSubmissionResultStatus.RUNTIME_ERROR:
return HoduSubmitStatus.RUNTIME_ERROR
case CodeSubmissionResultStatus.TIME_LIMIT_EXCEEDED:
return HoduSubmitStatus.TIME_LIMIT_EXCEEDED
case CodeSubmissionResultStatus.MEMORY_LIMIT_EXCEEDED:
return HoduSubmitStatus.MEMORY_LIMIT_EXCEEDED
case CodeSubmissionResultStatus.INTERNAL_SERVER_ERROR:
return HoduSubmitStatus.INTERNAL_ERROR
case _:
raise ValueError(f"Invalid CodeSubmissionResultStatus: {status}")
status_map = {
CodeSubmissionResultStatus.CORRECT: HoduSubmitStatus.CORRECT,
CodeSubmissionResultStatus.WRONG: HoduSubmitStatus.WRONG,
CodeSubmissionResultStatus.COMPILE_ERROR: HoduSubmitStatus.COMPILE_ERROR,
CodeSubmissionResultStatus.RUNTIME_ERROR: HoduSubmitStatus.RUNTIME_ERROR,
CodeSubmissionResultStatus.TIME_LIMIT_EXCEEDED: (
HoduSubmitStatus.TIME_LIMIT_EXCEEDED
),
CodeSubmissionResultStatus.MEMORY_LIMIT_EXCEEDED: (
HoduSubmitStatus.MEMORY_LIMIT_EXCEEDED
),
CodeSubmissionResultStatus.INTERNAL_SERVER_ERROR: (
HoduSubmitStatus.INTERNAL_ERROR
),
}
try:
return status_map[status]
except KeyError as exc:
raise ValueError(f"Invalid CodeSubmissionResultStatus: {status}") from exc


class HoduSubmitExtraFields(BaseModel):
Expand Down
9 changes: 5 additions & 4 deletions wacruit/src/apps/judge/repositories.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

# DEFAULT_FIELDS = "stdout,stderr,compile_output,message,status,time,memory"
DEFAULT_FIELDS = "stdout,message,status,time,memory"
HTTP_CLIENT_ERROR_STATUS_CODE = 400


class JudgeApiRepository:
Expand All @@ -25,7 +26,7 @@ async def create_submission(
json=request.dict(),
timeout=60,
)
if res.status_code >= 400:
if res.status_code >= HTTP_CLIENT_ERROR_STATUS_CODE:
print(f"ERROR for sending {res.url} / status code: {res.status_code}.")
print(f"Details: {res.text}")
res.raise_for_status()
Expand All @@ -41,7 +42,7 @@ async def create_batch_submissions(
json=batch_request_data,
timeout=60,
)
if res.status_code >= 400:
if res.status_code >= HTTP_CLIENT_ERROR_STATUS_CODE:
print(f"ERROR for sending {res.url} / status code: {res.status_code}.")
print(f"Details: {res.text}")
res.raise_for_status()
Expand All @@ -56,7 +57,7 @@ async def get_submission(self, token: str) -> JudgeGetSubmissionResponse:
},
timeout=60,
)
if res.status_code >= 400:
if res.status_code >= HTTP_CLIENT_ERROR_STATUS_CODE:
print(f"ERROR for sending {res.url} / status code: {res.status_code}.")
print(f"Details: {res.text}")
res.raise_for_status()
Expand All @@ -76,7 +77,7 @@ async def get_batch_submissions(
},
timeout=60,
)
if res.status_code >= 400:
if res.status_code >= HTTP_CLIENT_ERROR_STATUS_CODE:
print(f"ERROR for sending {res.url} / status code: {res.status_code}.")
print(f"Details: {res.text}")
res.raise_for_status()
Expand Down
6 changes: 5 additions & 1 deletion wacruit/src/apps/member/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
from .views import v3_router as router
from .views import v3_router

router = v3_router

__all__ = ["router"]
1 change: 0 additions & 1 deletion wacruit/src/apps/member/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
from wacruit.src.database.base import str255

if TYPE_CHECKING:
from wacruit.src.apps.project.models import Project
from wacruit.src.apps.review.models import Review


Expand Down
1 change: 0 additions & 1 deletion wacruit/src/apps/member/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
from fastapi import APIRouter
from fastapi import Depends
from fastapi import Query
from fastapi import Response
from fastapi import Security
from fastapi.security import APIKeyHeader

Expand Down
3 changes: 2 additions & 1 deletion wacruit/src/apps/portfolio/file/aws/s3/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
from botocore.client import BaseClient
from botocore.config import Config

from wacruit.src.apps.portfolio.file.aws.config import StorageConfig, storage_config
from wacruit.src.apps.portfolio.file.aws.config import StorageConfig
from wacruit.src.apps.portfolio.file.aws.config import storage_config


class S3Client:
Expand Down
2 changes: 1 addition & 1 deletion wacruit/src/apps/portfolio/file/aws/s3/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def generate_presigned_url(
return url


def generate_presigned_post_url(
def generate_presigned_post_url( # noqa: PLR0913
s3_client: BaseClient,
s3_bucket: str,
s3_object: str,
Expand Down
4 changes: 3 additions & 1 deletion wacruit/src/apps/portfolio/file/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@

class NumPortfolioLimitException(WacruitException):
def __init__(self):
super().__init__(status_code=403, detail="포트폴리오는 최대 1개까지 업로드 가능합니다.")
super().__init__(
status_code=403, detail="포트폴리오는 최대 1개까지 업로드 가능합니다."
)


class PortfolioNotFoundException(WacruitException):
Expand Down
5 changes: 2 additions & 3 deletions wacruit/src/apps/portfolio/file/repositories.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,8 @@

from wacruit.src.apps.portfolio.file.exceptions import PortfolioNotFoundException
from wacruit.src.apps.portfolio.file.models import PortfolioFile
from wacruit.src.database.base import intpk
from wacruit.src.database.connection import get_db_session
from wacruit.src.database.connection import Transaction
from wacruit.src.database.connection import get_db_session


class PortfolioFileRepository:
Expand All @@ -30,7 +29,7 @@ def get_portfolio_files(
query = select(PortfolioFile).where(
(PortfolioFile.user_id == user_id)
& (PortfolioFile.recruiting_id == recruiting_id)
& (PortfolioFile.is_uploaded == True)
& PortfolioFile.is_uploaded
)
return self.session.execute(query).scalars().all()

Expand Down
22 changes: 8 additions & 14 deletions wacruit/src/apps/portfolio/file/services.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
from wacruit.src.apps.portfolio.file.aws.config import storage_config
from wacruit.src.apps.portfolio.file.aws.s3.client import S3Client
from wacruit.src.apps.portfolio.file.aws.s3.method import S3PresignedUrlMethod
from wacruit.src.apps.portfolio.file.aws.s3.utils import (
delete_object,
generate_presigned_post_url,
generate_presigned_url,
get_list_of_objects,
)
from wacruit.src.apps.portfolio.file.exceptions import (
NumPortfolioLimitException,
PortfolioNotFoundException,
)
from wacruit.src.apps.portfolio.file.schemas import (
PortfolioNameResponse,
PresignedUrlResponse,
)
from wacruit.src.apps.portfolio.file.aws.s3.utils import delete_object
from wacruit.src.apps.portfolio.file.aws.s3.utils import generate_presigned_post_url
from wacruit.src.apps.portfolio.file.aws.s3.utils import generate_presigned_url
from wacruit.src.apps.portfolio.file.aws.s3.utils import get_list_of_objects
from wacruit.src.apps.portfolio.file.exceptions import NumPortfolioLimitException
from wacruit.src.apps.portfolio.file.exceptions import PortfolioNotFoundException
from wacruit.src.apps.portfolio.file.schemas import PortfolioNameResponse
from wacruit.src.apps.portfolio.file.schemas import PresignedUrlResponse
from wacruit.src.utils.mixins import LoggingMixin

_1_MIN = 60
Expand Down
Loading
Loading