From 4f18729830b7601ce1dcd2a7c9977ebf3f24c890 Mon Sep 17 00:00:00 2001 From: Eugene Crosser Date: Sat, 28 May 2022 19:43:40 +0200 Subject: [PATCH] typechecking: annotate common.py --- gps303/common.py | 59 ++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/gps303/common.py b/gps303/common.py index 8afd65e..9e53f4b 100644 --- a/gps303/common.py +++ b/gps303/common.py @@ -1,11 +1,12 @@ """ Common housekeeping for all daemons """ -from configparser import ConfigParser +from configparser import ConfigParser, SectionProxy from getopt import getopt -from logging import Formatter, getLogger, StreamHandler, DEBUG, INFO +from logging import Formatter, getLogger, Logger, StreamHandler, DEBUG, INFO from logging.handlers import SysLogHandler from pkg_resources import get_distribution, DistributionNotFound from sys import argv, stderr, stdout +from typing import Any, Dict, List, Optional, Tuple, Union CONF = "/etc/gps303.conf" PORT = 4303 @@ -17,33 +18,35 @@ except DistributionNotFound: version = "" -def init(log, opts=None): +def init( + log: Logger, opts: Optional[List[Tuple[str, str]]] = None +) -> ConfigParser: if opts is None: opts, _ = getopt(argv[1:], "c:d") - opts = dict(opts) - conf = readconfig(opts["-c"] if "-c" in opts else CONF) - log.setLevel(DEBUG if "-d" in opts else INFO) + dopts = dict(opts) + conf = readconfig(dopts["-c"] if "-c" in dopts else CONF) + log.setLevel(DEBUG if "-d" in dopts else INFO) if stdout.isatty(): - hdl = StreamHandler(stderr) - hdl.setFormatter( + fhdl = StreamHandler(stderr) + fhdl.setFormatter( Formatter("%(asctime)s - %(levelname)s - %(message)s") ) - log.addHandler(hdl) - log.debug("%s starting with options: %s", version, opts) + log.addHandler(fhdl) + log.debug("%s starting with options: %s", version, dopts) else: - hdl = SysLogHandler(address="/dev/log") - hdl.setFormatter( + lhdl = SysLogHandler(address="/dev/log") + lhdl.setFormatter( Formatter("%(name)s[%(process)d]: %(levelname)s - %(message)s") ) - log.addHandler(hdl) - log.info("%s starting with options: %s", version, opts) + log.addHandler(lhdl) + log.info("%s starting with options: %s", version, dopts) return conf -def readconfig(fname): +def readconfig(fname: str) -> ConfigParser: config = ConfigParser() config["collector"] = { - "port": PORT, + "port": str(PORT), } config["storage"] = { "dbfn": DBFN, @@ -53,30 +56,38 @@ def readconfig(fname): return config -def normconf(section): - result = {} +def normconf(section: SectionProxy) -> Dict[str, Any]: + result: Dict[str, Any] = {} for key, val in section.items(): vals = val.split("\n") if len(vals) > 1 and vals[0] == "": vals = vals[1:] - lst = [] + lst: List[Union[str, int]] = [] for el in vals: try: - el = int(el, 0) + lst.append(int(el, 0)) except ValueError: if el[0] == '"' and el[-1] == '"': el = el.strip('"').rstrip('"') - lst.append(el) + lst.append(el) + if not ( + all([isinstance(x, int) for x in lst]) + or all([isinstance(x, str) for x in lst]) + ): + raise ValueError( + "Values of %s - %s are of different type", key, vals + ) if len(lst) == 1: - [lst] = lst - result[key] = lst + result[key] = lst[0] + else: + result[key] = lst return result if __name__ == "__main__": from sys import argv - def _print_config(conf): + def _print_config(conf: ConfigParser) -> None: for section in conf.sections(): print("section", section) for option in conf.options(section): -- 2.39.2