Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply Ruff & pyupgrade to Jinja templates. Fix #2888 #3242

Merged
merged 1 commit into from
Nov 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions pelican/tools/templates/pelicanconf.py.jinja2
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
AUTHOR = {{author}}
SITENAME = {{sitename}}
SITEURL = ''
SITEURL = ""

PATH = 'content'
PATH = "content"

TIMEZONE = {{timezone}}

Expand All @@ -16,16 +16,20 @@ AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None

# Blogroll
LINKS = (('Pelican', 'https://getpelican.com/'),
('Python.org', 'https://www.python.org/'),
('Jinja2', 'https://palletsprojects.com/p/jinja/'),
('You can modify those links in your config file', '#'),)
LINKS = (
("Pelican", "https://getpelican.com/"),
("Python.org", "https://www.python.org/"),
("Jinja2", "https://palletsprojects.com/p/jinja/"),
("You can modify those links in your config file", "#"),
)

# Social widget
SOCIAL = (('You can add links in your config file', '#'),
('Another social link', '#'),)
SOCIAL = (
("You can add links in your config file", "#"),
("Another social link", "#"),
)

DEFAULT_PAGINATION = {{default_pagination}}

# Uncomment following line if you want document-relative URLs when developing
#RELATIVE_URLS = True
# RELATIVE_URLS = True
11 changes: 6 additions & 5 deletions pelican/tools/templates/publishconf.py.jinja2
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,20 @@

import os
import sys

sys.path.append(os.curdir)
from pelicanconf import *

# If your site is available via HTTPS, make sure SITEURL begins with https://
SITEURL = '{{siteurl}}'
SITEURL = "{{siteurl}}"
RELATIVE_URLS = False

FEED_ALL_ATOM = 'feeds/all.atom.xml'
CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml'
FEED_ALL_ATOM = "feeds/all.atom.xml"
CATEGORY_FEED_ATOM = "feeds/{slug}.atom.xml"

DELETE_OUTPUT_DIRECTORY = True

# Following items are often useful when publishing

#DISQUS_SITENAME = ""
#GOOGLE_ANALYTICS = ""
# DISQUS_SITENAME = ""
# GOOGLE_ANALYTICS = ""
113 changes: 63 additions & 50 deletions pelican/tools/templates/tasks.py.jinja2
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-

import os
import shlex
import shutil
Expand All @@ -14,61 +12,66 @@ from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer
from pelican.settings import DEFAULT_CONFIG, get_settings_from_file

OPEN_BROWSER_ON_SERVE = True
SETTINGS_FILE_BASE = 'pelicanconf.py'
SETTINGS_FILE_BASE = "pelicanconf.py"
SETTINGS = {}
SETTINGS.update(DEFAULT_CONFIG)
LOCAL_SETTINGS = get_settings_from_file(SETTINGS_FILE_BASE)
SETTINGS.update(LOCAL_SETTINGS)

CONFIG = {
'settings_base': SETTINGS_FILE_BASE,
'settings_publish': 'publishconf.py',
"settings_base": SETTINGS_FILE_BASE,
"settings_publish": "publishconf.py",
# Output path. Can be absolute or relative to tasks.py. Default: 'output'
'deploy_path': SETTINGS['OUTPUT_PATH'],
"deploy_path": SETTINGS["OUTPUT_PATH"],
{% if ssh %}
# Remote server configuration
'ssh_user': '{{ssh_user}}',
'ssh_host': '{{ssh_host}}',
'ssh_port': '{{ssh_port}}',
'ssh_path': '{{ssh_target_dir}}',
"ssh_user": "{{ssh_user}}",
"ssh_host": "{{ssh_host}}",
"ssh_port": "{{ssh_port}}",
"ssh_path": "{{ssh_target_dir}}",
{% endif %}
{% if cloudfiles %}
# Rackspace Cloud Files configuration settings
'cloudfiles_username': '{{cloudfiles_username}}',
'cloudfiles_api_key': '{{cloudfiles_api_key}}',
'cloudfiles_container': '{{cloudfiles_container}}',
"cloudfiles_username": "{{cloudfiles_username}}",
"cloudfiles_api_key": "{{cloudfiles_api_key}}",
"cloudfiles_container": "{{cloudfiles_container}}",
{% endif %}
{% if github %}
# Github Pages configuration
'github_pages_branch': '{{github_pages_branch}}',
'commit_message': "'Publish site on {}'".format(datetime.date.today().isoformat()),
"github_pages_branch": "{{github_pages_branch}}",
"commit_message": f"'Publish site on {datetime.date.today().isoformat()}'",
{% endif %}
# Host and port for `serve`
'host': 'localhost',
'port': 8000,
"host": "localhost",
"port": 8000,
}


@task
def clean(c):
"""Remove generated files"""
if os.path.isdir(CONFIG['deploy_path']):
shutil.rmtree(CONFIG['deploy_path'])
os.makedirs(CONFIG['deploy_path'])
if os.path.isdir(CONFIG["deploy_path"]):
shutil.rmtree(CONFIG["deploy_path"])
os.makedirs(CONFIG["deploy_path"])


@task
def build(c):
"""Build local version of site"""
pelican_run('-s {settings_base}'.format(**CONFIG))
pelican_run("-s {settings_base}".format(**CONFIG))


@task
def rebuild(c):
"""`build` with the delete switch"""
pelican_run('-d -s {settings_base}'.format(**CONFIG))
pelican_run("-d -s {settings_base}".format(**CONFIG))


@task
def regenerate(c):
"""Automatically regenerate site upon file modification"""
pelican_run('-r -s {settings_base}'.format(**CONFIG))
pelican_run("-r -s {settings_base}".format(**CONFIG))


@task
def serve(c):
Expand All @@ -78,54 +81,58 @@ def serve(c):
allow_reuse_address = True

server = AddressReuseTCPServer(
CONFIG['deploy_path'],
(CONFIG['host'], CONFIG['port']),
ComplexHTTPRequestHandler)
CONFIG["deploy_path"],
(CONFIG["host"], CONFIG["port"]),
ComplexHTTPRequestHandler,
)

if OPEN_BROWSER_ON_SERVE:
# Open site in default browser
import webbrowser

webbrowser.open("http://{host}:{port}".format(**CONFIG))

sys.stderr.write('Serving at {host}:{port} ...\n'.format(**CONFIG))
sys.stderr.write("Serving at {host}:{port} ...\n".format(**CONFIG))
server.serve_forever()


@task
def reserve(c):
"""`build`, then `serve`"""
build(c)
serve(c)


@task
def preview(c):
"""Build production version of site"""
pelican_run('-s {settings_publish}'.format(**CONFIG))
pelican_run("-s {settings_publish}".format(**CONFIG))

@task
def livereload(c):
"""Automatically reload browser tab upon file modification."""
from livereload import Server

def cached_build():
cmd = '-s {settings_base} -e CACHE_CONTENT=true LOAD_CONTENT_CACHE=true'
cmd = "-s {settings_base} -e CACHE_CONTENT=true LOAD_CONTENT_CACHE=true"
pelican_run(cmd.format(**CONFIG))

cached_build()
server = Server()
theme_path = SETTINGS['THEME']
theme_path = SETTINGS["THEME"]
watched_globs = [
CONFIG['settings_base'],
'{}/templates/**/*.html'.format(theme_path),
CONFIG["settings_base"],
f"{theme_path}/templates/**/*.html",
]

content_file_extensions = ['.md', '.rst']
content_file_extensions = [".md", ".rst"]
for extension in content_file_extensions:
content_glob = '{0}/**/*{1}'.format(SETTINGS['PATH'], extension)
content_glob = "{}/**/*{}".format(SETTINGS["PATH"], extension)
watched_globs.append(content_glob)

static_file_extensions = ['.css', '.js']
static_file_extensions = [".css", ".js"]
for extension in static_file_extensions:
static_file_glob = '{0}/static/**/*{1}'.format(theme_path, extension)
static_file_glob = f"{theme_path}/static/**/*{extension}"
watched_globs.append(static_file_glob)

for glob in watched_globs:
Expand All @@ -134,43 +141,49 @@ def livereload(c):
if OPEN_BROWSER_ON_SERVE:
# Open site in default browser
import webbrowser

webbrowser.open("http://{host}:{port}".format(**CONFIG))

server.serve(host=CONFIG['host'], port=CONFIG['port'], root=CONFIG['deploy_path'])
server.serve(host=CONFIG["host"], port=CONFIG["port"], root=CONFIG["deploy_path"])

{% if cloudfiles %}
@task
def cf_upload(c):
"""Publish to Rackspace Cloud Files"""
rebuild(c)
with cd(CONFIG['deploy_path']):
c.run('swift -v -A https://auth.api.rackspacecloud.com/v1.0 '
'-U {cloudfiles_username} '
'-K {cloudfiles_api_key} '
'upload -c {cloudfiles_container} .'.format(**CONFIG))
with cd(CONFIG["deploy_path"]):
c.run(
"swift -v -A https://auth.api.rackspacecloud.com/v1.0 "
"-U {cloudfiles_username} "
"-K {cloudfiles_api_key} "
"upload -c {cloudfiles_container} .".format(**CONFIG)
)
{% endif %}

@task
def publish(c):
"""Publish to production via rsync"""
pelican_run('-s {settings_publish}'.format(**CONFIG))
pelican_run("-s {settings_publish}".format(**CONFIG))
c.run(
'rsync --delete --exclude ".DS_Store" -pthrvz -c '
'-e "ssh -p {ssh_port}" '
'{} {ssh_user}@{ssh_host}:{ssh_path}'.format(
CONFIG['deploy_path'].rstrip('/') + '/',
**CONFIG))
"{} {ssh_user}@{ssh_host}:{ssh_path}".format(
CONFIG["deploy_path"].rstrip("/") + "/", **CONFIG
)
)

{% if github %}
@task
def gh_pages(c):
"""Publish to GitHub Pages"""
preview(c)
c.run('ghp-import -b {github_pages_branch} '
'-m {commit_message} '
'{deploy_path} -p'.format(**CONFIG))
c.run(
"ghp-import -b {github_pages_branch} "
"-m {commit_message} "
"{deploy_path} -p".format(**CONFIG)
)
{% endif %}

def pelican_run(cmd):
cmd += ' ' + program.core.remainder # allows to pass-through args to pelican
cmd += " " + program.core.remainder # allows to pass-through args to pelican
pelican_main(shlex.split(cmd))