| .gitignore | ||
| config_selector.py | ||
| README.md | ||
Drupal Configuration Selector
A Python utility to selectively copy configuration files from a source directory to a target directory based on file prefixes.
Overview
This script helps you manage and transfer specific Drupal configuration files by:
- Reading a list of configuration file prefixes from a JSON file
- Identifying matching files in a source directory
- Copying selected files to a target directory
- Providing a TUI (Text User Interface) to manage the selection process
Requirements
- Python 3.6+
- curses library (built into most Python installations on Linux/Mac)
Installation and Setup
The script operates in the current working directory where you run it. It will create the following subdirectories if they don't exist:
original_config/- Place your source configuration files hereconfig/- Matched files will be copied here
Usage
- Copy or move the script to your working directory (or use the full path to run it)
- Place your source configuration files in the
original_configdirectory - Run the script:
python3 config_selector.py
- The script will create a default
config_prefixes.jsonin the current directory if it doesn't exist - Use the TUI to manage your file selections and copy files
Hierarchical Navigation
The script organizes configuration files in a tree-like structure based on dot-separated prefixes:
- Files like
field.storage.node.comment.ymlare split into segments:field>field.storage>field.storage.node> etc. - Use RIGHT ARROW to navigate deeper into a selected prefix
- Use LEFT ARROW to go back up one level in the hierarchy
- At each level, you see only the unique segments available at that level
- Each segment shows the total count of files under it
- Segments with children have a "▶" indicator
- You can perform actions (add, delete, select files) at any level in the hierarchy
TUI Navigation
The Text User Interface provides the following controls:
- UP/DOWN: Navigate through the list of prefixes
- LEFT/RIGHT: Navigate through the hierarchy tree (drill down/go back)
- SPACE: Toggle between matched and unmatched prefixes view
- ENTER: Select individual files from the selected prefix
- A: Add a new prefix (press ESC or Enter with empty input to cancel)
- O: Choose a prefix from the list of unmatched prefixes
- D: Delete the selected prefix (in matched view) or add the selected prefix (in unmatched view)
- C: Copy all matched files to the config directory
- S: Save the current list of prefixes to the JSON file
- Q: Quit the application
Individual File Selection
When you press ENTER on a prefix, a dialog opens that allows you to:
- In matched view: Select individual files to remove from the matching set
- In unmatched view: Select individual files to add to a matching prefix
Within the file selection dialog:
- Use UP/DOWN to navigate between files
- Press SPACE to toggle selection of a file
- Press ENTER to confirm your selection
- Press ESC to cancel
Configuration File
The script uses a JSON file to store prefixes. The default file is created at first run:
{
"prefixes": [
"put.your.prefixes.here"
]
}
You can modify this file directly or use the TUI to manage the prefixes.
Directory Structure
/your/working/directory/
├── config_selector.py # Main script
├── config_prefixes.json # Configuration prefixes list
├── original_config/ # Source directory containing all configuration files
└── config/ # Target directory where matched files will be copied