summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xpyanaconda/gui.py1
-rw-r--r--pyanaconda/iw/progress_gui.py4
-rw-r--r--pyanaconda/language.py54
-rw-r--r--pyanaconda/localeinfo.py81
-rw-r--r--pyanaconda/text.py2
-rw-r--r--scripts/getlangnames.py12
-rw-r--r--tests/pyanaconda_test/language_test.py12
-rw-r--r--tests/pyanaconda_test/localeinfo_test.py35
8 files changed, 135 insertions, 66 deletions
diff --git a/pyanaconda/gui.py b/pyanaconda/gui.py
index e306852fa..bd17653bb 100755
--- a/pyanaconda/gui.py
+++ b/pyanaconda/gui.py
@@ -35,7 +35,6 @@ import shutil
import gtk
import gtk.glade
import gobject
-from language import expandLangs
from constants import *
from product import *
import network
diff --git a/pyanaconda/iw/progress_gui.py b/pyanaconda/iw/progress_gui.py
index 296709240..93d497089 100644
--- a/pyanaconda/iw/progress_gui.py
+++ b/pyanaconda/iw/progress_gui.py
@@ -28,7 +28,7 @@ from pyanaconda import gui
from pyanaconda.flags import flags
from iw_gui import *
from pyanaconda.constants import *
-from pyanaconda import language
+from pyanaconda import localeinfo
import logging
log = logging.getLogger("anaconda")
@@ -87,7 +87,7 @@ class InstallProgressWindow (InstallWindow):
langs = []
pixmaps = []
if (os.environ.has_key('LANG')):
- langs = language.expandLangs(os.environ['LANG'])
+ langs = localeinfo.expandLangs(os.environ['LANG'])
langs.append('')
pixmaps = []
diff --git a/pyanaconda/language.py b/pyanaconda/language.py
index b5dd94f64..8a0d7f66c 100644
--- a/pyanaconda/language.py
+++ b/pyanaconda/language.py
@@ -27,6 +27,7 @@ import locale
import gettext
from pyanaconda.constants import ROOT_PATH
+import localeinfo
from simpleconfig import SimpleConfigFile
import system_config_keyboard.keyboard as keyboard
@@ -38,32 +39,6 @@ def langComponents(astring):
m = pattern.match(astring)
return m.groupdict()
-# Converts a single language into a "language search path". For example,
-# fr_FR.utf8@euro would become "fr_FR.utf8@euro fr_FR.utf8 fr_FR fr"
-def expandLangs(astring):
- langs = [astring]
- charset = None
- base = None
-
- # remove charset ...
- if '.' in astring:
- langs.append(string.split(astring, '.')[0])
-
- if '@' in astring:
- charset = string.split(astring, '@')[1]
-
- if '_' in astring:
- base = string.split(astring, '_')[0]
-
- if charset:
- langs.append("%s@%s" % (base, charset))
-
- langs.append(base)
- else:
- langs.append(astring[:2])
-
- return langs
-
class Language(object):
def _setInstLang(self, value):
# Always store in its full form so we know what we're comparing with.
@@ -147,7 +122,6 @@ class Language(object):
self._default = "en_US.UTF-8"
self.displayMode = display_mode
self.info = {}
- self.localeInfo = {}
self.nativeLangNames = {}
# English name -> native name mapping
@@ -163,27 +137,7 @@ class Language(object):
f.close()
break
- # nick -> (name, short name, font, keyboard, timezone) mapping
- search = ('lang-table', '/tmp/updates/lang-table', '/etc/lang-table',
- '/usr/share/anaconda/lang-table')
- for path in search:
- if os.access(path, os.R_OK):
- f = open(path, "r")
- for line in f.readlines():
- string.strip(line)
- l = string.split(line, '\t')
-
- # throw out invalid lines
- if len(l) < 6:
- continue
-
- self.localeInfo[l[3]] = (l[0], l[1], l[2], l[4], string.strip(l[5]))
-
- f.close()
- break
-
- # Hard code this to prevent errors in the build environment.
- self.localeInfo['C'] = self.localeInfo[self._default]
+ self.localeInfo = localeinfo.get(self._default)
# instLang must be set after localeInfo is populated, in case the
# current setting is unsupported by anaconda..
@@ -199,7 +153,7 @@ class Language(object):
fr_CA -> ValueError
"""
for key in self.localeInfo.keys():
- if lang in expandLangs(key):
+ if lang in localeinfo.expandLangs(key):
return key
raise ValueError
@@ -229,7 +183,7 @@ class Language(object):
return args
def getCurrentLangSearchList(self):
- return expandLangs(self.systemLang) + ['C']
+ return localeinfo.expandLangs(self.systemLang) + ['C']
def getDefaultKeyboard(self):
try:
diff --git a/pyanaconda/localeinfo.py b/pyanaconda/localeinfo.py
new file mode 100644
index 000000000..eefdf2e9e
--- /dev/null
+++ b/pyanaconda/localeinfo.py
@@ -0,0 +1,81 @@
+# __init__.py
+# Locale info used by getlangnames.py and languages.py.
+#
+# Copyright (C) 2011 Red Hat, Inc.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# the GNU General Public License v.2, or (at your option) any later version.
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY expressed or implied, including the implied warranties of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details. You should have received a copy of the
+# GNU General Public License along with this program; if not, write to the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the
+# source code or documentation are not subject to the GNU General Public
+# License and may only be used or replicated with the express permission of
+# Red Hat, Inc.
+#
+
+
+""" Basic locale operations useful during both Anaconda build time and run time.
+
+ This module can be imported without importing pyanaconda/__init__.py and it
+ is desirable to keep it that way.
+"""
+
+import os
+import string
+
+def get(default):
+ localeInfo = {}
+ # nick -> (name, short name, font, keyboard, timezone) mapping
+ search = ('lang-table', '/tmp/updates/lang-table', '/etc/lang-table',
+ '/usr/share/anaconda/lang-table')
+ for path in search:
+ if os.access(path, os.R_OK):
+ f = open(path, "r")
+ for line in f.readlines():
+ string.strip(line)
+ l = string.split(line, '\t')
+
+ # throw out invalid lines
+ if len(l) < 6:
+ continue
+
+ localeInfo[l[3]] = (l[0], l[1], l[2], l[4], string.strip(l[5]))
+
+ f.close()
+ break
+
+ # Hard code this to prevent errors in the build environment.
+ localeInfo['C'] = localeInfo[default]
+ return localeInfo
+
+# Converts a single language into a "language search path". For example,
+# fr_FR.utf8@euro would become "fr_FR.utf8@euro fr_FR.utf8 fr_FR fr"
+def expandLangs(astring):
+ langs = [astring]
+ charset = None
+ base = None
+
+ # remove charset ...
+ if '.' in astring:
+ langs.append(string.split(astring, '.')[0])
+
+ if '@' in astring:
+ charset = string.split(astring, '@')[1]
+
+ if '_' in astring:
+ base = string.split(astring, '_')[0]
+
+ if charset:
+ langs.append("%s@%s" % (base, charset))
+
+ langs.append(base)
+ else:
+ langs.append(astring[:2])
+
+ return langs
+
diff --git a/pyanaconda/text.py b/pyanaconda/text.py
index 6396f2591..cb85bb551 100644
--- a/pyanaconda/text.py
+++ b/pyanaconda/text.py
@@ -32,7 +32,7 @@ import signal
import parted
import product
import string
-from language import expandLangs
+from localeinfo import expandLangs
from flags import flags
from textw.constants_text import *
from constants import *
diff --git a/scripts/getlangnames.py b/scripts/getlangnames.py
index bc3cced98..2e579a41a 100644
--- a/scripts/getlangnames.py
+++ b/scripts/getlangnames.py
@@ -19,26 +19,26 @@
import sys
sys.path.append("..")
-import language as language
+import localeinfo
import gettext
-langs = language.Language()
+localeInfo = localeinfo.get("en_US.UTF-8")
names = {}
-for k in langs.localeInfo.keys():
+for k in localeInfo.keys():
found = False
- for l in language.expandLangs(k):
+ for l in localeinfo.expandLangs(k):
try:
f = open("../po/%s.gmo" %(l,))
except (OSError, IOError):
continue
cat = gettext.GNUTranslations(f)
cat.set_output_charset("utf-8")
- names[langs.localeInfo[k][0]] = cat.lgettext(langs.localeInfo[k][0])
+ names[localeInfo[k][0]] = cat.lgettext(localeInfo[k][0])
found = True
break
if not found:
- names[langs.localeInfo[k][0]] = langs.localeInfo[k][0]
+ names[localeInfo[k][0]] = localeInfo[k][0]
nameList = names.keys()
nameList.sort()
diff --git a/tests/pyanaconda_test/language_test.py b/tests/pyanaconda_test/language_test.py
index 3d4498a24..daf500b1c 100644
--- a/tests/pyanaconda_test/language_test.py
+++ b/tests/pyanaconda_test/language_test.py
@@ -13,12 +13,7 @@ class LanguageTest(mock.TestCase):
self.fs = mock.DiskIO()
def fake_os_access(path, _):
- return path == 'lang-table' or path == 'lang-names'
-
- self.fs.open('lang-table', 'w').write(
- "Czech cs latarcyrheb-sun16 cs_CZ.UTF-8 cz-lat2 Europe/Prague\n"
- "English en latarcyrheb-sun16 en_US.UTF-8 us America/New_York\n"
- "Hebrew he none he_IL.UTF-8 us Asia/Jerusalem")
+ return path == 'lang-names'
self.fs.open('lang-names', 'w').write(
"Czech\tCestina\n"
@@ -33,6 +28,11 @@ class LanguageTest(mock.TestCase):
pyanaconda.language.os.access = fake_os_access
pyanaconda.language.os.environ = {'LANG': ENVIRON_LANG}
pyanaconda.language.locale = mock.Mock()
+ pyanaconda.language.localeinfo.get = mock.Mock(return_value={
+ 'C': ('English', 'en', 'latarcyrheb-sun16', 'us', 'America/New_York'),
+ 'cs_CZ.UTF-8': ('Czech', 'cs', 'latarcyrheb-sun16', 'cz-lat2', 'Europe/Prague'),
+ 'en_US.UTF-8': ('English', 'en', 'latarcyrheb-sun16', 'us', 'America/New_York'),
+ 'he_IL.UTF-8': ('Hebrew', 'he', 'none', 'us', 'Asia/Jerusalem')})
def tearDown(self):
self.tearDownModules()
diff --git a/tests/pyanaconda_test/localeinfo_test.py b/tests/pyanaconda_test/localeinfo_test.py
new file mode 100644
index 000000000..32f09164d
--- /dev/null
+++ b/tests/pyanaconda_test/localeinfo_test.py
@@ -0,0 +1,35 @@
+import mock
+
+class LocaleinfoTest(mock.TestCase):
+ def setUp(self):
+ self.setupModules(
+ ['_isys', 'logging', 'pyanaconda.anaconda_log', 'block'])
+
+ import pyanaconda
+ pyanaconda.anaconda_log = mock.Mock()
+
+ def tearDown(self):
+ self.tearDownModules()
+
+ def expandLangs_test(self):
+ from pyanaconda import localeinfo
+ exp = localeinfo.expandLangs("fr_FR.utf8@euro")
+ self.assertEqual(exp, ['fr_FR.utf8@euro', 'fr_FR', 'fr@euro', 'fr'])
+
+ def get_test(self):
+ from pyanaconda import localeinfo
+
+ fs = mock.DiskIO()
+ fs['/lang-table'] = """
+Czech cs latarcyrheb-sun16 cs_CZ.UTF-8 cz-lat2 Europe/Prague\n
+English en latarcyrheb-sun16 en_US.UTF-8 us America/New_York\n
+Hebrew he none he_IL.UTF-8 us Asia/Jerusalem"""
+ self.take_over_io(fs, localeinfo)
+
+ info = localeinfo.get("en_US.UTF-8")
+ self.assertEqual(
+ info,
+ {'C': ('English', 'en', 'latarcyrheb-sun16', 'us', 'America/New_York'),
+ 'cs_CZ.UTF-8': ('Czech', 'cs', 'latarcyrheb-sun16', 'cz-lat2', 'Europe/Prague'),
+ 'en_US.UTF-8': ('English', 'en', 'latarcyrheb-sun16', 'us', 'America/New_York'),
+ 'he_IL.UTF-8': ('Hebrew', 'he', 'none', 'us', 'Asia/Jerusalem')})