tackle


Nametackle JSON
Version 0.7.2 PyPI version JSON
download
home_pagehttps://github.com/sudoblockio/tackle
SummaryTackle is a declarative DSL for building modular workflows and code generators. Tool is plugins based and can easily be extended by writing additional hooks or importing external providers that can be turned into a self documenting CLI, all out of yaml, json, toml.
upload_time2025-07-19 09:48:15
maintainerNone
docs_urlNone
authorRob Cannon
requires_python>=3.10
licenseBSD
keywords tackle tackle-box tacklebox tackle box python projects jinja2 project templates cookiecutter skeleton scaffolding project directory package packaging kubernetes config file management configuration language declarative cli
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <img align="right" width="280" height="280" src="https://raw.githubusercontent.com/sudoblockio/tackle/main/docs/assets/logo-box.png">

# tackle

[![pypi](https://img.shields.io/pypi/v/tackle.svg)](https://pypi.python.org/pypi/tackle)
[![python](https://img.shields.io/pypi/pyversions/tackle.svg)](https://pypi.python.org/pypi/tackle)
[![codecov](https://codecov.io/gh/sudoblockio/tackle/branch/main/graphs/badge.svg?branch=main)](https://codecov.io/github/sudoblockio/tackle?branch=main)

[//]: # ([![codeql]&#40;https://github.com/sudoblockio/tackle/actions/workflows/codeql.yml/badge.svg&#41;]&#40;https://github.com/sudoblockio/tackle/actions/workflows/codeql.yml&#41;)
[//]: # ([![main-tests]&#40;https://github.com/sudoblockio/tackle/actions/workflows/main.yml/badge.svg&#41;]&#40;https://github.com/sudoblockio/tackle/actions&#41;)
[//]: # (* [Discord]&#40;https://discord.gg/7uVUfUVD7K&#41;)

* [Documentation](https://sudoblockio.github.io/tackle)
* [PyPI](https://pypi.org/project/tackle/)

tackle is an experimental DSL built as a fork of [cookiecutter](https://github.com/cookiecutter/cookiecutter) written in documents such as json, yaml, or toml with primitives of a general purpose programming language including functions, structs, methods, and types with rich control flow. It turns a config file into self documenting CLI in a concise declarative syntax.

Core to the language is the notion of a `hook` which is a [pydantic](https://github.com/pydantic/pydantic) [BaseModel](https://docs.pydantic.dev/latest/api/base_model/) under the hood. These hooks can be created, called, or combined in documents and / or python with inheritance and composition. Tackle ships with over 100 native hooks to perform rudimentary tasks from prompting users for CLI inputs, reading / manipulating / writing data to and from files, to rendering templates for code generation / schema translations.

Major syntax changes will be made before the language is officially released and thus using the language is discouraged without reaching out first by leaving issues in this repo. A formal spec is under active development but has sort of taken the back seat while Rob is working on sudoblock.

**`=< v0.6.0`**

```yaml
greeter(target str = 'world')<-:
  ->: print Hello {{target}}
```

**`Future`**

```yaml
def greeter(target str = 'world'):
  =: print Hello {{target}}
```

When the syntax is stable, this project will be formally released. Please reach out via [discord](https://discord.gg/7uVUfUVD7K) if you want to talk directly about it in the meantime. 

### Code of Conduct

Everyone interacting in the tackle project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [PyPA Code of Conduct](https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md).

## Credit

Special thanks to [audreyfeldroy](https://github.com/audreyfeldroy) for creating [cookiecutter](https://github.com/cookiecutter/cookiecutter), the basis for this project. Would not have been possible without it and other core dependencies like [pydantic](https://github.com/pydantic/pydantic) and [jinja](https://github.com/pallets/jinja).

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/sudoblockio/tackle",
    "name": "tackle",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "tackle, tackle-box, tacklebox, tackle box, Python, projects, Jinja2, project templates, cookiecutter, skeleton, scaffolding, project directory, package, packaging, kubernetes, config file management, configuration language, declarative cli",
    "author": "Rob Cannon",
    "author_email": "robc.io.opensource@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/7b/dd/68478c339de411c93e411e8b46b16f76961133ff93b0a3250eb6710176f5/tackle-0.7.2.tar.gz",
    "platform": null,
    "description": "<img align=\"right\" width=\"280\" height=\"280\" src=\"https://raw.githubusercontent.com/sudoblockio/tackle/main/docs/assets/logo-box.png\">\n\n# tackle\n\n[![pypi](https://img.shields.io/pypi/v/tackle.svg)](https://pypi.python.org/pypi/tackle)\n[![python](https://img.shields.io/pypi/pyversions/tackle.svg)](https://pypi.python.org/pypi/tackle)\n[![codecov](https://codecov.io/gh/sudoblockio/tackle/branch/main/graphs/badge.svg?branch=main)](https://codecov.io/github/sudoblockio/tackle?branch=main)\n\n[//]: # ([![codeql]&#40;https://github.com/sudoblockio/tackle/actions/workflows/codeql.yml/badge.svg&#41;]&#40;https://github.com/sudoblockio/tackle/actions/workflows/codeql.yml&#41;)\n[//]: # ([![main-tests]&#40;https://github.com/sudoblockio/tackle/actions/workflows/main.yml/badge.svg&#41;]&#40;https://github.com/sudoblockio/tackle/actions&#41;)\n[//]: # (* [Discord]&#40;https://discord.gg/7uVUfUVD7K&#41;)\n\n* [Documentation](https://sudoblockio.github.io/tackle)\n* [PyPI](https://pypi.org/project/tackle/)\n\ntackle is an experimental DSL built as a fork of [cookiecutter](https://github.com/cookiecutter/cookiecutter) written in documents such as json, yaml, or toml with primitives of a general purpose programming language including functions, structs, methods, and types with rich control flow. It turns a config file into self documenting CLI in a concise declarative syntax.\n\nCore to the language is the notion of a `hook` which is a [pydantic](https://github.com/pydantic/pydantic) [BaseModel](https://docs.pydantic.dev/latest/api/base_model/) under the hood. These hooks can be created, called, or combined in documents and / or python with inheritance and composition. Tackle ships with over 100 native hooks to perform rudimentary tasks from prompting users for CLI inputs, reading / manipulating / writing data to and from files, to rendering templates for code generation / schema translations.\n\nMajor syntax changes will be made before the language is officially released and thus using the language is discouraged without reaching out first by leaving issues in this repo. A formal spec is under active development but has sort of taken the back seat while Rob is working on sudoblock.\n\n**`=< v0.6.0`**\n\n```yaml\ngreeter(target str = 'world')<-:\n  ->: print Hello {{target}}\n```\n\n**`Future`**\n\n```yaml\ndef greeter(target str = 'world'):\n  =: print Hello {{target}}\n```\n\nWhen the syntax is stable, this project will be formally released. Please reach out via [discord](https://discord.gg/7uVUfUVD7K) if you want to talk directly about it in the meantime. \n\n### Code of Conduct\n\nEveryone interacting in the tackle project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [PyPA Code of Conduct](https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md).\n\n## Credit\n\nSpecial thanks to [audreyfeldroy](https://github.com/audreyfeldroy) for creating [cookiecutter](https://github.com/cookiecutter/cookiecutter), the basis for this project. Would not have been possible without it and other core dependencies like [pydantic](https://github.com/pydantic/pydantic) and [jinja](https://github.com/pallets/jinja).\n",
    "bugtrack_url": null,
    "license": "BSD",
    "summary": "Tackle is a declarative DSL for building modular workflows and code generators. Tool is plugins based and can easily be extended by writing additional hooks or importing external providers that can be turned into a self documenting CLI, all out of yaml, json, toml.",
    "version": "0.7.2",
    "project_urls": {
        "Homepage": "https://github.com/sudoblockio/tackle"
    },
    "split_keywords": [
        "tackle",
        " tackle-box",
        " tacklebox",
        " tackle box",
        " python",
        " projects",
        " jinja2",
        " project templates",
        " cookiecutter",
        " skeleton",
        " scaffolding",
        " project directory",
        " package",
        " packaging",
        " kubernetes",
        " config file management",
        " configuration language",
        " declarative cli"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9cdaeb0f740ed0186c9e0319024d96364c69eb556c1cc544640ac263a8a71ee4",
                "md5": "4e6b273f7b46ff6f14e3d96901731573",
                "sha256": "9812c2998f83967cf3bf113a44779eeefaa67d13185b155ca0615dfa966d6382"
            },
            "downloads": -1,
            "filename": "tackle-0.7.2-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4e6b273f7b46ff6f14e3d96901731573",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.10",
            "size": 295959,
            "upload_time": "2025-07-19T09:48:13",
            "upload_time_iso_8601": "2025-07-19T09:48:13.722193Z",
            "url": "https://files.pythonhosted.org/packages/9c/da/eb0f740ed0186c9e0319024d96364c69eb556c1cc544640ac263a8a71ee4/tackle-0.7.2-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7bdd68478c339de411c93e411e8b46b16f76961133ff93b0a3250eb6710176f5",
                "md5": "426fd3631fcfda798005e7fa2515d4c3",
                "sha256": "b235db26327dbada6f6b70a71bb484416549c356436fe34d62248a91c8f89ecc"
            },
            "downloads": -1,
            "filename": "tackle-0.7.2.tar.gz",
            "has_sig": false,
            "md5_digest": "426fd3631fcfda798005e7fa2515d4c3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 261675,
            "upload_time": "2025-07-19T09:48:15",
            "upload_time_iso_8601": "2025-07-19T09:48:15.200228Z",
            "url": "https://files.pythonhosted.org/packages/7b/dd/68478c339de411c93e411e8b46b16f76961133ff93b0a3250eb6710176f5/tackle-0.7.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-19 09:48:15",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "sudoblockio",
    "github_project": "tackle",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "tackle"
}
        
Elapsed time: 0.80922s