Skip to content

Commit bd0f525

Browse files
committed
Add --version CLI option
resolves: QubesOS/qubes-issues#9585
1 parent ea26574 commit bd0f525

File tree

9 files changed

+123
-7
lines changed

9 files changed

+123
-7
lines changed

qubesmanager/backup.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020
#
2121
#
2222

23+
import argparse
24+
import importlib.metadata
25+
import os.path
2326
import signal
27+
import sys
2428
from qubesadmin import exc
2529
from qubesadmin import utils as admin_utils
2630

@@ -41,6 +45,19 @@
4145
from . import resources
4246

4347
# pylint: disable=too-few-public-methods
48+
def parse_args():
49+
parser = argparse.ArgumentParser( \
50+
formatter_class=argparse.RawDescriptionHelpFormatter)
51+
_metadata_ = importlib.metadata.metadata('qubesmanager')
52+
parser.version = '{} ({}) {}'.format(os.path.basename(sys.argv[0]), \
53+
_metadata_['summary'], _metadata_['version'])
54+
parser.version += '\nCopyright (C) {}'.format(_metadata_['author'])
55+
parser.version += '\nLicense: {}'.format(_metadata_['license'])
56+
parser.add_argument('--version', action='version')
57+
args = parser.parse_args()
58+
return args
59+
60+
4461
class BackupThread(QtCore.QThread):
4562
def __init__(self, vm):
4663
QtCore.QThread.__init__(self)
@@ -74,6 +91,7 @@ def run(self):
7491

7592
class BackupVMsWindow(ui_backupdlg.Ui_Backup, QtWidgets.QWizard):
7693
def __init__(self, qt_app, qubes_app, dispatcher, parent=None):
94+
self.cliargs = parse_args()
7795
super().__init__(parent)
7896

7997
self.qt_app = qt_app

qubesmanager/bootfromdevice.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@
1717
#
1818
#
1919

20+
import argparse
2021
import functools
22+
import importlib.metadata
23+
import os.path
2124
import subprocess
25+
import sys
2226
from . import utils
2327
from . import ui_bootfromdevice # pylint: disable=no-name-in-module
2428
from PyQt6 import QtWidgets, QtGui, QtCore # pylint: disable=import-error
@@ -169,7 +173,13 @@ def select_file_dialog(self):
169173
self.pathText.setText(new_path)
170174

171175

172-
parser = tools.QubesArgumentParser(vmname_nargs=1)
176+
parser = tools.QubesArgumentParser(vmname_nargs=1, \
177+
formatter_class=argparse.RawDescriptionHelpFormatter)
178+
_metadata_ = importlib.metadata.metadata('qubesmanager')
179+
parser.version = '{} ({}) {}'.format(os.path.basename(sys.argv[0]), \
180+
_metadata_['summary'], _metadata_['version'])
181+
parser.version += '\nCopyright (C) {}'.format(_metadata_['author'])
182+
parser.version += '\nLicense: {}'.format(_metadata_['license'])
173183

174184

175185
def main(args=None):

qubesmanager/clone_vm.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#
2121
#
2222

23+
import argparse
24+
import importlib.metadata
2325
import os
2426
import sys
2527
import subprocess
@@ -163,7 +165,13 @@ def clone_finished(self):
163165
str(self.name.text())])
164166

165167

166-
parser = qubesadmin.tools.QubesArgumentParser(vmname_nargs='?')
168+
parser = qubesadmin.tools.QubesArgumentParser(vmname_nargs='?', \
169+
formatter_class=argparse.RawDescriptionHelpFormatter)
170+
_metadata_ = importlib.metadata.metadata('qubesmanager')
171+
parser.version = '{} ({}) {}'.format(os.path.basename(sys.argv[0]), \
172+
_metadata_['summary'], _metadata_['version'])
173+
parser.version += '\nCopyright (C) {}'.format(_metadata_['author'])
174+
parser.version += '\nLicense: {}'.format(_metadata_['license'])
167175

168176

169177
def main(args=None):

qubesmanager/create_new_vm.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#
2222
#
2323

24+
import argparse
25+
import importlib.metadata
2426
import os
2527
import sys
2628
import subprocess
@@ -334,7 +336,13 @@ def settings_change(self):
334336
self.install_system.setChecked(False)
335337

336338

337-
parser = qubesadmin.tools.QubesArgumentParser()
339+
parser = qubesadmin.tools.QubesArgumentParser( \
340+
formatter_class=argparse.RawDescriptionHelpFormatter)
341+
_metadata_ = importlib.metadata.metadata('qubesmanager')
342+
parser.version = '{} ({}) {}'.format(os.path.basename(sys.argv[0]), \
343+
_metadata_['summary'], _metadata_['version'])
344+
parser.version += '\nCopyright (C) {}'.format(_metadata_['author'])
345+
parser.version += '\nLicense: {}'.format(_metadata_['license'])
338346

339347

340348
def main(args=None):

qubesmanager/qube_manager.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@
2121
# with this program; if not, see <http://www.gnu.org/licenses/>.
2222
#
2323
#
24+
25+
import argparse
26+
import importlib.metadata
2427
import shlex
2528
import subprocess
29+
import sys
2630
import threading
2731
from datetime import datetime, timedelta
2832
from functools import partial
@@ -62,6 +66,19 @@
6266
# pylint: disable=unused-import, no-name-in-module
6367
from . import resources
6468

69+
def parse_args():
70+
parser = argparse.ArgumentParser( \
71+
formatter_class=argparse.RawDescriptionHelpFormatter)
72+
_metadata_ = importlib.metadata.metadata('qubesmanager')
73+
parser.version = '{} ({}) {}'.format(path.basename(sys.argv[0]), \
74+
_metadata_['summary'], _metadata_['version'])
75+
parser.version += '\nCopyright (C) {}'.format(_metadata_['author'])
76+
parser.version += '\nLicense: {}'.format(_metadata_['license'])
77+
parser.add_argument('--version', action='version')
78+
args = parser.parse_args()
79+
return args
80+
81+
6582
def spawn_in_background(cmd: str | list[str]) -> None:
6683
if isinstance(cmd, str):
6784
cmd = shlex.split(cmd)
@@ -742,6 +759,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QMainWindow):
742759

743760
def __init__(self, qt_app, qubes_app, dispatcher, _parent=None):
744761
# pylint: disable=too-many-statements
762+
self.cliargs = parse_args()
745763
super().__init__()
746764
self.setupUi(self)
747765

qubesmanager/qvm_template_gui.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,18 @@
2323
# pylint: disable=invalid-name
2424

2525
import abc
26+
import argparse
2627
import asyncio
2728
import collections
2829
import functools
30+
import importlib.metadata
2931
import subprocess
3032
import threading
3133
from datetime import datetime
3234
from datetime import UTC
3335
import json
3436
import os
37+
import sys
3538
import typing
3639
import shlex
3740

@@ -79,6 +82,19 @@
7982
""")
8083

8184

85+
def parse_args():
86+
parser = argparse.ArgumentParser( \
87+
formatter_class=argparse.RawDescriptionHelpFormatter)
88+
_metadata_ = importlib.metadata.metadata('qubesmanager')
89+
parser.version = '{} ({}) {}'.format(os.path.basename(sys.argv[0]), \
90+
_metadata_['summary'], _metadata_['version'])
91+
parser.version += '\nCopyright (C) {}'.format(_metadata_['author'])
92+
parser.version += '\nLicense: {}'.format(_metadata_['license'])
93+
parser.add_argument('--version', action='version')
94+
args = parser.parse_args()
95+
return args
96+
97+
8298
class TreeItem(abc.ABC):
8399
COL_NAMES = [
84100
'Name',
@@ -631,6 +647,7 @@ class QvmTemplateWindow(
631647
ui_qvmtemplate.Ui_MainWindow,
632648
PyQt6.QtWidgets.QMainWindow):
633649
def __init__(self, qt_app, qubes_app, dispatcher, _parent=None):
650+
self.cliargs = parse_args()
634651
super().__init__()
635652
self.setupUi(self)
636653
self.template_tree.header().setSectionResizeMode(

qubesmanager/restore.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121
#
2222

2323
import argparse
24+
import importlib.metadata
2425
from PyQt6 import QtCore, QtWidgets, QtGui # pylint: disable=import-error
2526
import os
2627
import os.path
28+
import sys
2729
import logging
2830
import logging.handlers
2931

@@ -43,12 +45,19 @@
4345

4446
# pylint: disable=too-few-public-methods
4547
def parse_args():
46-
parser = argparse.ArgumentParser()
48+
parser = argparse.ArgumentParser( \
49+
formatter_class=argparse.RawDescriptionHelpFormatter)
4750
parser.add_argument(
4851
'--log', action='store', default='INFO',
4952
choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
5053
help='Provide logging level. Values: DEBUG, INFO, '
5154
'INFO (default), ERROR, CRITICAL')
55+
_metadata_ = importlib.metadata.metadata('qubesmanager')
56+
parser.version = '{} ({}) {}'.format(os.path.basename(sys.argv[0]), \
57+
_metadata_['summary'], _metadata_['version'])
58+
parser.version += '\nCopyright (C) {}'.format(_metadata_['author'])
59+
parser.version += '\nLicense: {}'.format(_metadata_['license'])
60+
parser.add_argument('--version', action='version')
5261
args = parser.parse_args()
5362
return args
5463

@@ -85,7 +94,7 @@ def run(self):
8594

8695
class RestoreVMsWindow(ui_restoredlg.Ui_Restore, QtWidgets.QWizard):
8796
def __init__(self, qt_app, qubes_app, parent=None):
88-
cliargs = parse_args()
97+
self.cliargs = parse_args()
8998
super().__init__(parent)
9099

91100
self.qt_app = qt_app
@@ -104,7 +113,7 @@ def __init__(self, qt_app, qubes_app, parent=None):
104113
handler = logging.handlers.QueueHandler(self.feedback_queue)
105114
logger = logging.getLogger('qubesadmin.backup')
106115
logger.addHandler(handler)
107-
logger.setLevel(cliargs.log)
116+
logger.setLevel(self.cliargs.log)
108117

109118
self.backup_restore = None
110119
self.target_appvm = None

qubesmanager/settings.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@
2222
#
2323
#
2424

25+
import argparse
2526
import collections
2627
import functools
28+
import importlib.metadata
2729
import re
2830
import subprocess
31+
import os
2932
import sys
3033
import traceback
3134
from qubesadmin.tools import QubesArgumentParser
@@ -1551,7 +1554,13 @@ def delete_rule_button_pressed(self):
15511554
self.fw_model.remove_child(i)
15521555

15531556

1554-
parser = QubesArgumentParser(vmname_nargs=1)
1557+
parser = QubesArgumentParser(vmname_nargs=1,
1558+
formatter_class=argparse.RawDescriptionHelpFormatter)
1559+
_metadata_ = importlib.metadata.metadata('qubesmanager')
1560+
parser.version = '{} ({}) {}'.format(os.path.basename(sys.argv[0]), \
1561+
_metadata_['summary'], _metadata_['version'])
1562+
parser.version += '\nCopyright (C) {}'.format(_metadata_['author'])
1563+
parser.version += '\nLicense: {}'.format(_metadata_['license'])
15551564

15561565
parser.add_argument('--tab', metavar='TAB',
15571566
action='store',

qubesmanager/template_manager.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
#
2121
#
2222

23+
import argparse
24+
import importlib.metadata
25+
import sys
26+
import os
27+
2328
from qubesadmin import exc
2429

2530
from PyQt6 import QtWidgets, QtGui, QtCore # pylint: disable=import-error
@@ -35,11 +40,25 @@
3540
column_names = ['State', 'Qube', 'Current template', 'New template']
3641

3742

43+
def parse_args():
44+
parser = argparse.ArgumentParser( \
45+
formatter_class=argparse.RawDescriptionHelpFormatter)
46+
_metadata_ = importlib.metadata.metadata('qubesmanager')
47+
parser.version = '{} ({}) {}'.format(os.path.basename(sys.argv[0]), \
48+
_metadata_['summary'], _metadata_['version'])
49+
parser.version += '\nCopyright (C) {}'.format(_metadata_['author'])
50+
parser.version += '\nLicense: {}'.format(_metadata_['license'])
51+
parser.add_argument('--version', action='version')
52+
args = parser.parse_args()
53+
return args
54+
55+
3856
class TemplateManagerWindow(
3957
ui_templatemanager.Ui_MainWindow, QtWidgets.QMainWindow):
4058

4159
def __init__(self, qt_app, qubes_app, dispatcher, parent=None):
4260
# pylint: disable=unused-argument
61+
self.cliargs = parse_args()
4362
super().__init__(parent)
4463
self.setupUi(self)
4564

0 commit comments

Comments
 (0)