From 0af4b9b471c84dd2976b8dbe5202a4201143b047 Mon Sep 17 00:00:00 2001
From: Robert Rosca <robert.rosca@xfel.eu>
Date: Fri, 14 May 2021 14:12:26 +0200
Subject: [PATCH] main function takes in `argv` as an optional argument and
 uses `sys.argv` if it is missing. This allows for easier testing.

---
 webservice/webservice.py | 51 +++++++++++++++++++++++++---------------
 1 file changed, 32 insertions(+), 19 deletions(-)

diff --git a/webservice/webservice.py b/webservice/webservice.py
index 494608fd7..aab1466de 100644
--- a/webservice/webservice.py
+++ b/webservice/webservice.py
@@ -8,7 +8,9 @@ import inspect
 import json
 import logging
 import os
+import shutil
 import sqlite3
+import sys
 import time
 import urllib.parse
 from asyncio import get_event_loop, shield
@@ -22,9 +24,9 @@ import yaml
 import zmq
 import zmq.asyncio
 import zmq.auth.thread
+from git import InvalidGitRepositoryError, Repo
 from kafka import KafkaProducer
 from kafka.errors import KafkaError
-from git import InvalidGitRepositoryError, Repo
 from metadata_client.metadata_client import MetadataClient
 
 try:
@@ -1199,25 +1201,36 @@ class ActionsServer:
         # return string without a tailing comma.
         return ", ".join(ret), report
 
-parser = argparse.ArgumentParser(
-    description='Start the calibration webservice')
-parser.add_argument('--config-file', type=str, default='./webservice.yaml')
-parser.add_argument('--log-file', type=str, default='./web.log')
-parser.add_argument('--mode', type=str, default="sim", choices=['sim', 'prod'])
-parser.add_argument('--logging', type=str, default="INFO",
-                    choices=['INFO', 'DEBUG', 'ERROR'])
-
-def main():
-    args = vars(parser.parse_args())
-    conf_file = args["config_file"]
-    with open(conf_file, "r") as f:
-        config = yaml.load(f.read(), Loader=yaml.FullLoader)
-    mode = args["mode"]
-    logfile = args["log_file"]
+
+def main(argv: Optional[List[str]] = None):
+    if argv is None:
+        argv = sys.argv[1:]
+
+    parser = argparse.ArgumentParser(
+        description='Start the calibration webservice'
+    )
+    parser.add_argument('--config-file', type=str, default='./webservice.yaml')
+    parser.add_argument('--mode', type=str, default="sim", choices=['sim', 'prod'])
+    parser.add_argument('--log-file', type=str, default='./web.log')
+    parser.add_argument(
+        '--log-level', type=str, default="INFO", choices=['INFO', 'DEBUG', 'ERROR']
+    )
+
+    args = parser.parse_args(argv)
+    config_file = args.config_file
+    log_file = args.log_file
+    log_level = args.log_level
+    mode = args.mode
+
+    with open(config_file, "r") as f:
+        config = yaml.safe_load(f.read())
+
     fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
-    logging.basicConfig(filename=logfile,
-                        level=getattr(logging, args['logging']),
-                        format=fmt)
+    logging.basicConfig(
+        filename=log_file,
+        level=getattr(logging, log_level),
+        format=fmt
+    )
 
     # Update job statuses from Slurm in a separate thread
     slurm_monitor_thread = Thread(
-- 
GitLab