import argparse import locale from pathlib import Path from datetime import datetime, timedelta MONDAY = 0 # 0 = Monday, 1=Tuesday, 2=Wednesday... def get_next_weekday(d, weekday): days_ahead = weekday - d.weekday() if days_ahead <= 0: # Target day already happened this week days_ahead += 7 return d + timedelta(days_ahead) def set_publication_date_for_humans(text: str, publication_date: datetime) -> str: locale.setlocale(locale.LC_TIME, "fr_FR") date = publication_date.strftime("%d %B %Y") return text.replace("{DATE}", date) def set_publication_date_for_pelican(text: str, publication_date: datetime) -> str: date_digits = publication_date.isoformat()[0:10] return text.replace("{DATE_DIGITS}", date_digits) def set_publication_date_for_seo(text: str, publication_date: datetime) -> str: locale.setlocale(locale.LC_TIME, "en_US") date_utc = publication_date.strftime("%a %b %d %Y") return text.replace("{DATE_UTC}", date_utc) # Parse the command line arguments parser = argparse.ArgumentParser() parser.add_argument("-n", "--number", required=True, type=int, help="Newsletter number") args = parser.parse_args() # Load the newsletter template template = Path("./template/newsletter.md") content = template.read_text() new_content = content.replace("{LETTER_NUMBER}", str(args.number)) today = datetime.today() next_monday = get_next_weekday(today, MONDAY) new_content = set_publication_date_for_humans(new_content, next_monday) new_content = set_publication_date_for_pelican(new_content, next_monday) new_content = set_publication_date_for_seo(new_content, next_monday) # Create the new file destination = Path(f"./content/newsletter/craft-letter-{args.number}.md") destination.write_text(new_content) # Load the homepage template template = Path("./template/index.md") content = template.read_text() new_content = set_publication_date_for_pelican(content, next_monday) new_content = set_publication_date_for_seo(new_content, next_monday) link = ( f"[lettre n°{args.number}]({{filename}}/newsletter/craft-letter-{args.number}.md)" ) new_content = new_content.replace("{LINK}", link) for i in reversed(range(args.number)): link = f"* [Lettre n°{i + 1}]({{filename}}/newsletter/craft-letter-{i + 1}.md)\n" new_content += link # Update the index page destination = Path("./content/pages/index.md") destination.write_text(new_content)