Metadata-Version: 1.0
Name: pynt
Version: 0.6.0
Summary: Lightweight Python Build Tool.
Home-page: https://github.com/rags/pynt
Author: Raghunandan Rao
Author-email: r.raghunandan@gmail.com
License: MIT License
Description: pynt - Lightweight Python Build Tool.
        =====================================
        
        `**Raghunandan Rao** <https://github.com/rags>`_
        
        Features
        --------
        
        -  Really quick to learn.
        -  Build tasks are just python funtions.
        -  Manages dependancies between tasks.
        -  Automatically generates a command line interface.
        -  Rake style param passing to tasks
        
        Installation
        ------------
        
        You can install pynt from the Python Package Index (PyPI) or from
        source.
        
        Using pip
        
        ::
        
            $ pip install pynt
        
        Using easy\_install
        
        ::
        
            $ easy_install pynt
        
        Example
        -------
        
        The build script is written in pure Python and pynt takes care of
        managing any dependancies between tasks and generating a command line
        interface.
        
        Tasks are just regular Python functions marked with the ``@task()``
        decorator. Dependancies are specified with ``@task()`` too. Tasks can be
        ignored with the ``@ignore`` decorator.
        
        After defining all tasks ``build(sys.modules[__name__],sys.argv[1:])``
        is called to run the build.
        
        ::
        
        
            #!/usr/bin/python
        
            import sys
            from pynt import task, build
        
            @task()
            def clean():
                '''Clean build directory.'''
                print 'Cleaning build directory...'
        
            @task(clean)
            def html(target='.'):
                '''Generate HTML.'''
                print 'Generating HTML in directory "%s"' %  target
        
            @task(clean, ignore=True)
            def images():
                '''Prepare images.'''
                print 'Preparing images...'
        
            @task(html,images)
            def start_server(server='localhost', port = '80'):
                '''Start the server'''
                print 'Starting server at %s:%s' % (server, port)
        
            @task(start_server) #Depends on task with all optional params
            def stop_server():
                print 'Stopping server....'
        
            @task()
            def copy_file(src, dest):
                print 'Copying from %s to %s' % (src, dest)
        
            @task()
            def echo(*args,**kwargs):
                print args
                print kwargs
                
            if __name__ == '__main__':
                build(sys.modules[__name__],sys.argv[1:])
        
        The command line interface and help is automatically generated. Task
        descriptions are extracted from function docstrings.
        
        ::
        
            $ ./example.py 
            usage: example.py [-h] [-l] [task [task ...]]
        
            positional arguments:
              task              perform specified task and all it's dependancies
        
            optional arguments:
              -h, --help        show this help message and exit
              -l, --list-tasks  List the tasks
        
            Tasks in build file ./example.py:
              clean                       Clean build directory.
              copy_file                   
              echo                        
              html                        Generate HTML.
              images           [Ignored]  Prepare images.
              start_server                Start the server
              stop_server                 
        
            Powered by pynt - A Lightweight Python Build Tool.
        
        pynt takes care of dependencies between tasks. In the following case
        start\_server depends on clean, html and image generation (image task is
        ignored).
        
        ::
        
            $ ./example.py start_server
            [ example.py - Starting task "clean" ]
            Cleaning build directory...
            [ example.py - Completed task "clean" ]
            [ example.py - Starting task "html" ]
            Generating HTML in directory "."
            [ example.py - Completed task "html" ]
            [ example.py - Ignoring task "images" ]
            [ example.py - Starting task "start_server" ]
            Starting server at localhost:80
            [ example.py - Completed task "start_server" ]
        
        The first few characters of the task name is enough to execute the task,
        as long as the partial name is unambigious. You can specify multiple
        tasks to run in the commandline. Again the dependencies are taken taken
        care of.
        
        ::
        
            $ ./example.py cle ht cl
            [ example.py - Starting task "clean" ]
            Cleaning build directory...
            [ example.py - Completed task "clean" ]
            [ example.py - Starting task "html" ]
            Generating HTML in directory "."
            [ example.py - Completed task "html" ]
            [ example.py - Starting task "clean" ]
            Cleaning build directory...
            [ example.py - Completed task "clean" ]
        
        The 'html' task dependency 'clean' is run only once. But clean can be
        explicitly run again later.
        
        pynt tasks can accept parameters from commandline.
        
        ::
        
            $ ./example.py "copy_file[/path/to/foo, path_to_bar]"
            [ example.py - Starting task "clean" ]
            Cleaning build directory...
            [ example.py - Completed task "clean" ]
            [ example.py - Starting task "copy_file" ]
            Copying from /path/to/foo to path_to_bar
            [ example.py - Completed task "copy_file" ]
        
        pynt can also accept keyword arguments.
        
        ::
        
            $ ./example.py start[port=8888]
            [ example.py - Starting task "clean" ]
            Cleaning build directory...
            [ example.py - Completed task "clean" ]
            [ example.py - Starting task "html" ]
            Generating HTML in directory "."
            [ example.py - Completed task "html" ]
            [ example.py - Ignoring task "images" ]
            [ example.py - Starting task "start_server" ]
            Starting server at localhost:8888
            [ example.py - Completed task "start_server" ]
                
            $ ./example.py echo[hello,world,foo=bar,blah=123]
            [ example.py - Starting task "echo" ]
            ('hello', 'world')
            {'blah': '123', 'foo': 'bar'}
            [ example.py - Completed task "echo" ]
        
        Contributors
        ------------
        
        Calum J. Eadie - pynt is preceded by and forked from
        `microbuild <https://github.com/CalumJEadie/microbuild>`_, which was
        created by `Calum J. Eadie <https://github.com/CalumJEadie>`_.
        
        Contributing
        ------------
        
        If you want to make changes the repo is at https://github.com/rags/pynt.
        You will need `pytest <http://www.pytest.org>`_ to run the tests
        ``bash $ ./build.py t`` It will be great if you can raise a `pull
        request <https://help.github.com/articles/using-pull-requests>`_ once
        you are done.
        
        License
        -------
        
        pynt is licensed under a `MIT
        license <http://opensource.org/licenses/MIT>`_
        
        Changes 
        =======
        
        0.6.0 - 17/12/2012
        ------------------
        
        * Simplified ignoring tasks. ignore a keyword param for task and not a separate decorator. [This change is NOT backward compatible!!!]
        * Added support for listing tasks
        * Improved help
        
        
        0.5.0 - 01/12/2012
        ------------------
        
        * Ability to pass params to tasks.
        * Major rewrite and flattening the package hierarchy.
        
        0.4.0 - 17/11/2012
        ------------------
        
        * Support for running multiple tasks from commandline.
        * Ability to run tasks by typing in just the first few unambigious charecters.
        
        
        Changes before forking from microbuild
        ======================================
        
        0.3.0 - 18/09/2012
        ------------------
        
        * Fixed bug in logging. No longer modifies root logger.
        * Added ignore functionality.
        * Extended API documentation.
        
        0.2.0 - 29/08/2012
        ------------------
        
        * Added progress tracking output.
        * Added handling of exceptions within tasks.
        
        0.1.0 - 28/08/2012
        ------------------
        
        * Initial release.
        * Added management of dependancies between tasks.
        * Added automatic generation of command line interface.
        
Platform: UNKNOWN
