Metadata-Version: 2.1
Name: tasker
Version: 0.2
Summary: Run functions as scripts
Home-page: https://github.com/s4g/tasker
Author: Vyacheslav Rafalskiy
Author-email: rafalskiy@gmail.com
License: MIT License
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
License-File: LICENSE

Tasker
======

Tasker is a way to organize your scripts. If you have dozens of small scripts and you keep forgetting what they do and what parameters they take, **tasker** is for you. Instead of scripts you write functions, put them in a file or a couple of them, and then run the main tasker script giving them the task name and the parameters of the task like this:

::

    run_task <task-name> [<task-parameter>]...

The **help** task will scan your tasks package and give you the signatures and docstrings of your tasks.

To be considered as a task, the function name should end with ``_task``. The task name is the function name less the suffix. Suppose we have the following file stucture:

::

    run_task
    tasks/
        __init__.py
        moretasks.py

``__init__.py``

.. code-block:: python

    def one_task(p1):
        print 'in one_task, parameters:', p1

    def two_task(p1, p2):
        print 'in two_task, parameters:', p1, p2

and ``moretasks.py``

.. code-block:: python

    def t1_task(p1):
        print 'in t1_task, parameters:', p1

    def t2_task(p1, p2=None):
        print 'in t2_task, parameters:', p1, p2

Then we can run the following examples:

::

    run_task one foo
    run_task two foo baz
    run_task two foo               # fails, not enough parameters
    run_task moretasks.t1 spam
    run_task moretasks.t2 spam ham
    run_task moretasks.t2 spam     # works too because of default value of the second parameter

To generate the ``run_task`` script in the current directory run:

::

    python -m tasker <fully-qualified-name-of-tasks-package>  # default = "tasks"

IMPORTANT: All task parameters are strings.

You can include tasks with distribution of your project and run them all with a single installed script. Suppose your project looks like this:

::

    someproject/
        __init__.py
        somestuff.py
        tasks/

Then you can include the following snippet in ``__init__.py``:

.. code-block:: python

    def run_task():
        import tasker
        tasker.main('tasks')

then include the following in your setuptools-based ``setup.py``:

::

    entry_points={
        'console_scripts': [
            'someproject_task = someproject:run_task',
            ],
        }

This setup will create script ``someproject_task``, which will know about your tasks.

Installation
------------

::

    pip install tasker

The current version is Python 3 only. Use version 0.1.2 for Python 2.7.

Origin
------

This was inspired by the Ruby's ``rake`` utility. I used for some time the ``shovel``
python clone of ``rake`` until I got dissatisfied with it. The important difference of ``tasker``
(apart from simplicity) is that it does not depend on current working directory.


