"""Functions for creating directory structures."""
import os
from pathlib import Path
from copy import deepcopy
from convnwb.utils.log import print_status
from convnwb.paths.defaults import PROJECT_FOLDERS, SUBJECT_FOLDERS, SESSION_FOLDERS
###################################################################################################
###################################################################################################
[docs]def make_folder(path):
"""Make a folder, if it does not already exist.
Parameters
----------
path : str of Path
Path to the folder to make.
"""
if not os.path.exists(path):
os.mkdir(path)
[docs]def create_project_directory(base_path, project, project_folders=PROJECT_FOLDERS, verbose=True):
"""Create the folder structure for a project.
Parameters
----------
base_path : str or Path
The path to the folder where to put the project.
project : str
The project name.
project_folders : list, optional
List of sub-folders to initialize in the project folder.
verbose : bool, optional, default: True
Whether to print out information.
"""
base_path = Path(base_path)
print_status(verbose, 'Creating project directory...', 0)
print_status(verbose, 'Path: {}'.format(base_path / project), 1)
make_folder(base_path / project)
for subfolder in project_folders:
make_folder(base_path / project / subfolder)
[docs]def create_subject_directory(project_path, subject, experiments=None,
subject_folders=SUBJECT_FOLDERS, recordings_name='recordings',
verbose=True):
"""Create the folder structure for a subject.
Parameters
----------
project_path : str or Path
The path to the project folder.
subject : str
The subject code.
experiments : str or list, optional
Experiment name(s) to initialize in the subject folder.
subject_folders : list, optional
List of sub-folders to initialize in the subject folder.
recordings_name : str, optional
The name of the subfolder (within `project_path`) to store recordings.
verbose : bool, optional, default: True
Whether to print out information.
"""
recordings_path = Path(project_path) / recordings_name
print_status(verbose, 'Creating subject directory...', 0)
print_status(verbose, 'Path: {}'.format(recordings_path / subject), 1)
make_folder(recordings_path)
make_folder(recordings_path / subject)
all_subject_folders = deepcopy(subject_folders)
if experiments:
experiments = [experiments] if isinstance(experiments, str) else experiments
all_subject_folders = all_subject_folders + experiments
for subfolder in all_subject_folders:
make_folder(recordings_path / subject / subfolder)
[docs]def create_session_directory(project_path, subject, experiment, session,
recordings_name='recordings', session_folders=SESSION_FOLDERS,
verbose=True):
"""Create the folder structure for a session of data.
Parameters
----------
project_path : str or Path
The path to the project folder.
subject : str
The subject code.
experiment : str
Experiment name.
session : str or int
The session label to create the folder structure for.
Can be an integer index, or a string, for example `session_0`.
recordings_name : str, optional
The name of the subfolder (within `project_path`) to store recordings.
session_folders : dict, optional
Defines the folder names to initialize as part of the session folder.
Each key defines a sub-directory within the `session` folder.
Each set of values is a list of folder names for within each sub-directory.
verbose : bool, optional, default: True
Whether to print out information.
"""
recordings_path = Path(project_path) / recordings_name
session = 'session_' + str(session) if 'session' not in str(session) else session
print_status(verbose, 'Creating session directory...', 0)
print_status(verbose, 'Path: {}'.format(recordings_path / subject / experiment / session), 1)
create_subject_directory(project_path, subject, experiments=[experiment],
recordings_name=recordings_name, verbose=False)
make_folder(recordings_path / subject / experiment / session)
for subdir, subfolders in session_folders.items():
make_folder(recordings_path / subject / experiment / session / subdir)
for subfolder in subfolders:
make_folder(recordings_path / subject / experiment / session / subdir / subfolder)