add some docstring

This commit is contained in:
glasseyes 2018-05-21 11:45:18 +07:00
parent 6d6316f53f
commit c6eafb6d41
4 changed files with 162 additions and 3 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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']

View file

@ -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")