configure local testing

pull/2/head
Yax 3 years ago
parent d0871c53cd
commit 40d1c7a867

1
.gitignore vendored

@ -8,3 +8,4 @@ htmlcov
venv venv
.vscode .vscode
posts/images posts/images
.idea/

@ -4,7 +4,10 @@ site:
serve: site serve: site
cd _site && python -m SimpleHTTPServer 2> /dev/null || python3 -m http.server cd _site && python -m SimpleHTTPServer 2> /dev/null || python3 -m http.server
dock: site site_local:
./makesite.py --params params-local.json
dock: site_local
docker run --name bloglocal -p 8000:8000 -v `pwd`/_site:/usr/share/nginx/html:ro -v `pwd`/local-nginx.conf:/etc/nginx/nginx.conf:ro nginx docker run --name bloglocal -p 8000:8000 -v `pwd`/_site:/usr/share/nginx/html:ro -v `pwd`/local-nginx.conf:/etc/nginx/nginx.conf:ro nginx
undock: undock:
@ -34,49 +37,4 @@ clean:
find . -name "*.pyc" -exec rm {} + find . -name "*.pyc" -exec rm {} +
rm -rf .coverage htmlcov rm -rf .coverage htmlcov
REV = cat /tmp/rev.txt
example:
#
# Remove existing output directories.
rm -rf _site /tmp/_site
#
# Create params.json for makesite-demo.
echo '{ "base_path": "/makesite-demo", "site_url":' \
'"https://tmug.github.io/makesite-demo" }' > params.json
#
# Generate the website.
. ./venv && ./makesite.py
rm params.json
#
# Get current commit ID.
git rev-parse --short HEAD > /tmp/rev.txt
#
# Write a README for makesite-demo repository.
echo makesite.py demo > _site/README.md
echo ================ >> _site/README.md
echo This is the HTML/CSS source of an example static >> _site/README.md
echo website auto-generated with [sunainapai/makesite][makesite] >> _site/README.md
echo "([$$($(REV))][commit])". >> _site/README.md
echo >> _site/README.md
echo Visit "<https://tmug.github.io/makesite-demo>" to >> _site/README.md
echo view the example website. >> _site/README.md
echo >> _site/README.md
echo [makesite]: https://github.com/sunainapai/makesite >> _site/README.md
echo [commit]: https://github.com/sunainapai/makesite/commit/$$($(REV)) >> _site/README.md
echo [demo]: https://tmug.github.io/makesite-demo >> _site/README.md
#
# Publish makesite-demo.
mv _site /tmp
cd /tmp/_site && git init
cd /tmp/_site && git config user.name Makesite
cd /tmp/_site && git config user.email makesite@example.com
cd /tmp/_site && git add .
cd /tmp/_site && git commit -m "Auto-generated with sunainapai/makesite - $$($(REV))"
cd /tmp/_site && git remote add origin https://github.com/tmug/makesite-demo.git
cd /tmp/_site && git log
cd /tmp/_site && git push -f origin master
loc:
grep -vE '^[[:space:]]*#|^[[:space:]]*$$|^[[:space:]]*"""' makesite.py | wc -l
FORCE: FORCE:

@ -27,35 +27,36 @@
"""Make static website/blog with Python.""" """Make static website/blog with Python."""
import sys import argparse
import datetime
import json
import locale
import os import os
import shutil
import re import re
import glob import shutil
import json import sys
import datetime
import time import time
import unicodedata
from email import utils from email import utils
from pathlib import Path from pathlib import Path
import unicodedata
import locale
import requests
import mistune import mistune
import requests
from pygments import highlight from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import html from pygments.formatters import html
from pygments.lexers import get_lexer_by_name
# set user locale # set user locale
locale.setlocale(locale.LC_ALL, "") locale.setlocale(locale.LC_ALL, "")
# initialize markdown # initialize markdown
class HighlightRenderer(mistune.Renderer): class HighlightRenderer(mistune.Renderer):
options = {"escape": False, "hard_wrap": True} options = {"escape": False, "hard_wrap": True}
def block_code(self, code, lang): def block_code(self, code, lang=None):
if not lang: if not lang:
return "\n<pre><code>%s</code></pre>\n" % mistune.escape(code) return "\n<pre><code>%s</code></pre>\n" % mistune.escape(code)
lexer = get_lexer_by_name(lang, stripall=True) lexer = get_lexer_by_name(lang, stripall=True)
@ -202,7 +203,7 @@ def get_friendly_date(date_str):
def make_posts( def make_posts(
src, src_pattern, dst, layout, category_layout, comment_layout, comment_detail_layout, **params src, src_pattern, dst, layout, category_layout, comment_layout, comment_detail_layout, **params
): ):
"""Generate posts from posts directory.""" """Generate posts from posts directory."""
items = [] items = []
@ -250,13 +251,13 @@ def make_posts(
if params["stacosys_url"] and is_page_comment_enabled: if params["stacosys_url"] and is_page_comment_enabled:
req_url = params["stacosys_url"] + "/comments" req_url = params["stacosys_url"] + "/comments"
query_params = dict( query_params = dict(
url="/" + page_params["post_url"] url="/" + page_params["post_url"]
) )
resp = requests.get(url=req_url, params=query_params) resp = requests.get(url=req_url, params=query_params)
comments = resp.json()["data"] comments = resp.json()["data"]
out_comments = [] out_comments = []
for comment in comments: for comment in comments:
site=comment.get("site", "") site = comment.get("site", "")
if site: if site:
site_start = '<a href="' + site + '">' site_start = '<a href="' + site + '">'
site_end = '</a>' site_end = '</a>'
@ -296,7 +297,7 @@ def make_posts(
def make_list( def make_list(
posts, dst, list_layout, item_layout, header_layout, footer_layout, **params posts, dst, list_layout, item_layout, header_layout, footer_layout, **params
): ):
"""Generate list page for a blog.""" """Generate list page for a blog."""
@ -323,7 +324,7 @@ def make_list(
item_params["comment_label"] = "1 commentaire" item_params["comment_label"] = "1 commentaire"
else: else:
item_params["comment_label"] = ( item_params["comment_label"] = (
str(item_params["comment_count"]) + " commentaires" str(item_params["comment_count"]) + " commentaires"
) )
else: else:
item_params["comment_label"] = "" item_params["comment_label"] = ""
@ -337,7 +338,7 @@ def make_list(
fwrite(dst_path, output) fwrite(dst_path, output)
def main(): def main(param_file):
# Create a new _site directory from scratch. # Create a new _site directory from scratch.
if os.path.isdir("_site"): if os.path.isdir("_site"):
shutil.rmtree("_site") shutil.rmtree("_site")
@ -349,13 +350,13 @@ def main():
"subtitle": "Lorem Ipsum", "subtitle": "Lorem Ipsum",
"author": "Admin", "author": "Admin",
"site_url": "http://localhost:8000", "site_url": "http://localhost:8000",
"current_year": datetime.datetime.now().year, "current_year": datetime.datetime.now().year,
"stacosys_url": "", "stacosys_url": "",
} }
# If params.json exists, load it. log("use params from " + param_file)
if os.path.isfile("params.json"): if os.path.isfile(param_file):
params.update(json.loads(fread("params.json"))) params.update(json.loads(fread(param_file)))
# Load layouts. # Load layouts.
banner_layout = fread("layout/banner.html") banner_layout = fread("layout/banner.html")
@ -394,7 +395,7 @@ def main():
# Create blog list pages. # Create blog list pages.
page_size = 10 page_size = 10
chunk_posts = [ chunk_posts = [
blog_posts[i : i + page_size] for i in range(0, len(blog_posts), page_size) blog_posts[i: i + page_size] for i in range(0, len(blog_posts), page_size)
] ]
page = 1 page = 1
last_page = len(chunk_posts) last_page = len(chunk_posts)
@ -429,17 +430,17 @@ def main():
page = page + 1 page = page + 1
# Create category pages # Create category pages
catpost = {} cat_post = {}
for post in blog_posts: for post in blog_posts:
for cat in post["categories"]: for cat in post["categories"]:
if cat in catpost: if cat in cat_post:
catpost[cat].append(post) cat_post[cat].append(post)
else: else:
catpost[cat] = [post] cat_post[cat] = [post]
for cat in catpost.keys(): for cat in cat_post.keys():
params["category"] = cat params["category"] = cat
make_list( make_list(
catpost[cat], cat_post[cat],
"_site/" + slugify(cat) + "/index.html", "_site/" + slugify(cat) + "/index.html",
list_layout, list_layout,
item_nosummary_layout, item_nosummary_layout,
@ -472,17 +473,17 @@ def main():
) )
# Create RSS feed by tag # Create RSS feed by tag
tagpost = {} tag_post = {}
for post in blog_posts: for post in blog_posts:
for tag in post["tags"]: for tag in post["tags"]:
if tag in tagpost: if tag in tag_post:
tagpost[tag].append(post) tag_post[tag].append(post)
else: else:
tagpost[tag] = [post] tag_post[tag] = [post]
for tag in tagpost.keys(): for tag in tag_post.keys():
params["tag"] = tag params["tag"] = tag
make_list( make_list(
tagpost[tag], tag_post[tag],
"_site/rss." + slugify(tag) + ".xml", "_site/rss." + slugify(tag) + ".xml",
rss_xml, rss_xml,
rss_item_xml, rss_item_xml,
@ -506,6 +507,8 @@ def main():
# Test parameter to be set temporarily by unit tests. # Test parameter to be set temporarily by unit tests.
_test = None _test = None
if __name__ == "__main__": if __name__ == "__main__":
main() parser = argparse.ArgumentParser(description='Makesite')
parser.add_argument('--params', dest='param_file', type=str, default="params.json", help='Custom param file')
args = parser.parse_args()
main(args.param_file)

@ -3,15 +3,17 @@
import sys import sys
import os import os
import requests import requests
import time import time
import json import json
def fread(filename): def fread(filename):
"""Read file and close the file.""" """Read file and close the file."""
with open(filename, "r") as f: with open(filename, "r") as f:
return f.read() return f.read()
def get_nb_of_comments(): def get_nb_of_comments():
req_url = params["stacosys_url"] + "/comments/count" req_url = params["stacosys_url"] + "/comments/count"
query_params = dict( query_params = dict(
@ -20,9 +22,11 @@ def get_nb_of_comments():
resp = requests.get(url=req_url, params=query_params) resp = requests.get(url=req_url, params=query_params)
return 0 if not resp.ok else int(resp.json()["count"]) return 0 if not resp.ok else int(resp.json()["count"])
def exit_program(): def exit_program():
sys.exit(0) sys.exit(0)
# Default parameters. # Default parameters.
params = { params = {
"stacosys_token": "", "stacosys_token": "",

@ -0,0 +1,8 @@
{
"title": "Le blog du Yax",
"subtitle": "GNU, Linux, BSD et autres libertés",
"author": "Yax",
"site_url": "http://127.0.0.1:8000",
"stacosys_url": "http://127.0.0.1:8100",
"external_check": "./check_git.sh"
}
Loading…
Cancel
Save