diff --git a/scripts/new-photo-post b/scripts/new-photo-post index bc44567..f2ddcb4 100755 --- a/scripts/new-photo-post +++ b/scripts/new-photo-post @@ -9,20 +9,16 @@ import argparse import datetime import json import os.path -import re import shutil import subprocess from PIL import Image from PIL.ExifTags import TAGS from typing import Optional +from website.metadata import slugify + PHOTOS_CONTENT_DIR = 'content/photos' -def slugify(s): - s = s.strip().lower() - s = re.sub(r'\s+', '-', s) - s = re.sub(r'[‘’“”"\'()]', '', s) - return s def parse_args(argv, *a, **kw): parser = argparse.ArgumentParser(*a, **kw) @@ -34,6 +30,7 @@ def parse_args(argv, *a, **kw): args = parser.parse_args(argv) return args + def main(argv): args = parse_args(argv[1:], prog=argv[0]) @@ -145,6 +142,7 @@ def main(argv): print(f'Failed to copy {photo}', file=sys.stderr) return -2 + if __name__ == '__main__': import sys result = main(sys.argv) diff --git a/scripts/website/__init__.py b/scripts/website/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/scripts/website/dates.py b/scripts/website/dates.py new file mode 100644 index 0000000..d42c944 --- /dev/null +++ b/scripts/website/dates.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 +# Eryn Wells + +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 diff --git a/scripts/website/metadata.py b/scripts/website/metadata.py new file mode 100644 index 0000000..09043a6 --- /dev/null +++ b/scripts/website/metadata.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 +# Eryn Wells + +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 diff --git a/scripts/website/paths.py b/scripts/website/paths.py new file mode 100644 index 0000000..e20abc2 --- /dev/null +++ b/scripts/website/paths.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 +# Eryn Wells + +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') diff --git a/scripts/weeknotes b/scripts/weeknotes index b06f466..3354fe8 100755 --- a/scripts/weeknotes +++ b/scripts/weeknotes @@ -6,34 +6,8 @@ import datetime import os.path import subprocess from typing import Optional - - -def content_path() -> str: - from os.path import abspath, dirname, join - return abspath(join(dirname(__file__), '..', 'content')) - - -def next_sunday_noon() -> datetime.datetime: - today = 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 +from website.dates import next_sunday_noon +from website.paths import content_path def weeknotes_path(*, week_number: Optional[int] = None):