mirror of
https://github.com/pinout-xyz/Pinout.xyz.git
synced 2024-11-08 17:47:04 +00:00
140 lines
3.7 KiB
Python
140 lines
3.7 KiB
Python
import json
|
|
import time
|
|
import os
|
|
|
|
try:
|
|
import yaml
|
|
except ImportError:
|
|
exit("This script requires the yaml module\nInstall with: sudo pip install PyYAML")
|
|
|
|
try:
|
|
unicode('')
|
|
except NameError:
|
|
unicode = str
|
|
|
|
BUILD_ID = str(int(time.time()))
|
|
PINOUT_FILE = 'pinout.yaml'
|
|
SETTINGS_FILE = 'settings.yaml'
|
|
STRINGS_FILE = 'localised.yaml'
|
|
|
|
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
|
|
|
|
pins = None
|
|
settings = None
|
|
|
|
master_template = open(os.path.join(BASE_DIR, 'common/layout.html')).read()
|
|
twitter_template = open(os.path.join(BASE_DIR, 'common/twittercard.html')).read()
|
|
|
|
|
|
def get_setting(setting, default=None):
|
|
if setting in settings and settings[setting] is not None:
|
|
return settings[setting]
|
|
return default
|
|
|
|
|
|
def get_string(string, default=None):
|
|
if string in strings and strings[string] is not None:
|
|
return strings[string]
|
|
return default
|
|
|
|
|
|
def render_html(*args, **kwargs):
|
|
html = master_template
|
|
html = html.replace('{{main_content}}', args[0])
|
|
html = html.replace('{{footer}}', args[1])
|
|
|
|
if "twittercard" in kwargs:
|
|
if kwargs["twittercard"]:
|
|
html = html.replace('{{twittercard}}', twitter_template)
|
|
|
|
html = html.replace('{{twittercard}}', "")
|
|
|
|
strings = args[2]
|
|
|
|
for key in strings:
|
|
if type(strings[key]) in [str, unicode]:
|
|
html = html.replace('{{strings:' + key + '}}', strings[key])
|
|
|
|
settings = args[3]
|
|
|
|
for key in settings:
|
|
if type(settings[key]) in [str, unicode]:
|
|
html = html.replace('{{settings:' + key + '}}', settings[key])
|
|
|
|
kwargs['v'] = BUILD_ID
|
|
|
|
for key in kwargs:
|
|
if type(kwargs[key]) == dict:
|
|
for (d_key, d_value) in kwargs[key].items():
|
|
html = html.replace('{{' + key + '_' + d_key + '}}', d_value)
|
|
elif type(kwargs[key]) in [str, unicode]:
|
|
html = html.replace('{{' + key + '}}', kwargs[key])
|
|
|
|
return html
|
|
|
|
|
|
def bcm_to_physical(pin):
|
|
return physical_from(pin, 'bcm')
|
|
|
|
|
|
def wiringpi_to_physical(pin):
|
|
return physical_from(pin, 'wiringpi')
|
|
|
|
|
|
def physical_from(pin, scheme='bcm'):
|
|
if scheme in ['bcm', 'wiringpi']:
|
|
for idx in pins:
|
|
compare_pin = pins[idx]
|
|
if 'scheme' in compare_pin:
|
|
if scheme in compare_pin['scheme']:
|
|
if compare_pin['scheme'][scheme] == int(pin):
|
|
# print("Mapping {}{} to {}".format(scheme, pin, str(idx)))
|
|
return str(idx)
|
|
elif scheme == 'physical':
|
|
return pin
|
|
return None
|
|
|
|
|
|
def physical_to_bcm(pin):
|
|
return physical_to(pin, 'bcm')
|
|
|
|
|
|
def physical_to_wiringpi(pin):
|
|
return physical_to(pin, 'wiringpi')
|
|
|
|
|
|
def physical_to(pin, scheme='bcm'):
|
|
if scheme in ['bcm', 'wiringpi']:
|
|
pin = pins[pin]
|
|
if 'scheme' in pin:
|
|
if scheme in pin['scheme']:
|
|
return str(pin['scheme'][scheme])
|
|
elif scheme == 'physical':
|
|
return pin
|
|
return None
|
|
|
|
|
|
def load(lang='en'):
|
|
global pins, settings, strings
|
|
|
|
settings_path = os.path.join(BASE_DIR, 'src/{}/{}'.format(lang, SETTINGS_FILE))
|
|
strings_path = os.path.join(BASE_DIR, 'src/{}/template/{}'.format(lang, STRINGS_FILE))
|
|
pinout_path = os.path.join(BASE_DIR, 'src/{}/template/{}'.format(lang, PINOUT_FILE))
|
|
|
|
if SETTINGS_FILE.endswith('.yaml'):
|
|
settings = yaml.safe_load(open(settings_path).read())
|
|
else:
|
|
settings = json.load(open(settings_path))
|
|
|
|
if STRINGS_FILE.endswith('.yaml'):
|
|
strings = yaml.safe_load(open(strings_path).read())
|
|
else:
|
|
strings = json.load(open(strings_path))
|
|
|
|
if PINOUT_FILE.endswith('.yaml'):
|
|
pinout = yaml.safe_load(open(pinout_path).read())
|
|
else:
|
|
pinout = json.load(open(pinout_path))
|
|
|
|
pins = pinout['pins']
|