Skip to main content

Directory-tree generator library

Project description

Rybak

/ˈrɨ.bak/

Directory-tree generator library.

Synopsis

Rybak is an extension of template engines, which instead of rendering a single file or string, renders a whole directory.

In a way it's similar to Cookiecutter or Copier, but while these programs are designed specifically for generating software projects scaffolding, Rybak is a library for generating arbitrary directory tree structures.

Rybak template is a directory consisting of template files. Jinja, and Mako are supported, though one project can only use a single template engine.

Goals:

  • generate directory-tree based on a user-provided template and data,
  • keep track and remove files that aren't produced by the template,
  • allow for multiple files to be generated from a single template file,
  • support but don't require templates to be git or other DCVS repositories.

Non-goals:

  • command line interface,
  • prompting users for template data.

Usage

from pathlib import Path
from rybak import TreeTemplate
from rybak.jinja import JinjaAdapter
from jinja2.loaders import FileSystemLoader

TreeTemplate(
    JinjaAdapter(loader=FileSystemLoader('template_root')),
).render(
    {'likes': {
        'Alice': 'Bob',
        'Bob': 'Charlie',
        'Charlie': 'cats',
    }},
    Path('target_root'),
)
  • template_root: is the directory containing template files, in this case Jinja templates. Templates can be used in file content, file names and directory names.

Multiple template roots

With Jinja Adapter you can use ChoiceLoader with a collection of FileSystemLoader and PackageLoader instances.

Mako adapter accepts a collection of directories.

Single template multiple data

Template files can be applied to collections of items. In order to do so, a special function is made available, loop_over that iterates over a passed collection. The function can only be used in templates in file names.

loop_over returns the element of the collection, so that it can be used to render name.

model:

names = [
    'Alice',
    'Bob',
    'Charlie',
]

file name: {{loop_over(names)}} would produce three files: Alice, Bob and Charlie.

The current item is also available during rendering the file contents, as model variable item.

Of course, we might want different value in the file name and its content. For that we can manipulate the loop_overs result:

model:

likes = {
    'Alice': 'Bob',
    'Bob': 'Charlie',
    'Charlie': 'cats',
}

file name: {{loop_over(likes.items())[0]}}

file content: {{item[1]}}

loop_over(likes.items()) produces a key-value tuple for each file, and [0] accesses the key.

Similarly, {{items}} would produce the same key-value pair, and [1] accesses the value.

Alternatively, the model could be a list of complex objects:

model:

likes = [
    {'name': 'Alice', 'likes': 'Bob'},
    {'name': 'Bob', 'likes': 'Charlie'},
    {'name': 'Charlie', 'likes': 'cats'},
]

In this case the file name template simplifies to {{loop_over(likes).name}} and the content template to {{item.likes}}.

Installation

Rybak templates can work with either of Jinja, Mako or Torado; so typically you need to install Rybak and one of those libraries.

installing rybak[jinja] or rybak[mako] will handle this.

Name

'y' is pronounced like in 'sit', 'a' like in 'father', just shorter.

Rybak is a Polish word for fisherman.

The original idea was to only support Mako templates, which is named by a species of a shark.

Functionality of this library is provided by the template engine, so picture a fisherman pulled by a shark.

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

rybak-0.5.0.tar.gz (22.3 kB view details)

Uploaded Source

Built Distribution

rybak-0.5.0-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file rybak-0.5.0.tar.gz.

File metadata

  • Download URL: rybak-0.5.0.tar.gz
  • Upload date:
  • Size: 22.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.4.27

File hashes

Hashes for rybak-0.5.0.tar.gz
Algorithm Hash digest
SHA256 9733f6dcb1969092b7ceb0d65454d921ff7f33f24f4da5390e0b1674bfbc26bd
MD5 ca0db75a6dd7f6ce27e35d01cf0445c4
BLAKE2b-256 8f7681fd4eb5bb606426319e0eb81a48146c6e7848798e696bb33b9dd31bf062

See more details on using hashes here.

File details

Details for the file rybak-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: rybak-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.4.27

File hashes

Hashes for rybak-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 34d377b01b0e37ade633589526863428782018d8f46100577452f4181583faae
MD5 255dc8080391a91beec2274902efe75f
BLAKE2b-256 95a6b09acdb6667a9f574a1c124dbecbec1136167ce6fc1bbd1ee3ea08832a7e

See more details on using hashes here.

Supported by

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