Skip to content

Commit

Permalink
Add localization module API to get keyboard config
Browse files Browse the repository at this point in the history
This API is added so that web UI is able to read keyboard layouts
without storing them to the localization module.
  • Loading branch information
jkonecny12 committed Mar 3, 2025
1 parent 3c9e234 commit c57a272
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 6 deletions.
15 changes: 15 additions & 0 deletions pyanaconda/modules/localization/localization.py
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,21 @@ def _update_settings_from_task(self, result):
self.set_vc_keymap(vc_keymap)
self.set_x_layouts(x_layouts)

def get_keyboard_configuration_with_task(self):
"""Get current keyboard configuration without storing it into module.
This configuration will be used for the installation at the time of task execution.
The task is read only, the results are not stored anywhere.
:returns: a task reading keyboard configuration
"""
task = GetMissingKeyboardConfigurationTask(
localed_wrapper=self.localed_wrapper,
x_layouts=self.x_layouts,
vc_keymap=self.vc_keymap,
)
return task

def apply_keyboard_with_task(self):
"""Apply keyboard configuration to the current system.
Expand Down
28 changes: 27 additions & 1 deletion pyanaconda/modules/localization/localization_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
# Red Hat, Inc.
#

from dasbus.server.interface import dbus_interface, dbus_signal
from dasbus.server.interface import dbus_class, dbus_interface, dbus_signal
from dasbus.server.property import emits_properties_changed
from dasbus.typing import * # pylint: disable=wildcard-import

Expand All @@ -27,6 +27,21 @@
from pyanaconda.modules.common.containers import TaskContainer
from pyanaconda.modules.common.structures.keyboard_layout import KeyboardLayout
from pyanaconda.modules.common.structures.language import LanguageData, LocaleData
from pyanaconda.modules.common.task import TaskInterface


@dbus_class
class KeyboardConfigurationTaskInterface(TaskInterface):
"""Interface to get keyboard configuration data."""

@staticmethod
def convert_result(value):
"""Convert value to publishable result.
From:
(("us", "cs (qwerty)"), "cs-qwerty")
"""
return get_variant(List[Str], Str)


@dbus_interface(LOCALIZATION.interface_name)
Expand Down Expand Up @@ -255,6 +270,17 @@ def PopulateMissingKeyboardConfigurationWithTask(self) -> ObjPath:
self.implementation.populate_missing_keyboard_configuration_with_task()
)

def GetKeyboardConfigurationWithTask(self) -> ObjPath:
"""Get current keyboard configuration without storing it into module.
This task will give you a potential configuration to be installed at the time of
task execution. The task is read only, the results are not used anywhere by
the localization module.
"""
return TaskContainer.to_object_path(
self.implementation.get_keyboard_configuration_with_task()
)

def ApplyKeyboardWithTask(self) -> ObjPath:
"""Apply keyboard configuration to the current system.
Expand Down
6 changes: 6 additions & 0 deletions pyanaconda/modules/localization/runtime.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
from pyanaconda.modules.common.errors.configuration import KeyboardConfigurationError
from pyanaconda.modules.common.task import Task
from pyanaconda.modules.localization.installation import write_vc_configuration
from pyanaconda.modules.localization.localization_interface import (
KeyboardConfigurationTaskInterface,
)
from pyanaconda.modules.localization.utils import get_missing_keyboard_configuration

log = get_module_logger(__name__)
Expand Down Expand Up @@ -81,6 +84,9 @@ def __init__(self, localed_wrapper, x_layouts, vc_keymap):
self._x_layouts = x_layouts
self._vc_keymap = vc_keymap

def for_publication(self):
return KeyboardConfigurationTaskInterface(self)

@property
def name(self):
return "Get missing keyboard settings."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@
LanguageInstallationTask,
)
from pyanaconda.modules.localization.localization import LocalizationService
from pyanaconda.modules.localization.localization_interface import LocalizationInterface
from pyanaconda.modules.localization.runtime import (
ApplyKeyboardTask,
GetMissingKeyboardConfigurationTask,
from pyanaconda.modules.localization.localization_interface import (
KeyboardConfigurationTaskInterface,
LocalizationInterface,
)
from pyanaconda.modules.localization.runtime import ApplyKeyboardTask
from tests.unit_tests.pyanaconda_tests import (
PropertiesChangedCallback,
check_dbus_property,
Expand Down Expand Up @@ -349,7 +349,19 @@ def test_populate_missing_keyboard_configuration_with_task(self, publisher):

task_path = self.localization_interface.PopulateMissingKeyboardConfigurationWithTask()

obj = check_task_creation(task_path, publisher, GetMissingKeyboardConfigurationTask)
obj = check_task_creation(task_path, publisher, KeyboardConfigurationTaskInterface)
assert obj.implementation._vc_keymap == 'us'
assert obj.implementation._x_layouts == ['cz', 'cz (qwerty)']

@patch_dbus_publish_object
def test_get_keyboard_configuration_with_task(self, publisher):
"""Test GetKeyboardConfigurationWithTask."""
self.localization_interface.VirtualConsoleKeymap = 'us'
self.localization_interface.XLayouts = ['cz', 'cz (qwerty)']

task_path = self.localization_interface.GetKeyboardConfigurationWithTask()

obj = check_task_creation(task_path, publisher, KeyboardConfigurationTaskInterface)
assert obj.implementation._vc_keymap == 'us'
assert obj.implementation._x_layouts == ['cz', 'cz (qwerty)']

Expand Down

0 comments on commit c57a272

Please sign in to comment.