Rework a bunch of scripts into a single website script

This commit is contained in:
Eryn Wells 2024-11-18 14:59:43 -08:00
parent f83c6ebbe5
commit a9f52aad98
12 changed files with 275 additions and 92 deletions

38
scripts/website Executable file
View file

@ -0,0 +1,38 @@
#!/usr/bin/env python3
# Eryn Wells <eryn@erynwells.me>
'''
A Python interface to my personal website, Erynwells.me.
'''
import argparse
from typing import List
from erynwells_me.scripting import Command
from erynwells_me.weeknotes import WeeknotesCommand
COMMANDS: List[Command] = [
WeeknotesCommand(),
]
def parse_args(commands: List[Command], argv, *a, **kw):
parser = argparse.ArgumentParser(*a, **kw)
subcommands = parser.add_subparsers(title='Subcommands', required=True)
for command in commands:
subcommand_parser = subcommands.add_parser(command.name, help=command.help)
command.add_arguments(subcommand_parser)
args = parser.parse_args(argv)
return args
def main(argv):
args = parse_args(COMMANDS, argv[1:], prog=argv[0])
args.handler(args)
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))

View file

@ -1,33 +0,0 @@
#!/usr/bin/env python3
# Eryn Wells <eryn@erynwells.me>
import datetime
from typing import Optional
def next_sunday_noon(from_date: Optional[datetime.date] = None) -> datetime.datetime:
'''
Return a `datetime` for noon on the upcoming Sunday. Use today if no
`from_date` is given.
'''
today = from_date or datetime.date.today()
current_weekday = today.weekday()
if current_weekday == 6:
days_to_next_sunday = 6
else:
days_to_next_sunday = 6 - current_weekday
delta = datetime.timedelta(days=days_to_next_sunday)
noon = datetime.time(hour=12)
timezone = datetime.datetime.now().astimezone().tzinfo
next_sunday_noon = datetime.datetime.combine(
today + delta,
noon,
tzinfo=timezone
)
return next_sunday_noon

View file

@ -1,12 +0,0 @@
#!/usr/bin/env python3
# Eryn Wells <eryn@erynwells.me>
import re
def slugify(s: str) -> str:
'''Process a string into something suitable to be a page slug.'''
s = s.strip().lower()
s = re.sub(r'\s+', '-', s)
s = re.sub(r'[‘’“”"\'()]', '', s)
return s

View file

@ -1,19 +0,0 @@
#!/usr/bin/env python3
# Eryn Wells <eryn@erynwells.me>
import os.path as osp
def content_path() -> str:
'''Return the path to the content directory.'''
path = osp.abspath(osp.join(osp.dirname(__file__), '..', '..', 'content'))
assert osp.isdir(path)
return path
def blog_path() -> str:
return osp.join(content_path(), 'blog')
def photos_path() -> str:
return osp.join(content_path(), 'photos')