Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions src/qlever/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import argparse
import os
import traceback
from importlib.metadata import version
from pathlib import Path

import argcomplete
Expand All @@ -12,6 +11,7 @@
from qlever import command_objects, engine_name, script_name
from qlever.log import log, log_levels
from qlever.qleverfile import Qleverfile
from qlever.util import build_version_string


# Simple exception class for configuration errors (the class need not do
Expand Down Expand Up @@ -180,13 +180,14 @@ def add_qleverfile_option(parser):
f"This is the {script_name} command line tool, "
f"it's all you need to work with {engine_name}",
attrs=["bold"],
)
),
formatter_class=argparse.RawDescriptionHelpFormatter,
)
if script_name == "qlever":
parser.add_argument(
"--version",
action="version",
version=f"%(prog)s {version('qlever')}",
version=build_version_string(),
)
add_qleverfile_option(parser)
subparsers = parser.add_subparsers(dest='command')
Expand Down
43 changes: 43 additions & 0 deletions src/qlever/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@
import string
import subprocess
from datetime import date, datetime
from importlib.metadata import version
from pathlib import Path
from typing import Any, Optional

import psutil

from qlever import script_name
from qlever.log import log


Expand Down Expand Up @@ -328,3 +330,44 @@ def is_server_alive(url: str) -> bool:
return True
except Exception:
return False


def get_image_version_string() -> str:
image_name = "docker.io/adfreiburg/qlever"
image_version_cmd = r'images --format "{{.Tag}}" ' + image_name
is_docker = bool(shutil.which("docker"))
if is_docker:
image_version_cmd = "docker " + image_version_cmd
is_podman = bool(shutil.which("podman"))
if is_podman:
image_version_cmd = "podman " + image_version_cmd
if not is_docker and not is_podman:
return f"{image_name} image: Both docker and podman NOT FOUND on PATH"
try:
version_str = run_command(image_version_cmd, return_output=True)
return f"{image_name} image: {version_str.strip()}"
except Exception as e:
return f"{image_name} image: ERROR in determining version - {e}"


def get_binary_version_string(binary_name: str) -> str:
if not shutil.which(binary_name):
return f"{binary_name}: NOT FOUND on PATH"
try:
binary_version_str = run_command(
f"{binary_name} --version", return_output=True
)
if not binary_version_str.startswith(f"QLever {binary_name}"):
return f"{binary_name}: VERSION information not available!"
return binary_version_str.strip()
except Exception as e:
return f"{binary_name}: ERROR in determining version - {e}"


def build_version_string() -> str:
parts = []
parts.append(f"{script_name}: {version(script_name)}\n")
for binary in ["IndexBuilderMain", "ServerMain"]:
parts.append(get_binary_version_string(binary))
parts.append(get_image_version_string())
return "\n".join(parts)