publik-base-theme/templates/variants/villeurbanne-2018/prepare-template.py

108 lines
3.2 KiB
Python

#! /usr/bin/env python
import subprocess
import sys
from lxml import etree
from lxml.html import HTMLParser
from urlparse import urljoin
html_parser = HTMLParser(encoding='utf-8')
# platform to synchronize should be specified in parameter
if len(sys.argv) > 1:
PLATFORM_BASE_URL = sys.argv[1]
else:
PLATFORM_BASE_URL = 'https://test.villeurbanne.fr/'
HEAD_URL = urljoin(PLATFORM_BASE_URL, 'publik/get/head')
HEADER_URL = urljoin(PLATFORM_BASE_URL, 'publik/get/header')
FOOTER_URL = urljoin(PLATFORM_BASE_URL, 'publik/get/footer')
BANNER_URL = urljoin(PLATFORM_BASE_URL, 'publik/get/banner')
JS_URL = urljoin(PLATFORM_BASE_URL, 'build/publik/publik-app.js')
HEAD_FILENAME = 'head.html'
HEADER_FILENAME = 'header.html'
FOOTER_FILENAME = 'footer.html'
BANNER_FILENAME = 'banner.html'
subprocess.call(['wget', '--quiet', '-O', HEAD_FILENAME, '--convert-links', HEAD_URL])
head_content = open(HEAD_FILENAME).read().strip()
head_content = head_content.replace(HEAD_FILENAME, '')
root = etree.fromstring(head_content, parser=html_parser)
# remove external undesired elements
elements = ['font-awesome']
for link in root.xpath('//link'):
for element in elements:
if element in link.attrib['href']:
parent = link.getparent()
parent.remove(link)
external_js = '<script type="text/javascript" src="%s"></script>' % JS_URL
head_content = etree.tostring(root, method='html')
# remove closing <html> because it will be closed later
head_content = head_content.replace('</html>', '')
head_content = head_content.replace(
'</head>',
external_js
+ '''
{% block head %}{% endblock %}
<title>{% block global_title %}{% endblock %}</title>
</head>''',
)
subprocess.call(['wget', '--quiet', '-O', HEADER_FILENAME, '--convert-links', HEADER_URL])
header_content = open(HEADER_FILENAME).read().strip()
header_content = header_content.replace(HEADER_FILENAME, '')
root = etree.fromstring(header_content, parser=html_parser)
for link in root.xpath('//li[@class="compte"]'):
for child in link:
link.remove(child)
link.text = "{% block user-info %}{% endblock %}"
header_content = etree.tostring(root, method='html')
subprocess.call(['wget', '--quiet', '-O', BANNER_FILENAME, '--convert-links', BANNER_URL])
banner_content = open(BANNER_FILENAME).read().strip()
banner_content = banner_content.replace(BANNER_FILENAME, '')
publik_content = '''<div class="publik-container">
{% block nav %}{% endblock %}
{% block site-content %}
{% block messages %}
{% endblock %}
{% endblock %}
</div>'''
subprocess.call(['wget', '--quiet', '-O', FOOTER_FILENAME, '--convert-links', FOOTER_URL])
footer_content = open(FOOTER_FILENAME).read().strip()
footer_content = footer_content.replace(FOOTER_FILENAME, '')
publik_footer = '''<div id="footer-wrapper">
<div id="footer">
{% block footer %}
{% endblock %}
</div>
</div>'''
content = '\n'.join(
[
head_content,
'<body {% block bodyargs %}{% endblock %}>',
header_content,
banner_content,
publik_content,
publik_footer,
footer_content,
'{% block tracking %}{% endblock %}',
'</body>',
'</html>',
]
)
open('base-theme.html', 'w').write(content)