Skip to content

Instantly share code, notes, and snippets.

@justinwagg
Created March 31, 2025 18:44
Show Gist options
  • Select an option

  • Save justinwagg/c7fd0fb46a3fbb021afa0679855335f5 to your computer and use it in GitHub Desktop.

Select an option

Save justinwagg/c7fd0fb46a3fbb021afa0679855335f5 to your computer and use it in GitHub Desktop.
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