echafaudage 0.1.0
A lighting scaffolding python tool without dependencies
License: BSD License
Keywords: scaffolding skeleton

===========
Echafaudage
===========

A scaffolding python tool without dependencies

Features :

* erect and create scaffolding easily
* no dependency
* standalone file executable directly with ``python -c "$(curl ...)"``

Use case :

* very short quick start project (you need install nothing except python)


Example of use
==============

You can directly erect scaffolding **without installing nothing on your system**.

Example, if you want erect `Python package scaffolding <https://github.com/harobed/python_package_scaffolding>`_ 
scaffolding then **Paste that at a Terminal prompt** :

::

    $ python -c "$(curl -fsSL https://raw.github.com/harobed/echafaudage/master/echafaudage.py)" -s https://github.com/harobed/python_package_scaffolding/archive/master.zip /tmp/my_new_project


Next *echafaudage* ask some questions :

::

    mail : contact@stephane-klein.info
    version : 0.1.0
    package_name : my-project
    author : Stéphane Klein

Now your project is in ``/tmp/my_new_project/``

::

    $ ls /tmp/my_new_project/
    bootstrap.py  devel-requirements.txt  my_project  requirements.txt  setup.py  tests  unittest.cfg


You can also install "echafaudage" on your system
==================================================

::

    $ pip install echafaudage
  
And use ``echafaudage`` like this :

::

    $ echafaudage -s https://github.com/harobed/python_package_scaffolding/archive/master.zip /tmp/my_new_project

You can also directly set some variable in command line :

::

    $ echafaudage -s https://github.com/harobed/python_package_scaffolding/archive/master.zip /tmp/my_new_project --vars project_name=my-project,version=1.0


echafaudage usage
=================

::

    $ bin/echafaudage --help
    Usage: echafaudage [options] -s <scaffolding> [<TARGET>]

    Arguments:
        TARGET where scaffolding will be created, by default it is "." (current directory)


    Options:
        -s, --scaffolding=<scaffolding> The scaffolding to use, can be a directory path,
                                        an archive or archive url.
        --vars=<variables>              Custom variables, e.g --vars hello=world,sky=blue
        -h --help                       Show this screen.
        -v, --verbose
        --version


    Example:

        $ echafaudage -s /path/to/directory/

        or

        $ echafaudage -s my_scaffolding.tar.gz

        or

        $ echafaudage -s http://example.com/my_scaffolding.tar.gz


How to create new scaffolding
=============================

First, you can see `Python package scaffolding <https://github.com/harobed/python_package_scaffolding>`_ 
scaffolding example.

In this repository : 

::

    .
    ├── README.rst
    ├── bootstrap.py
    ├── devel-requirements.txt
    ├── requirements.txt
    ├── scaffolding.json               <= scaffolding configuration file
    ├── setup.py.tmpl                  <= template file
    ├── tests
    │   └── test_basic.py
    ├── unittest.cfg
    └── {{package_name_underscore}}    <= this folder is renamed with "package_name_underscore" variable value
        └── __init__.py.tmpl           <= template file

``{{package_name_underscore}}/__init__.py.tmpl`` content :

::

    __version__ = '{{version}}'

| The file with ``.tmpl`` extension are templates files.
| Template file are parsed by `tempita <http://pythonpaste.org/tempita/>`_ template engine with variables
  pass to *echafaudage*.
| The ``.tmpl`` extension is stripped in target folder.

The ``scaffolding.json`` (json format) configure the variable list :

::

    {
        "variables": {
            "package_name": null,
            "author": null,
            "mail": null,
            "package_name_underscore": {
                "lambda": "vars['package_name'].replace('-', '_')"
            },
            "version": {
                "default": "0.1.0"
            }
        },
        "ignores": [
            "README.rst"
        ]
    }

* "variables" is dict with the list of variables
* "ignores" is a list with the list of file to ignore

See also
========

If you want more powered scaffolding tool, you can look at `mr.bob <http://mrbob.readthedocs.org/en/latest/index.html>`_.

More information about Python Skeleton Builder Tools see this wiki page : https://wiki.python.org/moin/SkeletonBuilderTools