From 4775bd70f47f1e7be64e9a9992035417613cac80 Mon Sep 17 00:00:00 2001 From: Vitezslav Crhonek Date: Thu, 19 Jun 2014 11:15:44 +0200 Subject: Locale scripts --- commands/locale/Makefile | 1 + commands/locale/README.md | 5 + commands/locale/doc/Makefile | 1 + commands/locale/doc/cmdline.generated | 66 ++++++ commands/locale/doc/cmdline.rst | 6 + commands/locale/doc/conf.py.skel | 285 +++++++++++++++++++++++++ commands/locale/doc/index.rst | 24 +++ commands/locale/doc/make.bat | 190 +++++++++++++++++ commands/locale/doc/python.rst | 6 + commands/locale/lmi/__init__.py | 27 +++ commands/locale/lmi/scripts/__init__.py | 27 +++ commands/locale/lmi/scripts/locale/__init__.py | 151 +++++++++++++ commands/locale/lmi/scripts/locale/cmd.py | 141 ++++++++++++ commands/locale/setup.cfg | 2 + commands/locale/setup.py.skel | 46 ++++ 15 files changed, 978 insertions(+) create mode 100644 commands/locale/Makefile create mode 100644 commands/locale/README.md create mode 100644 commands/locale/doc/Makefile create mode 100644 commands/locale/doc/cmdline.generated create mode 100644 commands/locale/doc/cmdline.rst create mode 100644 commands/locale/doc/conf.py.skel create mode 100644 commands/locale/doc/index.rst create mode 100644 commands/locale/doc/make.bat create mode 100644 commands/locale/doc/python.rst create mode 100644 commands/locale/lmi/__init__.py create mode 100644 commands/locale/lmi/scripts/__init__.py create mode 100644 commands/locale/lmi/scripts/locale/__init__.py create mode 100644 commands/locale/lmi/scripts/locale/cmd.py create mode 100644 commands/locale/setup.cfg create mode 100644 commands/locale/setup.py.skel diff --git a/commands/locale/Makefile b/commands/locale/Makefile new file mode 100644 index 0000000..91e14dc --- /dev/null +++ b/commands/locale/Makefile @@ -0,0 +1 @@ +include ../../Makefile.inc \ No newline at end of file diff --git a/commands/locale/README.md b/commands/locale/README.md new file mode 100644 index 0000000..2ae6819 --- /dev/null +++ b/commands/locale/README.md @@ -0,0 +1,5 @@ +System locale management through OpenLMI Locale provider. + +This command allows to display current locale settings (locale +variables, default X11 keyboard setting, virtual console keyboard +setting) and modify it. diff --git a/commands/locale/doc/Makefile b/commands/locale/doc/Makefile new file mode 100644 index 0000000..daa6aff --- /dev/null +++ b/commands/locale/doc/Makefile @@ -0,0 +1 @@ +include ../../../Makefile.doc.inc diff --git a/commands/locale/doc/cmdline.generated b/commands/locale/doc/cmdline.generated new file mode 100644 index 0000000..48ff3a7 --- /dev/null +++ b/commands/locale/doc/cmdline.generated @@ -0,0 +1,66 @@ +.. + !!!!!!!!! + This is generated file. Use 'make cmdregen' to regenerate it from installed 'lmi help ' + !!!!!!!!! + +locale +------ + +System locale management. + + +**Usage:** + + **lmi** **locale** **show** [(\ **--locale**\ | \ **--vc-keyboard**\ | \ **--x11-keymap**\ )] + + **lmi** **locale** **set-locale** (\ **\ \ **\ ) ... + + **lmi** **locale** **set-vc-keyboard** [\ **--convert**\ ] \ **\ [\ **\ ] + + **lmi** **locale** **set-x11-keymap** [\ **--convert**\ ] \ **\ [\ **\ \ **\ \ **\ ] + + + +**Commands:** + + + **show** + Show detailed information about system locale + cathegory (locale variables, key mapping on the + virtual console, default key mapping of + the X11 server). + If no cathegory is provided via option, all + locale information is displayed. + + + **set-locale** + Set locale variables. + + + **set-vc-keyboard** + Set the key mapping on the virtual console. + + + **set-x11-keymap** + Set the default key mapping of the X11 server. + +**Show options:** + + + **--locale** + Display locale variables. + + **--vc-keyboard** + Display key mapping on the virtual console. + + **--x11-keymap** + Display default key mapping of the X11 server. + +**Set options:** + + + **--convert** + Try to set the nearest console keyboard/X11 keyboard + setting for the chosen X11 keyboard/console keyboard + setting. + diff --git a/commands/locale/doc/cmdline.rst b/commands/locale/doc/cmdline.rst new file mode 100644 index 0000000..ae96494 --- /dev/null +++ b/commands/locale/doc/cmdline.rst @@ -0,0 +1,6 @@ +LMI command line reference +========================== +.. + Write some description here. + +.. include:: cmdline.generated diff --git a/commands/locale/doc/conf.py.skel b/commands/locale/doc/conf.py.skel new file mode 100644 index 0000000..70c6bc6 --- /dev/null +++ b/commands/locale/doc/conf.py.skel @@ -0,0 +1,285 @@ +# -*- coding: utf-8 -*- +# +# openlmi-scripts-locale documentation build configuration file, created by +# sphinx-quickstart on Wed Jun 18 15:17:19 2014. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx.ext.pngmath', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'openlmi-scripts-locale' +copyright = u'2014, Vitezslav Crhonek' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '@@VERSION@@' +# The full version, including alpha/beta/rc tags. +release = '@@VERSION@@' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = "openlmitheme" + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'openlmi-scripts-localedoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'openlmi-scripts-locale.tex', u'openlmi-scripts-locale Documentation', + u'Vitezslav Crhonek', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'openlmi-scripts-locale', u'openlmi-scripts-locale Documentation', + [u'Vitezslav Crhonek'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'openlmi-scripts-locale', u'openlmi-scripts-locale Documentation', + u'Vitezslav Crhonek', 'openlmi-scripts-locale', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + + +# -- Options for Epub output --------------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = u'openlmi-scripts-locale' +epub_author = u'Vitezslav Crhonek' +epub_publisher = u'Vitezslav Crhonek' +epub_copyright = u'2014, Vitezslav Crhonek' + +# The language of the text. It defaults to the language option +# or en if the language is not set. +#epub_language = '' + +# The scheme of the identifier. Typical schemes are ISBN or URL. +#epub_scheme = '' + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +#epub_identifier = '' + +# A unique identification for the text. +#epub_uid = '' + +# A tuple containing the cover image and cover page html template filenames. +#epub_cover = () + +# HTML files that should be inserted before the pages created by sphinx. +# The format is a list of tuples containing the path and title. +#epub_pre_files = [] + +# HTML files shat should be inserted after the pages created by sphinx. +# The format is a list of tuples containing the path and title. +#epub_post_files = [] + +# A list of files that should not be packed into the epub file. +#epub_exclude_files = [] + +# The depth of the table of contents in toc.ncx. +#epub_tocdepth = 3 + +# Allow duplicate toc entries. +#epub_tocdup = True diff --git a/commands/locale/doc/index.rst b/commands/locale/doc/index.rst new file mode 100644 index 0000000..e56241b --- /dev/null +++ b/commands/locale/doc/index.rst @@ -0,0 +1,24 @@ +.. openlmi-scripts-locale documentation master file, created by + sphinx-quickstart on Wed Jun 18 15:17:19 2014. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to openlmi-scripts-locale's documentation! +================================================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + cmdline + python + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/commands/locale/doc/make.bat b/commands/locale/doc/make.bat new file mode 100644 index 0000000..726025b --- /dev/null +++ b/commands/locale/doc/make.bat @@ -0,0 +1,190 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +set I18NSPHINXOPTS=%SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\openlmi-scripts-locale.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\openlmi-scripts-locale.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +:end diff --git a/commands/locale/doc/python.rst b/commands/locale/doc/python.rst new file mode 100644 index 0000000..c2471f7 --- /dev/null +++ b/commands/locale/doc/python.rst @@ -0,0 +1,6 @@ +Python reference for OpenLMI client scripts +=========================================== +Local Module API +---------------- +.. automodule:: lmi.scripts.locale + :members: diff --git a/commands/locale/lmi/__init__.py b/commands/locale/lmi/__init__.py new file mode 100644 index 0000000..b1a2ff0 --- /dev/null +++ b/commands/locale/lmi/__init__.py @@ -0,0 +1,27 @@ +# Copyright (C) 2013-2014 Red Hat, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# The views and conclusions contained in the software and documentation are +# those of the authors and should not be interpreted as representing official +# policies, either expressed or implied, of the FreeBSD Project. +__import__('pkg_resources').declare_namespace(__name__) diff --git a/commands/locale/lmi/scripts/__init__.py b/commands/locale/lmi/scripts/__init__.py new file mode 100644 index 0000000..b1a2ff0 --- /dev/null +++ b/commands/locale/lmi/scripts/__init__.py @@ -0,0 +1,27 @@ +# Copyright (C) 2013-2014 Red Hat, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# The views and conclusions contained in the software and documentation are +# those of the authors and should not be interpreted as representing official +# policies, either expressed or implied, of the FreeBSD Project. +__import__('pkg_resources').declare_namespace(__name__) diff --git a/commands/locale/lmi/scripts/locale/__init__.py b/commands/locale/lmi/scripts/locale/__init__.py new file mode 100644 index 0000000..03b5764 --- /dev/null +++ b/commands/locale/lmi/scripts/locale/__init__.py @@ -0,0 +1,151 @@ +# Copyright (C) 2014 Red Hat, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# The views and conclusions contained in the software and documentation are +# those of the authors and should not be interpreted as representing official +# policies, either expressed or implied, of the FreeBSD Project. +# +# Authors: Vitezslav Crhonek +# +""" +LMI Locale Provider client library. +""" + +import pywbem + +from lmi.scripts.common.errors import LmiFailed +from lmi.scripts.common import get_logger + +LOG = get_logger(__name__) + +def get_locale(ns): + """ + Get locale. + + :rtype: LMIInstance/LMI_Locale + """ + + inst = ns.LMI_Locale.first_instance() + + if inst is None: + raise LmiFailed('Failed to get system locale.') + + return inst + +def set_locale(ns, locales, values): + """ + Set given locale variables with new values. + + :type locales: list of strings + :param locales: Locale variables to be set. + :type values: list of strings + :param values: New values for locale variables. + """ + + inst = get_locale(ns) + method = 'SetLocale' + args = {l: v for l, v in zip(locales, values)} + + (rval, _, errorstr) = getattr(inst, method)(**args) + if rval != 0: + if errorstr: + raise LmiFailed("Cannot set locale: %s.", errorstr) + raise LmiFailed("Cannot set locale.") + + for locale in locales: + LOG().info("Locale variable '%s' set to '%s'.", locale, args[locale]) + +def set_vc_keyboard(ns, keymap, keymap_toggle, convert): + """ + Set the key mapping on the virtual console. + + :type keymap: string + :param keymap: Requested keyboard mapping for the + virtual console. + :type keymap_toggle: string + :param keymap_toggle: Requested toggle keyboard + mapping for the virtual console. + :type convert: bool + :param convert: Whether also X11 keyboard should be set + to the nearest X11 keyboard setting for the chosen + console keyboard setting. + """ + + inst = get_locale(ns) + method = 'SetVConsoleKeyboard' + args = { + 'Keymap': keymap, + 'KeymapToggle': keymap_toggle, + 'Convert': convert, + } + + (rval, _, errorstr) = getattr(inst, method)(**args) + + LOG().info("Virtual console keyboard set to '%s'.", keymap) + if keymap_toggle: + LOG().info("Virtual console toggle keyboard set to '%s'.", keymap_toggle) + if convert: + LOG().info("Default X11 keyboard setting may have also changed, " + "'convert' flag was used.") + +def set_x11_keymap(ns, layouts, model, variant, options, convert): + """ + Set the default key mapping of the X11 server. + + :type layouts: string + :param layouts: Requested X11 keyboard mappings. + :type model: string + :param model: Requested X11 keyboard model. + :type variant: string + :param model: Requested X11 keyboard variant. + :type options: string + :param model: Requested X11 keyboard options. + :type convert: bool + :param convert: Whether also console keyboard should be set + to the nearest console keyboard setting for the chosen + X11 keyboard setting. + """ + + inst = get_locale(ns) + method = 'SetX11Keyboard' + args = { + 'Layouts': layouts, + 'Model': model, + 'Variant': variant, + 'Options': options, + 'Convert': convert, + } + + (rval, _, errorstr) = getattr(inst, method)(**args) + + LOG().info("Default X11 keyboard mapping set to '%s'.", layouts) + if model: + LOG().info("Default X11 keyboard model set to '%s'.", model) + if variant: + LOG().info("Default X11 keyboard variant set to '%s'.", variant) + if options: + LOG().info("Default X11 keyboard options set to '%s'.", options) + if convert: + LOG().info("Virtual console keyboard setting may have also changed, " + "'convert' flag was used.") + diff --git a/commands/locale/lmi/scripts/locale/cmd.py b/commands/locale/lmi/scripts/locale/cmd.py new file mode 100644 index 0000000..c0fcb13 --- /dev/null +++ b/commands/locale/lmi/scripts/locale/cmd.py @@ -0,0 +1,141 @@ +# Copyright (C) 2014 Red Hat, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# The views and conclusions contained in the software and documentation are +# those of the authors and should not be interpreted as representing official +# policies, either expressed or implied, of the FreeBSD Project. +# +# Authors: Vitezslav Crhonek +# +""" +System locale management. + +Usage: + %(cmd)s show [(--locale | --vc-keyboard | --x11-keymap)] + %(cmd)s set-locale ( ) ... + %(cmd)s set-vc-keyboard [--convert] [] + %(cmd)s set-x11-keymap [--convert] [ ] + +Commands: + show Show detailed information about system locale + cathegory (locale variables, key mapping on the + virtual console, default key mapping of + the X11 server). + If no cathegory is provided via option, all + locale information is displayed. + + set-locale Set locale variables. + + set-vc-keyboard Set the key mapping on the virtual console. + + set-x11-keymap Set the default key mapping of the X11 server. + +Show options: + --locale Display locale variables. + --vc-keyboard Display key mapping on the virtual console. + --x11-keymap Display default key mapping of the X11 server. + +Set options: + --convert Try to set the nearest console keyboard/X11 keyboard + setting for the chosen X11 keyboard/console keyboard + setting. +""" + +from lmi.scripts import locale as loc +from lmi.scripts.common import command + +class Show(command.LmiShowInstance): + DYNAMIC_PROPERTIES = True + columns = { + 'all': ('Lang', 'LCCType', 'LCNumeric', 'LCTime', 'LCCollate', + 'LCMonetary', 'LCMessages', 'LCPaper', 'LCName', 'LCAddress', + 'LCTelephone', 'LCMeasurement', 'LCIdentification', + 'VConsoleKeymap', 'VConsoleKeymapToggle', + 'X11Layouts', 'X11Model', 'X11Variant', 'X11Options' + ), + 'locale': ('Lang', 'LCCType', 'LCNumeric', 'LCTime', 'LCCollate', + 'LCMonetary', 'LCMessages', 'LCPaper', 'LCName', 'LCAddress', + 'LCTelephone', 'LCMeasurement', 'LCIdentification' + ), + 'vc_keyboard': ('VConsoleKeymap', 'VConsoleKeymapToggle'), + 'x11_keymap': ('X11Layouts', 'X11Model', 'X11Variant', 'X11Options'), + } + + def execute(self, ns, _locale, _vc_keyboard, _x11_keymap): + cathegory = 'all' + if _locale: + cathegory = 'locale' + elif _vc_keyboard: + cathegory = 'vc_keyboard' + elif _x11_keymap: + cathegory = 'x11_keymap' + return self.columns[cathegory], loc.get_locale(ns) + +class SetLocale(command.LmiCheckResult): + EXPECT = None + + def transform_options(self, options): + """ + Rename 'locale' and 'value' options to 'locales' and 'values' parameter + name for better readability. + """ + options[''] = options.pop('') + options[''] = options.pop('') + + def execute(self, ns, locales, values): + loc.set_locale(ns, locales, values) + +class SetX11Keymap(command.LmiCheckResult): + EXPECT = None + + def execute(self, ns, layouts, model, variant, options, _convert): + convert = False + if _convert: + convert = True + if not model: + model = '' + if not variant: + variant = '' + if not options: + options = '' + loc.set_x11_keymap(ns, layouts, model, variant, options, convert) + +class SetVCKeyboard(command.LmiCheckResult): + EXPECT = None + + def execute(self, ns, keymap, keymap_toggle, _convert): + convert = False + if _convert: + convert = True + if not keymap_toggle: + keymap_toggle = '' + loc.set_vc_keyboard(ns, keymap, keymap_toggle, convert) + +Locale = command.register_subcommands( + 'Locale', __doc__, + { 'show' : Show, + 'set-locale' : SetLocale, + 'set-x11-keymap' : SetX11Keymap, + 'set-vc-keyboard' : SetVCKeyboard, + }, + ) diff --git a/commands/locale/setup.cfg b/commands/locale/setup.cfg new file mode 100644 index 0000000..2ddce25 --- /dev/null +++ b/commands/locale/setup.cfg @@ -0,0 +1,2 @@ +[upload_docs] +upload-dir = doc/_build/html diff --git a/commands/locale/setup.py.skel b/commands/locale/setup.py.skel new file mode 100644 index 0000000..3dc5511 --- /dev/null +++ b/commands/locale/setup.py.skel @@ -0,0 +1,46 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from setuptools import setup + +try: + long_description = open('README.md', 'rt').read() +except IOError: + long_description = '' + +setup( + name='openlmi-scripts-locale', + version='@@VERSION@@', + description='LMI command for system locale administration.', + long_description=long_description, + author=u'Vitezslav Crhonek', + author_email='vcrhonek@redhat.com', + url='https://github.com/openlmi/openlmi-locale', + download_url='https://github.com/openlmi/openlmi-locale/tarball/master', + platforms=['Any'], + license="BSD", + classifiers=[ + 'License :: OSI Approved :: BSD License', + 'Operating System :: POSIX :: Linux', + 'Topic :: System :: Systems Administration', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Intended Audience :: Developers', + 'Environment :: Console', + ], + + install_requires=['openlmi-tools >= 0.9.1'], + + namespace_packages=['lmi', 'lmi.scripts'], + packages=['lmi', 'lmi.scripts', 'lmi.scripts.locale'], + include_package_data=True, + + entry_points={ + 'lmi.scripts.cmd': [ + # All subcommands of lmi command should go here. + # See http://pythonhosted.org/openlmi-scripts/script-development.html#writing-setup-py + 'locale = lmi.scripts.locale.cmd:Locale', + ], + }, + ) -- cgit From 4f05bb193b150b09ab9ee2e0bd57c604e9e0737f Mon Sep 17 00:00:00 2001 From: Vitezslav Crhonek Date: Thu, 19 Jun 2014 15:36:51 +0200 Subject: locale: various minor fixes --- commands/locale/doc/python.rst | 4 +- commands/locale/lmi/scripts/locale/__init__.py | 59 ++++++++++---------------- commands/locale/lmi/scripts/locale/cmd.py | 14 ++---- 3 files changed, 29 insertions(+), 48 deletions(-) diff --git a/commands/locale/doc/python.rst b/commands/locale/doc/python.rst index c2471f7..e9fb7e3 100644 --- a/commands/locale/doc/python.rst +++ b/commands/locale/doc/python.rst @@ -1,6 +1,6 @@ Python reference for OpenLMI client scripts =========================================== -Local Module API ----------------- +Locale Module API +----------------- .. automodule:: lmi.scripts.locale :members: diff --git a/commands/locale/lmi/scripts/locale/__init__.py b/commands/locale/lmi/scripts/locale/__init__.py index 03b5764..2bd8e1b 100644 --- a/commands/locale/lmi/scripts/locale/__init__.py +++ b/commands/locale/lmi/scripts/locale/__init__.py @@ -56,17 +56,14 @@ def set_locale(ns, locales, values): """ Set given locale variables with new values. - :type locales: list of strings - :param locales: Locale variables to be set. - :type values: list of strings - :param values: New values for locale variables. + :param list locales: List of locale variable names to be set. + :param list values: List of new values for locale variables. """ inst = get_locale(ns) - method = 'SetLocale' args = {l: v for l, v in zip(locales, values)} - (rval, _, errorstr) = getattr(inst, method)(**args) + (rval, _, errorstr) = inst.SetLocale(**args) if rval != 0: if errorstr: raise LmiFailed("Cannot set locale: %s.", errorstr) @@ -79,27 +76,22 @@ def set_vc_keyboard(ns, keymap, keymap_toggle, convert): """ Set the key mapping on the virtual console. - :type keymap: string - :param keymap: Requested keyboard mapping for the + :param string keymap: Requested keyboard mapping for the virtual console. - :type keymap_toggle: string - :param keymap_toggle: Requested toggle keyboard + :param string keymap_toggle: Requested toggle keyboard mapping for the virtual console. - :type convert: bool - :param convert: Whether also X11 keyboard should be set + :param bool convert: Whether also X11 keyboard should be set to the nearest X11 keyboard setting for the chosen console keyboard setting. """ inst = get_locale(ns) - method = 'SetVConsoleKeyboard' - args = { - 'Keymap': keymap, - 'KeymapToggle': keymap_toggle, - 'Convert': convert, - } - (rval, _, errorstr) = getattr(inst, method)(**args) + (rval, _, errorstr) = inst.SetVConsoleKeyboard( + Keymap=keymap, + KeymapToggle=keymap_toggle, + Convert=convert + ) LOG().info("Virtual console keyboard set to '%s'.", keymap) if keymap_toggle: @@ -112,31 +104,26 @@ def set_x11_keymap(ns, layouts, model, variant, options, convert): """ Set the default key mapping of the X11 server. - :type layouts: string - :param layouts: Requested X11 keyboard mappings. - :type model: string - :param model: Requested X11 keyboard model. - :type variant: string - :param model: Requested X11 keyboard variant. - :type options: string - :param model: Requested X11 keyboard options. - :type convert: bool - :param convert: Whether also console keyboard should be set + :param string layouts: Requested X11 keyboard mappings. + :param string model: Requested X11 keyboard model. + :param string variant: Requested X11 keyboard variant. + :param string options: Requested X11 keyboard options. + :param bool convert: Whether also console keyboard should be set to the nearest console keyboard setting for the chosen X11 keyboard setting. """ inst = get_locale(ns) - method = 'SetX11Keyboard' args = { - 'Layouts': layouts, - 'Model': model, - 'Variant': variant, - 'Options': options, - 'Convert': convert, } - (rval, _, errorstr) = getattr(inst, method)(**args) + (rval, _, errorstr) = inst.SetX11Keyboard( + Layouts=layouts, + Model=model, + Variant=variant, + Options=options, + Convert=convert, + ) LOG().info("Default X11 keyboard mapping set to '%s'.", layouts) if model: diff --git a/commands/locale/lmi/scripts/locale/cmd.py b/commands/locale/lmi/scripts/locale/cmd.py index c0fcb13..5fb36a1 100644 --- a/commands/locale/lmi/scripts/locale/cmd.py +++ b/commands/locale/lmi/scripts/locale/cmd.py @@ -108,28 +108,22 @@ class SetLocale(command.LmiCheckResult): class SetX11Keymap(command.LmiCheckResult): EXPECT = None - def execute(self, ns, layouts, model, variant, options, _convert): - convert = False - if _convert: - convert = True + def execute(self, ns, layouts, model, variant, options, _convert=False): if not model: model = '' if not variant: variant = '' if not options: options = '' - loc.set_x11_keymap(ns, layouts, model, variant, options, convert) + loc.set_x11_keymap(ns, layouts, model, variant, options, _convert) class SetVCKeyboard(command.LmiCheckResult): EXPECT = None - def execute(self, ns, keymap, keymap_toggle, _convert): - convert = False - if _convert: - convert = True + def execute(self, ns, keymap, keymap_toggle, _convert=False): if not keymap_toggle: keymap_toggle = '' - loc.set_vc_keyboard(ns, keymap, keymap_toggle, convert) + loc.set_vc_keyboard(ns, keymap, keymap_toggle, _convert) Locale = command.register_subcommands( 'Locale', __doc__, -- cgit From 3d6a61e85aaf4b5ffc6e40b962f42459fa288591 Mon Sep 17 00:00:00 2001 From: Vitezslav Crhonek Date: Thu, 19 Jun 2014 15:45:27 +0200 Subject: locale: remove unused variable --- commands/locale/lmi/scripts/locale/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/commands/locale/lmi/scripts/locale/__init__.py b/commands/locale/lmi/scripts/locale/__init__.py index 2bd8e1b..479ffa9 100644 --- a/commands/locale/lmi/scripts/locale/__init__.py +++ b/commands/locale/lmi/scripts/locale/__init__.py @@ -114,8 +114,6 @@ def set_x11_keymap(ns, layouts, model, variant, options, convert): """ inst = get_locale(ns) - args = { - } (rval, _, errorstr) = inst.SetX11Keyboard( Layouts=layouts, -- cgit