Files
website-v2/libraries/utils.py
Lacey Williams Henschel c9cc3c49b3 Add exception logic to load the Detail docs links
- Add a button to the LibraryVersion admin to reload the docs links
- Add some minimal docs on the admin features
2024-02-05 14:14:55 -08:00

62 lines
1.9 KiB
Python

from datetime import datetime
from dateutil.relativedelta import relativedelta
import structlog
import tempfile
from dateutil.parser import ParserError, parse
from django.utils.text import slugify
logger = structlog.get_logger()
def decode_content(content):
"""Decode bytes to string."""
if isinstance(content, bytes):
return content.decode("utf-8")
return content
def generate_fake_email(val: str) -> str:
"""Slugify a string to make a fake email.
Would not necessarily be unique -- this is a lazy way for us to avoid creating
multiple new user records for one contributor who contributes to multiple libraries.
"""
slug = slugify(val)
local_email = slug.replace("-", "_")[:50]
return f"{local_email}@example.com"
def generate_library_docs_url(boost_url_slug, library_slug):
"""Generate a documentation url with a specific format"""
return f"/doc/libs/{boost_url_slug}/libs/{library_slug}/doc/html/index.html"
def get_first_last_day_last_month():
now = datetime.now()
first_day_this_month = now.replace(day=1)
last_day_last_month = first_day_this_month - relativedelta(days=1)
first_day_last_month = last_day_last_month.replace(day=1)
return first_day_last_month, last_day_last_month
def parse_date(date_str):
"""Parses a date string to a datetime. Does not return an error."""
try:
return parse(date_str)
except ParserError:
logger.info("parse_date_invalid_date", date_str=date_str)
return None
def write_content_to_tempfile(content):
"""Accepts string or bytes content, writes it to a temporary file, and returns the
file object."""
with tempfile.NamedTemporaryFile(delete=False) as temp_file:
if isinstance(content, bytes):
temp_file = open(temp_file.name, "wb")
temp_file.write(content)
temp_file.close()
return temp_file