I'm using CheckMK 2.2.0 and its plugin for Nginx to monitor some hosts. The agent is running on a host using Python 3.4.2 that can not be updated. When running the Nginx plugin on this host, I'm getting a syntax error:
# python3 nginx_status.py
File "nginx_status.py", line 126
config: dict = {}
^
SyntaxError: invalid syntax
The code looks like:
def main(): # pylint: disable=too-many-branches
config_dir = os.getenv("MK_CONFDIR", "/etc/check_mk")
config_file = config_dir + "/nginx_status.cfg"
config: dict = {}
if os.path.exists(config_file):
with open(config_file) as open_config_file:
config_src = open_config_file.read()
exec(config_src, globals(), config)
Running this script on another host using Python 3.11.2 it works. But as I've said, I'm not able to update the elder Python version. I'm a PHP programmer, but have no knowledge of Python.
What is this type of code config: dict = {}
and how to fix it to run on Python 3.4?
Python 3.4 is too old to support type annotations. You really should get it upgraded to a secure and supported version. 3.4 reached end of life on 2019-03-18.
In the interim, the workaround is to remove any type annotations from the source code. Anything which looks like variable: type = value
or variable: type
should lose the : type
part. Similarly, function definitions with a -> returntype
annotation should lose that.
For example,
def foo(bar: int, baz: str = "") -> bool:
temp: str = f"{bar}!={baz}"
return temp == "1!=2"
should be refactored to
def foo(bar, baz=""):
temp = f"{bar}!={baz}"
return temp == "1!=2"
for backwards compatibility.