virtui-manager 1.4.0__tar.gz → 1.5.0__tar.gz

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.
Files changed (86) hide show
  1. {virtui_manager-1.4.0/src/virtui_manager.egg-info → virtui_manager-1.5.0}/PKG-INFO +1 -1
  2. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/pyproject.toml +4 -2
  3. virtui_manager-1.5.0/requirements.txt +5 -0
  4. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/setup.cfg +3 -2
  5. {virtui_manager-1.4.0 → virtui_manager-1.5.0/src/virtui_manager.egg-info}/PKG-INFO +1 -1
  6. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/virtui_manager.egg-info/SOURCES.txt +8 -7
  7. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/virtui_manager.egg-info/entry_points.txt +1 -0
  8. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/constants.py +8 -2
  9. virtui_manager-1.5.0/src/vmanager/gui_wrapper.py +89 -0
  10. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/i18n.py +2 -2
  11. {virtui_manager-1.4.0/src/vmanager/locales → virtui_manager-1.5.0/src/vmanager/locale}/de/LC_MESSAGES/virtui-manager.mo +0 -0
  12. {virtui_manager-1.4.0/src/vmanager/locales → virtui_manager-1.5.0/src/vmanager/locale}/de/LC_MESSAGES/virtui-manager.po +407 -373
  13. {virtui_manager-1.4.0/src/vmanager/locales → virtui_manager-1.5.0/src/vmanager/locale}/fr/LC_MESSAGES/virtui-manager.mo +0 -0
  14. {virtui_manager-1.4.0/src/vmanager/locales → virtui_manager-1.5.0/src/vmanager/locale}/fr/LC_MESSAGES/virtui-manager.po +407 -377
  15. virtui_manager-1.5.0/src/vmanager/locale/it/LC_MESSAGES/virtui-manager.mo +0 -0
  16. {virtui_manager-1.4.0/src/vmanager/locales → virtui_manager-1.5.0/src/vmanager/locale}/it/LC_MESSAGES/virtui-manager.po +425 -390
  17. {virtui_manager-1.4.0/src/vmanager/locales → virtui_manager-1.5.0/src/vmanager/locale}/virtui-manager.pot +406 -370
  18. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/utils.py +3 -0
  19. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vmanager.py +31 -7
  20. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vmcard.css +16 -0
  21. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vmcard.py +63 -22
  22. virtui_manager-1.4.0/requirements.txt +0 -4
  23. virtui_manager-1.4.0/src/vmanager/locales/it/LC_MESSAGES/virtui-manager.mo +0 -0
  24. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/LICENSE +0 -0
  25. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/MANIFEST.in +0 -0
  26. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/README.md +0 -0
  27. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/virtui_manager.egg-info/dependency_links.txt +0 -0
  28. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/virtui_manager.egg-info/requires.txt +0 -0
  29. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/virtui_manager.egg-info/top_level.txt +0 -0
  30. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/__init__.py +0 -0
  31. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/config.py +0 -0
  32. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/connection_manager.py +0 -0
  33. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/dialog.css +0 -0
  34. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/events.py +0 -0
  35. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/firmware_manager.py +0 -0
  36. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/libvirt_error_handler.py +0 -0
  37. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/libvirt_utils.py +0 -0
  38. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/__init__.py +0 -0
  39. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/base_modals.py +0 -0
  40. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/bulk_modals.py +0 -0
  41. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/cache_stats_modal.py +0 -0
  42. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/capabilities_modal.py +0 -0
  43. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/config_modal.py +0 -0
  44. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/cpu_mem_pc_modals.py +0 -0
  45. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/custom_migration_modal.py +0 -0
  46. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/disk_pool_modals.py +0 -0
  47. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/host_dashboard_modal.py +0 -0
  48. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/host_stats.py +0 -0
  49. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/howto_disk_modal.py +0 -0
  50. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/howto_network_modal.py +0 -0
  51. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/howto_overlay_modal.py +0 -0
  52. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/howto_ssh_modal.py +0 -0
  53. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/howto_virtiofs_modal.py +0 -0
  54. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/input_modals.py +0 -0
  55. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/log_modal.py +0 -0
  56. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/migration_modals.py +0 -0
  57. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/network_modals.py +0 -0
  58. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/provisioning_modals.py +0 -0
  59. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/select_server_modals.py +0 -0
  60. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/selection_modals.py +0 -0
  61. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/server_modals.py +0 -0
  62. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/server_prefs_modals.py +0 -0
  63. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/utils_modals.py +0 -0
  64. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/virsh_modals.py +0 -0
  65. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/virtiofs_modals.py +0 -0
  66. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/vm_type_info_modal.py +0 -0
  67. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/vmanager_modals.py +0 -0
  68. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/vmcard_dialog.py +0 -0
  69. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/vmdetails_modals.py +0 -0
  70. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/modals/xml_modals.py +0 -0
  71. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/network_manager.py +0 -0
  72. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/remote_viewer.py +0 -0
  73. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/remote_viewer_gtk4.py +0 -0
  74. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/storage_manager.py +0 -0
  75. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/virtui_dev.py +0 -0
  76. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vm_actions.py +0 -0
  77. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vm_cache.py +0 -0
  78. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vm_migration.py +0 -0
  79. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vm_provisioner.py +0 -0
  80. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vm_queries.py +0 -0
  81. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vm_service.py +0 -0
  82. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vmanager.css +0 -0
  83. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vmanager_cmd.py +0 -0
  84. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/vmcard_pool.py +0 -0
  85. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/webconsole_manager.py +0 -0
  86. {virtui_manager-1.4.0 → virtui_manager-1.5.0}/src/vmanager/wrapper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: virtui-manager
3
- Version: 1.4.0
3
+ Version: 1.5.0
4
4
  Summary: Terminal-based interface to manage virtual machines using libvirt
5
5
  Home-page: https://aginies.github.io/virtui-manager/
6
6
  Author: Antoine Ginies
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "virtui-manager"
7
- version = "1.4.0"
7
+ version = "1.5.0"
8
8
  description = "Terminal-based interface to manage virtual machines using libvirt"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -64,6 +64,8 @@ Changelog = "https://github.com/aginies/virtui-manager/releases"
64
64
  virtui-manager = "vmanager.wrapper:main"
65
65
  virtui-manager-cmd = "vmanager.wrapper:cmd_main"
66
66
  virtui-remote-viewer = "vmanager.wrapper:remote_viewer_main"
67
+ virtui-gui = "vmanager.gui_wrapper:main"
68
+
67
69
 
68
70
  [tool.setuptools]
69
71
  package-dir = {"" = "src"}
@@ -72,7 +74,7 @@ package-dir = {"" = "src"}
72
74
  where = ["src"]
73
75
 
74
76
  [tool.setuptools.package-data]
75
- vmanager = ["*.css", "*.md", "locales/*.pot", "locales/*/LC_MESSAGES/*.mo", "locales/*/LC_MESSAGES/*.po"]
77
+ vmanager = ["*.css", "*.md", "locale/*.pot", "locale/*/LC_MESSAGES/*.mo", "locale/*/LC_MESSAGES/*.po"]
76
78
 
77
79
  [tool.black]
78
80
  line-length = 100
@@ -0,0 +1,5 @@
1
+ textual
2
+ libvirt-python==10.0.0
3
+ pyyaml
4
+ markdown-it-py
5
+ websockify
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = virtui-manager
3
- version = 1.4.0
3
+ version = 1.5.0
4
4
  description = Terminal-based interface to manage virtual machines using libvirt
5
5
  long_description = file: README.md
6
6
  long_description_content_type = text/markdown
@@ -51,6 +51,7 @@ console_scripts =
51
51
  virtui-manager = vmanager.wrapper:main
52
52
  virtui-manager-cmd = vmanager.wrapper:cmd_main
53
53
  virtui-remote-viewer = vmanager.wrapper:remote_viewer_main
54
+ virtui-gui = vmanager.gui_wrapper:main
54
55
 
55
56
  [options.extras_require]
56
57
  dev =
@@ -63,7 +64,7 @@ webconsole =
63
64
  websockify>=0.10.0
64
65
 
65
66
  [options.package_data]
66
- vmanager = *.css, *.md, locales/*.pot, locales/*/LC_MESSAGES/*.mo, locales/*/LC_MESSAGES/*.po
67
+ vmanager = *.css, *.md, locale/*.pot, locale/*/LC_MESSAGES/*.mo, locale/*/LC_MESSAGES/*.po
67
68
 
68
69
  [egg_info]
69
70
  tag_build =
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: virtui-manager
3
- Version: 1.4.0
3
+ Version: 1.5.0
4
4
  Summary: Terminal-based interface to manage virtual machines using libvirt
5
5
  Home-page: https://aginies.github.io/virtui-manager/
6
6
  Author: Antoine Ginies
@@ -17,6 +17,7 @@ src/vmanager/constants.py
17
17
  src/vmanager/dialog.css
18
18
  src/vmanager/events.py
19
19
  src/vmanager/firmware_manager.py
20
+ src/vmanager/gui_wrapper.py
20
21
  src/vmanager/i18n.py
21
22
  src/vmanager/libvirt_error_handler.py
22
23
  src/vmanager/libvirt_utils.py
@@ -40,13 +41,13 @@ src/vmanager/vmcard.py
40
41
  src/vmanager/vmcard_pool.py
41
42
  src/vmanager/webconsole_manager.py
42
43
  src/vmanager/wrapper.py
43
- src/vmanager/locales/virtui-manager.pot
44
- src/vmanager/locales/de/LC_MESSAGES/virtui-manager.mo
45
- src/vmanager/locales/de/LC_MESSAGES/virtui-manager.po
46
- src/vmanager/locales/fr/LC_MESSAGES/virtui-manager.mo
47
- src/vmanager/locales/fr/LC_MESSAGES/virtui-manager.po
48
- src/vmanager/locales/it/LC_MESSAGES/virtui-manager.mo
49
- src/vmanager/locales/it/LC_MESSAGES/virtui-manager.po
44
+ src/vmanager/locale/virtui-manager.pot
45
+ src/vmanager/locale/de/LC_MESSAGES/virtui-manager.mo
46
+ src/vmanager/locale/de/LC_MESSAGES/virtui-manager.po
47
+ src/vmanager/locale/fr/LC_MESSAGES/virtui-manager.mo
48
+ src/vmanager/locale/fr/LC_MESSAGES/virtui-manager.po
49
+ src/vmanager/locale/it/LC_MESSAGES/virtui-manager.mo
50
+ src/vmanager/locale/it/LC_MESSAGES/virtui-manager.po
50
51
  src/vmanager/modals/__init__.py
51
52
  src/vmanager/modals/base_modals.py
52
53
  src/vmanager/modals/bulk_modals.py
@@ -1,4 +1,5 @@
1
1
  [console_scripts]
2
+ virtui-gui = vmanager.gui_wrapper:main
2
3
  virtui-manager = vmanager.wrapper:main
3
4
  virtui-manager-cmd = vmanager.wrapper:cmd_main
4
5
  virtui-remote-viewer = vmanager.wrapper:remote_viewer_main
@@ -38,7 +38,7 @@ class AppInfo:
38
38
  """Define app data"""
39
39
  name = "virtui-manager"
40
40
  namecase = "VirtUI Manager"
41
- version = "1.4.0"
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 remove viewer {viewer} has been selected.")
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}...")
@@ -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()
@@ -3,9 +3,9 @@ import os
3
3
  import locale
4
4
  import logging
5
5
 
6
- # Setup path to locales
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__), 'locales')
8
+ LOCALE_DIR = os.path.join(os.path.dirname(__file__), 'locale')
9
9
  DOMAIN = 'virtui-manager'
10
10
 
11
11
  _ = lambda s: s