<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Project><name>rod.recipe.appengine</name>
<shortdesc>ZC Buildout recipe for setting up a google appengine development environment</shortdesc>
<description>====================
rod.recipe.appengine
====================

Buildout recipe for setting up a google appengine development environment.

The rod.recipe.appengine is a zc.buildout recipe to build, test and deploy
projects for the google appengine. It makes it easy to use eggs and resolve
their dependencies automatically.

To be honest, this is a recipe for scrambled eggs. It produces a zip file
containing all configured external packages in a traditional folder hierarchy.

A brief documentation
=====================

This recipe takes a number of options:

appengine-lib
    Path to an already installed appengine library

eggs
    List of required eggs

packages
    A list of packages to be included into the zip archive, which will be
    uploaded to the appspot.

src
    The directory which contains the project source files.

url
    The url for fetching the google appengine distribution

zip-name
    The name of the zip archive containing all external packages ready
    to deploy.


Tests
=====

We will define a buildout template used by the recipe:

    &gt;&gt;&gt; buildout_template = """
    ... [buildout]
    ... develop = %(egg_src)s
    ... parts = sample
    ...
    ... [sample]
    ... recipe = rod.recipe.appengine
    ... eggs = foo.bar
    ... url = http://googleappengine.googlecode.com/files/google_appengine_1.2.3.zip
    ... """

We'll start by creating a buildout:

    &gt;&gt;&gt; import os.path
    &gt;&gt;&gt; import rod.recipe.appengine.tests as tests
    &gt;&gt;&gt; egg_src = os.path.join(os.path.split(tests.__file__)[0], 'foo.bar')
    &gt;&gt;&gt; write('buildout.cfg', buildout_template % {'egg_src': egg_src})

Running the buildout gives us:

    &gt;&gt;&gt; output = system(buildout)
    &gt;&gt;&gt; if output.endswith("Google App Engine distribution...\n"): True
    ... else: print output
    True

And now we try to run the appserver script:

    &gt;&gt;&gt; print system(os.path.join('bin', 'sample'))
    &lt;BLANKLINE&gt;
    ...
    Invalid arguments
    &lt;BLANKLINE&gt;

There should be a configuration script in bin as well:

    &gt;&gt;&gt; print system(os.path.join('bin', 'appcfg'))
    Usage: appcfg [options] &lt;action&gt;
    &lt;BLANKLINE&gt;
    ...
    &lt;BLANKLINE&gt;

Changes
=======

1.2.1 2009-07-03
----------------

  - Uses a much better method for excluding optional c extensions and compiled
    modules.
  - A step forward in platform independence.


1.2.0 2009-06-24
----------------

  - Creates appcfg script.


1.1.1 2009-06-07
----------------

  - Makes symbolic links for application files.
  - Downloads stay untouched.


1.1.0 2009-04-08
----------------
 
  - Mostly rewritten.
  - Installs google appengine as part.
  - Adding dummy pkg_resources module to handle namespace package relicts.
  - Tests added.
  - Ready for Google App Engine SDK 1.2.0


1.0.0b5 2009-01-20
------------------

  - Requires Google App Engine SDK 1.1.8


1.0.0b4 2008-09-04
------------------

  - Create and use PROJECT_HOME/var to place temporary project files like
    data base files.


1.0.0b3 2008-09-02
------------------

  - Copy package contents to temporary library directory.


1.0.0b2 2008-09-02
------------------

  - Installs the whole distribution in the parts directory now. So it is ready
    to test and deploy.


1.0.0b1 2008-09-01
------------------

  - First beta release.</description>
<homepage rdf:resource="http://pypi.python.org/pypi/rod.recipe.appengine" />
<maintainer><foaf:Person><foaf:name>Tobias Rodaebel</foaf:name>
<foaf:mbox_sha1sum>9dd56115a3267d98e250e88d8732fdee9a5f1bef</foaf:mbox_sha1sum></foaf:Person></maintainer>
<release><Version><revision>1.2.1</revision></Version></release>
</Project></rdf:RDF>