
===============================================
minitage.recipe:fetch
===============================================


Abstract
-----------------
    - you need virtualenv and zc.buildout to run tests.
    - This recipe can be used to install python packages in a specific directory aLaDisutils way (python setup.py build && python setup.py install)

Specific options
-----------------
Please look for options at : http://pypi.python.org/pypi/minitage.recipe.common#options-shared-by-all-the-recipes

- *site-packages* : where to drop the builded python files

Specific hooks
---------------

- *pre_setup_hook* : before python setup.py build dance is called
- *pre_install_hook* : before python setup.py install dance is called
- *post_setup_hook* : after python setup.py install dance is called


Let's create a buildout configuration file
-------------------------------------------
::

    >>> rmdir(tempdir)
    >>> mkdir(tempdir)
    >>> cd(tempdir)
    >>> a = [mkdir(d) for d in ('eggs', 'develop-eggs', 'bin', 'src')]
    >>> install_develop_eggs(['minitage.recipe.du'])
    >>> install_eggs_from_pathes(['zc.buildout'], sys.path)
    >>> touch('buildout.cfg')
    >>> sh('virtualenv --no-site-packages .')
    virtualenv --no-site-packages .
    Using real prefix '/usr'
    New python executable in ./bin/python
    Installing setuptools............done.
    <BLANKLINE>
    <BLANKLINE>
    >>> sh('bin/easy_install -U zc.buildout')
    bin/easy_install -U zc.buildout...
    Finished processing dependencies for zc.buildout
    <BLANKLINE>
    <BLANKLINE>
    >>> sh('bin/buildout -o bootstrap')
    bin/buildout -o bootstrap...

Initializing test env.
-----------------------------
::

    >>> if not os.path.exists('foo'):
    ...     mkdir('foo')
    ... else:
    ...     rmdir(foo)
    ...     mkdir('foo')
    >>> touch('foo/setup.py', data="""
    ... from setuptools import setup
    ... setup(name='foo', version='1.0')
    ...
    ... """)
    >>> touch('foo/toto.py', data="""
    ... def f():
    ...     print "foo"
    ...
    ... """)
    >>> noecho = [os.remove(d) for d in os.listdir('.') if '.tar.gz' in d]
    >>> os.chdir('foo')
    >>> sh('python setup.py sdist')
    p...
    >>> noecho = [shutil.copy(os.path.join('dist', d), os.path.join('..', d)) for d in os.listdir('dist')]
    >>> os.chdir('..')



Installing "A la python setup.py install"
--------------------------------------------

You can also install directly from urls.
we ll use it to check the already present distribution files in the cache.

    >>> data = """
    ... [buildout]
    ... parts=ez
    ... [ez]
    ... executable = ${buildout:directory}/bin/python
    ... recipe = minitage.recipe.du
    ... url = file://${buildout:directory}/foo-1.0.tar.gz
    ... site-packages=${buildout:directory}/myfoo
    ... """
    >>> touch('buildout.cfg', data=data)
    >>> sh('bin/buildout -vvvvvv install ez')
    b...
    Installing ez.
    minitage.recipe: Installing python package.
    minitage.recipe: Download archive
    minitage.recipe: Searching cache at ...
    minitage.recipe: Using cache file in /home/kiorky/.buildout/downloads/minitage/foo-1.0.tar.gz
    minitage.recipe: Unpacking in /tmp/buildout.test/__minitage__ez__tmp.
    minitage.recipe: Guessing compilation directory
    minitage.recipe: Setting path
    minitage.recipe: Setting pkgconfigpath
    minitage.recipe: Setting path
    minitage.recipe: Setting path
    minitage.recipe: Setting compilation flags
    minitage.recipe: Running "/tmp/buildout.test/bin/python" setup.py build
    running build
    minitage.recipe: Setting path
    minitage.recipe: Running "/tmp/buildout.test/bin/python" setup.py install --install-purelib="/tmp/buildout.test/myfoo"  --install-platlib="/tmp/buildout.test/myfoo" --prefix=/tmp/buildout.test
    running install
    running bdist_egg
    running egg_info...
    Copying foo-1.0-py2.6.egg to /tmp/buildout.test/myfoo...
    Installed /tmp/buildout.test/myfoo/foo-1.0-py...egg...
    <BLANKLINE>

.. vim:set ft=doctest :
