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

View File

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

View File

@ -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'<!--(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)
_html = markdown.markdown(_markdown, extensions=['fenced_code'])
_markdown = re.sub(re.compile(r'<!--(JSON:|\n---\n)(.*)-->', 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}
return {'data':_data, 'html':_html}

View File

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

View File

@ -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/<path:filename>")
def custom_static(filename):
return send_from_directory(basedir + 'resources/', filename)
return send_from_directory(basedir + 'resources/', filename)
@app.route("/<path: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 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)

View File

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

View File

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