From 8bdb79f190d6d677a7fa35b4a5692fca5e9bf02a Mon Sep 17 00:00:00 2001 From: Frederik Ring Date: Thu, 17 Dec 2020 16:14:54 +0100 Subject: [PATCH 1/2] use dedicated server for static assets in development --- docker-compose.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8668a44..b2d9edc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,13 @@ version: '3' services: - homepage: + proxy: + image: nginx:1.17-alpine + volumes: + - output:/usr/share/nginx/html ports: - - 8000:8000 + - 8000:80 + homepage: build: context: '.' dockerfile: ./Dockerfile.python @@ -11,9 +15,11 @@ services: volumes: - .:/website - homepagedeps:/root/.local - command: make devserver + - output:/website/homepage/output + command: make regenerate environment: DEBUG: 1 volumes: homepagedeps: + output: From 111cd9082bdcccf89094a4895fa5412e7cbb8d16 Mon Sep 17 00:00:00 2001 From: Frederik Ring Date: Thu, 17 Dec 2020 17:25:31 +0100 Subject: [PATCH 2/2] vendor decorate plugin to enable pickling of settings file --- .gitignore | 1 + homepage/pelicanconf.py | 6 ++-- homepage/plugins/decorate_content/__init__.py | 1 + .../decorate_content/decorate_content.py | 33 +++++++++++++++++++ homepage/requirements.txt | 3 +- 5 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 homepage/plugins/decorate_content/__init__.py create mode 100644 homepage/plugins/decorate_content/decorate_content.py diff --git a/.gitignore b/.gitignore index e8d29c0..58e2d13 100644 --- a/.gitignore +++ b/.gitignore @@ -115,3 +115,4 @@ venv.bak/ test.py *.json +homepage/cache diff --git a/homepage/pelicanconf.py b/homepage/pelicanconf.py index 5d5a226..bb4a79e 100644 --- a/homepage/pelicanconf.py +++ b/homepage/pelicanconf.py @@ -1,6 +1,5 @@ import os from datetime import datetime -from pelican_decorate_content import decorate_content # If your site is available via HTTPS, make sure SITEURL begins with https:// RELATIVE_URLS = False @@ -27,7 +26,8 @@ DEFAULT_PAGINATION = False THEME = './theme' # Delete the output directory before generating new files. -DELETE_OUTPUT_DIRECTORY = True +DELETE_OUTPUT_DIRECTORY = False +CACHE_CONTENT = True DIRECT_TEMPLATES = ['sitemap', 'archives'] @@ -45,7 +45,7 @@ PAGE_SAVE_AS = '{slug}/index.html' ARTICLE_SAVE_AS = 'blog/{slug}/index.html' PLUGIN_PATHS = ['./plugins'] -PLUGINS = [decorate_content, 'assets'] +PLUGINS = ['decorate_content', 'assets'] MARKDOWN = { 'extension_configs': { diff --git a/homepage/plugins/decorate_content/__init__.py b/homepage/plugins/decorate_content/__init__.py new file mode 100644 index 0000000..1dd5d68 --- /dev/null +++ b/homepage/plugins/decorate_content/__init__.py @@ -0,0 +1 @@ +from .decorate_content import * diff --git a/homepage/plugins/decorate_content/decorate_content.py b/homepage/plugins/decorate_content/decorate_content.py new file mode 100644 index 0000000..11ebd65 --- /dev/null +++ b/homepage/plugins/decorate_content/decorate_content.py @@ -0,0 +1,33 @@ +from json import loads + +from pelican import signals +from pelican.contents import Article, Page, Static +from bs4 import BeautifulSoup + + +def content_object_init(instance): + if isinstance(instance, (Article, Page, Static)): + plugin_settings = instance.settings.get("DECORATE_CONTENT", {}) + content_overrides = ( + instance.metadata.get("decorate_content", None) + if instance.metadata is not None + else None + ) + + settings = plugin_settings.copy() + settings.update( + loads(content_overrides) if content_overrides is not None else {} + ) + + soup = BeautifulSoup(instance._content, "html.parser") + + for selector, class_names in settings.items(): + elems = soup.select(selector) + for elem in elems: + elem["class"] = elem.get("class", []) + class_names + + instance._content = soup.decode() + + +def register(): + signals.content_object_init.connect(content_object_init) diff --git a/homepage/requirements.txt b/homepage/requirements.txt index 6118304..9a0c0e2 100644 --- a/homepage/requirements.txt +++ b/homepage/requirements.txt @@ -1,5 +1,4 @@ -pelican==4.0.1 +pelican==4.5.3 markdown==3.1.1 git+git://github.com/miracle2k/webassets#d1f3455e383446ca4ab0c644f326ee937e68e809 beautifulsoup4==4.8.1 -pelican-decorate-content==0.1.1