#!/usr/bin/python3 import argparse from datetime import date, timedelta, datetime from wcmatch.pathlib import Path def get_week_start_end(year, week): # create a date object for the first day of the year first_day = date(year, 1, 1) # get the weekday of the first day (0 for Monday, 6 for Sunday) first_day_weekday = first_day.weekday() # calculate the offset to get the first Monday of the year offset = timedelta(days=(7 - first_day_weekday) % 7) # add the offset and the number of weeks to get the first day of # the given week week_start = first_day + offset + timedelta(weeks=(week - 1)) # add six days to get the last day of the given week week_end = week_start + timedelta(days=6) # return the start and end dates as strings in yyyy-mm-dd format return week_start.strftime('%Y-%m-%d'), week_end.strftime('%Y-%m-%d') def main(): parser = argparse.ArgumentParser() parser.add_argument("--base-dir", help="base directory to move the images to", default=Path.cwd()) parser.add_argument("path", help="Path containing images in PNG format") options = parser.parse_args() data_path = Path(options.path) images = data_path.glob(['*.png', '*.webp']) base_dir = Path(options.base_dir) for image in images: data = datetime.fromtimestamp(image.stat().st_mtime) current_cal = data.isocalendar() base_path = ( base_dir / str(data.year) / data.strftime("%m") / "-".join(get_week_start_end(data.year, current_cal.week)) ) base_path.mkdir(exist_ok=True) path = base_path / image.name print(f"{image} -> {path}") image.rename(path) if __name__ == "__main__": main()