Metadata-Version: 2.1
Name: tackle-box
Version: 0.3.0b1
Summary: Tackle box 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 creating a web of interoperable CLIs.
Home-page: https://github.com/robcxyz/tackle-box
Author: Rob Cannon
Author-email: robc.io.opensource@gmail.com
License: BSD
Description: # Tackle
        
        [![pypi](https://img.shields.io/pypi/v/tackle-box.svg)](https://pypi.python.org/pypi/tackle-box)
        [![python](https://img.shields.io/pypi/pyversions/tackle-box.svg)](https://pypi.python.org/pypi/tackle-box)
        [![codecov](https://codecov.io/gh/robcxyz/tackle-box/branch/main/graphs/badge.svg?branch=main)](https://codecov.io/github/robcxyz/tackle-box?branch=main)
        [![main-tests](https://github.com/robcxyz/tackle-box/actions/workflows/main.yml/badge.svg)](https://github.com/robcxyz/tackle-box/actions)
        
        [//]: # (<img align="right" width="80" height="80" src="https://raw.githubusercontent.com/akarsh/akarsh-seggemu-resume/master/akarsh%20seggemu%20resume/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60%403x.png" alt="Resume application project app icon">)
        
        * [Documentation](https://robcxyz.github.io/tackle-box)
        * [PyPI](https://pypi.org/project/tackle-box/)
        * [BSD License](LICENSE)
        
        [//]: # (Tackle box is a language for making modular declarative CLIs. Make any yaml/json configuration file dynamic/callable with turing complete flow control common to any general purpose programming language.)
        
        Tackle box is a tool for making modular code generators and declarative CLIs. It can make any yaml / json file callable by giving users access to a collection of hooks to perform any number of special actions with flow control common to a general purpose programming language.  
        
        > Warning: Tool is in it's very early phases and only now considered stable enough to use. It may never reach 1.x version as, if it gets enough stars, it will be converted to a spec and re-written in rust (ie give it a star if you'd like to see that).
        
        [//]: # (- [Install]&#40;#install&#41;)
        
        [//]: # (- [Hello world]&#40;#hello-world&#41;)
        
        [//]: # (- [Topics]&#40;#topics&#41;)
        
        [//]: # (- [Roadmap]&#40;#roadmap&#41;)
        
        ### Install
        
        Note: tackle can install dependencies on its own. Check [docs]() for advanced installation methods to isolate tackle from your system python.
        
        ```shell
        python -m venv env
        pip install tackle-box
        ```
        
        ### Hello world
        
        To call tackle, create a yaml file and run `tackle hello-world.yaml`.
        
        Use the [print](https://robcxyz.github.io/tackle-box/providers/Console/print/) hook.
        ```yaml
        hw->: print Hello world!
        ```
        
        Using [jinja templating](https://robcxyz.github.io/tackle-box/jinja), hooks can be called in [four different ways](https://robcxyz.github.io/tackle-box/jinja).
        ```yaml
        words: Hello world!
        expanded:
          ->: print
          objects: "{{words}}"
        compact->: print {{words}}
        jinja_extension->: "{{ print(words) }}"
        jinja_filter->: "{{ words | print }}"
        ```
        
        Interactive example with [prompt](https://robcxyz.github.io/tackle-box/providers/Prompts/) hooks.
        ```yaml
        name->: input
        target:
          ->: select Say hi to who?
          choices:
            - world
            - universe
        hello->: print My name is {{name}}. Hello {{target}}!
        ```
        
        Hooks can have for [loops](https://robcxyz.github.io/tackle-box/hook-methods/#loops), [conditionals](https://robcxyz.github.io/tackle-box/hook-methods/#conditionals), and [other base methods](https://robcxyz.github.io/tackle-box/hook-methods/#methods).
        ```yaml
        words:
          - Hello
          - cruel
          - world!
        expanded:
          ->: print {{item}}
          for: keys(words)
          if: item != 'cruel'
        compact->: print {{item}} --for words --if "item != 'cruel'"
        ```
        
        Hooks can be [written in python](https://robcxyz.github.io/tackle-box/writing-tackle-files/).  
        ```python
        from tackle import BaseHook
        
        class Greeter(BaseHook):
            hook_type: str = "greeter"
            target: str
            args: list = ['target']
            def exec(self):
                print(f"Hello {self.target}")
        ```
        
        Or new hooks can be [declaratively created](https://robcxyz.github.io/tackle-box/declarative-hooks/) with tackle.
        ```yaml
        greeter<-:
          target: str
          args: ['target']
          exec:
            hi->: print Hello {{target}}
        ```
        
        And both can be called in the same way.
        ```yaml
        hello: world!
        compact->: greeter {{hello}}
        expanded:
          ->: greeter
          target: "{{hello}}"
        jinja_extension->: "{{ greeter(hello) }}"
        jinja_filter->: "{{ hello | greeter }}"
        ```
        
        Or can be imported / called remotely.
        ```yaml
        local-call->: tackle hello-world.yaml
        remote-call->: tackle robcxyz/tackle-hello-world
        # Or
        import-hello_>: import robcxyz/tackle-hello-world
        call->: greeter world!
        ```
        
        Creating a web of declarative CLIs.
        
        ### Topics
        - [Writing Tackle Files](https://robcxyz.github.io/tackle-box/writing-tackle-files/)
        - [Creating Providers](https://robcxyz.github.io/tackle-box/creating-providers/)
        - [Blocks and Flow Control]() - wip
        - [Memory Management](https://robcxyz.github.io/tackle-box/memory-management/)
        - [Special Variables]() - wip
        - [Declarative Hooks](https://robcxyz.github.io/tackle-box/declarative-hooks/)
        - [Declarative CLIs]() - wip
        
        ### Roadmap
        
        - Declarative hook inheritance
        - Declarative schemas
        - Declarative methods
        - Cached providers
        - State management
        
        ### Code of Conduct
        
        Everyone interacting in the tackle-box project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [PyPA Code of Conduct](https://www.pypa.io/en/latest/code-of-conduct/).
        
        ## Credit
        
        Special thanks to the [cookiecutter](https://github.com/cookiecutter/cookiecutter) community for laying the basis for this project.
        
Keywords: cookiecutter,tackle,tackle-box,tacklebox,tackle box,Python,projects,project templates,Jinja2,skeleton,scaffolding,project directory,package,packaging,kubernetes
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Programming Language :: Python
Classifier: Topic :: Software Development
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Provides-Extra: postgres
Provides-Extra: toml
Provides-Extra: kubernetes
Provides-Extra: console
Provides-Extra: web
Provides-Extra: git
Provides-Extra: dev
Provides-Extra: all
