mirror of
https://github.com/keymanapp/keyman.git
synced 2026-09-27 18:17:40 +00:00
84 lines
3.3 KiB
Python
Executable file
84 lines
3.3 KiB
Python
Executable file
#!/usr/bin/python3
|
|
|
|
import argparse
|
|
import logging
|
|
import sys
|
|
import os
|
|
from keyman_config import __version__
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Install a Keyman keyboard, either a local .kmp file or specify a keyboard id to download and install')
|
|
parser.add_argument('-s', action='store_true', help='Install to shared area /usr/local')
|
|
parser.add_argument('-f', metavar='<kmpfile>', help='Keyman kmp file')
|
|
parser.add_argument('-k', metavar='<keyboardid>', help='Keyman keyboard id')
|
|
parser.add_argument('--version', action='version', version='%(prog)s version '+__version__)
|
|
parser.add_argument('-v', action='store_true', help='verbose logging')
|
|
parser.add_argument('-vv', action='store_true', help='very verbose logging')
|
|
|
|
args = parser.parse_args()
|
|
if args.v:
|
|
logging.basicConfig(level=logging.INFO, format='%(levelname)s:%(message)s')
|
|
elif args.vv:
|
|
logging.basicConfig(level=logging.DEBUG, format='%(levelname)s:%(message)s')
|
|
else:
|
|
logging.basicConfig(format='%(levelname)s:%(message)s')
|
|
|
|
if args.k and args.f:
|
|
logging.error("km-package-install: error: too many arguments: either install a local kmp file or specify a keyboard id to download and install.")
|
|
sys.exit(2)
|
|
|
|
from keyman_config.install_kmp import install_kmp, InstallError, InstallStatus
|
|
from keyman_config.list_installed_kmp import get_kmp_version
|
|
from keyman_config.get_kmp import get_keyboard_data, get_kmp
|
|
|
|
def try_install_kmp(inputfile, arg, online=False, sharedarea=False):
|
|
try:
|
|
install_kmp(inputfile, online, sharedarea)
|
|
except InstallError as e:
|
|
if e.status == InstallStatus.Abort:
|
|
logging.error("km-package-install: error: Failed to install %s", arg)
|
|
logging.error(e.message)
|
|
sys.exit(3)
|
|
else:
|
|
logging.warning(e.message)
|
|
|
|
if args.f:
|
|
name, ext = os.path.splitext(args.f)
|
|
if ext != ".kmp":
|
|
logging.error("km-package-install: Input file %s is not a kmp file.", args.f)
|
|
logging.error("km-package-install -f <kmpfile>")
|
|
sys.exit(2)
|
|
|
|
if not os.path.isfile(args.f):
|
|
logging.error("km-package-install: Keyman kmp file %s not found.", args.f)
|
|
logging.error("km-package-install -f <kmpfile>")
|
|
sys.exit(2)
|
|
try_install_kmp(args.f, "file " + args.f, False, args.s)
|
|
elif args.k:
|
|
installed_kmp_ver = get_kmp_version(args.k)
|
|
kbdata = get_keyboard_data(args.k)
|
|
if not kbdata:
|
|
logging.error("km-package-install: error: Could not download keyboard data for %s", args.k)
|
|
sys.exit(3)
|
|
if installed_kmp_ver:
|
|
if kbdata['version'] == installed_kmp_ver:
|
|
logging.error("km-package-install: The %s version of the %s keyboard is already installed.", installed_kmp_ver, args.k)
|
|
sys.exit(1)
|
|
elif float(kbdata['version']) > float(installed_kmp_ver):
|
|
logging.error("km-package-install: A newer version of %s keyboard is available. Uninstalling old version %s then downloading and installing new version %s.", args.k, installed_kmp_ver, kbdata['version'])
|
|
uninstall_kmp(args.k, args.s)
|
|
|
|
kmpfile = get_kmp(args.k)
|
|
if kmpfile:
|
|
try_install_kmp(kmpfile, "keyboard " + args.k, True, args.s)
|
|
else:
|
|
logging.error("km-package-install: error: Could not download keyboard package %s", args.k)
|
|
sys.exit(2)
|
|
else:
|
|
logging.error("km-package-install: error: no arguments: either install a local kmp file or specify a keyboard id to download and install.")
|
|
sys.exit(2)
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|