From 996ad21edaad49852fa35455df6da936ba682bb7 Mon Sep 17 00:00:00 2001 From: MohdAatifSiddi Date: Sat, 12 Jul 2025 14:35:47 +0530 Subject: [PATCH 1/4] Fix: Create log directory if it doesn't exist in webserver --- python/cuopt_server/cuopt_server/webserver.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/cuopt_server/cuopt_server/webserver.py b/python/cuopt_server/cuopt_server/webserver.py index eb8db81bbf..c0a883118c 100644 --- a/python/cuopt_server/cuopt_server/webserver.py +++ b/python/cuopt_server/cuopt_server/webserver.py @@ -342,8 +342,9 @@ def getsolverlogs( detail=f"Unsupported Accept value {accept}, " f"supported values are {[mime_json, mime_msgpack, mime_zlib]}", ) - # TODO: Create a log dir + # Create log directory if it does't exist log_dir, _, _ = settings.get_result_dir() + os.makedirs(log_dir, exist_ok=True) log_fname = "log_" + id log_file = os.path.join(log_dir, log_fname) logging.info(f"Extracting logs from {log_file}") From 362aff733afd9a0bb24023c6ac394f8f7b7cbc2e Mon Sep 17 00:00:00 2001 From: MohdAatifSiddi Date: Sat, 12 Jul 2025 14:39:25 +0530 Subject: [PATCH 2/4] Fix: Create log directory if it doesn't exist in webserver - Replace TODO comment with actual implementation - Add os.makedirs() call to ensure log directory exists before file operations - Prevents FileNotFoundError when accessing solver logs --- python/cuopt_server/cuopt_server/webserver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/cuopt_server/cuopt_server/webserver.py b/python/cuopt_server/cuopt_server/webserver.py index c0a883118c..112ed9288f 100644 --- a/python/cuopt_server/cuopt_server/webserver.py +++ b/python/cuopt_server/cuopt_server/webserver.py @@ -342,7 +342,7 @@ def getsolverlogs( detail=f"Unsupported Accept value {accept}, " f"supported values are {[mime_json, mime_msgpack, mime_zlib]}", ) - # Create log directory if it does't exist + # Create log directory if it doesn't exist log_dir, _, _ = settings.get_result_dir() os.makedirs(log_dir, exist_ok=True) log_fname = "log_" + id From 1e74136117e7064f0209aec00f3acfa3335432b8 Mon Sep 17 00:00:00 2001 From: MohdAatifSiddi Date: Sat, 12 Jul 2025 14:57:28 +0530 Subject: [PATCH 3/4] modified: corrected "seperately" to "separetely" in thin_client/thin_client_solver_settings.py and corrected "concelation" to "cancellation" in job_queue.py --- .../cuopt_sh_client/thin_client_solver_settings.py | 2 +- python/cuopt_server/cuopt_server/utils/job_queue.py | 2 +- python/cuopt_server/cuopt_server/webserver.py | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/python/cuopt_self_hosted/cuopt_sh_client/thin_client_solver_settings.py b/python/cuopt_self_hosted/cuopt_sh_client/thin_client_solver_settings.py index 96e2e8cb93..9d21399319 100644 --- a/python/cuopt_self_hosted/cuopt_sh_client/thin_client_solver_settings.py +++ b/python/cuopt_self_hosted/cuopt_sh_client/thin_client_solver_settings.py @@ -167,7 +167,7 @@ def toDict(self): for key in self.parameter_dict: if "tolerance" not in key: solver_config[key] = self.parameter_dict[key] - # Handle tolerance seperately + # Handle tolerance separately if "absolute_dual_tolerance" in self.parameter_dict: solver_config["tolerances"]["absolute_dual"] = self.parameter_dict[ "absolute_dual_tolerance" diff --git a/python/cuopt_server/cuopt_server/utils/job_queue.py b/python/cuopt_server/cuopt_server/utils/job_queue.py index 31fed39126..7d1986e56c 100755 --- a/python/cuopt_server/cuopt_server/utils/job_queue.py +++ b/python/cuopt_server/cuopt_server/utils/job_queue.py @@ -1202,7 +1202,7 @@ def __init__( self.warmstart_data = warmstart_data def delete_data(self): - # This is for cases where we skip a job on cancelation + # This is for cases where we skip a job on cancellation # In this case for shared memory use, we need # to unlink the shared memory if it is not a cache # reference because we will never call _resolve_job diff --git a/python/cuopt_server/cuopt_server/webserver.py b/python/cuopt_server/cuopt_server/webserver.py index 112ed9288f..b145c893cd 100644 --- a/python/cuopt_server/cuopt_server/webserver.py +++ b/python/cuopt_server/cuopt_server/webserver.py @@ -633,7 +633,7 @@ def deletesolution( @app.delete( "/cuopt/request/{id}", - description="Note: for use with self hosted cuOpt instances. " + description="Note: for use with self-hosted cuOpt instances. " "Delete a request (either a cached request or a request to be solved). " "The 'id' is the reqId value returned from a POST to /cuopt/request.", summary="Delete a request by id (self-hosted)", @@ -1091,7 +1091,7 @@ async def postrequest( r.unregister_result() raise HTTPException( status_code=422, - detail=f"Requtest id '{reqId}' does not exist", + detail=f"Request id '{reqId}' does not exist", ) # if reqId is not set and we're not using file_path, stream in the data @@ -1239,7 +1239,7 @@ async def get_body(request: Request): responses=ManagedRequestResponse, # include_in_schema=False, # This form is necessary to allow multiple literal examples to - # be added to the Swaggger and redoc UIs. Noe the schema is + # be added to the Swagger and redoc UIs. Noe the schema is # taken by fastapi from the cuoptData parameter. openapi_extra={ "requestBody": { From 4aec192ad142a9f7d2e7e5e1c58ad0f5b4f866ba Mon Sep 17 00:00:00 2001 From: Trevor McKay Date: Fri, 25 Jul 2025 15:45:23 -0400 Subject: [PATCH 4/4] remove os.makedirs that causes exception with default result dir --- python/cuopt_server/cuopt_server/webserver.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/cuopt_server/cuopt_server/webserver.py b/python/cuopt_server/cuopt_server/webserver.py index 28c86bb659..edbc8234dc 100644 --- a/python/cuopt_server/cuopt_server/webserver.py +++ b/python/cuopt_server/cuopt_server/webserver.py @@ -347,9 +347,9 @@ def getsolverlogs( detail=f"Unsupported Accept value {accept}, " f"supported values are {[mime_json, mime_msgpack, mime_zlib]}", ) - # Create log directory if it doesn't exist + + # result_dir is guaranteed to exist on startup log_dir, _, _ = settings.get_result_dir() - os.makedirs(log_dir, exist_ok=True) log_fname = "log_" + id log_file = os.path.join(log_dir, log_fname) logging.info(f"Extracting logs from {log_file}")