pinout.vvzero.com/api/mkindexjson.py

96 lines
2.2 KiB
Python
Raw Normal View History

2017-11-23 06:55:22 +08:00
#!/usr/bin/env python
import json
import re
import sys
2020-08-20 20:30:33 +08:00
import glob
2017-11-23 06:55:22 +08:00
import unicodedata
2019-01-29 04:11:26 +08:00
sys.path.insert(0, "../")
2020-08-20 20:30:33 +08:00
BASE_DIR = "../"
2019-01-29 04:11:26 +08:00
2017-11-23 06:55:22 +08:00
try:
import markdown
except ImportError:
exit("This script requires the psutil module\nInstall with: sudo pip install Markdown")
import markjaml
import pinout
reload(sys)
sys.setdefaultencoding('utf8')
lang = "en"
if len(sys.argv) > 1:
lang = sys.argv[1]
pinout.load(lang)
2020-08-20 20:30:33 +08:00
overlays = glob.glob("{}src/{}/overlay/*.md".format(BASE_DIR, lang))
2017-11-23 06:55:22 +08:00
pages = {}
def cssify(value):
value = slugify(value)
if value[0] == '3' or value[0] == '5':
value = 'pow' + value
return value
def slugify(value):
"""
Normalizes string, converts to lowercase, removes non-alpha characters,
and converts spaces to hyphens.
"""
value = unicode(value)
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
value = re.sub('[^\w\s-]', '', value).strip().lower()
return re.sub('[-\s]+', '_', value)
def pimoroni_get_shop_handle(slug):
"""Maps a Pinout.xyz slug to a Pimoroni shop handle
This is a customisation for shop.pimoroni.com which probably
wont be of use in any other context.
"""
pimoroni_shop_handles = {
'unicorn_hat': 'unicorn-hat'
}
if slug in pimoroni_shop_handles:
return pimoroni_shop_handles[slug]
return None
def load_overlay(overlay):
try:
2020-08-20 20:30:33 +08:00
data = markjaml.load(overlay)['data']
2017-11-23 06:55:22 +08:00
slug = slugify(data['name'])
return {
'name': data['name'],
'class': data['class'],
'detail': "/v1/detail/{}.json".format(slug),
'url': "/pinout/{}".format(slug),
#'pimoroni.shop-handle': pimoroni_get_shop_handle(slug)
}
except IOError:
return None
def load_md(filename):
2019-01-29 04:11:26 +08:00
filename = '../src/{}/{}'.format(lang, filename)
2017-11-23 06:55:22 +08:00
try:
html = markdown.markdown(open(filename).read(), extensions=['fenced_code'])
return html
except IOError:
print('Unable to load markdown from {}'.format(filename))
return ''
overlays = map(load_overlay, overlays)
print(json.dumps(overlays, sort_keys=True))