Skip to main content

A tool to scaffold a projects from templates

Project description

skaf

Overview

skaf is a Python tool designed to simplify project scaffolding. It provides a simple interface for defining project templates that can be rendered with minimal effort. Here's a quick guide to installing and making templates:

Installation

Ensure you have Python 3.10 or above. Install using pip:

pip install skaf

Alternatively, you can clone and install the local package:

git clone <repository-url>
cd skaf
pip install .

Creating your own templates

  1. Create a template directory
    In skaf, templates are directories of files that may or may not contain templating blocks. The default templater is jinja2, which is a full-featured templating engine with advanced features. (Note that skaf does not currently use jinja Loaders)

    Any files that have a .jinja file suffix will be rendered. Otherwise, the file will be left as-is.

    All files should be placed in a directory structure that looks like:

    my-template-root/
       ├── templates/
       │   └── [any files you want]
       └── template_properties.yaml   # this is metadata
    

    For example, imagine I want to generate a customized hello world printer that is hard-coded to say hello to a specific person named John. I would create the following file:

    # my-template-root/templates/hello.py.jinja
    
    print("Hello {{ some_name }}!")
    
  2. Create a template_properties.yaml
    Next, we can declare metadata about the template. At this point, that primarily looks like declaring a list of variables that might have default values. There are a couple of other optional top-level fields as well:

    templater: jinja2  # default
    auto_use_defaults: false  # default
    custom_variables:
    - name: "some_name"
      type: "str"  # optional
      default: "World"  # optional
      description: Who are we saying hello to?  # optional
    

    For custom variables, the type, default, and description fields are optional. Only name is required.

    When rendering is run, you will be prompted to enter a value for the some_name variable or to accept the default value World. If we had instead specified that top-level value auto_use_defaults: true, then the templater would run without asking for input, and would provide World in as the value for some_name. (This particular behavior can also be overridden when invoking the CLI command.)

    The two top-level fields templater and auto_use_defaults are shown here with default values.

Command-line Usage

The CLI provides several flags and arguments to customize the initialization of a project with templates:

skaf <project_name> [options]

Positional Arguments:

  • <project_name>: The name of the project to create.

Options:

  • -t, --template <template_name>: Specify the name of the project template to use.
  • -p, --path <template_directory>: Provide the path to a local template directory.
  • -o, --output <output_directory>: Set the output directory for the project. Defaults to the current working directory.
  • -f, --force: Force overwrite of existing files if they already exist.
  • --auto-use-defaults: Override the template properties' auto_use_defaults with an explicit value here.
  • --debug: Enable debug mode, which will raise exceptions rather than catching them with a tidier output.

Example Commands

  1. Creating a project with a template that is included in the package:

    skaf my_project -t setuptools_pyproject
    
  2. Using a local, user-defined template:

    skaf my_project -p /path/to/my/template
    
  3. Defining an Output Directory:

    skaf my_project -o /path/to/output -p /path/to/my/template
    

Developing Templates

To create and use custom templates in skaf, follow these steps:

  1. Directory Setup:

    • In skaf, templates are directories of files that contain templating blocks. Custom templates can be created in an location on your local machine and should have the following structure:

      my-template-root/
         ├── templates/
         │   └── [any files you want]
         └── template_properties.yaml   # this is metadata
      
  2. template_properties.yaml:

    • Define custom variables and the templating engine to use.
    • Example properties:
      custom_variables:
        - name: "author_name"
          type: "string"
          default: "John Doe"
          description: "The name of the project author."
      templater: "jinja2"
      
  3. Render your template

    • Run the following command:
      skaf my-project --path path/to/my-template-root
      

Development Dependencies

To contribute or run tests, install development dependencies:

pip install .[dev]

Contribute

If you find a bug or have a feature request, please file an issue.

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

skaf-0.1.0.tar.gz (18.1 kB view details)

Uploaded Source

Built Distribution

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

skaf-0.1.0-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file skaf-0.1.0.tar.gz.

File metadata

  • Download URL: skaf-0.1.0.tar.gz
  • Upload date:
  • Size: 18.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for skaf-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9fbc28f8c7220294d7f916f522400c55af67e81eff83357fd1562d6f17bda10c
MD5 fa5335d228fda1e366ebc05926cec899
BLAKE2b-256 766eba3d725bb3c08c01d8ea880d49e9736f333055920745a71e83a529c761c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for skaf-0.1.0.tar.gz:

Publisher: manual.publish-pypi.yml on jdraines/skaf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file skaf-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: skaf-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for skaf-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a1e78f3ea529bf5df2b332d257aec4bb1aabe25fdd1367857307a6c536451ab6
MD5 1b6021ef251612ef863274d1ecc08c91
BLAKE2b-256 c258453b6ff1ff13ab3aabe68edc1e410d5d5f8c66729d5fef07acfe3af72770

See more details on using hashes here.

Provenance

The following attestation bundles were made for skaf-0.1.0-py3-none-any.whl:

Publisher: manual.publish-pypi.yml on jdraines/skaf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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