← Back to team overview

canonical-ubuntu-qa team mailing list archive

[Merge] ~andersson123/autopkgtest-cloud:configparser-read-refactor into autopkgtest-cloud:master

 

Tim Andersson has proposed merging ~andersson123/autopkgtest-cloud:configparser-read-refactor into autopkgtest-cloud:master.

Requested reviews:
  Canonical's Ubuntu QA (canonical-ubuntu-qa)

For more details, see:
https://code.launchpad.net/~andersson123/autopkgtest-cloud/+git/autopkgtest-cloud/+merge/462054
-- 
Your team Canonical's Ubuntu QA is requested to review the proposed merge of ~andersson123/autopkgtest-cloud:configparser-read-refactor into autopkgtest-cloud:master.
diff --git a/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/copy-swift-results b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/copy-swift-results
index ba8a40e..9484539 100755
--- a/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/copy-swift-results
+++ b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/copy-swift-results
@@ -48,7 +48,8 @@ releases = "noble mantic jammy focal lunar"
 
 
 conf = configparser.ConfigParser()
-conf.read(creds_file)
+with open(creds_file, "r") as f:
+    conf.read_file(f)
 
 swift_creds = {
     "old": {
diff --git a/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/worker/worker b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/worker/worker
index 9ff2ff1..f44ad1d 100755
--- a/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/worker/worker
+++ b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/worker/worker
@@ -1498,7 +1498,8 @@ def main():
         },
         allow_no_value=True,
     )
-    cfg.read(args.config)
+    with open(args.config, "r") as f:
+        cfg.read_file(f)
 
     logging.basicConfig(
         level=(args.debug and logging.DEBUG or logging.INFO),
diff --git a/charms/focal/autopkgtest-web/webcontrol/amqp-status-collector b/charms/focal/autopkgtest-web/webcontrol/amqp-status-collector
index a61a949..1169f2e 100755
--- a/charms/focal/autopkgtest-web/webcontrol/amqp-status-collector
+++ b/charms/focal/autopkgtest-web/webcontrol/amqp-status-collector
@@ -2,7 +2,6 @@
 # Pick up running tests, their status and logtail from the "teststatus" fanout
 # queue, and regularly write it into /run/amqp-status-collector/running.json
 
-import configparser
 import json
 import logging
 import os
@@ -11,6 +10,7 @@ import time
 import urllib.parse
 
 import amqplib.client_0_8 as amqp
+from helpers.utils import get_autopkgtest_cloud_conf
 
 exchange_name = "teststatus.fanout"
 running_name = os.path.join(
@@ -26,8 +26,7 @@ last_update = 0
 def amqp_connect():
     """Connect to AMQP server"""
 
-    cp = configparser.ConfigParser()
-    cp.read(os.path.expanduser("~ubuntu/autopkgtest-cloud.conf"))
+    cp = get_autopkgtest_cloud_conf()
     amqp_uri = cp["amqp"]["uri"]
     parts = urllib.parse.urlsplit(amqp_uri, allow_fragments=False)
     amqp_con = amqp.Connection(
diff --git a/charms/focal/autopkgtest-web/webcontrol/browse.cgi b/charms/focal/autopkgtest-web/webcontrol/browse.cgi
index f71b406..12a8af5 100755
--- a/charms/focal/autopkgtest-web/webcontrol/browse.cgi
+++ b/charms/focal/autopkgtest-web/webcontrol/browse.cgi
@@ -2,7 +2,6 @@
 
 """Browse autopkgtest results"""
 
-import configparser
 import json
 import os
 import re
@@ -13,7 +12,11 @@ from wsgiref.handlers import CGIHandler
 import flask
 from helpers.admin import select_abnormally_long_jobs
 from helpers.exceptions import RunningJSONNotFound
-from helpers.utils import get_all_releases, get_supported_releases
+from helpers.utils import (
+    get_all_releases,
+    get_autopkgtest_cloud_conf,
+    get_supported_releases,
+)
 from werkzeug.middleware.proxy_fix import ProxyFix
 
 app = flask.Flask("browse")
@@ -31,8 +34,7 @@ RUNNING_CACHE = "/run/amqp-status-collector/running.json"
 def init_config():
     global db_con, swift_container_url, INDEXED_PACKAGES_FP
 
-    cp = configparser.ConfigParser()
-    cp.read(os.path.expanduser("~ubuntu/autopkgtest-cloud.conf"))
+    cp = get_autopkgtest_cloud_conf()
 
     db_con = sqlite3.connect(
         "file:%s?mode=ro" % cp["web"]["database_ro"],
diff --git a/charms/focal/autopkgtest-web/webcontrol/cache-amqp b/charms/focal/autopkgtest-web/webcontrol/cache-amqp
index 6ebcfc5..a03550e 100755
--- a/charms/focal/autopkgtest-web/webcontrol/cache-amqp
+++ b/charms/focal/autopkgtest-web/webcontrol/cache-amqp
@@ -1,7 +1,6 @@
 #!/usr/bin/python3
 
 import argparse
-import configparser
 import json
 import logging
 import os
@@ -14,6 +13,7 @@ import urllib.request
 
 import amqplib.client_0_8 as amqp
 from amqplib.client_0_8.exceptions import AMQPChannelException
+from helpers.utils import get_autopkgtest_cloud_conf
 
 AMQP_CONTEXTS = ["ubuntu", "huge", "ppa", "upstream"]
 
@@ -233,8 +233,7 @@ if __name__ == "__main__":
 
     args = parser.parse_args()
 
-    cp = configparser.ConfigParser()
-    cp.read(os.path.expanduser("~ubuntu/autopkgtest-cloud.conf"))
+    cp = get_autopkgtest_cloud_conf()
 
     logger = logging.getLogger()
     formatter = logging.Formatter(
diff --git a/charms/focal/autopkgtest-web/webcontrol/db-backup b/charms/focal/autopkgtest-web/webcontrol/db-backup
index fc5190a..418c179 100755
--- a/charms/focal/autopkgtest-web/webcontrol/db-backup
+++ b/charms/focal/autopkgtest-web/webcontrol/db-backup
@@ -5,7 +5,6 @@ and clears up old backups
 """
 
 import atexit
-import configparser
 import datetime
 import gzip
 import logging
@@ -16,7 +15,7 @@ import sys
 from pathlib import Path
 
 import swiftclient
-from helpers.utils import init_db
+from helpers.utils import get_autopkgtest_cloud_conf, init_db
 
 DB_PATH = ""
 DB_NAME = ""
@@ -35,8 +34,7 @@ def db_connect() -> sqlite3.Connection:
     global DB_NAME
     global DB_BACKUP_NAME
     global DB_BACKUP_PATH
-    cp = configparser.ConfigParser()
-    cp.read(os.path.expanduser("~ubuntu/autopkgtest-cloud.conf"))
+    cp = get_autopkgtest_cloud_conf()
     DB_PATH = Path(cp["web"]["database"])
     DB_NAME = DB_PATH.name
     DB_BACKUP_NAME = "%s.bak" % DB_NAME
diff --git a/charms/focal/autopkgtest-web/webcontrol/download-all-results b/charms/focal/autopkgtest-web/webcontrol/download-all-results
index e0a11b0..3396403 100755
--- a/charms/focal/autopkgtest-web/webcontrol/download-all-results
+++ b/charms/focal/autopkgtest-web/webcontrol/download-all-results
@@ -10,7 +10,6 @@
 # notification of completed jobs, in case of bugs or network outages etc, this
 # script can be used to find any results which were missed and insert them.
 
-import configparser
 import http
 import io
 import json
@@ -25,7 +24,7 @@ import urllib.parse
 from urllib.request import urlopen
 
 from distro_info import UbuntuDistroInfo
-from helpers.utils import get_test_id, init_db
+from helpers.utils import get_autopkgtest_cloud_conf, get_test_id, init_db
 
 LOGGER = logging.getLogger(__name__)
 
@@ -257,8 +256,7 @@ if __name__ == "__main__":
     )
     releases.sort(key=UbuntuDistroInfo().all.index, reverse=True)
 
-    config = configparser.ConfigParser()
-    config.read(os.path.expanduser("~ubuntu/autopkgtest-cloud.conf"))
+    config = get_autopkgtest_cloud_conf()
 
     try:
         for release in releases:
diff --git a/charms/focal/autopkgtest-web/webcontrol/download-results b/charms/focal/autopkgtest-web/webcontrol/download-results
index e71d4a0..e4b6e6f 100755
--- a/charms/focal/autopkgtest-web/webcontrol/download-results
+++ b/charms/focal/autopkgtest-web/webcontrol/download-results
@@ -1,6 +1,5 @@
 #!/usr/bin/python3
 
-import configparser
 import json
 import logging
 import os
@@ -11,7 +10,7 @@ import time
 import urllib.parse
 
 import amqplib.client_0_8 as amqp
-from helpers.utils import get_test_id, init_db
+from helpers.utils import get_autopkgtest_cloud_conf, get_test_id, init_db
 
 EXCHANGE_NAME = "testcomplete.fanout"
 
@@ -19,8 +18,7 @@ EXCHANGE_NAME = "testcomplete.fanout"
 def amqp_connect():
     """Connect to AMQP server"""
 
-    cp = configparser.ConfigParser()
-    cp.read(os.path.expanduser("~ubuntu/autopkgtest-cloud.conf"))
+    cp = get_autopkgtest_cloud_conf()
     amqp_uri = cp["amqp"]["uri"]
     parts = urllib.parse.urlsplit(amqp_uri, allow_fragments=False)
     amqp_con = amqp.Connection(
@@ -35,8 +33,7 @@ def amqp_connect():
 
 def db_connect():
     """Connect to SQLite DB"""
-    cp = configparser.ConfigParser()
-    cp.read(os.path.expanduser("~ubuntu/autopkgtest-cloud.conf"))
+    cp = get_autopkgtest_cloud_conf()
 
     db_con = init_db(cp["web"]["database"])
 
diff --git a/charms/focal/autopkgtest-web/webcontrol/helpers/utils.py b/charms/focal/autopkgtest-web/webcontrol/helpers/utils.py
index cf9ca27..ea1f758 100644
--- a/charms/focal/autopkgtest-web/webcontrol/helpers/utils.py
+++ b/charms/focal/autopkgtest-web/webcontrol/helpers/utils.py
@@ -1,6 +1,8 @@
 """
 utilities for autopkgtest-web webcontrol
 """
+import configparser
+
 # pylint: disable=protected-access
 import logging
 import os
@@ -11,6 +13,27 @@ import time
 import distro_info
 
 
+def read_config_file(
+    filepath: str, env_file: bool = False, cfg_key: str = None
+):
+    if env_file is True and cfg_key is None:
+        raise ValueError(
+            "Specifying envfile as True requires cfg_key to be passed"
+        )
+    config = configparser.ConfigParser()
+    if not env_file:
+        with open(filepath, "r") as f:
+            config.read_file(f)
+        return config
+    with open(filepath, "r") as fp:
+        config.read_string(("[%s]\n" % cfg_key) + fp.read())
+    return config
+
+
+def get_autopkgtest_cloud_conf():
+    return read_config_file("/home/ubuntu/autopkgtest-cloud.conf")
+
+
 def get_all_releases():
     udi = distro_info.UbuntuDistroInfo()
     return udi.all
diff --git a/charms/focal/autopkgtest-web/webcontrol/indexed-packages b/charms/focal/autopkgtest-web/webcontrol/indexed-packages
index 82502b1..1122bd2 100755
--- a/charms/focal/autopkgtest-web/webcontrol/indexed-packages
+++ b/charms/focal/autopkgtest-web/webcontrol/indexed-packages
@@ -1,10 +1,10 @@
 #!/usr/bin/python3
 
-import configparser
 import json
-import os
 import sqlite3
 
+from helpers.utils import get_autopkgtest_cloud_conf
+
 
 def srchash(src):
     if src.startswith("lib"):
@@ -14,8 +14,7 @@ def srchash(src):
 
 
 if __name__ == "__main__":
-    cp = configparser.ConfigParser()
-    cp.read(os.path.expanduser("~ubuntu/autopkgtest-cloud.conf"))
+    cp = get_autopkgtest_cloud_conf()
     indexed_packages_fp = cp["web"]["indexed_packages_fp"]
 
     db_con = sqlite3.connect(
diff --git a/charms/focal/autopkgtest-web/webcontrol/private_results/app.py b/charms/focal/autopkgtest-web/webcontrol/private_results/app.py
index 0a793bc..36b1fd0 100644
--- a/charms/focal/autopkgtest-web/webcontrol/private_results/app.py
+++ b/charms/focal/autopkgtest-web/webcontrol/private_results/app.py
@@ -1,5 +1,4 @@
 """Test Result Fetcher Flask App"""
-import configparser
 import logging
 import os
 import sys
@@ -15,7 +14,11 @@ from flask import (
     session,
 )
 from flask_openid import OpenID
-from helpers.utils import setup_key
+from helpers.utils import (
+    get_autopkgtest_cloud_conf,
+    read_config_file,
+    setup_key,
+)
 from request.submit import Submit
 from werkzeug.middleware.proxy_fix import ProxyFix
 
@@ -94,11 +97,11 @@ secret_path = os.path.join(PATH, "secret_key")
 setup_key(app, secret_path)
 oid = OpenID(app, os.path.join(PATH, "openid"), safe_roots=[])
 # Load configuration
-cfg = configparser.ConfigParser()
-cfg.read(os.path.expanduser("~ubuntu/swift-web-credentials.conf"))
+cfg = read_config_file(
+    os.path.expanduser("~ubuntu/swift-web-credentials.conf")
+)
 # The web configuration as well
-cfg_web = configparser.ConfigParser()
-cfg_web.read(os.path.expanduser("~ubuntu/autopkgtest-cloud.conf"))
+cfg_web = get_autopkgtest_cloud_conf()
 # Build swift credentials
 auth_url = cfg.get("swift", "auth_url")
 if "/v2.0" in auth_url:
diff --git a/charms/focal/autopkgtest-web/webcontrol/publish-db b/charms/focal/autopkgtest-web/webcontrol/publish-db
index 76883bd..4b4a9da 100755
--- a/charms/focal/autopkgtest-web/webcontrol/publish-db
+++ b/charms/focal/autopkgtest-web/webcontrol/publish-db
@@ -3,7 +3,6 @@
 # a copy of autopkgtest.db, which is then published to the public location.
 # This is being used for statistics.
 
-import configparser
 import gzip
 import logging
 import os
@@ -12,6 +11,7 @@ import tempfile
 import urllib.request
 
 import apt_pkg
+from helpers.utils import get_autopkgtest_cloud_conf
 
 config = None
 db_con = None
@@ -182,8 +182,7 @@ if __name__ == "__main__":
     if "DEBUG" in os.environ:
         logging.basicConfig(level=logging.DEBUG)
 
-    config = configparser.ConfigParser()
-    config.read(os.path.expanduser("~ubuntu/autopkgtest-cloud.conf"))
+    config = get_autopkgtest_cloud_conf()
 
     target = config["web"]["database_ro"]
     target_new = "{}.new".format(target)
diff --git a/charms/focal/autopkgtest-web/webcontrol/request/submit.py b/charms/focal/autopkgtest-web/webcontrol/request/submit.py
index 0133d44..7cad9ac 100644
--- a/charms/focal/autopkgtest-web/webcontrol/request/submit.py
+++ b/charms/focal/autopkgtest-web/webcontrol/request/submit.py
@@ -4,7 +4,6 @@ Author: Martin Pitt <martin.pitt@xxxxxxxxxx>
 """
 
 import base64
-import configparser
 import json
 import logging
 import os
@@ -26,6 +25,7 @@ from helpers.exceptions import (
     RequestInQueue,
     RequestRunning,
 )
+from helpers.utils import get_autopkgtest_cloud_conf
 
 # Launchpad REST API base
 LP = "https://api.launchpad.net/1.0/";
@@ -56,8 +56,7 @@ RUNNING_FP = "/run/amqp-status-collector/running.json"
 
 class Submit:
     def __init__(self):
-        cp = configparser.ConfigParser()
-        cp.read(os.path.expanduser("~ubuntu/autopkgtest-cloud.conf"))
+        cp = get_autopkgtest_cloud_conf()
 
         # read valid releases and architectures from DB
         self.db_con = sqlite3.connect(
diff --git a/charms/focal/autopkgtest-web/webcontrol/update-github-jobs b/charms/focal/autopkgtest-web/webcontrol/update-github-jobs
index 9aeb8e7..2757eb5 100755
--- a/charms/focal/autopkgtest-web/webcontrol/update-github-jobs
+++ b/charms/focal/autopkgtest-web/webcontrol/update-github-jobs
@@ -1,6 +1,5 @@
 #!/usr/bin/python3
 
-import configparser
 import datetime
 import io
 import json
@@ -12,6 +11,7 @@ import tarfile
 from datetime import datetime, timedelta
 
 import swiftclient
+from helpers.utils import get_autopkgtest_cloud_conf, read_config_file
 from request.submit import Submit
 
 PENDING_DIR = "/run/autopkgtest_webcontrol/github-pending"
@@ -216,13 +216,11 @@ if __name__ == "__main__":
         logging.info("%s does not exist, nothing to do", PENDING_DIR)
         sys.exit(0)
 
-    config = configparser.ConfigParser()
-    config.read("/home/ubuntu/autopkgtest-cloud.conf")
+    config = get_autopkgtest_cloud_conf()
     external_url = config["web"]["ExternalURL"]
-    swift_cfg = configparser.ConfigParser()
-    # Nice way of passing an environment-like file to configparser
-    with open(SWIFT_CREDS_FILE, "r") as fp:
-        swift_cfg.read_string("[swift]\n" + fp.read())
+    swift_cfg = read_config_file(
+        filepath=SWIFT_CREDS_FILE, env_file=True, cfg_key="swift"
+    )
 
     swift_creds = {
         "authurl": swift_cfg["swift"]["OS_AUTH_URL"],

Follow ups