From: Vladimír Vondruš Date: Tue, 3 Sep 2019 19:57:59 +0000 (+0200) Subject: plugins: don't implicitly depend on Pelican. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~cjwatson/git?a=commitdiff_plain;h=e55ccd1d6e5f450ca1ab7e8ded8a33ce5759fea4;p=blog.git plugins: don't implicitly depend on Pelican. Only when those actually get used from Pelican. --- diff --git a/documentation/python.py b/documentation/python.py index a672b8ee..f56a2b13 100755 --- a/documentation/python.py +++ b/documentation/python.py @@ -27,6 +27,7 @@ import argparse import copy import docutils +import docutils.core import docutils.utils import enum import urllib.parse diff --git a/plugins/m/alias.py b/plugins/m/alias.py index 08496730..83931ebd 100644 --- a/plugins/m/alias.py +++ b/plugins/m/alias.py @@ -27,7 +27,6 @@ import os import logging -from pelican import signals from urllib.parse import urljoin logger = logging.getLogger(__name__) @@ -69,7 +68,12 @@ class AliasGenerator: def register_mcss(**kwargs): assert not "This plugin is Pelican-only" # pragma: no cover +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + def _pelican_get_generators(generators): return AliasGenerator def register(): # for Pelican - signals.get_generators.connect(_pelican_get_generators) + import pelican.signals + + pelican.signals.get_generators.connect(_pelican_get_generators) diff --git a/plugins/m/code.py b/plugins/m/code.py index 465c0092..50ff5a2c 100644 --- a/plugins/m/code.py +++ b/plugins/m/code.py @@ -215,4 +215,7 @@ def register_mcss(**kwargs): rst.directives.register_directive('include', Include) rst.roles.register_canonical_role('code', code) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + register = register_mcss # for Pelican diff --git a/plugins/m/components.py b/plugins/m/components.py index c20cd4d5..511c0428 100644 --- a/plugins/m/components.py +++ b/plugins/m/components.py @@ -425,4 +425,7 @@ def register_mcss(**kwargs): rst.roles.register_canonical_role('label-flat-info', label_flat_info) rst.roles.register_canonical_role('label-flat-dim', label_flat_dim) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + register = register_mcss # for Pelican diff --git a/plugins/m/dot.py b/plugins/m/dot.py index 851e5eca..842fdb6e 100644 --- a/plugins/m/dot.py +++ b/plugins/m/dot.py @@ -22,7 +22,6 @@ # DEALINGS IN THE SOFTWARE. # -import pelican import re import subprocess @@ -111,8 +110,13 @@ def register_mcss(mcss_settings, **kwargs): rst.directives.register_directive('graph', Graph) rst.directives.register_directive('strict-graph', StrictGraph) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + def _pelican_configure(pelicanobj): register_mcss(mcss_settings=pelicanobj.settings) def register(): # for Pelican + import pelican.signals + pelican.signals.initialized.connect(_pelican_configure) diff --git a/plugins/m/dox.py b/plugins/m/dox.py index be765c64..b6d2f138 100644 --- a/plugins/m/dox.py +++ b/plugins/m/dox.py @@ -27,7 +27,6 @@ from docutils import nodes, utils from docutils.parsers import rst from docutils.parsers.rst.roles import set_classes -from pelican import signals import xml.etree.ElementTree as ET import os import re @@ -174,6 +173,9 @@ def register_mcss(mcss_settings, **kwargs): init(input=mcss_settings['INPUT'], tagfiles=mcss_settings.get('M_DOX_TAGFILES', [])) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + def _pelican_configure(pelicanobj): settings = { # For backwards compatibility, the input directory is pelican's CWD @@ -185,4 +187,6 @@ def _pelican_configure(pelicanobj): register_mcss(mcss_settings=settings) def register(): # for Pelican - signals.initialized.connect(_pelican_configure) + import pelican.signals + + pelican.signals.initialized.connect(_pelican_configure) diff --git a/plugins/m/filesize.py b/plugins/m/filesize.py index 2004b807..ac0dfed0 100644 --- a/plugins/m/filesize.py +++ b/plugins/m/filesize.py @@ -27,7 +27,6 @@ import gzip from docutils import nodes from docutils.parsers import rst from docutils.parsers.rst.roles import set_classes -from pelican import signals settings = {} @@ -66,6 +65,9 @@ def register_mcss(mcss_settings, **kwargs): rst.roles.register_local_role('filesize', filesize) rst.roles.register_local_role('filesize-gz', filesize_gz) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + def _pelican_configure(pelicanobj): settings = { 'INPUT': os.path.join(os.getcwd(), pelicanobj.settings['PATH']) @@ -73,4 +75,6 @@ def _pelican_configure(pelicanobj): register_mcss(mcss_settings=settings) def register(): # for Pelican - signals.initialized.connect(_pelican_configure) + import pelican.signals + + pelican.signals.initialized.connect(_pelican_configure) diff --git a/plugins/m/gh.py b/plugins/m/gh.py index 145c2e3d..c2c4cf94 100644 --- a/plugins/m/gh.py +++ b/plugins/m/gh.py @@ -80,4 +80,7 @@ def gh(name, rawtext, text, lineno, inliner, options={}, content=[]): def register_mcss(**kwargs): rst.roles.register_local_role('gh', gh) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + register = register_mcss # for Pelican diff --git a/plugins/m/gl.py b/plugins/m/gl.py index a0ceb35d..b0692874 100644 --- a/plugins/m/gl.py +++ b/plugins/m/gl.py @@ -77,4 +77,7 @@ def register_mcss(**kwargs): rst.roles.register_local_role('glfn', glfn) rst.roles.register_local_role('glfnext', glfnext) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + register = register_mcss # for Pelican diff --git a/plugins/m/htmlsanity.py b/plugins/m/htmlsanity.py index fc36ce69..70df7f65 100644 --- a/plugins/m/htmlsanity.py +++ b/plugins/m/htmlsanity.py @@ -718,17 +718,19 @@ def register_mcss(mcss_settings, jinja_environment, **kwargs): jinja_environment.filters['hyphenate'] = hyphenate jinja_environment.filters['dehyphenate'] = dehyphenate -# Below is only Pelican-specific functionality and plugin registration +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. try: import pelican.signals from pelican.readers import RstReader + + class PelicanSaneRstReader(RstReader): + writer_class = SaneHtmlWriter + field_body_translator_class = _SaneFieldBodyTranslator + except ImportError: pass -class PelicanSaneRstReader(RstReader): - writer_class = SaneHtmlWriter - field_body_translator_class = _SaneFieldBodyTranslator - pelican_settings = {} def pelican_expand_link(link, content): diff --git a/plugins/m/images.py b/plugins/m/images.py index eb768a33..07d1553d 100644 --- a/plugins/m/images.py +++ b/plugins/m/images.py @@ -30,8 +30,6 @@ from docutils.parsers.rst import directives, states from docutils.nodes import fully_normalize_name, whitespace_normalize_name from docutils.parsers.rst.roles import set_classes from docutils import nodes -from pelican import signals -from pelican import StaticGenerator # If Pillow is not available, it's not an error unless one uses the image grid # functionality (or :scale: option for Image) @@ -289,6 +287,9 @@ def register_mcss(mcss_settings, **kwargs): rst.directives.register_directive('figure', Figure) rst.directives.register_directive('image-grid', ImageGrid) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + def _pelican_configure(pelicanobj): settings = { 'INPUT': pelicanobj.settings['PATH'], @@ -299,4 +300,6 @@ def _pelican_configure(pelicanobj): register_mcss(mcss_settings=settings) def register(): # for Pelican - signals.initialized.connect(_pelican_configure) + import pelican.signals + + pelican.signals.initialized.connect(_pelican_configure) diff --git a/plugins/m/link.py b/plugins/m/link.py index 0569a085..58e0decd 100644 --- a/plugins/m/link.py +++ b/plugins/m/link.py @@ -49,4 +49,7 @@ def link(name, rawtext, text, lineno, inliner, options={}, content=[]): def register_mcss(**kwargs): rst.roles.register_local_role('link', link) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + register = register_mcss # for Pelican diff --git a/plugins/m/math.py b/plugins/m/math.py index 9082e401..2a36fb60 100644 --- a/plugins/m/math.py +++ b/plugins/m/math.py @@ -32,8 +32,6 @@ from docutils.parsers import rst from docutils.parsers.rst import directives from docutils.parsers.rst.roles import set_classes -import pelican.signals - import latex2svg import latex2svgextra @@ -159,10 +157,15 @@ def register_mcss(mcss_settings, hooks_pre_page, hooks_post_run, **kwargs): rst.directives.register_directive('math', Math) rst.roles.register_canonical_role('math', math) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + def _configure_pelican(pelicanobj): register_mcss(mcss_settings=pelicanobj.settings, hooks_pre_page=[], hooks_post_run=[]) def register(): + import pelican.signals + pelican.signals.initialized.connect(_configure_pelican) pelican.signals.finalized.connect(save_cache) pelican.signals.content_object_init.connect(new_page) diff --git a/plugins/m/plots.py b/plugins/m/plots.py index e410aac6..1c258bd7 100644 --- a/plugins/m/plots.py +++ b/plugins/m/plots.py @@ -35,8 +35,6 @@ import matplotlib.pyplot as plt import numpy as np import io -import pelican.signals - mpl.rcParams['font.size'] = '11' mpl.rcParams['axes.titlesize'] = '13' @@ -274,9 +272,14 @@ def register_mcss(mcss_settings, hooks_pre_page, **kwargs): rst.directives.register_directive('plot', Plot) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + def _pelican_configure(pelicanobj): register_mcss(mcss_settings=pelicanobj.settings, hooks_pre_page=[]) def register(): # for Pelican + import pelican.signals + pelican.signals.initialized.connect(_pelican_configure) pelican.signals.content_object_init.connect(new_page) diff --git a/plugins/m/qr.py b/plugins/m/qr.py index 909a4055..faa20d40 100644 --- a/plugins/m/qr.py +++ b/plugins/m/qr.py @@ -83,4 +83,7 @@ class Qr(rst.Directive): def register_mcss(**kwargs): rst.directives.register_directive('qr', Qr) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + register = register_mcss # for Pelican diff --git a/plugins/m/sphinx.py b/plugins/m/sphinx.py index 0354b773..8792b56c 100755 --- a/plugins/m/sphinx.py +++ b/plugins/m/sphinx.py @@ -584,11 +584,11 @@ def _pelican_configure(pelicanobj): inventories=pelicanobj.settings.get('M_SPHINX_INVENTORIES', [])) def register(): # for Pelican - from pelican import signals + import pelican.signals rst.roles.register_local_role('ref', ref) - signals.initialized.connect(_pelican_configure) + pelican.signals.initialized.connect(_pelican_configure) def pretty_print_intersphinx_inventory(file): return ''.join([ diff --git a/plugins/m/vk.py b/plugins/m/vk.py index a5bc2c67..a18a7ceb 100644 --- a/plugins/m/vk.py +++ b/plugins/m/vk.py @@ -67,4 +67,7 @@ def register_mcss(**kwargs): rst.roles.register_local_role('vkfn', vkfn) rst.roles.register_local_role('vktype', vktype) +# Below is only Pelican-specific functionality. If Pelican is not found, these +# do nothing. + register = register_mcss # for Pelican