Merge pull request #69 from lurch/small_code_tidyups

Minor code reformatting
This commit is contained in:
Philip Howard 2015-11-19 22:14:13 +00:00
commit 3606787df8
7 changed files with 203 additions and 170 deletions

View File

@ -2,19 +2,22 @@ import json, sys
db = json.load(open('pi-pinout.db')) db = json.load(open('pi-pinout.db'))
def from_phys(phys, mode="bcm"): def from_phys(phys, mode="bcm"):
pin = db['pins'][str(phys)] pin = db['pins'][str(phys)]
if 'scheme' in pin: if 'scheme' in pin:
if mode in pin['scheme']: if mode in pin['scheme']:
return int(pin['scheme'][mode]) return int(pin['scheme'][mode])
return None return None
def to_phys(pin, mode="bcm"): def to_phys(pin, mode="bcm"):
for pin in db['pins']: for pin in db['pins']:
if 'scheme' in db['pins'][pin]: if 'scheme' in db['pins'][pin]:
if mode in db['pins'][pin]['scheme']: if mode in db['pins'][pin]['scheme']:
return int(pin) return int(pin)
return None return None
pin = int(sys.argv[1]) pin = int(sys.argv[1])
@ -23,5 +26,5 @@ mode = 'bcm'
if len(sys.argv) > 2: if len(sys.argv) > 2:
mode = 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)))

View File

@ -13,7 +13,7 @@ sys.setdefaultencoding('utf8')
lang = "en" lang = "en"
if len(sys.argv) > 1: if len(sys.argv) > 1:
lang = sys.argv[1] lang = sys.argv[1]
pinout.load(lang) pinout.load(lang)
@ -21,12 +21,14 @@ overlays = pinout.settings['overlays']
pages = {} pages = {}
def cssify(value): def cssify(value):
value = slugify(value); value = slugify(value);
if value[0] == '3' or value[0] == '5': if value[0] == '3' or value[0] == '5':
value = 'pow' + value value = 'pow' + value
return value return value
def slugify(value): def slugify(value):
""" """
@ -38,84 +40,87 @@ def slugify(value):
value = re.sub('[^\w\s-]', '', value).strip().lower() value = re.sub('[^\w\s-]', '', value).strip().lower()
return re.sub('[-\s]+', '_', value) return re.sub('[-\s]+', '_', value)
def load_overlay(overlay): def load_overlay(overlay):
try: try:
data = markjaml.load('src/{}/overlay/{}.md'.format(lang,overlay)) data = markjaml.load('src/{}/overlay/{}.md'.format(lang, overlay))
loaded = data['data'] loaded = data['data']
except IOError: except IOError:
return None return None
details = [] details = []
if 'manufacturer' in loaded: if 'manufacturer' in loaded:
details.append('* Made by ' + loaded['manufacturer']) details.append('* Made by ' + loaded['manufacturer'])
if 'pincount' in loaded: if 'pincount' in loaded:
pincount = int(loaded['pincount']) pincount = int(loaded['pincount'])
if pincount == 40: if pincount == 40:
details.append('* HAT form-factor') details.append('* HAT form-factor')
elif pincount == 26: elif pincount == 26:
details.append('* Classic 26-pin') details.append('* Classic 26-pin')
else: else:
details.append('* {} pin header'.format(pincount)) details.append('* {} pin header'.format(pincount))
if 'pin' in loaded: if 'pin' in loaded:
uses_5v = False uses_5v = False
uses_3v = False uses_3v = False
uses = 0 uses = 0
for pin in loaded['pin']: for pin in loaded['pin']:
pin = str(pin) pin = str(pin)
if pin.startswith('bcm'): if pin.startswith('bcm'):
pin = pinout.bcm_to_physical(pin[3:]) pin = pinout.bcm_to_physical(pin[3:])
if pin in pinout.pins: if pin in pinout.pins:
actual_pin = pinout.pins[pin] actual_pin = pinout.pins[pin]
if actual_pin['type'] in ['+3v3','+5v','GND']: if actual_pin['type'] in ['+3v3', '+5v', 'GND']:
if actual_pin['type'] == '+3v3': if actual_pin['type'] == '+3v3':
uses_3v = True uses_3v = True
if actual_pin['type'] == '+5v': if actual_pin['type'] == '+5v':
uses_5v = True uses_5v = True
else: else:
uses += 1 uses += 1
if uses > 0: if uses > 0:
details.append('* Uses {} GPIO pins'.format(uses)) details.append('* Uses {} GPIO pins'.format(uses))
if '3' in loaded['pin'] and '5' in loaded['pin']: if '3' in loaded['pin'] and '5' in loaded['pin']:
pin_3 = loaded['pin']['3'] pin_3 = loaded['pin']['3']
pin_5 = loaded['pin']['5'] pin_5 = loaded['pin']['5']
if 'mode' in pin_3 and 'mode' in pin_5: if 'mode' in pin_3 and 'mode' in pin_5:
if pin_3['mode'] == 'i2c' and pin_5['mode'] == 'i2c': if pin_3['mode'] == 'i2c' and pin_5['mode'] == 'i2c':
details.append('* Uses I2C') details.append('* Uses I2C')
if 'url' in loaded: if 'url' in loaded:
details.append('* [More Information]({url})'.format(url=loaded['url'])) details.append('* [More Information]({url})'.format(url=loaded['url']))
if 'github' in loaded: if 'github' in loaded:
details.append('* [GitHub Repository]({url})'.format(url=loaded['github'])) details.append('* [GitHub Repository]({url})'.format(url=loaded['github']))
if 'buy' in loaded: if 'buy' in loaded:
details.append('* [Buy Now]({url})'.format(url=loaded['buy'])) details.append('* [Buy Now]({url})'.format(url=loaded['buy']))
if not 'page_url' in loaded: if not 'page_url' in loaded:
loaded['page_url'] = slugify(loaded['name']) loaded['page_url'] = slugify(loaded['name'])
pages[loaded['page_url']] = loaded
return loaded
pages[loaded['page_url']] = loaded
return loaded
def load_md(filename): def load_md(filename):
filename = 'src/{}/{}'.format(lang, filename) filename = 'src/{}/{}'.format(lang, filename)
try: try:
html = markdown.markdown(open(filename).read(), extensions=['fenced_code']) html = markdown.markdown(open(filename).read(), extensions=['fenced_code'])
return html return html
except IOError: except IOError:
print('Unable to load markdown from {}'.format(filename)) print('Unable to load markdown from {}'.format(filename))
return '' return ''
overlays = map(load_overlay,overlays)
overlays = map(load_overlay, overlays)
print(json.dumps(overlays)) print(json.dumps(overlays))

View File

@ -4,6 +4,7 @@ import yaml
import re import re
import unicodedata import unicodedata
def slugify(value): def slugify(value):
""" """
Normalizes string, converts to lowercase, removes non-alpha characters, Normalizes string, converts to lowercase, removes non-alpha characters,
@ -14,42 +15,43 @@ def slugify(value):
value = re.sub('[^\w\s-]', '-', value).strip().lower() value = re.sub('[^\w\s-]', '-', value).strip().lower()
return re.sub('[-\s]+', '-', value) return re.sub('[-\s]+', '-', value)
def load(file): def load(file):
''' '''
Loads and parses JSON-embedded Markdown file, chopping out and Loads and parses JSON-embedded Markdown file, chopping out and
parsing any JSON contained therein. parsing any JSON contained therein.
Returns an object that includes the JSON data, and the parsed HTML. Returns an object that includes the JSON data, and the parsed HTML.
''' '''
markson = open(file).read() markson = open(file).read()
_data = re.search(re.compile(r'<!--(JSON:|\n---\n)(.*)-->', re.DOTALL),markson) _data = re.search(re.compile(r'<!--(JSON:|\n---\n)(.*)-->', re.DOTALL), markson)
_markdown = re.sub(re.compile(r'<!--(JSON:|\n---\n)(.*)-->', re.DOTALL),'',markson) _markdown = re.sub(re.compile(r'<!--(JSON:|\n---\n)(.*)-->', re.DOTALL), '', markson)
_html = markdown.markdown(_markdown, extensions=['fenced_code']) _html = markdown.markdown(_markdown, extensions=['fenced_code'])
# Scan for the Title in the Markdown file, this is always assumed # Scan for the Title in the Markdown file, this is always assumed
# to be the first string starting with a single hash/pound ( # ) sign # to be the first string starting with a single hash/pound ( # ) sign
_title = re.search(re.compile(r'^#[^\#](.*)$', re.MULTILINE),markson) _title = re.search(re.compile(r'^#[^\#](.*)$', re.MULTILINE), markson)
if _title != None: if _title != None:
_title = _title.group(0).replace('#','').strip() _title = _title.group(0).replace('#', '').strip()
if _data != None: if _data != None:
_type = _data.group(0)[4:8].upper().strip() _type = _data.group(0)[4:8].upper().strip()
if _type == 'JSON': if _type == 'JSON':
_data = re.search('\{(.*)\}',_data.group(0),re.DOTALL).group(0) _data = re.search('\{(.*)\}', _data.group(0), re.DOTALL).group(0)
_data = json.loads(_data) _data = json.loads(_data)
elif _type == '---': elif _type == '---':
_data = re.search('\n(.*)\n',_data.group(0),re.DOTALL).group(0) _data = re.search('\n(.*)\n', _data.group(0), re.DOTALL).group(0)
_data = yaml.load(_data) _data = yaml.load(_data)
else: else:
data = {} data = {}
_data['title'] = _title _data['title'] = _title
elif _title != None: elif _title != None:
_data = {'title':_title} _data = {'title':_title}
return {'data':_data, 'html':_html} return {'data':_data, 'html':_html}

View File

@ -8,11 +8,13 @@ SETTINGS_FILE = 'settings.yaml'
pins = None pins = None
settings = None settings = None
def get_setting(setting, default = None): def get_setting(setting, default = None):
if setting in settings and settings[setting] != None: if setting in settings and settings[setting] != None:
return settings[setting] return settings[setting]
return default return default
def render_html(*args, **kwargs): def render_html(*args, **kwargs):
html = args[0] html = args[0]
kwargs['v'] = str(int(time.time())) kwargs['v'] = str(int(time.time()))
@ -20,6 +22,7 @@ def render_html(*args, **kwargs):
html = html.replace('{{' + key + '}}', kwargs[key]) html = html.replace('{{' + key + '}}', kwargs[key])
return html return html
def bcm_to_physical(pin): def bcm_to_physical(pin):
for idx in pins: for idx in pins:
compare_pin = pins[idx] compare_pin = pins[idx]
@ -29,6 +32,7 @@ def bcm_to_physical(pin):
#print("Mapping BCM{} to {}".format(pin, str(idx))) #print("Mapping BCM{} to {}".format(pin, str(idx)))
return str(idx) return str(idx)
def physical_to_bcm(pin): def physical_to_bcm(pin):
pin = pins[pin] pin = pins[pin]
if 'scheme' in pin: if 'scheme' in pin:
@ -36,6 +40,7 @@ def physical_to_bcm(pin):
return str(pin['scheme']['bcm']) return str(pin['scheme']['bcm'])
return None return None
def physical_to_wiringpi(pin): def physical_to_wiringpi(pin):
pin = pins[pin] pin = pins[pin]
if 'scheme' in pin: if 'scheme' in pin:
@ -43,8 +48,9 @@ def physical_to_wiringpi(pin):
return str(pin['scheme']['wiringpi']) return str(pin['scheme']['wiringpi'])
return None return None
def physical_to(pin, scheme='bcm'): def physical_to(pin, scheme='bcm'):
if scheme in ['bcm','wiringpi']: if scheme in ['bcm', 'wiringpi']:
pin = pins[pin] pin = pins[pin]
if 'scheme' in pin: if 'scheme' in pin:
if scheme in pin['scheme']: if scheme in pin['scheme']:
@ -53,16 +59,17 @@ def physical_to(pin, scheme='bcm'):
return pin return pin
return None return None
def load(lang='en'): def load(lang='en'):
global pins, settings global pins, settings
if DB_FILE.endswith('.yaml'): 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: else:
db = json.load(open('src/{}/{}'.format(lang,DB_FILE))) db = json.load(open('src/{}/{}'.format(lang, DB_FILE)))
if SETTINGS_FILE.endswith('.yaml'): 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: else:
settings = json.load(open('src/{}/{}'.format(lang,SETTINGS_FILE))) settings = json.load(open('src/{}/{}'.format(lang, SETTINGS_FILE)))
pins = db['pins'] pins = db['pins']

View File

@ -5,23 +5,27 @@ app = Flask(__name__)
lang = 'en' lang = 'en'
@app.route('/') @app.route('/')
def show_index(): def show_index():
return send_from_directory(basedir,'index.html') return send_from_directory(basedir, 'index.html')
@app.route("/resources/<path:filename>") @app.route("/resources/<path:filename>")
def custom_static(filename): def custom_static(filename):
return send_from_directory(basedir + 'resources/', filename) return send_from_directory(basedir + 'resources/', filename)
@app.route("/<path:page>") @app.route("/<path:page>")
def show_page(page): def show_page(page):
return send_from_directory(basedir,'{}.html'.format(page)) return send_from_directory(basedir, '{}.html'.format(page))
if __name__ == "__main__": if __name__ == "__main__":
if len(sys.argv) > 1: if len(sys.argv) > 1:
lang = 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)

View File

@ -32,6 +32,7 @@ comment_prefix = {
'c': '//' 'c': '//'
} }
def slugify(value): def slugify(value):
""" """
Normalizes string, converts to lowercase, removes non-alpha characters, Normalizes string, converts to lowercase, removes non-alpha characters,
@ -39,11 +40,12 @@ def slugify(value):
""" """
value = unicode(value) value = unicode(value)
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii') value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
value = value.replace('+','PLUS') value = value.replace('+', 'PLUS')
value = value.replace('-','MINUS') value = value.replace('-', 'MINUS')
value = re.sub('[^\w\s-]', '', value).strip().lower() value = re.sub('[^\w\s-]', '', value).strip().lower()
return re.sub('[-\s]+', '_', value) return re.sub('[-\s]+', '_', value)
def bcm_to_physical(pin): def bcm_to_physical(pin):
pin = pin[3:] pin = pin[3:]
for idx in pins: for idx in pins:
@ -54,6 +56,7 @@ def bcm_to_physical(pin):
print("Mapping BCM{} to {}".format(pin, str(idx))) print("Mapping BCM{} to {}".format(pin, str(idx)))
return str(idx) return str(idx)
def physical_to_bcm(pin): def physical_to_bcm(pin):
pin = pins[pin] pin = pins[pin]
if 'scheme' in pin: if 'scheme' in pin:
@ -61,6 +64,7 @@ def physical_to_bcm(pin):
return str(pin['scheme']['bcm']) return str(pin['scheme']['bcm'])
return None return None
def physical_to_wiringpi(pin): def physical_to_wiringpi(pin):
pin = pins[pin] pin = pins[pin]
if 'scheme' in pin: if 'scheme' in pin:
@ -68,8 +72,9 @@ def physical_to_wiringpi(pin):
return str(pin['scheme']['wiringpi']) return str(pin['scheme']['wiringpi'])
return None return None
def physical_to(pin, scheme='bcm'): def physical_to(pin, scheme='bcm'):
if scheme in ['bcm','wiringpi']: if scheme in ['bcm', 'wiringpi']:
pin = pins[pin] pin = pins[pin]
if 'scheme' in pin: if 'scheme' in pin:
if scheme in pin['scheme']: if scheme in pin['scheme']:
@ -78,24 +83,26 @@ def physical_to(pin, scheme='bcm'):
return pin return pin
return None return None
db = json.load(open('../src/{}/pi-pinout.json'.format(lang)))
pins = db['pins']
define = {}
keys = []
def add_define(key, value): def add_define(key, value):
global keys, define global keys, define
keys.append(key) keys.append(key)
define[key] = value define[key] = value
db = json.load(open('../src/{}/pi-pinout.json'.format(lang)))
pins = db['pins']
define = {}
keys = []
if len(sys.argv) >= 3: if len(sys.argv) >= 3:
overlay_file = sys.argv[1] overlay_file = sys.argv[1]
pin_scheme = sys.argv[2] pin_scheme = sys.argv[2]
output_lang = sys.argv[3] 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: if 'i2c' in overlay:
for addr in overlay['i2c']: for addr in overlay['i2c']:
@ -129,7 +136,7 @@ if len(sys.argv) >= 3:
board_name = board_name, board_name = board_name,
name = name name = name
) )
row_length = max(len(key),row_length) row_length = max(len(key), row_length)
for name in keys: for name in keys:
@ -137,9 +144,9 @@ if len(sys.argv) >= 3:
board_name = board_name, board_name = board_name,
name = name name = name
) )
value = value_template[output_lang].format(value = define[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) print(key+value)

View File

@ -10,6 +10,7 @@ import os
reload(sys) reload(sys)
sys.setdefaultencoding('utf8') sys.setdefaultencoding('utf8')
def url_slugify(value): def url_slugify(value):
""" """
Normalizes string, converts to lowercase, removes non-alpha characters, 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() value = re.sub('[^\w\s-]', '', value).strip().lower()
return re.sub('[-\s]+', '_', value) return re.sub('[-\s]+', '_', value)
def load_overlay_url(overlay, lang): def load_overlay_url(overlay, lang):
try: try:
data = markjaml.load('src/{}/overlay/{}.md'.format(lang,overlay)) data = markjaml.load('src/{}/overlay/{}.md'.format(lang, overlay))
loaded = data['data'] loaded = data['data']
except IOError: except IOError:
return None return None
if not 'page_url' in loaded: if not 'page_url' in loaded:
loaded['page_url'] = url_slugify(loaded['name']) 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': def get_pin_url(pin_num, pinout):
return None pin = pinout.pins[str(pin_num)]
pin_url = pin['name']
if 'scheme' in pin: if pin_url == 'Ground':
if 'bcm' in pin['scheme']: return None
bcm = pin['scheme']['bcm']
pin_url = 'gpio{}'.format(bcm) 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"): 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): for pin in range(1, len(pinout.pins)+1):
pin_url = get_pin_url(pin,pinout) pin_url = get_pin_url(pin, pinout)
if pin_url is None: if pin_url is None:
continue 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: for url in overlays:
if url is None: if url is None:
continue 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"): 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 languages = [l.replace('src/', '') for l in glob.glob('src/??') if os.path.isdir(l)] # if not l == 'src/'+lang
urls = {} urls = {}
for lang in languages: for lang in languages:
urls[lang] = generate_for_lang(lang) urls[lang] = generate_for_lang(lang)
return urls return urls