diff --git a/linux/keyman-config/get_kmp.py b/linux/keyman-config/get_kmp.py index 66fd2f9211..5ca58a62cc 100755 --- a/linux/keyman-config/get_kmp.py +++ b/linux/keyman-config/get_kmp.py @@ -1,7 +1,5 @@ #!/usr/bin/python3 -# Get a kmp file given a keyboard id - import sys import datetime import time @@ -9,9 +7,17 @@ import json import requests import requests_cache import os -#from tqdm import tqdm def get_keyboard_data(keyboardid, verbose=False): + """ + Get Keyboard data from web api. + + Args: + keyboardid (str): Keyboard ID + verbose(bool, default False): verbose output + Returns: + dict: Keyboard data + """ if verbose: print("Getting data for keyboard", keyboardid) api_url = "https://api.keyman.com/keyboard/" + keyboardid @@ -37,10 +43,25 @@ def get_keyboard_data(keyboardid, verbose=False): return None def get_download_folder(): + """ + Folder where downloaded files will be saved. + + Returns: + str: path of user downloads folder + """ home = os.path.expanduser("~") return os.path.join(home, "Downloads") def get_kmp_file(kbdata, verbose=False): + """ + Get info from keyboard data to download kmp then download it. + + Args: + kbdata (dict): Keyboard data + verbose (bool, default False): verbose output + Returns: + str: path where kmp file has been downloaded + """ if 'packageFilename' not in kbdata: print("get_kmp.py: Keyboard does not have a kmp file available") return None @@ -50,6 +71,16 @@ def get_kmp_file(kbdata, verbose=False): return download_kmp_file(kmp_url, downloadfile, verbose) def download_kmp_file(url, kmpfile, verbose=False): + """ + Download kmp file. + + Args: + url (str): URL to download the kmp file from. + kmpfile (str): Where to save the kmp file. + verbose (bool, default False): verbose output + Returns: + str: path where kmp file has been downloaded + """ if verbose: print("Download URL:", url) downloadfile = None @@ -61,6 +92,14 @@ def download_kmp_file(url, kmpfile, verbose=False): return downloadfile def get_kmp(keyboardid): + """ + Download a kmp file given a keyboard id. + + Args: + keyboardid (str): Keyboard ID + Returns: + str: path where kmp file has been downloaded + """ kbdata = get_keyboard_data(keyboardid) if (kbdata): return get_kmp_file(kbdata) diff --git a/linux/keyman-config/kmpmetadata.py b/linux/keyman-config/kmpmetadata.py index 413c2f0dc1..1de92db7b5 100755 --- a/linux/keyman-config/kmpmetadata.py +++ b/linux/keyman-config/kmpmetadata.py @@ -50,6 +50,23 @@ def print_keyboards(keyboards): pass def determine_filetype(filename): + """ + Determine file type of a filename in a kmp from the extension + + Args: + filename (str): File name + + Returns: + str: Description of file type + Keyboard icon + Keyboard source + Compiled keyboard + Compiled on screen keyboard + Font + Documentation + Metadata + Image + """ name, ext = os.path.splitext(filename) if ext == ".ico": return "Keyboard icon" @@ -92,6 +109,43 @@ def print_files(files, extracted_dir): pass def parseinfdata(inffile, verbose=False): + """ + Parse the metadata in a kmp.inf file. + + Args: + jsonfile (str): Path to kmp.inf + verbose (bool, default False): verbose output + + Returns: + list[5]: info, system, options, keyboards, files + info (dict): + name (dict): + description (str): KMP name + copyright (dict): + description (str): KMP copyright + version (dict): + description (str): KMP version + author (dict): + description (str): KMP author + url (str): contact url for the author + system (dict): System info + fileVersion (str): Keyman file format version + keymanDeveloperVersion (str): Keyman Developer version that compiled keyboard + options (dict): Keyboard options + readmeFile (str) : README for the keyboard + keyboards (list): Keyboards in the kmp + name (str): Keyboard name + id (str): Keyboard ID + version (str): Keyboard version + oskFont (str, optional): Recommended on screen keyboard font + displayFont (str, optional): Recommended display font + languages (list): Languages the keyboard is used for + name (str): Language name + id (str): Language ID + files (list): Files in the kmp + name (str): File name + description (str): File description + """ info = system = keyboards = files = options = nonexistent = None extracted_dir = os.path.dirname(inffile) @@ -172,6 +226,43 @@ def parseinfdata(inffile, verbose=False): return info, system, options, keyboards, files def parsemetadata(jsonfile, verbose=False): + """ + Parse the metadata in a kmp.json file. + + Args: + jsonfile (str): Path to kmp.json + verbose (bool, default False): verbose output + + Returns: + list[5]: info, system, options, keyboards, files + info (dict): + name (dict): + description (str): KMP name + copyright (dict): + description (str): KMP copyright + version (dict): + description (str): KMP version + author (dict): + description (str): KMP author + url (str): contact url for the author + system (dict): System info + fileVersion (str): Keyman file format version + keymanDeveloperVersion (str): Keyman Developer version that compiled keyboard + options (dict): Keyboard options + readmeFile (str) : README for the keyboard + keyboards (list): Keyboards in the kmp + name (str): Keyboard name + id (str): Keyboard ID + version (str): Keyboard version + oskFont (str, optional): Recommended on screen keyboard font + displayFont (str, optional): Recommended display font + languages (list): Languages the keyboard is used for + name (str): Language name + id (str): Language ID + files (list): Files in the kmp + name (str): File name + description (str): File description + """ info = system = keyboards = files = options = nonexistent = None extracted_dir = os.path.dirname(jsonfile) diff --git a/linux/keyman-config/list_installed_kmp.py b/linux/keyman-config/list_installed_kmp.py index 7766751fdd..e84360b622 100755 --- a/linux/keyman-config/list_installed_kmp.py +++ b/linux/keyman-config/list_installed_kmp.py @@ -6,6 +6,20 @@ from kmpmetadata import parsemetadata from get_kmp import get_keyboard_data def get_installed_kmp(): + """ + Get list of installed keyboards. + + Returns: + list: Installed keyboards + dict: Keyboard + id (str): Keyboard ID + name (str): Keyboard name + kmpname (str): Keyboard name in local + version (str): Keyboard version + kmpversion (str): + path (str): base path where keyboard is installed + description (str): Keyboard description + """ installed_keyboards = {} check_paths = [ "/usr/share/keyman", "/usr/local/share/keyman" ] for keymanpath in check_paths: @@ -37,6 +51,15 @@ def get_installed_kmp(): def get_kmp_version(keyboardid): + """ + Get version of the kmp for a keyboard ID. + + Args: + keyboardid (dict): Keyboard ID + Returns: + str: kmp version if keyboard ID is installed + None: if not found + """ installed_kmp = get_installed_kmp() if keyboardid in installed_kmp: return installed_kmp[keyboardid]['version'] diff --git a/linux/keyman-config/uninstall_kmp.py b/linux/keyman-config/uninstall_kmp.py index 29512c7971..5d9812c448 100755 --- a/linux/keyman-config/uninstall_kmp.py +++ b/linux/keyman-config/uninstall_kmp.py @@ -5,6 +5,12 @@ import os.path from shutil import rmtree def uninstall_kmp(keyboardid): + """ + Uninstall a kmp from /usr/local/share/keyman + + Args: + keyboardid (str): Keyboard ID + """ kbdir = os.path.join('/usr/local/share/keyman', keyboardid) if not os.path.isdir(kbdir): print("Keyboard directory for", keyboardid, "does not exist. Aborting")