From 7f97928b69d1cb8dcf9d54a63f7f7a30f8a9cc4f Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Wed, 18 Nov 2015 13:52:15 +0000 Subject: [PATCH] Minor code reformatting --- convert.py | 25 +++---- generate-json.py | 135 ++++++++++++++++++++------------------ markjaml.py | 58 ++++++++-------- pinout.py | 17 +++-- serve.py | 18 +++-- tools/generate-defines.py | 31 +++++---- urlmapper.py | 89 +++++++++++++------------ 7 files changed, 203 insertions(+), 170 deletions(-) diff --git a/convert.py b/convert.py index c798c18..d40d30e 100644 --- a/convert.py +++ b/convert.py @@ -2,19 +2,22 @@ import json, sys db = json.load(open('pi-pinout.db')) + def from_phys(phys, mode="bcm"): - pin = db['pins'][str(phys)] - if 'scheme' in pin: - if mode in pin['scheme']: - return int(pin['scheme'][mode]) - return None + pin = db['pins'][str(phys)] + if 'scheme' in pin: + if mode in pin['scheme']: + return int(pin['scheme'][mode]) + return None + def to_phys(pin, mode="bcm"): - for pin in db['pins']: - if 'scheme' in db['pins'][pin]: - if mode in db['pins'][pin]['scheme']: - return int(pin) - return None + for pin in db['pins']: + if 'scheme' in db['pins'][pin]: + if mode in db['pins'][pin]['scheme']: + return int(pin) + return None + pin = int(sys.argv[1]) @@ -23,5 +26,5 @@ mode = 'bcm' if len(sys.argv) > 2: mode = sys.argv[2] -print("Pin {} is {}: {}".format(pin,mode.upper(),from_phys(pin,mode))) +print("Pin {} is {}: {}".format(pin, mode.upper(), from_phys(pin, mode))) diff --git a/generate-json.py b/generate-json.py index 4b55136..d91f41d 100755 --- a/generate-json.py +++ b/generate-json.py @@ -13,7 +13,7 @@ sys.setdefaultencoding('utf8') lang = "en" if len(sys.argv) > 1: - lang = sys.argv[1] + lang = sys.argv[1] pinout.load(lang) @@ -21,12 +21,14 @@ overlays = pinout.settings['overlays'] pages = {} + def cssify(value): - value = slugify(value); - if value[0] == '3' or value[0] == '5': - value = 'pow' + value - - return value + value = slugify(value); + if value[0] == '3' or value[0] == '5': + value = 'pow' + value + + return value + def slugify(value): """ @@ -38,84 +40,87 @@ def slugify(value): value = re.sub('[^\w\s-]', '', value).strip().lower() return re.sub('[-\s]+', '_', value) + def load_overlay(overlay): - try: - data = markjaml.load('src/{}/overlay/{}.md'.format(lang,overlay)) + try: + data = markjaml.load('src/{}/overlay/{}.md'.format(lang, overlay)) - loaded = data['data'] - except IOError: - return None + loaded = data['data'] + except IOError: + return None - details = [] + details = [] - if 'manufacturer' in loaded: - details.append('* Made by ' + loaded['manufacturer']) + if 'manufacturer' in loaded: + details.append('* Made by ' + loaded['manufacturer']) - if 'pincount' in loaded: - pincount = int(loaded['pincount']) - if pincount == 40: - details.append('* HAT form-factor') - elif pincount == 26: - details.append('* Classic 26-pin') - else: - details.append('* {} pin header'.format(pincount)) + if 'pincount' in loaded: + pincount = int(loaded['pincount']) + if pincount == 40: + details.append('* HAT form-factor') + elif pincount == 26: + details.append('* Classic 26-pin') + else: + details.append('* {} pin header'.format(pincount)) - if 'pin' in loaded: - uses_5v = False - uses_3v = False - uses = 0 - for pin in loaded['pin']: - pin = str(pin) - if pin.startswith('bcm'): - pin = pinout.bcm_to_physical(pin[3:]) + if 'pin' in loaded: + uses_5v = False + uses_3v = False + uses = 0 + for pin in loaded['pin']: + pin = str(pin) + if pin.startswith('bcm'): + pin = pinout.bcm_to_physical(pin[3:]) - if pin in pinout.pins: - actual_pin = pinout.pins[pin] + if pin in pinout.pins: + actual_pin = pinout.pins[pin] - if actual_pin['type'] in ['+3v3','+5v','GND']: - if actual_pin['type'] == '+3v3': - uses_3v = True - if actual_pin['type'] == '+5v': - uses_5v = True - else: - uses += 1 + if actual_pin['type'] in ['+3v3', '+5v', 'GND']: + if actual_pin['type'] == '+3v3': + uses_3v = True + if actual_pin['type'] == '+5v': + uses_5v = True + else: + uses += 1 - if uses > 0: - details.append('* Uses {} GPIO pins'.format(uses)) + if uses > 0: + details.append('* Uses {} GPIO pins'.format(uses)) - if '3' in loaded['pin'] and '5' in loaded['pin']: - pin_3 = loaded['pin']['3'] - pin_5 = loaded['pin']['5'] - if 'mode' in pin_3 and 'mode' in pin_5: - if pin_3['mode'] == 'i2c' and pin_5['mode'] == 'i2c': - details.append('* Uses I2C') + if '3' in loaded['pin'] and '5' in loaded['pin']: + pin_3 = loaded['pin']['3'] + pin_5 = loaded['pin']['5'] + if 'mode' in pin_3 and 'mode' in pin_5: + if pin_3['mode'] == 'i2c' and pin_5['mode'] == 'i2c': + details.append('* Uses I2C') - if 'url' in loaded: - details.append('* [More Information]({url})'.format(url=loaded['url'])) + if 'url' in loaded: + details.append('* [More Information]({url})'.format(url=loaded['url'])) - if 'github' in loaded: - details.append('* [GitHub Repository]({url})'.format(url=loaded['github'])) + if 'github' in loaded: + details.append('* [GitHub Repository]({url})'.format(url=loaded['github'])) - if 'buy' in loaded: - details.append('* [Buy Now]({url})'.format(url=loaded['buy'])) + if 'buy' in loaded: + details.append('* [Buy Now]({url})'.format(url=loaded['buy'])) - if not 'page_url' in loaded: - loaded['page_url'] = slugify(loaded['name']) + if not 'page_url' in loaded: + loaded['page_url'] = slugify(loaded['name']) + + pages[loaded['page_url']] = loaded + return loaded - pages[loaded['page_url']] = loaded - return loaded def load_md(filename): - filename = 'src/{}/{}'.format(lang, filename) - try: - html = markdown.markdown(open(filename).read(), extensions=['fenced_code']) + filename = 'src/{}/{}'.format(lang, filename) + try: + html = markdown.markdown(open(filename).read(), extensions=['fenced_code']) - return html - except IOError: - print('Unable to load markdown from {}'.format(filename)) - return '' + return html + except IOError: + print('Unable to load markdown from {}'.format(filename)) + return '' -overlays = map(load_overlay,overlays) + +overlays = map(load_overlay, overlays) print(json.dumps(overlays)) diff --git a/markjaml.py b/markjaml.py index 8234443..05c6258 100644 --- a/markjaml.py +++ b/markjaml.py @@ -4,6 +4,7 @@ import yaml import re import unicodedata + def slugify(value): """ Normalizes string, converts to lowercase, removes non-alpha characters, @@ -14,42 +15,43 @@ def slugify(value): value = re.sub('[^\w\s-]', '-', value).strip().lower() return re.sub('[-\s]+', '-', value) + def load(file): - ''' - Loads and parses JSON-embedded Markdown file, chopping out and - parsing any JSON contained therein. + ''' + Loads and parses JSON-embedded Markdown file, chopping out and + parsing any JSON contained therein. - Returns an object that includes the JSON data, and the parsed HTML. - ''' - markson = open(file).read() + Returns an object that includes the JSON data, and the parsed HTML. + ''' + markson = open(file).read() - _data = re.search(re.compile(r'', re.DOTALL),markson) + _data = re.search(re.compile(r'', re.DOTALL), markson) - _markdown = re.sub(re.compile(r'', re.DOTALL),'',markson) - _html = markdown.markdown(_markdown, extensions=['fenced_code']) + _markdown = re.sub(re.compile(r'', re.DOTALL), '', markson) + _html = markdown.markdown(_markdown, extensions=['fenced_code']) - # Scan for the Title in the Markdown file, this is always assumed - # to be the first string starting with a single hash/pound ( # ) sign - _title = re.search(re.compile(r'^#[^\#](.*)$', re.MULTILINE),markson) + # Scan for the Title in the Markdown file, this is always assumed + # to be the first string starting with a single hash/pound ( # ) sign + _title = re.search(re.compile(r'^#[^\#](.*)$', re.MULTILINE), markson) - if _title != None: - _title = _title.group(0).replace('#','').strip() + if _title != None: + _title = _title.group(0).replace('#', '').strip() - if _data != None: - _type = _data.group(0)[4:8].upper().strip() + if _data != None: + _type = _data.group(0)[4:8].upper().strip() - if _type == 'JSON': - _data = re.search('\{(.*)\}',_data.group(0),re.DOTALL).group(0) - _data = json.loads(_data) - elif _type == '---': - _data = re.search('\n(.*)\n',_data.group(0),re.DOTALL).group(0) - _data = yaml.load(_data) - else: - data = {} + if _type == 'JSON': + _data = re.search('\{(.*)\}', _data.group(0), re.DOTALL).group(0) + _data = json.loads(_data) + elif _type == '---': + _data = re.search('\n(.*)\n', _data.group(0), re.DOTALL).group(0) + _data = yaml.load(_data) + else: + data = {} - _data['title'] = _title + _data['title'] = _title - elif _title != None: - _data = {'title':_title} + elif _title != None: + _data = {'title':_title} - return {'data':_data, 'html':_html} \ No newline at end of file + return {'data':_data, 'html':_html} \ No newline at end of file diff --git a/pinout.py b/pinout.py index eef5f89..6e73b07 100644 --- a/pinout.py +++ b/pinout.py @@ -8,11 +8,13 @@ SETTINGS_FILE = 'settings.yaml' pins = None settings = None + def get_setting(setting, default = None): if setting in settings and settings[setting] != None: return settings[setting] return default + def render_html(*args, **kwargs): html = args[0] kwargs['v'] = str(int(time.time())) @@ -20,6 +22,7 @@ def render_html(*args, **kwargs): html = html.replace('{{' + key + '}}', kwargs[key]) return html + def bcm_to_physical(pin): for idx in pins: compare_pin = pins[idx] @@ -29,6 +32,7 @@ def bcm_to_physical(pin): #print("Mapping BCM{} to {}".format(pin, str(idx))) return str(idx) + def physical_to_bcm(pin): pin = pins[pin] if 'scheme' in pin: @@ -36,6 +40,7 @@ def physical_to_bcm(pin): return str(pin['scheme']['bcm']) return None + def physical_to_wiringpi(pin): pin = pins[pin] if 'scheme' in pin: @@ -43,8 +48,9 @@ def physical_to_wiringpi(pin): return str(pin['scheme']['wiringpi']) return None + def physical_to(pin, scheme='bcm'): - if scheme in ['bcm','wiringpi']: + if scheme in ['bcm', 'wiringpi']: pin = pins[pin] if 'scheme' in pin: if scheme in pin['scheme']: @@ -53,16 +59,17 @@ def physical_to(pin, scheme='bcm'): return pin return None + def load(lang='en'): global pins, settings if DB_FILE.endswith('.yaml'): - db = yaml.load(open('src/{}/{}'.format(lang,DB_FILE)).read()) + db = yaml.load(open('src/{}/{}'.format(lang, DB_FILE)).read()) else: - db = json.load(open('src/{}/{}'.format(lang,DB_FILE))) + db = json.load(open('src/{}/{}'.format(lang, DB_FILE))) if SETTINGS_FILE.endswith('.yaml'): - settings = yaml.load(open('src/{}/{}'.format(lang,SETTINGS_FILE)).read()) + settings = yaml.load(open('src/{}/{}'.format(lang, SETTINGS_FILE)).read()) else: - settings = json.load(open('src/{}/{}'.format(lang,SETTINGS_FILE))) + settings = json.load(open('src/{}/{}'.format(lang, SETTINGS_FILE))) pins = db['pins'] diff --git a/serve.py b/serve.py index df185f5..e878db6 100755 --- a/serve.py +++ b/serve.py @@ -5,23 +5,27 @@ app = Flask(__name__) lang = 'en' + @app.route('/') def show_index(): - return send_from_directory(basedir,'index.html') + return send_from_directory(basedir, 'index.html') + @app.route("/resources/") def custom_static(filename): - return send_from_directory(basedir + 'resources/', filename) + return send_from_directory(basedir + 'resources/', filename) + @app.route("/") def show_page(page): - return send_from_directory(basedir,'{}.html'.format(page)) + return send_from_directory(basedir, '{}.html'.format(page)) + if __name__ == "__main__": - if len(sys.argv) > 1: - lang = sys.argv[1] + if len(sys.argv) > 1: + lang = sys.argv[1] - basedir = 'output/{lang}/'.format(lang=lang) + basedir = 'output/{lang}/'.format(lang=lang) - app.run(host='0.0.0.0', debug=True) + app.run(host='0.0.0.0', debug=True) diff --git a/tools/generate-defines.py b/tools/generate-defines.py index 05f54f0..76d38ba 100755 --- a/tools/generate-defines.py +++ b/tools/generate-defines.py @@ -32,6 +32,7 @@ comment_prefix = { 'c': '//' } + def slugify(value): """ Normalizes string, converts to lowercase, removes non-alpha characters, @@ -39,11 +40,12 @@ def slugify(value): """ value = unicode(value) value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii') - value = value.replace('+','PLUS') - value = value.replace('-','MINUS') + value = value.replace('+', 'PLUS') + value = value.replace('-', 'MINUS') value = re.sub('[^\w\s-]', '', value).strip().lower() return re.sub('[-\s]+', '_', value) + def bcm_to_physical(pin): pin = pin[3:] for idx in pins: @@ -54,6 +56,7 @@ def bcm_to_physical(pin): print("Mapping BCM{} to {}".format(pin, str(idx))) return str(idx) + def physical_to_bcm(pin): pin = pins[pin] if 'scheme' in pin: @@ -61,6 +64,7 @@ def physical_to_bcm(pin): return str(pin['scheme']['bcm']) return None + def physical_to_wiringpi(pin): pin = pins[pin] if 'scheme' in pin: @@ -68,8 +72,9 @@ def physical_to_wiringpi(pin): return str(pin['scheme']['wiringpi']) return None + def physical_to(pin, scheme='bcm'): - if scheme in ['bcm','wiringpi']: + if scheme in ['bcm', 'wiringpi']: pin = pins[pin] if 'scheme' in pin: if scheme in pin['scheme']: @@ -78,24 +83,26 @@ def physical_to(pin, scheme='bcm'): return pin return None -db = json.load(open('../src/{}/pi-pinout.json'.format(lang))) -pins = db['pins'] - -define = {} -keys = [] def add_define(key, value): global keys, define keys.append(key) define[key] = value + +db = json.load(open('../src/{}/pi-pinout.json'.format(lang))) +pins = db['pins'] + +define = {} +keys = [] + if len(sys.argv) >= 3: overlay_file = sys.argv[1] pin_scheme = sys.argv[2] output_lang = sys.argv[3] - overlay = json.load(open('../src/{}/overlay/{}.json'.format(lang,overlay_file))) + overlay = json.load(open('../src/{}/overlay/{}.json'.format(lang, overlay_file))) if 'i2c' in overlay: for addr in overlay['i2c']: @@ -129,7 +136,7 @@ if len(sys.argv) >= 3: board_name = board_name, name = name ) - row_length = max(len(key),row_length) + row_length = max(len(key), row_length) for name in keys: @@ -137,9 +144,9 @@ if len(sys.argv) >= 3: board_name = board_name, name = name ) - + value = value_template[output_lang].format(value = define[name]) - value = value.rjust(row_length - len(key) + len(value),' ') + value = value.rjust(row_length - len(key) + len(value), ' ') print(key+value) diff --git a/urlmapper.py b/urlmapper.py index 8037bdb..b889c31 100755 --- a/urlmapper.py +++ b/urlmapper.py @@ -10,6 +10,7 @@ import os reload(sys) sys.setdefaultencoding('utf8') + def url_slugify(value): """ Normalizes string, converts to lowercase, removes non-alpha characters, @@ -20,70 +21,74 @@ def url_slugify(value): value = re.sub('[^\w\s-]', '', value).strip().lower() return re.sub('[-\s]+', '_', value) + def load_overlay_url(overlay, lang): - try: - data = markjaml.load('src/{}/overlay/{}.md'.format(lang,overlay)) + try: + data = markjaml.load('src/{}/overlay/{}.md'.format(lang, overlay)) - loaded = data['data'] - except IOError: - return None + loaded = data['data'] + except IOError: + return None - if not 'page_url' in loaded: - loaded['page_url'] = url_slugify(loaded['name']) + if not 'page_url' in loaded: + loaded['page_url'] = url_slugify(loaded['name']) - return overlay, loaded['page_url'] + return overlay, loaded['page_url'] -def get_pin_url(pin_num,pinout): - pin = pinout.pins[str(pin_num)] - pin_url = pin['name'] - if pin_url == 'Ground': - return None +def get_pin_url(pin_num, pinout): + pin = pinout.pins[str(pin_num)] + pin_url = pin['name'] - if 'scheme' in pin: - if 'bcm' in pin['scheme']: - bcm = pin['scheme']['bcm'] - pin_url = 'gpio{}'.format(bcm) + if pin_url == 'Ground': + return None + + if 'scheme' in pin: + if 'bcm' in pin['scheme']: + bcm = pin['scheme']['bcm'] + pin_url = 'gpio{}'.format(bcm) + + return url_slugify('pin{}_{}'.format(pin_num, pin_url)) - return url_slugify('pin{}_{}'.format(pin_num,pin_url)) def generate_for_lang(lang="en"): - url_lookup = {} + url_lookup = {} - pinout.load(lang) + pinout.load(lang) - overlays = pinout.settings['overlays'] + overlays = pinout.settings['overlays'] - base_url = pinout.get_setting('base_url','/pinout/') + base_url = pinout.get_setting('base_url', '/pinout/') - domain = pinout.get_setting('domain','pinout.xyz') + domain = pinout.get_setting('domain', 'pinout.xyz') - overlays_html = '' + overlays_html = '' - overlays = map(lambda overlay: load_overlay_url(overlay, lang),overlays) + overlays = map(lambda overlay: load_overlay_url(overlay, lang), overlays) - for pin in range(1,len(pinout.pins)+1): - pin_url = get_pin_url(pin,pinout) - if pin_url is None: - continue + for pin in range(1, len(pinout.pins)+1): + pin_url = get_pin_url(pin, pinout) + if pin_url is None: + continue - url_lookup['pin{}'.format(pin)] = '//{domain}{base_url}{url}'.format(domain=domain,base_url=base_url,url=pin_url) + url_lookup['pin{}'.format(pin)] = '//{domain}{base_url}{url}'.format(domain=domain, base_url=base_url, url=pin_url) - for url in overlays: - if url is None: - continue + for url in overlays: + if url is None: + continue - url_lookup['{}'.format(url[0])] = '//{domain}{base_url}{url}'.format(domain=domain,base_url=base_url,url=url[1]) + url_lookup['{}'.format(url[0])] = '//{domain}{base_url}{url}'.format(domain=domain, base_url=base_url, url=url[1]) - - url_lookup['index'] = '//{}'.format(domain) - return url_lookup + url_lookup['index'] = '//{}'.format(domain) + + return url_lookup + def generate_urls(lang="en"): - languages = [l.replace('src/','') for l in glob.glob('src/??') if os.path.isdir(l)] # if not l == 'src/'+lang - urls = {} - for lang in languages: - urls[lang] = generate_for_lang(lang) - return urls + languages = [l.replace('src/', '') for l in glob.glob('src/??') if os.path.isdir(l)] # if not l == 'src/'+lang + urls = {} + for lang in languages: + urls[lang] = generate_for_lang(lang) + return urls