virtui-manager 1.4.0__py3-none-any.whl → 1.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {virtui_manager-1.4.0.dist-info → virtui_manager-1.5.0.dist-info}/METADATA +1 -1
- {virtui_manager-1.4.0.dist-info → virtui_manager-1.5.0.dist-info}/RECORD +20 -19
- {virtui_manager-1.4.0.dist-info → virtui_manager-1.5.0.dist-info}/entry_points.txt +1 -0
- vmanager/constants.py +8 -2
- vmanager/gui_wrapper.py +89 -0
- vmanager/i18n.py +2 -2
- vmanager/{locales → locale}/de/LC_MESSAGES/virtui-manager.mo +0 -0
- vmanager/{locales → locale}/de/LC_MESSAGES/virtui-manager.po +407 -373
- vmanager/{locales → locale}/fr/LC_MESSAGES/virtui-manager.mo +0 -0
- vmanager/{locales → locale}/fr/LC_MESSAGES/virtui-manager.po +407 -377
- vmanager/locale/it/LC_MESSAGES/virtui-manager.mo +0 -0
- vmanager/{locales → locale}/it/LC_MESSAGES/virtui-manager.po +425 -390
- vmanager/{locales → locale}/virtui-manager.pot +406 -370
- vmanager/utils.py +3 -0
- vmanager/vmanager.py +31 -7
- vmanager/vmcard.css +16 -0
- vmanager/vmcard.py +63 -22
- vmanager/locales/it/LC_MESSAGES/virtui-manager.mo +0 -0
- {virtui_manager-1.4.0.dist-info → virtui_manager-1.5.0.dist-info}/WHEEL +0 -0
- {virtui_manager-1.4.0.dist-info → virtui_manager-1.5.0.dist-info}/licenses/LICENSE +0 -0
- {virtui_manager-1.4.0.dist-info → virtui_manager-1.5.0.dist-info}/top_level.txt +0 -0
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
virtui_manager-1.
|
|
1
|
+
virtui_manager-1.5.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
2
2
|
vmanager/__init__.py,sha256=-gTpOgkPAOtbLwxz-U9i2uVtFW1SB9JhBguViXnQPJ8,15
|
|
3
3
|
vmanager/config.py,sha256=OBMWtXBTnmws1ITjQ7D_C0LVMxzvGaRH8nZOlW9cbqk,3102
|
|
4
4
|
vmanager/connection_manager.py,sha256=osk0EHJ0ua2wnDOu-9faK8fMd7s9TGsI6OtgxLAMTCI,12984
|
|
5
|
-
vmanager/constants.py,sha256=
|
|
5
|
+
vmanager/constants.py,sha256=iynQh2ya31P0QMEdoUAVELtgCfZDx3p1mPYe-DWPfs0,48791
|
|
6
6
|
vmanager/dialog.css,sha256=HhYqGy0U-R6Efig3JbyEmHJWiceL1Rh_hzpSaDewJro,11753
|
|
7
7
|
vmanager/events.py,sha256=yvjcYHMoDnnDKsMjfweZYnu0-U7lxQlB2uuIbtK5FeY,1556
|
|
8
8
|
vmanager/firmware_manager.py,sha256=bnjBnbT3iT-glKL0p6J14wbAcRIntksze8YnzgKmXNg,3481
|
|
9
|
-
vmanager/
|
|
9
|
+
vmanager/gui_wrapper.py,sha256=olRqksAZr-mysAS3r-RGti9mkU1LNdVBQm346suPrJ8,3034
|
|
10
|
+
vmanager/i18n.py,sha256=a_3YCc5c4hDaj_oVCNB2u2W5Go7fzoNNXfuwyeFxva8,747
|
|
10
11
|
vmanager/libvirt_error_handler.py,sha256=aDumo2yNv9_rsbWjYtglt0ixQx8T2WTvgdEF8Uuanqw,1797
|
|
11
12
|
vmanager/libvirt_utils.py,sha256=eJML4YcmSxIUJWMi4_fzzG8nnCq97WH_Y5CEaLB35CY,20366
|
|
12
13
|
vmanager/network_manager.py,sha256=0dlh9D-p4LlEfuiQnyd3s3lxhU1GjO4x89sCKVA3fzE,8748
|
|
13
14
|
vmanager/remote_viewer.py,sha256=evFvp7ilKPuTf-YA4jCGMgO6dzdhbL1iea1lzETwWeU,89495
|
|
14
15
|
vmanager/remote_viewer_gtk4.py,sha256=KIyejYq_PgmSL6yAUOnnloqpaIWdkYIPdoP6CmMaTOo,45994
|
|
15
16
|
vmanager/storage_manager.py,sha256=MewZBTyBGUtKrVQpXH-DrQpr9CPIFi7VLE-8avrE8jw,46773
|
|
16
|
-
vmanager/utils.py,sha256=
|
|
17
|
+
vmanager/utils.py,sha256=9MM7_jyAiY4vDljIYWwVK8Kqtyxwk-NKK90D_dY0P4A,18985
|
|
17
18
|
vmanager/virtui_dev.py,sha256=M2pJEZRNApqezkj4RdEJR9neEdc_7HV3KInVGy9QgiQ,3118
|
|
18
19
|
vmanager/vm_actions.py,sha256=xDP3KTHsyavSttp7UrcV36_13aCpMXTqYvBLW1UChuM,118436
|
|
19
20
|
vmanager/vm_cache.py,sha256=dxNj1TrkIAI8NW8SZj0QsfhHkjCrylQ5rgcvPN2zDnQ,1181
|
|
@@ -22,20 +23,20 @@ vmanager/vm_provisioner.py,sha256=ZOlwHQzsa1Ur90wWtFl8oBUTfozT9wjURV6Yk1O6H84,46
|
|
|
22
23
|
vmanager/vm_queries.py,sha256=4yife9RymBqYR0Jk3NHJ7VYIQ0R5qdzb70OurlXDhtM,52776
|
|
23
24
|
vmanager/vm_service.py,sha256=W_j4u5-I0ZujSho6ecC5NEapX5N4lzSWn8lR0ocr2RM,70819
|
|
24
25
|
vmanager/vmanager.css,sha256=7HzaivsJ2lRMvbYP3QSqG2ZR8gwFdJr2hMBvjSu4WdI,14853
|
|
25
|
-
vmanager/vmanager.py,sha256=
|
|
26
|
+
vmanager/vmanager.py,sha256=6eq5UiIwApWzG3HeBx2BGpYlVKueht_82TnpqcQN3FU,83037
|
|
26
27
|
vmanager/vmanager_cmd.py,sha256=IQtCozK6OvdjpIgL_umuv8LkHNk-W9DsQtsxpZ5fQRk,32161
|
|
27
|
-
vmanager/vmcard.css,sha256=
|
|
28
|
-
vmanager/vmcard.py,sha256=
|
|
28
|
+
vmanager/vmcard.css,sha256=rHrDZftmwfnM5wjhZhLjSajnI3PRf8TW-ub3rG-Pqrg,3367
|
|
29
|
+
vmanager/vmcard.py,sha256=No9LsCCL08IK1cBQAHxOq4VG0l6pbwB4ntnvxKxXq6M,104016
|
|
29
30
|
vmanager/vmcard_pool.py,sha256=IgZZIHNNt3t8CAiKalpQpEF69KY8MZ-csuBrh71AmKM,3514
|
|
30
31
|
vmanager/webconsole_manager.py,sha256=3Coafu6SiPWMLB3fMTKvXPHQK3zVCkiUrYaQ-5Ka0sM,28910
|
|
31
32
|
vmanager/wrapper.py,sha256=6aIz7YRN__Cl78XEBxqQ6g7tWMZ9S_8Nq6XaOtaivTM,1265
|
|
32
|
-
vmanager/
|
|
33
|
-
vmanager/
|
|
34
|
-
vmanager/
|
|
35
|
-
vmanager/
|
|
36
|
-
vmanager/
|
|
37
|
-
vmanager/
|
|
38
|
-
vmanager/
|
|
33
|
+
vmanager/locale/virtui-manager.pot,sha256=-aTS8Pci22WF3wnnjP5JhVNY5h07Pz6wcHvj4brUZww,55619
|
|
34
|
+
vmanager/locale/de/LC_MESSAGES/virtui-manager.mo,sha256=x48qmzKkXVWPlDdICY8ElZ2QxIEXPRFzZmCd4TK7SSg,63051
|
|
35
|
+
vmanager/locale/de/LC_MESSAGES/virtui-manager.po,sha256=oNOV-POIwDSD27psnJ2gYe2QNRtaynAEa2GVsBP2AZE,82660
|
|
36
|
+
vmanager/locale/fr/LC_MESSAGES/virtui-manager.mo,sha256=FIdsflho_pCD_qBqc4U4JdPpp_y4IghhH-6QgjzHd6M,64260
|
|
37
|
+
vmanager/locale/fr/LC_MESSAGES/virtui-manager.po,sha256=3IvnbIFEAAtNZMTbgaxXh8B4YK0_wAWsbUK1N4fRGmo,83899
|
|
38
|
+
vmanager/locale/it/LC_MESSAGES/virtui-manager.mo,sha256=Z0A8fuXZUHuZo-qJ3dMJMvzOvdUjv-f3wJ5tV0DnsKU,62432
|
|
39
|
+
vmanager/locale/it/LC_MESSAGES/virtui-manager.po,sha256=qJ0OKZHLd7XaBxna_vVTBGGrmrywNVncVH0AHPARDNs,80727
|
|
39
40
|
vmanager/modals/__init__.py,sha256=Os1P7i7chUJCxGu4LOC_LJaJgpVOiOhxYzWNoW9Ubuw,36
|
|
40
41
|
vmanager/modals/base_modals.py,sha256=quGmI_FnoD7UVemruvYsvtz1whhJCNVr2hzQ3tl0hak,1263
|
|
41
42
|
vmanager/modals/bulk_modals.py,sha256=zlH5WxVFouJBJrchVLY3uAj3nl6NWC4PvWHhNH1cDFw,3172
|
|
@@ -69,8 +70,8 @@ vmanager/modals/vmanager_modals.py,sha256=UL2nS5ZH3ik8wEALXptNL22xMsGhime2vX73HX
|
|
|
69
70
|
vmanager/modals/vmcard_dialog.py,sha256=NP4qVYfZC58FF0_dXiI-2Q_XqZ1wfGcya1cKnYzBZTw,18848
|
|
70
71
|
vmanager/modals/vmdetails_modals.py,sha256=VcNq2NZ9JUvfNufrQc4YnbwsxzS1ZoXw91AR3KGSN9Y,151040
|
|
71
72
|
vmanager/modals/xml_modals.py,sha256=8lVJFqXM42w2kzCGyVa0Xks8-EfwMLHgkU_U6aqFnLY,1712
|
|
72
|
-
virtui_manager-1.
|
|
73
|
-
virtui_manager-1.
|
|
74
|
-
virtui_manager-1.
|
|
75
|
-
virtui_manager-1.
|
|
76
|
-
virtui_manager-1.
|
|
73
|
+
virtui_manager-1.5.0.dist-info/METADATA,sha256=yTO_cOBEu6FoDHJCZeHfum5l8r5fqc1xQtl3Yik8KLk,5329
|
|
74
|
+
virtui_manager-1.5.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
75
|
+
virtui_manager-1.5.0.dist-info/entry_points.txt,sha256=SrZ_7U4R3gPInnJ8Ia2i6yuM7lJ1lMDcnLomIVR3jFA,202
|
|
76
|
+
virtui_manager-1.5.0.dist-info/top_level.txt,sha256=fQ1nwH-4wZrf6Rc9HEHbudVahpy3TqeuMxgaaNHevxM,9
|
|
77
|
+
virtui_manager-1.5.0.dist-info/RECORD,,
|
vmanager/constants.py
CHANGED
|
@@ -38,7 +38,7 @@ class AppInfo:
|
|
|
38
38
|
"""Define app data"""
|
|
39
39
|
name = "virtui-manager"
|
|
40
40
|
namecase = "VirtUI Manager"
|
|
41
|
-
version = "1.
|
|
41
|
+
version = "1.5.0"
|
|
42
42
|
|
|
43
43
|
class VmAction:
|
|
44
44
|
"""Defines constants for VM action types."""
|
|
@@ -407,6 +407,9 @@ class StaticText:
|
|
|
407
407
|
WAITING_TO_START_COLLECTION = _("Waiting to start collection...")
|
|
408
408
|
COLLECTING_VM_INFO = _("Collecting VM info: {current}/{total}")
|
|
409
409
|
EDIT_VIRTIOFS_MOUNT = _("Edit VirtIO-FS")
|
|
410
|
+
LATEST_SNAPSHOT = _("Latest Snapshot:")
|
|
411
|
+
NO_SNAPSHOTS_CREATED = _("No Snapshots created")
|
|
412
|
+
SELECT_OVERLAY_DISCARD = _("Select overlay disk to discard:")
|
|
410
413
|
|
|
411
414
|
class SparklineLabels:
|
|
412
415
|
"""Constants for sparkline labels"""
|
|
@@ -685,11 +688,13 @@ class DialogMessages:
|
|
|
685
688
|
CONFIRM_REMOVE_USB_DEVICE_TEMPLATE = _("Are you sure you want to remove USB device '{description}'?")
|
|
686
689
|
CONFIRM_REMOVE_SCSI_CONTROLLER_TEMPLATE = _("Are you sure you want to remove SCSI controller '{model}' at index '{index}'?")
|
|
687
690
|
CONFIRM_REMOVE_VIRTIOFS_TEMPLATE = _("Are you sure you want to remove VirtIO-FS mount '{target_path}'?")
|
|
691
|
+
CONFIRM_DISCARD_CHANGES = _("Are you sure you want to discard changes in '{target_disk}' and revert t o its backing file? This action cannot be undone.")
|
|
692
|
+
CONFIRM_MERGE_CHANGES = _("Are you sure you want to merge changes from '{target_disk}' into its backing file?")
|
|
688
693
|
|
|
689
694
|
|
|
690
695
|
class QuickMessages:
|
|
691
696
|
"""Constants for quick messages"""
|
|
692
|
-
REMOTE_VIEWER_SELECTED = _("The
|
|
697
|
+
REMOTE_VIEWER_SELECTED = _("The remote viewer {viewer} has been selected.")
|
|
693
698
|
VM_DATA_LOADED = _("VM data loaded. Displaying VMs...")
|
|
694
699
|
FILTER_RUNNING_VMS = _("Filter: Running VMs")
|
|
695
700
|
FILTER_ALL_VMS = _("Filter: All VMs")
|
|
@@ -813,3 +818,4 @@ class ProgressMessages:
|
|
|
813
818
|
CONNECTING_TO_SERVER = _("Connecting to [b]{uri}[/b]...")
|
|
814
819
|
CONFIG_UPDATED_REFRESHING_VM_LIST = _("Configuration updated. Refreshing VM list...")
|
|
815
820
|
LOADING_VM_DATA_FROM_REMOTE_SERVERS = _("Loading VM data from remote server(s)...")
|
|
821
|
+
COMMITTING_CHANGES_FOR = _("Committing changes for {name}...")
|
vmanager/gui_wrapper.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
import sys
|
|
3
|
+
import os
|
|
4
|
+
import gi
|
|
5
|
+
|
|
6
|
+
# Require GTK 3.0 and Vte 2.91
|
|
7
|
+
try:
|
|
8
|
+
gi.require_version('Gtk', '3.0')
|
|
9
|
+
gi.require_version('Vte', '2.91')
|
|
10
|
+
except ValueError as e:
|
|
11
|
+
print(f"Error: Missing required libraries. {e}")
|
|
12
|
+
sys.exit(1)
|
|
13
|
+
|
|
14
|
+
from gi.repository import Gtk, Vte, GLib, Pango
|
|
15
|
+
|
|
16
|
+
class VirtuiWrapper(Gtk.Window):
|
|
17
|
+
def __init__(self):
|
|
18
|
+
super().__init__(title="Virtui Manager Console")
|
|
19
|
+
|
|
20
|
+
self.set_default_size(1200, 1024)
|
|
21
|
+
self.terminal = Vte.Terminal()
|
|
22
|
+
self.terminal.set_size(92, 34)
|
|
23
|
+
|
|
24
|
+
font_desc = Pango.FontDescription("Monospace 12")
|
|
25
|
+
self.terminal.set_font(font_desc)
|
|
26
|
+
|
|
27
|
+
self.terminal.set_scrollback_lines(10000)
|
|
28
|
+
|
|
29
|
+
self.terminal.connect("child-exited", self.on_child_exited)
|
|
30
|
+
|
|
31
|
+
# Add terminal to a ScrolledWindow to handle scrolling
|
|
32
|
+
scrolled_window = Gtk.ScrolledWindow()
|
|
33
|
+
scrolled_window.set_hexpand(True)
|
|
34
|
+
scrolled_window.set_vexpand(True)
|
|
35
|
+
scrolled_window.add(self.terminal)
|
|
36
|
+
|
|
37
|
+
self.add(scrolled_window)
|
|
38
|
+
|
|
39
|
+
self.connect("destroy", Gtk.main_quit)
|
|
40
|
+
self.spawn_app()
|
|
41
|
+
|
|
42
|
+
def spawn_app(self):
|
|
43
|
+
# python3 -m vmanager.wrapper
|
|
44
|
+
cmd = [sys.executable, "-m", "vmanager.wrapper"]
|
|
45
|
+
env = os.environ.copy()
|
|
46
|
+
|
|
47
|
+
# Calculate src directory relative to this script
|
|
48
|
+
# This script is in src/vmanager/gui_wrapper.py
|
|
49
|
+
script_dir = os.path.dirname(os.path.realpath(__file__))
|
|
50
|
+
src_dir = os.path.dirname(script_dir)
|
|
51
|
+
|
|
52
|
+
current_pythonpath = env.get("PYTHONPATH", "")
|
|
53
|
+
if src_dir not in current_pythonpath:
|
|
54
|
+
env["PYTHONPATH"] = f"{src_dir}:{current_pythonpath}" if current_pythonpath else src_dir
|
|
55
|
+
|
|
56
|
+
# Convert env to list of strings "KEY=VALUE" for spawn_async
|
|
57
|
+
envv = [f"{k}={v}" for k, v in env.items()]
|
|
58
|
+
|
|
59
|
+
try:
|
|
60
|
+
# Vte.Terminal.spawn_async(pty_flags, working_directory, argv, envv, spawn_flags, child_setup, child_setup_data, timeout, cancellable, callback, user_data)
|
|
61
|
+
self.terminal.spawn_async(
|
|
62
|
+
Vte.PtyFlags.DEFAULT,
|
|
63
|
+
os.getcwd(), # Working directory
|
|
64
|
+
cmd, # Command arguments
|
|
65
|
+
envv, # Environment
|
|
66
|
+
GLib.SpawnFlags.DEFAULT,
|
|
67
|
+
None, # child_setup
|
|
68
|
+
None, # child_setup_data
|
|
69
|
+
-1, # timeout
|
|
70
|
+
None, # cancellable
|
|
71
|
+
None, # callback
|
|
72
|
+
None # user_data
|
|
73
|
+
)
|
|
74
|
+
except Exception as e:
|
|
75
|
+
error_msg = f"Error spawning application: {e}\n"
|
|
76
|
+
self.terminal.feed(error_msg.encode('utf-8'))
|
|
77
|
+
print(error_msg)
|
|
78
|
+
|
|
79
|
+
def on_child_exited(self, terminal, status):
|
|
80
|
+
print(f"Child exited with status: {status}")
|
|
81
|
+
Gtk.main_quit()
|
|
82
|
+
|
|
83
|
+
def main():
|
|
84
|
+
app = VirtuiWrapper()
|
|
85
|
+
app.show_all()
|
|
86
|
+
Gtk.main()
|
|
87
|
+
|
|
88
|
+
if __name__ == "__main__":
|
|
89
|
+
main()
|
vmanager/i18n.py
CHANGED
|
@@ -3,9 +3,9 @@ import os
|
|
|
3
3
|
import locale
|
|
4
4
|
import logging
|
|
5
5
|
|
|
6
|
-
# Setup path to
|
|
6
|
+
# Setup path to locale
|
|
7
7
|
# This assumes the 'locales' directory is next to this file
|
|
8
|
-
LOCALE_DIR = os.path.join(os.path.dirname(__file__), '
|
|
8
|
+
LOCALE_DIR = os.path.join(os.path.dirname(__file__), 'locale')
|
|
9
9
|
DOMAIN = 'virtui-manager'
|
|
10
10
|
|
|
11
11
|
_ = lambda s: s
|
|
Binary file
|