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
|
||||
.vscode
|
||||
posts/images
|
||||
.idea/
|
50
Makefile
50
Makefile
|
@ -4,7 +4,10 @@ site:
|
|||
serve: site
|
||||
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
|
||||
|
||||
undock:
|
||||
|
@ -34,49 +37,4 @@ clean:
|
|||
find . -name "*.pyc" -exec rm {} +
|
||||
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:
|
||||
|
|
77
makesite.py
77
makesite.py
|
@ -27,35 +27,36 @@
|
|||
|
||||
"""Make static website/blog with Python."""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import shutil
|
||||
import re
|
||||
import glob
|
||||
import json
|
||||
import argparse
|
||||
import datetime
|
||||
import json
|
||||
import locale
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import sys
|
||||
import time
|
||||
import unicodedata
|
||||
from email import utils
|
||||
from pathlib import Path
|
||||
import unicodedata
|
||||
import locale
|
||||
import requests
|
||||
|
||||
import mistune
|
||||
import requests
|
||||
from pygments import highlight
|
||||
from pygments.lexers import get_lexer_by_name
|
||||
from pygments.formatters import html
|
||||
from pygments.lexers import get_lexer_by_name
|
||||
|
||||
# set user locale
|
||||
locale.setlocale(locale.LC_ALL, "")
|
||||
|
||||
|
||||
# initialize markdown
|
||||
|
||||
|
||||
class HighlightRenderer(mistune.Renderer):
|
||||
|
||||
options = {"escape": False, "hard_wrap": True}
|
||||
|
||||
def block_code(self, code, lang):
|
||||
def block_code(self, code, lang=None):
|
||||
if not lang:
|
||||
return "\n<pre><code>%s</code></pre>\n" % mistune.escape(code)
|
||||
lexer = get_lexer_by_name(lang, stripall=True)
|
||||
|
@ -202,7 +203,7 @@ def get_friendly_date(date_str):
|
|||
|
||||
|
||||
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."""
|
||||
items = []
|
||||
|
@ -250,13 +251,13 @@ def make_posts(
|
|||
if params["stacosys_url"] and is_page_comment_enabled:
|
||||
req_url = params["stacosys_url"] + "/comments"
|
||||
query_params = dict(
|
||||
url="/" + page_params["post_url"]
|
||||
url="/" + page_params["post_url"]
|
||||
)
|
||||
resp = requests.get(url=req_url, params=query_params)
|
||||
comments = resp.json()["data"]
|
||||
out_comments = []
|
||||
for comment in comments:
|
||||
site=comment.get("site", "")
|
||||
site = comment.get("site", "")
|
||||
if site:
|
||||
site_start = '<a href="' + site + '">'
|
||||
site_end = '</a>'
|
||||
|
@ -296,7 +297,7 @@ def make_posts(
|
|||
|
||||
|
||||
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."""
|
||||
|
||||
|
@ -323,7 +324,7 @@ def make_list(
|
|||
item_params["comment_label"] = "1 commentaire"
|
||||
else:
|
||||
item_params["comment_label"] = (
|
||||
str(item_params["comment_count"]) + " commentaires"
|
||||
str(item_params["comment_count"]) + " commentaires"
|
||||
)
|
||||
else:
|
||||
item_params["comment_label"] = ""
|
||||
|
@ -337,7 +338,7 @@ def make_list(
|
|||
fwrite(dst_path, output)
|
||||
|
||||
|
||||
def main():
|
||||
def main(param_file):
|
||||
# Create a new _site directory from scratch.
|
||||
if os.path.isdir("_site"):
|
||||
shutil.rmtree("_site")
|
||||
|
@ -349,13 +350,13 @@ def main():
|
|||
"subtitle": "Lorem Ipsum",
|
||||
"author": "Admin",
|
||||
"site_url": "http://localhost:8000",
|
||||
"current_year": datetime.datetime.now().year,
|
||||
"current_year": datetime.datetime.now().year,
|
||||
"stacosys_url": "",
|
||||
}
|
||||
|
||||
# If params.json exists, load it.
|
||||
if os.path.isfile("params.json"):
|
||||
params.update(json.loads(fread("params.json")))
|
||||
log("use params from " + param_file)
|
||||
if os.path.isfile(param_file):
|
||||
params.update(json.loads(fread(param_file)))
|
||||
|
||||
# Load layouts.
|
||||
banner_layout = fread("layout/banner.html")
|
||||
|
@ -394,7 +395,7 @@ def main():
|
|||
# Create blog list pages.
|
||||
page_size = 10
|
||||
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
|
||||
last_page = len(chunk_posts)
|
||||
|
@ -429,17 +430,17 @@ def main():
|
|||
page = page + 1
|
||||
|
||||
# Create category pages
|
||||
catpost = {}
|
||||
cat_post = {}
|
||||
for post in blog_posts:
|
||||
for cat in post["categories"]:
|
||||
if cat in catpost:
|
||||
catpost[cat].append(post)
|
||||
if cat in cat_post:
|
||||
cat_post[cat].append(post)
|
||||
else:
|
||||
catpost[cat] = [post]
|
||||
for cat in catpost.keys():
|
||||
cat_post[cat] = [post]
|
||||
for cat in cat_post.keys():
|
||||
params["category"] = cat
|
||||
make_list(
|
||||
catpost[cat],
|
||||
cat_post[cat],
|
||||
"_site/" + slugify(cat) + "/index.html",
|
||||
list_layout,
|
||||
item_nosummary_layout,
|
||||
|
@ -472,17 +473,17 @@ def main():
|
|||
)
|
||||
|
||||
# Create RSS feed by tag
|
||||
tagpost = {}
|
||||
tag_post = {}
|
||||
for post in blog_posts:
|
||||
for tag in post["tags"]:
|
||||
if tag in tagpost:
|
||||
tagpost[tag].append(post)
|
||||
if tag in tag_post:
|
||||
tag_post[tag].append(post)
|
||||
else:
|
||||
tagpost[tag] = [post]
|
||||
for tag in tagpost.keys():
|
||||
tag_post[tag] = [post]
|
||||
for tag in tag_post.keys():
|
||||
params["tag"] = tag
|
||||
make_list(
|
||||
tagpost[tag],
|
||||
tag_post[tag],
|
||||
"_site/rss." + slugify(tag) + ".xml",
|
||||
rss_xml,
|
||||
rss_item_xml,
|
||||
|
@ -506,6 +507,8 @@ def main():
|
|||
# Test parameter to be set temporarily by unit tests.
|
||||
_test = None
|
||||
|
||||
|
||||
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 os
|
||||
import requests
|
||||
import requests
|
||||
import time
|
||||
import json
|
||||
|
||||
|
||||
def fread(filename):
|
||||
"""Read file and close the file."""
|
||||
with open(filename, "r") as f:
|
||||
return f.read()
|
||||
|
||||
|
||||
def get_nb_of_comments():
|
||||
req_url = params["stacosys_url"] + "/comments/count"
|
||||
query_params = dict(
|
||||
|
@ -20,9 +22,11 @@ def get_nb_of_comments():
|
|||
resp = requests.get(url=req_url, params=query_params)
|
||||
return 0 if not resp.ok else int(resp.json()["count"])
|
||||
|
||||
|
||||
def exit_program():
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
# Default parameters.
|
||||
params = {
|
||||
"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