Skip to main content

A command-line tool to generate folder and file structures from YAML templates

Project description

Scaffolder

A command-line tool to generate folder and file structures from YAML templates.

Features

  • 🚀 Fast: Uses asynchronous I/O for efficient file operations
  • 🛠️ Simple: Define your project structure in a simple YAML file
  • 🎨 Visual: Rich console output with color-coded status messages
  • 🔄 Non-destructive: Asks for confirmation before overwriting existing files
  • 🧩 Flexible: Creates files with or without content, nested directories, and more
  • 📊 Preview: Visualize your project structure before generating it
  • 🔧 Templates: Built-in templates for common project structures

Installation

pip install scfldr

Or install from source:

git clone https://github.com/utkarshg1/scfldr.git
cd scfldr
pip install -e .

Usage

Creating Your Project Structure

Create a YAML template file to define your desired file structure:

# template.yaml
src:
  main.py: |
    def main():
        print("Hello, world!")

    if __name__ == "__main__":
        main()
  utils:
    helpers.py: |
      def add(a, b):
          return a + b
docs:
  README.md: "# My Project\n\nThis is a sample project."
tests:
  test_main.py: |
    def test_sample():
        assert True

Then generate your project structure:

scfldr generate-structure --template template.yaml --output my_project

Creating Example Templates

You can quickly create example template files:

scfldr create-example --type basic --output my_template.yaml
scfldr create-example --type web --output web_template.yaml
scfldr create-example --type python_package --output pkg_template.yaml

Previewing Structure

Preview the structure defined in your template without generating files:

scfldr show-structure --template template.yaml

Command Line Options

Usage: scfldr [COMMAND] [OPTIONS]

Generate folder/file structure from a YAML template.

Commands:
  generate-structure     Generate a project structure from a YAML template
  show-structure         Preview the directory structure from a YAML template
  create-template-file   Create a YAML template file from predefined examples
  create-example         Generate an example YAML template file

Options:
  --help                 Show this message and exit

Generate Structure Options:
  --template PATH        Path to the YAML template. [default: template.yaml]
  --output PATH          Output directory root. [default: .]
  --force / --no-force   Overwrite existing output directory if it exists.

Show Structure Options:
  --template PATH        Path to the YAML template. [default: template.yaml]

Create Template File Options:
  TEMPLATE_NAME          Name of the template to create (e.g., 'basic', 'web', 'python_package')
  --output-path PATH     Output path for the YAML template file. [default: template.yaml]

Create Example Options:
  --output PATH          Path to save the example template. [default: template.yaml]
  --type TEXT            Type of template to generate (basic, web, python_package). [default: basic]
  --force / --no-force   Overwrite existing file if it exists.

YAML Template Format

The YAML template follows a simple structure:

  • Keys represent directory or file names
  • Values represent:
    • For directories: A nested dictionary defining child entities
    • For files: String content (can be multiline using YAML's | syntax)
    • For empty directories: An empty dictionary {}

Example:

# Basic structure
project:
  src:
    main.py: |
      def main():
          print("Hello, world!")
    utils: {} # Empty directory
  README.md: "# Project Title"

Predefined Templates

Scaffolder comes with several predefined templates that you can use to quickly start a project:

Basic Template

A simple project structure with source files, documentation, and tests.

scfldr create-template-file basic --output-path basic_template.yaml

Web Template

A Flask web application with static files, templates, and basic setup.

scfldr create-template-file web --output-path web_template.yaml

Python Package Template

A standard Python package structure with tests, setup.py, and more.

scfldr create-template-file python_package --output-path package_template.yaml

Development

Requirements

  • Python 3.7+
  • Dependencies:
    • typer
    • pyyaml
    • asyncio
    • aiofiles
    • rich

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scfldr-0.1.3.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scfldr-0.1.3-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file scfldr-0.1.3.tar.gz.

File metadata

  • Download URL: scfldr-0.1.3.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for scfldr-0.1.3.tar.gz
Algorithm Hash digest
SHA256 0f55eb42e9758ccf7fe79597f0046961ae6f9d6a82515e82a585130821bcc8ac
MD5 b9b67bf9ab989a0c013861ef0477898c
BLAKE2b-256 523c1f4dbeb018a39211331eac0cd3fcf3ed2e74430673b595ea3b4f45c0c747

See more details on using hashes here.

File details

Details for the file scfldr-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: scfldr-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for scfldr-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d59cf3e500c87fef3d0f996d662f42ef85067f5563a365e868132bc15d177bda
MD5 8809f74ab7a1888032abef3a696e2068
BLAKE2b-256 50ed5ac227de07fe8dd3e6909046dcd8def408c45e204693a22f9973d912ae3e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page