From 173a20ef3fccd947b7a283921a05a56a02c58323 Mon Sep 17 00:00:00 2001 From: Karma Riuk Date: Thu, 12 Jun 2025 15:12:14 +0200 Subject: [PATCH] using dotenv with default values properly and certalized default value logic --- src/routes/answers.py | 5 ++--- src/routes/datasets.py | 2 +- src/server.py | 13 +++++++------ src/utils/build_handlers.py | 2 +- src/utils/env_defaults.py | 16 ++++++++++++++++ src/utils/observer.py | 2 +- src/utils/process_data.py | 6 ++---- 7 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 src/utils/env_defaults.py diff --git a/src/routes/answers.py b/src/routes/answers.py index 155f821..90bb1c6 100644 --- a/src/routes/answers.py +++ b/src/routes/answers.py @@ -5,8 +5,7 @@ from utils.dataset import CommentGenSubmission from utils.errors import InvalidJsonFormatError from utils.process_data import evaluate_comments, evaluate_refinement from utils.observer import SocketObserver, Status, Subject -import functools -import json +import functools, json, os from utils.queue_manager import QueueManager @@ -56,7 +55,7 @@ def validate_json_format_for_code_refinement(data: str) -> dict[str, dict[str, s raise InvalidJsonFormatError() -QUEUE_MANAGER = QueueManager(1) +QUEUE_MANAGER = QueueManager(int(os.environ["MAX_WORKERS"])) def handler(type_: str, validate_json: Callable, evaluate_submission: Callable): diff --git a/src/routes/datasets.py b/src/routes/datasets.py index 0dcc9b8..9804b6c 100644 --- a/src/routes/datasets.py +++ b/src/routes/datasets.py @@ -8,7 +8,7 @@ DATASETS = {'comment_generation', 'code_refinement'} # below, the '../' + is need because the send_from send_from_directory is local # the file, but the DATA_DIR is local to the root of the repo -DATA_DIR = os.path.join('..', os.getenv("DATA_PATH", "data")) +DATA_DIR = os.path.join('..', os.environ["DATA_PATH"]) @router.route('/download/') diff --git a/src/server.py b/src/server.py index 1263ab3..666f3c6 100644 --- a/src/server.py +++ b/src/server.py @@ -1,4 +1,9 @@ -# server.py +from utils.env_defaults import set_env_defaults +from dotenv import load_dotenv + +set_env_defaults() +load_dotenv() + from flask import Flask, request from flask_cors import CORS from flask_socketio import SocketIO @@ -9,10 +14,6 @@ from routes.datasets import router as datasets_router from werkzeug.exceptions import HTTPException import os -from dotenv import load_dotenv - -load_dotenv() - app = Flask(__name__, static_folder='../public', static_url_path='/') with app.app_context(): @@ -79,7 +80,7 @@ def init_socketio(app): socketio = init_socketio(app) if __name__ == '__main__': - port = int(os.getenv('PORT', 45003)) + port = int(os.environ['PORT']) socketio.run( app, use_reloader=True, diff --git a/src/utils/build_handlers.py b/src/utils/build_handlers.py index 376a866..d5f5e98 100644 --- a/src/utils/build_handlers.py +++ b/src/utils/build_handlers.py @@ -637,7 +637,7 @@ def get_build_handler(root: str, repo: str, verbose: bool = False) -> BuildHandl an instance of GradleHandler or MavenHandler """ path = os.path.join(root, repo) - if os.getenv('MOCK_BUILD_HANDLER', False): + if bool(os.environ["MOCK_BUILD_HANDLER"]): return WaitBuildHander("NO REPO PATH", "NO BUILD FILE", {}) # 1) If it's a tarball, extract it diff --git a/src/utils/env_defaults.py b/src/utils/env_defaults.py new file mode 100644 index 0000000..5013ff4 --- /dev/null +++ b/src/utils/env_defaults.py @@ -0,0 +1,16 @@ +import os +from typing import Any + + +def set(k: str, v: Any): + os.environ.setdefault(k, str(v)) + + +def set_env_defaults(): + set("PORT", 45003) + set("MAX_WORKERS", 5) + set("RESULTS_DIR", "submission_results") + set("MOCK_BUILD_HANDLER", False) + set("DATA_PATH", "data") + set("DATASET_PATH", os.path.join(os.environ["DATA_PATH"], "dataset.json")) + set("ARCHIVES_ROOT", os.path.join(os.environ["DATA_PATH"], "archives")) diff --git a/src/utils/observer.py b/src/utils/observer.py index 2169ccf..6a3ac7e 100644 --- a/src/utils/observer.py +++ b/src/utils/observer.py @@ -4,7 +4,7 @@ from enum import Enum import os, tempfile, threading, json from typing import Callable, Optional, Set -RESULTS_DIR = os.getenv("RESULTS_DIR", "submission_results") +RESULTS_DIR = os.environ["RESULTS_DIR"] class Status(Enum): diff --git a/src/utils/process_data.py b/src/utils/process_data.py index da13a50..cf405d1 100644 --- a/src/utils/process_data.py +++ b/src/utils/process_data.py @@ -5,11 +5,9 @@ from utils.build_handlers import get_build_handler from sacrebleu import sentence_bleu as bleu from utils.dataset import ArchiveState, Comment, CommentGenSubmission, Dataset -REFERENCE_MAP = Dataset.from_json( - os.getenv("DATASET_PATH", os.path.join("data", "dataset.json")), -).build_reference_map() +REFERENCE_MAP = Dataset.from_json(os.environ["DATASET_PATH"]).build_reference_map() -ARCHIVES_ROOT = os.getenv("ARCHIVES_ROOT", "data/archives") +ARCHIVES_ROOT = os.environ["ARCHIVES_ROOT"] def comment_distance(submission: CommentGenSubmission, entry: Comment):