add support for fetching KLE over http

This commit is contained in:
Zach White 2021-01-03 13:18:34 -08:00
parent 2040fe3d8a
commit 63472dfde7
2 changed files with 53 additions and 4 deletions

View file

@ -4,6 +4,7 @@ import json
import os import os
from pathlib import Path from pathlib import Path
import requests
from milc import cli from milc import cli
from kle2xy import KLE2xy from kle2xy import KLE2xy
@ -14,6 +15,51 @@ from qmk.info import info_json
from qmk.info_json_encoder import InfoJSONEncoder from qmk.info_json_encoder import InfoJSONEncoder
def fetch_json(url):
"""Gets the JSON from a url.
"""
response = fetch_url(url)
if response.status_code == 200:
return response.json()
print(f'ERROR: {url} returned {response.status_code}: {response.text}')
return {}
def fetch_url(url):
"""Fetch a URL.
"""
response = requests.get(url, timeout=30)
response.encoding='utf-8-sig'
return response
def fetch_gist(id):
"""Retrieve a gist from gist.github.com
"""
url = f'https://api.github.com/gists/{id}'
gist = fetch_json(url)
for data in gist['files'].values():
if data['filename'].endswith('kbd.json'):
if data.get('truncated'):
return fetch_url(data['raw_url']).text
else:
return data['content']
return None
def fetch_kle(id):
"""Fetch the kle data from a gist ID.
"""
gist = fetch_gist(id)
return gist[1:-1]
@cli.argument('kle', arg_only=True, help='A file or KLE id to convert') @cli.argument('kle', arg_only=True, help='A file or KLE id to convert')
@cli.argument('--vid', arg_only=True, default='0x03A8', help='USB VID (Default: 0x03A8)') @cli.argument('--vid', arg_only=True, default='0x03A8', help='USB VID (Default: 0x03A8)')
@cli.argument('--pid', arg_only=True, default='0x0000', help='USB PID (Default: 0x0000)') @cli.argument('--pid', arg_only=True, default='0x0000', help='USB PID (Default: 0x0000)')
@ -39,11 +85,13 @@ def kle2json(cli):
cli.log.error('Invalid KLE url: {fg_cyan}%s', cli.args.kle) cli.log.error('Invalid KLE url: {fg_cyan}%s', cli.args.kle)
return False return False
else: else:
print('FIXME: fetch gist') raw_code = fetch_kle(kle_path.split('/')[-1])
return False
else: else:
cli.log.error('File {fg_cyan}%s{style_reset_all} was not found.', file_path) raw_code = fetch_kle(cli.args.kle)
return False if not raw_code:
cli.log.error('File {fg_cyan}%s{style_reset_all} was not found.', file_path)
return False
# Make sure the user supplied a keyboard # Make sure the user supplied a keyboard
if not cli.args.keyboard: if not cli.args.keyboard:

View file

@ -5,3 +5,4 @@ colorama
hjson hjson
milc milc
pygments pygments
requests