Created
March 31, 2025 18:44
-
-
Save justinwagg/c7fd0fb46a3fbb021afa0679855335f5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from datetime import datetime | |
| from utils import make_folders | |
| from pprint import pprint | |
| import argparse | |
| from re import sub | |
| def kebab(s): | |
| """ | |
| Convert a string into kebab-case, handling acronyms, numbers, and various delimiters. | |
| """ | |
| return '-'.join( | |
| sub(r"(\s|_|-)+"," ", | |
| sub(r"[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+", | |
| lambda mo: ' ' + mo.group(0).title(), s)).split()) | |
| def create_folders(root_folder, cameras, event_date, event_name, media_type): | |
| """ | |
| Generate folder paths for a given event setup. | |
| Args: | |
| root_folder (str): Root path where folders are to be created. | |
| cameras (list of str): List of camera names. | |
| event_date (datetime): Date of the event. | |
| event_name (str): Name of the event. | |
| media_type (str): Type of media (e.g., 'Video', 'Photo'). | |
| """ | |
| # start building folders to create | |
| folders_to_create = [] | |
| # import folders | |
| for camera in cameras: | |
| if media_type == 'Video': | |
| import_folders = ['Video'] | |
| for folder in import_folders: | |
| # Makes a path like /Users/justinwagg/Movies/20240507-Test | |
| dir_to_create = '{}/Movies/{}__{}/{}'.format( | |
| root_folder, | |
| event_date.strftime('%Y%m%d'), | |
| kebab(event_name), | |
| camera | |
| ) | |
| folders_to_create.append(dir_to_create) | |
| elif media_type == 'Photo': | |
| import_folders = ['RAW', 'JPEG', 'Home Scans', 'Lab Scans'] | |
| for folder in import_folders: | |
| # Makes a path like /Users/justinwagg/Pictures/2024/05-May/07-Test | |
| dir_to_create = '{}/Pictures/{}/{}/{}-{}/Import/{}/{}'.format( | |
| root_folder, | |
| event_date.strftime('%Y'), | |
| event_date.strftime('%m-%B'), | |
| event_date.strftime('%d'), | |
| kebab(event_name), | |
| camera, | |
| folder | |
| ) | |
| folders_to_create.append(dir_to_create) | |
| # export folders | |
| export_folders = ['Full JPEGs', 'Edits', 'Instagram-Post_(1x1)', 'Instagram-StoryReel_(9x16)', 'Instagram-Portrait_(4x5)', 'Instagram-Landscape_(1.91x1)', 'Photoshop'] | |
| for folder in export_folders: | |
| dir_to_create = '{}/Pictures/{}/{}/{}-{}/Export/{}'.format( | |
| root_folder, | |
| event_date.strftime('%Y'), | |
| event_date.strftime('%m-%B'), | |
| event_date.strftime('%d'), | |
| kebab(event_name), | |
| folder | |
| ) | |
| folders_to_create.append(dir_to_create) | |
| make_folders(folders_to_create) | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser(description='') | |
| parser.add_argument('--root-folder', required=True) | |
| parser.add_argument('--cameras', required=True) | |
| parser.add_argument('--event-date', required=True) | |
| parser.add_argument('--event-name', required=True) | |
| parser.add_argument('--media-type', required=True) | |
| args = parser.parse_args() | |
| print(args.root_folder) | |
| print(args.cameras) | |
| print(args.event_date) | |
| print(args.event_name) | |
| print(args.media_type) | |
| create_folders( | |
| root_folder=args.root_folder, | |
| cameras=args.cameras.split(','), | |
| event_date=datetime.strptime(args.event_date, '%Y-%m-%d').date(), | |
| event_name=args.event_name, | |
| media_type=args.media_type | |
| ) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment