keyboard: load suggestions from file

This commit is contained in:
Dan Bungert 2022-07-29 11:22:54 -06:00
parent 271a1b2d29
commit afb8099f66
2 changed files with 32 additions and 41 deletions

View File

@ -17,6 +17,9 @@ import logging
import re import re
import os import os
import yaml
from subiquity.common.resources import resource_path
from subiquity.common.types import KeyboardSetting from subiquity.common.types import KeyboardSetting
log = logging.getLogger("subiquity.models.keyboard") log = logging.getLogger("subiquity.models.keyboard")
@ -35,40 +38,6 @@ XKBOPTIONS="{options}"
BACKSPACE="guess" BACKSPACE="guess"
""" """
layout_for_lang = {
# In the same order as the Welcome screen
# https://salsa.debian.org/installer-team/console-setup/-/blob/master/debian/keyboard-configuration.config
# None values indicate that this lang should use the default setting.
'ast_ES.UTF-8': KeyboardSetting(layout='es', variant='ast'),
'id_ID.UTF-8': None,
'ca_ES.UTF-8': KeyboardSetting(layout='es', variant='cat'),
'de_DE.UTF-8': KeyboardSetting(layout='de'),
'en_US.UTF-8': KeyboardSetting(layout='us'),
'en_GB.UTF-8': KeyboardSetting(layout='gb'),
'es_ES.UTF-8': KeyboardSetting(layout='es'),
'fr_FR.UTF-8': KeyboardSetting(layout='fr', variant='latin9'),
'hr_HR.UTF-8': KeyboardSetting(layout='hr'),
'lv_LV.UTF-8': KeyboardSetting(layout='lv'),
'lt_LT.UTF-8': KeyboardSetting(layout='lt'),
'hu_HU.UTF-8': KeyboardSetting(layout='hu'),
'nl_NL.UTF-8': KeyboardSetting(layout='us'),
'nb': KeyboardSetting(layout='no'),
'bo_IN': KeyboardSetting(layout='us,cn', variant=',tib'),
'pl_PL.UTF-8': KeyboardSetting(layout='pl'),
'fi_FI.UTF-8': KeyboardSetting(layout='fi'),
'sv_SE.UTF-8': KeyboardSetting(layout='se'),
'kab_DZ.UTF-8': KeyboardSetting(layout='dz', variant='la'),
'cs_CZ.UTF-8': KeyboardSetting(layout='cz'),
'el_GR.UTF-8': KeyboardSetting(layout='us,gr'),
'be_BY.UTF-8': KeyboardSetting(layout='us,by'),
'ru_RU.UTF-8': KeyboardSetting(layout='us,ru'),
'sr_RS': KeyboardSetting(layout='rs', variant='latin'),
'uk_UA.UTF-8': KeyboardSetting(layout='us,ua'),
'he_IL.UTF-8': KeyboardSetting(layout='us,il'),
'oc': None,
'zh_CN.UTF-8': KeyboardSetting(layout='cn'),
}
def from_config_file(config_file): def from_config_file(config_file):
with open(config_file) as fp: with open(config_file) as fp:
@ -97,10 +66,11 @@ class KeyboardModel:
def __init__(self, root): def __init__(self, root):
self.config_path = os.path.join( self.config_path = os.path.join(
root, 'etc', 'default', 'keyboard') root, 'etc', 'default', 'keyboard')
self.layout_for_lang = self.load_layout_suggestions()
if os.path.exists(self.config_path): if os.path.exists(self.config_path):
self.default_setting = from_config_file(self.config_path) self.default_setting = from_config_file(self.config_path)
else: else:
self.default_setting = layout_for_lang['en_US.UTF-8'] self.default_setting = self.layout_for_lang['en_US.UTF-8']
self._setting = None self._setting = None
@property @property
@ -136,7 +106,19 @@ class KeyboardModel:
def setting_for_lang(self, lang): def setting_for_lang(self, lang):
if self._setting is not None: if self._setting is not None:
return self._setting return self._setting
layout = layout_for_lang.get(lang, None) layout = self.layout_for_lang.get(lang, None)
if layout is None: if layout is None:
return self.default_setting return self.default_setting
return layout return layout
def load_layout_suggestions(self, path=None):
if path is None:
path = resource_path('kbds') + '/keyboard-configuration.yaml'
with open(path) as fp:
data = yaml.safe_load(fp)
ret = {}
for k, v in data.items():
ret[k] = KeyboardSetting(**v)
return ret

View File

@ -18,10 +18,7 @@ from parameterized import parameterized
from subiquitycore.tests import SubiTestCase from subiquitycore.tests import SubiTestCase
from subiquity.common.types import KeyboardSetting from subiquity.common.types import KeyboardSetting
from subiquity.models.keyboard import ( from subiquity.models.keyboard import KeyboardModel
KeyboardModel,
layout_for_lang,
)
class TestKeyboardModel(SubiTestCase): class TestKeyboardModel(SubiTestCase):
@ -56,4 +53,16 @@ class TestKeyboardModel(SubiTestCase):
for line in fp.readlines(): for line in fp.readlines():
tokens = line.split(':') tokens = line.split(':')
locale = tokens[1] locale = tokens[1]
self.assertIn(locale, layout_for_lang.keys()) self.assertIn(locale, self.model.layout_for_lang.keys())
def testLoadSuggestions(self):
data = self.tmp_path('kbd.yaml')
with open(data, 'w') as fp:
fp.write('''
aa_BB.UTF-8:
layout: aa
variant: cc
''')
actual = self.model.load_layout_suggestions(data)
expected = {'aa_BB.UTF-8': KeyboardSetting(layout='aa', variant='cc')}
self.assertEqual(expected, actual)