mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-07 01:15:33 +00:00
chore(linux): fix indentation
This commit is contained in:
parent
16fa9a562f
commit
6aa58653e3
1 changed files with 190 additions and 190 deletions
|
|
@ -29,9 +29,9 @@ from keyman_config.ibus_util import install_to_ibus, restart_ibus, get_ibus_bus
|
|||
# see https://docs.google.com/document/d/1sj7W6pCiN-_iRss5iRdib1aHaSTmYoLIueQSKJeNy8Q/edit#heading=h.mq0rc28mf031
|
||||
|
||||
class InstallStatus(Enum):
|
||||
Continue = 0
|
||||
Warning = 1
|
||||
Abort = 2
|
||||
Continue = 0
|
||||
Warning = 1
|
||||
Abort = 2
|
||||
|
||||
class InstallError(Exception):
|
||||
"""Exception raised for errors in KMP installation.
|
||||
|
|
@ -46,218 +46,218 @@ class InstallError(Exception):
|
|||
self.message = message
|
||||
|
||||
def list_files(directory, extension):
|
||||
return (f for f in listdir(directory) if f.endswith('.' + extension))
|
||||
return (f for f in listdir(directory) if f.endswith('.' + extension))
|
||||
|
||||
def extract_kmp(kmpfile, directory):
|
||||
with zipfile.ZipFile(kmpfile,"r") as zip_ref:
|
||||
zip_ref.extractall(directory)
|
||||
with zipfile.ZipFile(kmpfile,"r") as zip_ref:
|
||||
zip_ref.extractall(directory)
|
||||
|
||||
def process_keyboard_data(keyboardID, packageDir):
|
||||
kbdata = get_keyboard_data(keyboardID)
|
||||
if kbdata:
|
||||
if not os.path.isdir(packageDir):
|
||||
os.makedirs(packageDir)
|
||||
kbdata = get_keyboard_data(keyboardID)
|
||||
if kbdata:
|
||||
if not os.path.isdir(packageDir):
|
||||
os.makedirs(packageDir)
|
||||
|
||||
with open(os.path.join(packageDir, keyboardID + '.json'), 'w') as outfile:
|
||||
json.dump(kbdata, outfile)
|
||||
logging.info("Installing api data file %s.json as keyman file", keyboardID)
|
||||
# else:
|
||||
# message = "install_kmp.py: error: cannot download keyboard data so not installing."
|
||||
# rmtree(kbdir)
|
||||
# raise InstallError(InstallStatus.Abort, message)
|
||||
with open(os.path.join(packageDir, keyboardID + '.json'), 'w') as outfile:
|
||||
json.dump(kbdata, outfile)
|
||||
logging.info("Installing api data file %s.json as keyman file", keyboardID)
|
||||
# else:
|
||||
# message = "install_kmp.py: error: cannot download keyboard data so not installing."
|
||||
# rmtree(kbdir)
|
||||
# raise InstallError(InstallStatus.Abort, message)
|
||||
|
||||
def check_keyman_dir(basedir, error_message):
|
||||
# check if keyman subdir exists
|
||||
keyman_dir = os.path.join(basedir, "keyman")
|
||||
if os.path.isdir(keyman_dir):
|
||||
# Check for write access of keyman dir to be able to create subdir
|
||||
if not os.access(keyman_dir, os.X_OK | os.W_OK):
|
||||
raise InstallError(InstallStatus.Abort, error_message)
|
||||
else:
|
||||
# Check for write access of basedir and create keyman subdir if we can
|
||||
if not os.access(basedir, os.X_OK | os.W_OK):
|
||||
raise InstallError(InstallStatus.Abort, error_message)
|
||||
os.mkdir(keyman_dir)
|
||||
# check if keyman subdir exists
|
||||
keyman_dir = os.path.join(basedir, "keyman")
|
||||
if os.path.isdir(keyman_dir):
|
||||
# Check for write access of keyman dir to be able to create subdir
|
||||
if not os.access(keyman_dir, os.X_OK | os.W_OK):
|
||||
raise InstallError(InstallStatus.Abort, error_message)
|
||||
else:
|
||||
# Check for write access of basedir and create keyman subdir if we can
|
||||
if not os.access(basedir, os.X_OK | os.W_OK):
|
||||
raise InstallError(InstallStatus.Abort, error_message)
|
||||
os.mkdir(keyman_dir)
|
||||
|
||||
def extract_package_id(inputfile):
|
||||
packageID, ext = os.path.splitext(os.path.basename(inputfile))
|
||||
return packageID.lower()
|
||||
packageID, ext = os.path.splitext(os.path.basename(inputfile))
|
||||
return packageID.lower()
|
||||
|
||||
def install_kmp_shared(inputfile, online=False):
|
||||
"""
|
||||
Install a kmp file to /usr/local/share/keyman
|
||||
"""
|
||||
Install a kmp file to /usr/local/share/keyman
|
||||
|
||||
Args:
|
||||
inputfile (str): path to kmp file
|
||||
online(bool, default=False): whether to attempt to get online keyboard data
|
||||
"""
|
||||
check_keyman_dir('/usr/local/share', "You do not have permissions to install the keyboard files to the shared area /usr/local/share/keyman")
|
||||
check_keyman_dir('/usr/local/share/doc', "You do not have permissions to install the documentation to the shared documentation area /usr/local/share/doc/keyman")
|
||||
check_keyman_dir('/usr/local/share/fonts', "You do not have permissions to install the font files to the shared font area /usr/local/share/fonts")
|
||||
Args:
|
||||
inputfile (str): path to kmp file
|
||||
online (bool, default=False): whether to attempt to get online keyboard data
|
||||
"""
|
||||
check_keyman_dir('/usr/local/share', "You do not have permissions to install the keyboard files to the shared area /usr/local/share/keyman")
|
||||
check_keyman_dir('/usr/local/share/doc', "You do not have permissions to install the documentation to the shared documentation area /usr/local/share/doc/keyman")
|
||||
check_keyman_dir('/usr/local/share/fonts', "You do not have permissions to install the font files to the shared font area /usr/local/share/fonts")
|
||||
|
||||
packageID = extract_package_id(inputfile)
|
||||
packageDir = os.path.join('/usr/local/share/keyman', packageID)
|
||||
kmpdocdir = os.path.join('/usr/local/share/doc/keyman', packageID)
|
||||
kmpfontdir = os.path.join('/usr/local/share/fonts/keyman', packageID)
|
||||
if not os.path.isdir(packageDir):
|
||||
os.makedirs(packageDir)
|
||||
extract_kmp(inputfile, packageDir)
|
||||
#restart IBus so it knows about the keyboards being installed
|
||||
logging.debug("restarting IBus")
|
||||
restart_ibus()
|
||||
info, system, options, keyboards, files = get_metadata(packageDir)
|
||||
packageID = extract_package_id(inputfile)
|
||||
packageDir = os.path.join('/usr/local/share/keyman', packageID)
|
||||
kmpdocdir = os.path.join('/usr/local/share/doc/keyman', packageID)
|
||||
kmpfontdir = os.path.join('/usr/local/share/fonts/keyman', packageID)
|
||||
if not os.path.isdir(packageDir):
|
||||
os.makedirs(packageDir)
|
||||
extract_kmp(inputfile, packageDir)
|
||||
#restart IBus so it knows about the keyboards being installed
|
||||
logging.debug("restarting IBus")
|
||||
restart_ibus()
|
||||
info, system, options, keyboards, files = get_metadata(packageDir)
|
||||
|
||||
if keyboards:
|
||||
logging.info("Installing %s", info['name']['description'])
|
||||
if online:
|
||||
process_keyboard_data(packageID, packageDir)
|
||||
if len(keyboards) > 1:
|
||||
for kb in keyboards:
|
||||
if kb['id'] != packageID:
|
||||
process_keyboard_data(kb['id'], packageDir)
|
||||
if keyboards:
|
||||
logging.info("Installing %s", info['name']['description'])
|
||||
if online:
|
||||
process_keyboard_data(packageID, packageDir)
|
||||
if len(keyboards) > 1:
|
||||
for kb in keyboards:
|
||||
if kb['id'] != packageID:
|
||||
process_keyboard_data(kb['id'], packageDir)
|
||||
|
||||
for f in files:
|
||||
fpath = os.path.join(packageDir, f['name'])
|
||||
ftype = f['type']
|
||||
if ftype == KMFileTypes.KM_DOC or ftype == KMFileTypes.KM_IMAGE:
|
||||
#Special handling of doc and images to hard link them into doc dir
|
||||
logging.info("Installing %s as documentation", f['name'])
|
||||
if not os.path.isdir(kmpdocdir):
|
||||
os.makedirs(kmpdocdir)
|
||||
os.link(fpath, os.path.join(kmpdocdir, f['name']))
|
||||
elif ftype == KMFileTypes.KM_FONT:
|
||||
#Special handling of font to hard link it into font dir
|
||||
logging.info("Installing %s as font", f['name'])
|
||||
if not os.path.isdir(kmpfontdir):
|
||||
os.makedirs(kmpfontdir)
|
||||
os.link(fpath, os.path.join(kmpfontdir, f['name']))
|
||||
elif ftype == KMFileTypes.KM_SOURCE:
|
||||
#TODO for the moment just leave it for ibus-kmfl to ignore if it doesn't load
|
||||
logging.info("Installing %s as keyman file", f['name'])
|
||||
elif ftype == KMFileTypes.KM_OSK:
|
||||
# Special handling to convert kvk into LDML
|
||||
logging.info("Converting %s to LDML and installing both as as keyman file", f['name'])
|
||||
ldml = convert_kvk_to_ldml(fpath)
|
||||
name, ext = os.path.splitext(f['name'])
|
||||
ldmlfile = os.path.join(packageDir, name+".ldml")
|
||||
output_ldml(ldmlfile, ldml)
|
||||
elif ftype == KMFileTypes.KM_ICON:
|
||||
# Special handling of icon to convert to PNG
|
||||
logging.info("Converting %s to PNG and installing both as keyman files", f['name'])
|
||||
checkandsaveico(fpath)
|
||||
elif ftype == KMFileTypes.KM_KMX:
|
||||
# Sanitize keyboard filename if not lower case
|
||||
kmx_id, ext = os.path.splitext(os.path.basename(f['name']))
|
||||
for kb in keyboards:
|
||||
if kmx_id.lower() == kb['id'] and kmx_id != kb['id']:
|
||||
os.rename(os.path.join(packageDir, f['name']), os.path.join(packageDir, kb['id']+'.kmx'))
|
||||
fpath = os.path.join(packageDir, kb['id']+'.kmx')
|
||||
extractico(fpath)
|
||||
for f in files:
|
||||
fpath = os.path.join(packageDir, f['name'])
|
||||
ftype = f['type']
|
||||
if ftype == KMFileTypes.KM_DOC or ftype == KMFileTypes.KM_IMAGE:
|
||||
#Special handling of doc and images to hard link them into doc dir
|
||||
logging.info("Installing %s as documentation", f['name'])
|
||||
if not os.path.isdir(kmpdocdir):
|
||||
os.makedirs(kmpdocdir)
|
||||
os.link(fpath, os.path.join(kmpdocdir, f['name']))
|
||||
elif ftype == KMFileTypes.KM_FONT:
|
||||
#Special handling of font to hard link it into font dir
|
||||
logging.info("Installing %s as font", f['name'])
|
||||
if not os.path.isdir(kmpfontdir):
|
||||
os.makedirs(kmpfontdir)
|
||||
os.link(fpath, os.path.join(kmpfontdir, f['name']))
|
||||
elif ftype == KMFileTypes.KM_SOURCE:
|
||||
#TODO for the moment just leave it for ibus-kmfl to ignore if it doesn't load
|
||||
logging.info("Installing %s as keyman file", f['name'])
|
||||
elif ftype == KMFileTypes.KM_OSK:
|
||||
# Special handling to convert kvk into LDML
|
||||
logging.info("Converting %s to LDML and installing both as as keyman file", f['name'])
|
||||
ldml = convert_kvk_to_ldml(fpath)
|
||||
name, ext = os.path.splitext(f['name'])
|
||||
ldmlfile = os.path.join(packageDir, name+".ldml")
|
||||
output_ldml(ldmlfile, ldml)
|
||||
elif ftype == KMFileTypes.KM_ICON:
|
||||
# Special handling of icon to convert to PNG
|
||||
logging.info("Converting %s to PNG and installing both as keyman files", f['name'])
|
||||
checkandsaveico(fpath)
|
||||
elif ftype == KMFileTypes.KM_KMX:
|
||||
# Sanitize keyboard filename if not lower case
|
||||
kmx_id, ext = os.path.splitext(os.path.basename(f['name']))
|
||||
for kb in keyboards:
|
||||
if kmx_id.lower() == kb['id'] and kmx_id != kb['id']:
|
||||
os.rename(os.path.join(packageDir, f['name']), os.path.join(packageDir, kb['id']+'.kmx'))
|
||||
fpath = os.path.join(packageDir, kb['id']+'.kmx')
|
||||
extractico(fpath)
|
||||
|
||||
for kb in keyboards:
|
||||
# install all kmx for first lang not just packageID
|
||||
kmx_file = os.path.join(packageDir, kb['id'] + ".kmx")
|
||||
install_to_ibus(lang, kmx_file)
|
||||
else:
|
||||
logging.error("install_kmp.py: error: No kmp.json or kmp.inf found in %s", inputfile)
|
||||
logging.info("Contents of %s:", inputfile)
|
||||
for o in os.listdir(packageDir):
|
||||
logging.info(o)
|
||||
rmtree(packageDir)
|
||||
message = "install_kmp.py: error: No kmp.json or kmp.inf found in %s" % (inputfile)
|
||||
raise InstallError(InstallStatus.Abort, message)
|
||||
for kb in keyboards:
|
||||
# install all kmx for first lang not just packageID
|
||||
kmx_file = os.path.join(packageDir, kb['id'] + ".kmx")
|
||||
install_to_ibus(lang, kmx_file)
|
||||
else:
|
||||
logging.error("install_kmp.py: error: No kmp.json or kmp.inf found in %s", inputfile)
|
||||
logging.info("Contents of %s:", inputfile)
|
||||
for o in os.listdir(packageDir):
|
||||
logging.info(o)
|
||||
rmtree(packageDir)
|
||||
message = "install_kmp.py: error: No kmp.json or kmp.inf found in %s" % (inputfile)
|
||||
raise InstallError(InstallStatus.Abort, message)
|
||||
|
||||
def install_kmp_user(inputfile, online=False):
|
||||
packageID = extract_package_id(inputfile)
|
||||
packageDir=user_keyboard_dir(packageID)
|
||||
if not os.path.isdir(packageDir):
|
||||
os.makedirs(packageDir)
|
||||
packageID = extract_package_id(inputfile)
|
||||
packageDir=user_keyboard_dir(packageID)
|
||||
if not os.path.isdir(packageDir):
|
||||
os.makedirs(packageDir)
|
||||
|
||||
extract_kmp(inputfile, packageDir)
|
||||
#restart IBus so it knows about the keyboards being installed
|
||||
restart_ibus()
|
||||
info, system, options, keyboards, files = get_metadata(packageDir)
|
||||
extract_kmp(inputfile, packageDir)
|
||||
#restart IBus so it knows about the keyboards being installed
|
||||
restart_ibus()
|
||||
info, system, options, keyboards, files = get_metadata(packageDir)
|
||||
|
||||
if keyboards:
|
||||
logging.info("Installing %s", info['name']['description'])
|
||||
if online:
|
||||
process_keyboard_data(packageID, packageDir)
|
||||
if len(keyboards) > 1:
|
||||
for kb in keyboards:
|
||||
if kb['id'] != packageID:
|
||||
process_keyboard_data(kb['id'], packageDir)
|
||||
if keyboards:
|
||||
logging.info("Installing %s", info['name']['description'])
|
||||
if online:
|
||||
process_keyboard_data(packageID, packageDir)
|
||||
if len(keyboards) > 1:
|
||||
for kb in keyboards:
|
||||
if kb['id'] != packageID:
|
||||
process_keyboard_data(kb['id'], packageDir)
|
||||
|
||||
for f in files:
|
||||
fpath = os.path.join(packageDir, f['name'])
|
||||
ftype = f['type']
|
||||
if ftype == KMFileTypes.KM_FONT:
|
||||
#Special handling of font to hard link it into font dir
|
||||
fontsdir = os.path.join(user_keyman_font_dir(), packageID)
|
||||
if not os.path.isdir(fontsdir):
|
||||
os.makedirs(fontsdir)
|
||||
os.link(fpath, os.path.join(fontsdir, f['name']))
|
||||
logging.info("Installing %s as font", f['name'])
|
||||
elif ftype == KMFileTypes.KM_OSK:
|
||||
# Special handling to convert kvk into LDML
|
||||
logging.info("Converting %s to LDML and installing both as as keyman file", f['name'])
|
||||
ldml = convert_kvk_to_ldml(fpath)
|
||||
name, ext = os.path.splitext(f['name'])
|
||||
ldmlfile = os.path.join(packageDir, name+".ldml")
|
||||
output_ldml(ldmlfile, ldml)
|
||||
elif ftype == KMFileTypes.KM_ICON:
|
||||
# Special handling of icon to convert to PNG
|
||||
logging.info("Converting %s to PNG and installing both as keyman files", f['name'])
|
||||
checkandsaveico(fpath)
|
||||
elif ftype == KMFileTypes.KM_SOURCE:
|
||||
#TODO for the moment just leave it for ibus-kmfl to ignore if it doesn't load
|
||||
pass
|
||||
elif ftype == KMFileTypes.KM_KMX:
|
||||
# Sanitize keyboard filename if not lower case
|
||||
kmx_id, ext = os.path.splitext(os.path.basename(f['name']))
|
||||
for kb in keyboards:
|
||||
if kmx_id.lower() == kb['id'] and kmx_id != kb['id']:
|
||||
os.rename(os.path.join(packageDir, f['name']), os.path.join(packageDir, kb['id']+'.kmx'))
|
||||
fpath = os.path.join(packageDir, kb['id']+'.kmx')
|
||||
extractico(fpath)
|
||||
for f in files:
|
||||
fpath = os.path.join(packageDir, f['name'])
|
||||
ftype = f['type']
|
||||
if ftype == KMFileTypes.KM_FONT:
|
||||
#Special handling of font to hard link it into font dir
|
||||
fontsdir = os.path.join(user_keyman_font_dir(), packageID)
|
||||
if not os.path.isdir(fontsdir):
|
||||
os.makedirs(fontsdir)
|
||||
os.link(fpath, os.path.join(fontsdir, f['name']))
|
||||
logging.info("Installing %s as font", f['name'])
|
||||
elif ftype == KMFileTypes.KM_OSK:
|
||||
# Special handling to convert kvk into LDML
|
||||
logging.info("Converting %s to LDML and installing both as as keyman file", f['name'])
|
||||
ldml = convert_kvk_to_ldml(fpath)
|
||||
name, ext = os.path.splitext(f['name'])
|
||||
ldmlfile = os.path.join(packageDir, name+".ldml")
|
||||
output_ldml(ldmlfile, ldml)
|
||||
elif ftype == KMFileTypes.KM_ICON:
|
||||
# Special handling of icon to convert to PNG
|
||||
logging.info("Converting %s to PNG and installing both as keyman files", f['name'])
|
||||
checkandsaveico(fpath)
|
||||
elif ftype == KMFileTypes.KM_SOURCE:
|
||||
#TODO for the moment just leave it for ibus-kmfl to ignore if it doesn't load
|
||||
pass
|
||||
elif ftype == KMFileTypes.KM_KMX:
|
||||
# Sanitize keyboard filename if not lower case
|
||||
kmx_id, ext = os.path.splitext(os.path.basename(f['name']))
|
||||
for kb in keyboards:
|
||||
if kmx_id.lower() == kb['id'] and kmx_id != kb['id']:
|
||||
os.rename(os.path.join(packageDir, f['name']), os.path.join(packageDir, kb['id']+'.kmx'))
|
||||
fpath = os.path.join(packageDir, kb['id']+'.kmx')
|
||||
extractico(fpath)
|
||||
|
||||
install_keyboards_to_ibus(keyboards, packageDir)
|
||||
else:
|
||||
logging.error("install_kmp.py: error: No kmp.json or kmp.inf found in %s", inputfile)
|
||||
logging.info("Contents of %s:", inputfile)
|
||||
for o in os.listdir(packageDir):
|
||||
logging.info(o)
|
||||
rmtree(packageDir)
|
||||
message = "install_kmp.py: error: No kmp.json or kmp.inf found in %s" % (inputfile)
|
||||
raise InstallError(InstallStatus.Abort, message)
|
||||
install_keyboards_to_ibus(keyboards, packageDir)
|
||||
else:
|
||||
logging.error("install_kmp.py: error: No kmp.json or kmp.inf found in %s", inputfile)
|
||||
logging.info("Contents of %s:", inputfile)
|
||||
for o in os.listdir(packageDir):
|
||||
logging.info(o)
|
||||
rmtree(packageDir)
|
||||
message = "install_kmp.py: error: No kmp.json or kmp.inf found in %s" % (inputfile)
|
||||
raise InstallError(InstallStatus.Abort, message)
|
||||
|
||||
def install_keyboards_to_ibus(keyboards, packageDir):
|
||||
bus = get_ibus_bus()
|
||||
if bus:
|
||||
# install all kmx for first lang not just packageID
|
||||
for kb in keyboards:
|
||||
kmx_file = os.path.join(packageDir, kb['id'] + ".kmx")
|
||||
if "languages" in kb and len(kb["languages"]) > 0:
|
||||
logging.debug(kb["languages"][0])
|
||||
keyboard_id = "%s:%s" % (kb["languages"][0]['id'], kmx_file)
|
||||
else:
|
||||
keyboard_id = kmx_file
|
||||
install_to_ibus(bus, keyboard_id)
|
||||
restart_ibus(bus)
|
||||
bus.destroy()
|
||||
else:
|
||||
logging.debug("could not install keyboards to IBus")
|
||||
bus = get_ibus_bus()
|
||||
if bus:
|
||||
# install all kmx for first lang not just packageID
|
||||
for kb in keyboards:
|
||||
kmx_file = os.path.join(packageDir, kb['id'] + ".kmx")
|
||||
if "languages" in kb and len(kb["languages"]) > 0:
|
||||
logging.debug(kb["languages"][0])
|
||||
keyboard_id = "%s:%s" % (kb["languages"][0]['id'], kmx_file)
|
||||
else:
|
||||
keyboard_id = kmx_file
|
||||
install_to_ibus(bus, keyboard_id)
|
||||
restart_ibus(bus)
|
||||
bus.destroy()
|
||||
else:
|
||||
logging.debug("could not install keyboards to IBus")
|
||||
|
||||
|
||||
def install_kmp(inputfile, online=False, sharedarea=False):
|
||||
"""
|
||||
Install a kmp file
|
||||
"""
|
||||
Install a kmp file
|
||||
|
||||
Args:
|
||||
inputfile (str): path to kmp file
|
||||
online(bool, default=False): whether to attempt to get online keyboard data
|
||||
sharedarea(bool, default=False): whether install kmp to shared area or user directory
|
||||
"""
|
||||
if sharedarea:
|
||||
install_kmp_shared(inputfile, online)
|
||||
else:
|
||||
install_kmp_user(inputfile, online)
|
||||
Args:
|
||||
inputfile (str): path to kmp file
|
||||
online(bool, default=False): whether to attempt to get online keyboard data
|
||||
sharedarea(bool, default=False): whether install kmp to shared area or user directory
|
||||
"""
|
||||
if sharedarea:
|
||||
install_kmp_shared(inputfile, online)
|
||||
else:
|
||||
install_kmp_user(inputfile, online)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue