configure local testing
This commit is contained in:
parent
d0871c53cd
commit
40d1c7a867
5 changed files with 58 additions and 84 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -8,3 +8,4 @@ htmlcov
|
||||||
venv
|
venv
|
||||||
.vscode
|
.vscode
|
||||||
posts/images
|
posts/images
|
||||||
|
.idea/
|
50
Makefile
50
Makefile
|
@ -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:
|
||||||
|
|
77
makesite.py
77
makesite.py
|
@ -27,35 +27,36 @@
|
||||||
|
|
||||||
"""Make static website/blog with Python."""
|
"""Make static website/blog with Python."""
|
||||||
|
|
||||||
import sys
|
import argparse
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import re
|
|
||||||
import glob
|
|
||||||
import json
|
|
||||||
import datetime
|
import datetime
|
||||||
|
import json
|
||||||
|
import locale
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
|
import sys
|
||||||
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": "",
|
||||||
|
|
8
params-local.json
Normal file
8
params-local.json
Normal file
|
@ -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…
Add table
Reference in a new issue