[Checkins] SVN: bluebream/trunk/ Merge from branch ccomb-merge-templates:

Christophe Combelles ccomb at free.fr
Tue Mar 30 20:44:03 EDT 2010


Log message for revision 110351:
  Merge from branch ccomb-merge-templates:
  Removed the bluebream_simple template and add namespace detection to the base
  template. Added more tests
  
  

Changed:
  U   bluebream/trunk/CHANGES.txt
  U   bluebream/trunk/README.txt
  U   bluebream/trunk/setup.py
  U   bluebream/trunk/src/bluebream/bluebream_base/project_template/etc/site.zcml_tmpl
  U   bluebream/trunk/src/bluebream/bluebream_base/project_template/setup.py_tmpl
  A   bluebream/trunk/src/bluebream/bluebream_base/project_template/src/+main_package+/
  D   bluebream/trunk/src/bluebream/bluebream_base/project_template/src/+namespace_package+/
  U   bluebream/trunk/src/bluebream/bluebream_base/template.py
  U   bluebream/trunk/src/bluebream/bluebream_base/tests/bluebream.txt
  U   bluebream/trunk/src/bluebream/bluebream_base/tests/test_bluebream.py
  D   bluebream/trunk/src/bluebream/bluebream_simple/

-=-
Modified: bluebream/trunk/CHANGES.txt
===================================================================
--- bluebream/trunk/CHANGES.txt	2010-03-31 00:40:51 UTC (rev 110350)
+++ bluebream/trunk/CHANGES.txt	2010-03-31 00:44:03 UTC (rev 110351)
@@ -8,6 +8,9 @@
 
 - Use project name as i18n_domain in base template
 
+- Merge the two templates into a single one by allowing to create a
+  flat or nested namespace structure, depending on the project name.
+
 1.0a5 (2010-03-28)
 ------------------
 

Modified: bluebream/trunk/README.txt
===================================================================
--- bluebream/trunk/README.txt	2010-03-31 00:40:51 UTC (rev 110350)
+++ bluebream/trunk/README.txt	2010-03-31 00:44:03 UTC (rev 110351)
@@ -18,16 +18,15 @@
 Features
 --------
 
-A few features distinguish BlueBream from other Python web
-frameworks:
+Here are the features distinguishing BlueBream from other Python web frameworks:
 
-- BlueBream is built on top of the `Zope Tool Kit
+- BlueBream is built on top of the `Zope Toolkit
   <http://docs.zope.org/zopetoolkit>`_ (ZTK), which has many years of
   experience proving it meets the demanding requirements for stable,
   scalable software.
 
-- BlueBream uses the powerful and familiar Buildout_ system written
-  in Python.
+- BlueBream uses the powerful and familiar Buildout_ building system written in
+  Python.
   
 - BlueBream employs the Zope Object Database ZODB_, a transactional
   object database, providing extremely powerful and easy to use
@@ -42,14 +41,12 @@
   *Separation of concerns* to create highly cohesive reusable
   components (zope.component_).
 
-- BlueBream implements Python Web Server Gateway Interface (`WSGI
-  <http://www.wsgi.org/wsgi>`_) using `Paste
-  <http://pythonpaste.org>`_, `PasteScript
-  <http://pythonpaste.org/script>`_, and `PasteDeploy
+- BlueBream implements the `WSGI` specification (`Web Server Gateway Interface
+  <http://www.wsgi.org/wsgi>`_) with the help of `PasteDeploy
   <http://pythonpaste.org/deploy>`_.
 
 - BlueBream includes a number of well tested components to implement
-  common activities.  A few are of these are:
+  common activities.  A few of these are:
   
   - zope.publisher_ publishes Python objects on the web, emphasizing
     `WSGI <http://www.wsgi.org/wsgi>`_ compatibility
@@ -60,12 +57,12 @@
   - zope.testing_ and zope.testbrowser_ offer unit and functional testing 
     frameworks 
 
-  - zope.pagetemplate_ is an XHTML-compliant language for devloping
+  - zope.pagetemplate_ is an XHTML-compliant language for developing
     templates
 
-  - zope.schema_ is a schema engine
+  - zope.schema_ is a schema engine to describe your data models
 
-  - zope.formlib_ is a tool for automatically generating forms
+  - zope.formlib_ is a tool for automatically generating forms from your schemas
 
 .. _Buildout: http://www.buildout.org
 .. _ZODB: http://www.zodb.org
@@ -92,8 +89,8 @@
 Internet access to `PyPI <http://pypi.python.org/pypi>`_ is required
 to perform installation of BlueBream.
 
-The ``bluebream`` distribution provides a template based project
-creation based on PasteScript template.  Once BlueBream is installed,
+The ``bluebream`` distribution provides a quick project
+creation tool based on PasteScript templates.  Once BlueBream is installed,
 run ``paster`` command to create the project directory structure.
 The ``create`` sub-command provided by paster will show a wizard to
 create the project directory structure.
@@ -102,31 +99,31 @@
 
   $ paster create -t bluebream
 
-This will bring a wizard asking details about your new project.  If
-you provide package name, namespace package name and version number,
-you will get a working application which can be modified further.
-The project name will be used as the name of egg.  You can also
-change the values provided later.
+This will bring a wizard asking details about your new project.  If you provide
+a package name and version number, you will get a working application which can
+be modified further.  The project name will be used as the egg name. You can
+also change the values provided later.
 
-The project name can be give given as a command line argument::
+The project name can be given as a command line argument::
 
   $ paster create -t bluebream sampleproject
 
-The name of namespace package also can be given from the command line::
+You can provide a dotted name so that the package be created in a namespace,
+with any number of levels, such as "sample.main" or "sample.app.main". It will
+result in a nested structure allowing you to split large projects into several
+packages.
 
-  $ paster create -t bluebream sampleproject namespace_package=mycompany
-
 If you provide an option from the command line, it will not be
-prompted by the wizard.  The other variables are give below, you may
-be give the values from command line, if required:
+prompted by the wizard. The other variables are given below, you can
+give the values from the command line, if required:
 
-- ``interpreter`` -- Name of custom Python interpreter
+- ``interpreter`` -- Name of the custom Python interpreter
 
 - ``version`` -- Version (like 0.1)
 
 - ``description`` -- One-line description of the package
 
-- ``long_description`` -- Multi-line description (in reST)
+- ``long_description`` -- Multi-line description (in reStructuredText)
 
 - ``keywords`` -- Space-separated keywords/tags
 
@@ -134,12 +131,12 @@
 
 - ``author_email`` -- Author email
 
-- ``url`` -- URL of homepage
+- ``url`` -- URL of the homepage
 
 - ``license_name`` -- License name
 
 - ``zip_safe`` -- ``True``, if the package can be distributed as a .zip
-  file othewise ``False``.
+  file otherwise ``False``.
 
 If you are in a hurry, you can simply press *Enter/Return* key and
 change the values later.  But it would be a good idea, if you provide
@@ -153,20 +150,19 @@
 bootstrap the buildout itself::
 
   $ cd sampleproject
-  $ python2.6 bootstrap.py
+  $ python bootstrap.py
 
-The bootstrap script will install ``zc.buildout`` and ``setuptools``
-package.  Also, it will create the basic directory structure.  Next
-step is building the application.  To build the application, run the
-buildout::
+The bootstrap script will install the ``zc.buildout`` and ``setuptools``
+packages.  Also, it will create the basic directory structure.  Next step is
+building the application.  To build the application, run the buildout::
 
   $ ./bin/buidout
 
 The buildout script will download all dependencies and setup the
 environment to run your application.
 
-The most common thing you need while developing application is
-running the server.  BlueBream use ``paster`` command provided by
+The most common thing you need while developing an application is
+running the server.  BlueBream use the ``paster`` command provided by
 PasteScript to run the WSGI server.  To run the server, you can pass
 the PasteDeploy configuration file as the argument to ``serve``
 sub-command as given here::
@@ -178,9 +174,9 @@
 from the PasteDeploy configuration file (``debug.ini``).
 
 The second most common thing must be running the test cases.
-BlueBream by create a testrunner using the ``zc.recipe.testrunner``
+BlueBream creates a testrunner using the ``zc.recipe.testrunner``
 Buildout recipe.  You can see a ``test`` command inside the ``bin``
-directory.  To run test cases, you can run this command::
+directory.  To run test cases, just run this command::
 
   $ ./bin/test
 
@@ -190,7 +186,7 @@
 
   $ ./bin/paster shell debug.ini
 
-More about the test runner and debug shell will be exaplained in the
+More about the test runner and debug shell will be explained in the
 BlueBream Manual.  You can continue reading about BlueBream from the
 `documentation site <http://bluebream.zope.org>`_.
 
@@ -214,7 +210,7 @@
 
 - IRC Channel: `#bluebream at irc.freenode.net <http://webchat.freenode.net/?randomnick=1&channels=bluebream>`_
 
-- `Buildbot <http://zope3.afpy.org/buildbot>`_
+- `Buildbot <http://buildbot.afpy.org/bluebream>`_
 
 - The source code is managed at `Zope reposistory
   <http://svn.zope.org/bluebream>`_.  You can perform a read-only

Modified: bluebream/trunk/setup.py
===================================================================
--- bluebream/trunk/setup.py	2010-03-31 00:40:51 UTC (rev 110350)
+++ bluebream/trunk/setup.py	2010-03-31 00:44:03 UTC (rev 110351)
@@ -52,6 +52,5 @@
     entry_points={
     "paste.paster_create_template":
         ["bluebream = bluebream.bluebream_base.template:BlueBream",
-         "bluebream_simple = bluebream.bluebream_simple.template:BlueBream"
          ]})
 

Modified: bluebream/trunk/src/bluebream/bluebream_base/project_template/etc/site.zcml_tmpl
===================================================================
--- bluebream/trunk/src/bluebream/bluebream_base/project_template/etc/site.zcml_tmpl	2010-03-31 00:40:51 UTC (rev 110350)
+++ bluebream/trunk/src/bluebream/bluebream_base/project_template/etc/site.zcml_tmpl	2010-03-31 00:44:03 UTC (rev 110351)
@@ -44,6 +44,6 @@
   <include package="zope.traversing.browser" />
   <include package="zope.app.pagetemplate" />
 
-  <include package="${namespace_package}.${main_package}" />
+  <include package="${ns_prefix}${main_package}" />
 
 </configure>

Modified: bluebream/trunk/src/bluebream/bluebream_base/project_template/setup.py_tmpl
===================================================================
--- bluebream/trunk/src/bluebream/bluebream_base/project_template/setup.py_tmpl	2010-03-31 00:40:51 UTC (rev 110350)
+++ bluebream/trunk/src/bluebream/bluebream_base/project_template/setup.py_tmpl	2010-03-31 00:44:03 UTC (rev 110351)
@@ -7,7 +7,7 @@
       long_description="""\
 ${long_description|nothing}""",
       # Get strings from http://www.python.org/pypi?%3Aaction=list_classifiers
-      classifiers=[], 
+      classifiers=[],
       keywords=${repr(keywords)|empty},
       author=${repr(author)|empty},
       author_email=${repr(author_email)|empty},
@@ -15,7 +15,7 @@
       license=${repr(license_name)|empty},
       package_dir={'': 'src'},
       packages=find_packages('src'),
-      namespace_packages=[${repr(namespace_package)},],
+      ${len(namespace_packages) and 'namespace_packages=%s,' % repr(namespace_packages) or ''}
       include_package_data=True,
       zip_safe=${repr(bool(zip_safe))|False},
       install_requires=['setuptools',
@@ -57,9 +57,9 @@
                         ],
       entry_points = """
       [paste.app_factory]
-      main = ${namespace_package}.${main_package}.startup:application_factory
+      main = ${ns_prefix}${main_package}.startup:application_factory
 
       [paste.global_paster_command]
-      shell = ${namespace_package}.${main_package}.debug:Shell
+      shell = ${ns_prefix}${main_package}.debug:Shell
       """,
       )

Modified: bluebream/trunk/src/bluebream/bluebream_base/template.py
===================================================================
--- bluebream/trunk/src/bluebream/bluebream_base/template.py	2010-03-31 00:40:51 UTC (rev 110350)
+++ bluebream/trunk/src/bluebream/bluebream_base/template.py	2010-03-31 00:44:03 UTC (rev 110351)
@@ -11,7 +11,8 @@
 # FOR A PARTICULAR PURPOSE.
 #
 ##############################################################################
-import sys
+import re, os, sys, shutil
+import pkg_resources
 from paste.script import templates
 from paste.script.templates import var
 
@@ -22,10 +23,6 @@
     summary = "A BlueBream project, base template"
 
     vars = [
-        var('namespace_package', 'Namespace package name'),
-        var('main_package',
-            'Main package name (under the namespace)',
-            default='main'),
         var('interpreter',
             'Name of custom Python interpreter',
             default='breampy'),
@@ -43,7 +40,6 @@
         ]
 
     def check_vars(self, vars, cmd):
-
         if vars['package'] in ('bluebream', 'bream', 'zope'):
             print
             print "Error: The chosen project name results in an invalid " \
@@ -51,10 +47,42 @@
             print "Please choose a different project name."
             sys.exit(1)
 
-        for var in self.vars:
-            if var.name == 'namespace_package':
-                var.default = vars['package']
+        # detect namespaces in the project name
+        vars['package'] = re.sub('[^A-Za-z0-9.]+', '_', vars['project']).lower()
+        vars['main_package'] = vars['package'].split('.')[-1]
+        self.ns_split = vars['project'].split('.')
+        vars['namespace_packages'] = list(reversed([
+                    vars['package'].rsplit('.', i)[0]
+                    for i in range(1,len(self.ns_split))]))
+        vars['ns_prefix'] = '.'.join(self.ns_split[:-1]) + '.'
+        if len(self.ns_split) == 1:
+            vars['ns_prefix'] = ''
 
-        vars = templates.Template.check_vars(self, vars, cmd)
+        return templates.Template.check_vars(self, vars, cmd)
 
-        return vars
+    def write_files(self, command, output_dir, vars):
+        """Add namespace packages and move the main package to the last level
+        """
+        if not command.options.verbose:
+            command.verbose = 0
+        templates.Template.write_files(self, command, output_dir, vars)
+
+        if len(self.ns_split) > 1:
+            target_dir = os.path.join(output_dir, 'src',
+                                      os.path.join(*self.ns_split[:-1]))
+
+            os.makedirs(target_dir)
+
+            ns_decl = "__import__('pkg_resources').declare_namespace(__name__)"
+            for i, namespace_package in enumerate(self.ns_split[:-1]):
+                init_file = os.path.join(output_dir, 'src',
+                                         os.path.join(*self.ns_split[:i+1]),
+                                         '__init__.py')
+                open(init_file, 'w').write(ns_decl)
+            main_package_dir = os.path.join(output_dir,
+                                            'src',
+                                            vars['main_package'])
+            shutil.move(main_package_dir, target_dir)
+
+
+

Modified: bluebream/trunk/src/bluebream/bluebream_base/tests/bluebream.txt
===================================================================
--- bluebream/trunk/src/bluebream/bluebream_base/tests/bluebream.txt	2010-03-31 00:40:51 UTC (rev 110350)
+++ bluebream/trunk/src/bluebream/bluebream_base/tests/bluebream.txt	2010-03-31 00:44:03 UTC (rev 110351)
@@ -1,6 +1,20 @@
 BlueBream
 =========
 
+The template supports any number namespace levels, depending on the
+provided project name.
+
+First try with a single flat package:
+-------------------------------------
+
+>>> import os
+>>> def print_dir(d):
+...     for dirpath, dirnames, filenames in sorted(os.walk(d)):
+...         for filename in sorted(filenames):
+...             # Hack for http://trac.pythonpaste.org/pythonpaste/ticket/414
+...             if not filename.endswith('.pyo'):
+...                 print os.path.join(dirpath,filename)
+
 >>> from paste.script import command
 >>> project = 'sample'
 >>> commands = command.get_commands()
@@ -8,8 +22,6 @@
 >>> runner = cmd('create')
 >>> option_args = []
 >>> extra_args = [
-...            "namespace_package=test_name",
-...            "main_package=test_main",
 ...            "interpreter=testpy",
 ...            "version=0.1",
 ...            "description=test_description",
@@ -26,74 +38,208 @@
   bluebream#bluebream  A BlueBream project, base template
 <BLANKLINE>
 Variables:
-  author:             test_author
-  author_email:       test_author_email
-  description:        test_description
-  egg:                sample
-  interpreter:        testpy
-  keywords:           test_keyword
-  license_name:       Test Public License
-  long_description:   test_long_description
-  main_package:       test_main
-  namespace_package:  test_name
-  package:            sample
-  project:            sample
-  url:                http://example.com
-  version:            0.1
-  zip_safe:           False
+  author:            test_author
+  author_email:      test_author_email
+  description:       test_description
+  egg:               sample
+  interpreter:       testpy
+  keywords:          test_keyword
+  license_name:      Test Public License
+  long_description:  test_long_description
+  package:           sample
+  project:           sample
+  url:               http://example.com
+  version:           0.1
+  zip_safe:          False
 Creating template bluebream
 Creating directory ./sample
-  Copying bootstrap.py to ./sample/bootstrap.py
-  Copying buildout.cfg_tmpl to ./sample/buildout.cfg
-  Copying debug.ini_tmpl to ./sample/debug.ini
-  Copying deploy.ini_tmpl to ./sample/deploy.ini
-  Recursing into etc
-    Creating ./sample/etc/
-    Copying site.zcml_tmpl to ./sample/etc/site.zcml
-  Copying setup.py_tmpl to ./sample/setup.py
-  Recursing into src
-    Creating ./sample/src/
-    Recursing into +namespace_package+
-      Creating ./sample/src/test_name/
-      Recursing into +main_package+
-        Creating ./sample/src/test_name/test_main/
-        Copying __init__.py to ./sample/src/test_name/test_main/__init__.py
-        Copying configure.zcml_tmpl to ./sample/src/test_name/test_main/configure.zcml
-        Copying debug.py to ./sample/src/test_name/test_main/debug.py
-        Copying securitypolicy.zcml_tmpl to ./sample/src/test_name/test_main/securitypolicy.zcml
-        Copying startup.py to ./sample/src/test_name/test_main/startup.py
-        Recursing into tests
-          Creating ./sample/src/test_name/test_main/tests/
-          Copying __init__.py to ./sample/src/test_name/test_main/tests/__init__.py
-          Copying ftesting.zcml_tmpl to ./sample/src/test_name/test_main/tests/ftesting.zcml
-          Copying tests.py_tmpl to ./sample/src/test_name/test_main/tests/tests.py
-        Recursing into welcome
-          Creating ./sample/src/test_name/test_main/welcome/
-          Copying __init__.py to ./sample/src/test_name/test_main/welcome/__init__.py
-          Copying app.py to ./sample/src/test_name/test_main/welcome/app.py
-          Copying configure.zcml_tmpl to ./sample/src/test_name/test_main/welcome/configure.zcml
-          Copying ftests.txt_tmpl to ./sample/src/test_name/test_main/welcome/ftests.txt
-          Copying index.pt_tmpl to ./sample/src/test_name/test_main/welcome/index.pt
-          Copying interfaces.py to ./sample/src/test_name/test_main/welcome/interfaces.py
-          Recursing into static
-            Creating ./sample/src/test_name/test_main/welcome/static/
-            Copying logo.png to ./sample/src/test_name/test_main/welcome/static/logo.png
-            Copying style.css to ./sample/src/test_name/test_main/welcome/static/style.css
-          Copying views.py to ./sample/src/test_name/test_main/welcome/views.py
-      Copying __init__.py to ./sample/src/test_name/__init__.py
-    Recursing into +package+.egg-info
-      Creating ./sample/src/sample.egg-info/
-      Copying PKG-INFO to ./sample/src/sample.egg-info/PKG-INFO
-  Recursing into templates
-    Creating ./sample/templates/
-    Copying zope_conf.in to ./sample/templates/zope_conf.in
-  Recursing into var
-    Creating ./sample/var/
-    Recursing into filestorage
-      Creating ./sample/var/filestorage/
-      Copying README.txt to ./sample/var/filestorage/README.txt
-    Recursing into log
-      Creating ./sample/var/log/
-      Copying README.txt to ./sample/var/log/README.txt
-  Copying versions.cfg to ./sample/versions.cfg
-Running python setup.py egg_info
+
+>>> print_dir('sample')
+sample/bootstrap.py
+sample/buildout.cfg
+sample/debug.ini
+sample/deploy.ini
+sample/setup.py
+sample/versions.cfg
+sample/etc/site.zcml
+sample/src/sample/__init__.py
+sample/src/sample/configure.zcml
+sample/src/sample/debug.py
+sample/src/sample/securitypolicy.zcml
+sample/src/sample/startup.py
+sample/src/sample.egg-info/PKG-INFO
+sample/src/sample.egg-info/SOURCES.txt
+sample/src/sample.egg-info/dependency_links.txt
+sample/src/sample.egg-info/entry_points.txt
+sample/src/sample.egg-info/requires.txt
+sample/src/sample.egg-info/top_level.txt
+sample/src/sample.egg-info/zip-safe
+sample/src/sample/tests/__init__.py
+sample/src/sample/tests/ftesting.zcml
+sample/src/sample/tests/tests.py
+sample/src/sample/welcome/__init__.py
+sample/src/sample/welcome/app.py
+sample/src/sample/welcome/configure.zcml
+sample/src/sample/welcome/ftests.txt
+sample/src/sample/welcome/index.pt
+sample/src/sample/welcome/interfaces.py
+sample/src/sample/welcome/views.py
+sample/src/sample/welcome/static/logo.png
+sample/src/sample/welcome/static/style.css
+sample/templates/zope_conf.in
+sample/var/filestorage/README.txt
+sample/var/log/README.txt
+
+>>> print open(os.path.join('sample', 'setup.py')).read()
+from setuptools import setup, find_packages
+...
+      shell = sample.debug:Shell
+...
+
+We can also create a project with a namespace:
+----------------------------------------------
+
+>>> project = 'sample.main'
+>>> exit_code = runner.run(option_args + ['-t', 'bluebream', project] + extra_args)
+Selected and implied templates:
+  bluebream#bluebream  A BlueBream project, base template
+<BLANKLINE>
+Variables:
+  author:            test_author
+  author_email:      test_author_email
+  description:       test_description
+  egg:               sample.main
+  interpreter:       testpy
+  keywords:          test_keyword
+  license_name:      Test Public License
+  long_description:  test_long_description
+  package:           samplemain
+  project:           sample.main
+  url:               http://example.com
+  version:           0.1
+  zip_safe:          False
+Creating template bluebream
+Creating directory ./sample.main
+
+>>> print_dir('sample.main')
+sample.main/bootstrap.py
+sample.main/buildout.cfg
+sample.main/debug.ini
+sample.main/deploy.ini
+sample.main/setup.py
+sample.main/versions.cfg
+sample.main/etc/site.zcml
+sample.main/src/sample/__init__.py
+sample.main/src/sample.main.egg-info/PKG-INFO
+sample.main/src/sample.main.egg-info/SOURCES.txt
+sample.main/src/sample.main.egg-info/dependency_links.txt
+sample.main/src/sample.main.egg-info/entry_points.txt
+sample.main/src/sample.main.egg-info/namespace_packages.txt
+sample.main/src/sample.main.egg-info/requires.txt
+sample.main/src/sample.main.egg-info/top_level.txt
+sample.main/src/sample.main.egg-info/zip-safe
+sample.main/src/sample/main/__init__.py
+sample.main/src/sample/main/configure.zcml
+sample.main/src/sample/main/debug.py
+sample.main/src/sample/main/securitypolicy.zcml
+sample.main/src/sample/main/startup.py
+sample.main/src/sample/main/tests/__init__.py
+sample.main/src/sample/main/tests/ftesting.zcml
+sample.main/src/sample/main/tests/tests.py
+sample.main/src/sample/main/welcome/__init__.py
+sample.main/src/sample/main/welcome/app.py
+sample.main/src/sample/main/welcome/configure.zcml
+sample.main/src/sample/main/welcome/ftests.txt
+sample.main/src/sample/main/welcome/index.pt
+sample.main/src/sample/main/welcome/interfaces.py
+sample.main/src/sample/main/welcome/views.py
+sample.main/src/sample/main/welcome/static/logo.png
+sample.main/src/sample/main/welcome/static/style.css
+sample.main/templates/zope_conf.in
+sample.main/var/filestorage/README.txt
+sample.main/var/log/README.txt
+
+We check the namespace is ok:
+
+>>> print open(os.path.join('sample.main', 'setup.py')).read()
+from setuptools import setup, find_packages
+...
+      namespace_packages=['sample'],
+...
+shell = sample.main.debug:Shell
+...
+
+
+Another project with two levels of namespace:
+---------------------------------------------
+
+>>> project = 'sample.app.main'
+>>> exit_code = runner.run(option_args + ['-t', 'bluebream', project] + extra_args)
+Selected and implied templates:
+  bluebream#bluebream  A BlueBream project, base template
+<BLANKLINE>
+Variables:
+  author:            test_author
+  author_email:      test_author_email
+  description:       test_description
+  egg:               sample.app.main
+  interpreter:       testpy
+  keywords:          test_keyword
+  license_name:      Test Public License
+  long_description:  test_long_description
+  package:           sampleappmain
+  project:           sample.app.main
+  url:               http://example.com
+  version:           0.1
+  zip_safe:          False
+Creating template bluebream
+Creating directory ./sample.app.main
+
+>>> print_dir('sample.app.main')
+sample.app.main/bootstrap.py
+sample.app.main/buildout.cfg
+sample.app.main/debug.ini
+sample.app.main/deploy.ini
+sample.app.main/setup.py
+sample.app.main/versions.cfg
+sample.app.main/etc/site.zcml
+sample.app.main/src/sample/__init__.py
+sample.app.main/src/sample.app.main.egg-info/PKG-INFO
+sample.app.main/src/sample.app.main.egg-info/SOURCES.txt
+sample.app.main/src/sample.app.main.egg-info/dependency_links.txt
+sample.app.main/src/sample.app.main.egg-info/entry_points.txt
+sample.app.main/src/sample.app.main.egg-info/namespace_packages.txt
+sample.app.main/src/sample.app.main.egg-info/requires.txt
+sample.app.main/src/sample.app.main.egg-info/top_level.txt
+sample.app.main/src/sample.app.main.egg-info/zip-safe
+sample.app.main/src/sample/app/__init__.py
+sample.app.main/src/sample/app/main/__init__.py
+sample.app.main/src/sample/app/main/configure.zcml
+sample.app.main/src/sample/app/main/debug.py
+sample.app.main/src/sample/app/main/securitypolicy.zcml
+sample.app.main/src/sample/app/main/startup.py
+sample.app.main/src/sample/app/main/tests/__init__.py
+sample.app.main/src/sample/app/main/tests/ftesting.zcml
+sample.app.main/src/sample/app/main/tests/tests.py
+sample.app.main/src/sample/app/main/welcome/__init__.py
+sample.app.main/src/sample/app/main/welcome/app.py
+sample.app.main/src/sample/app/main/welcome/configure.zcml
+sample.app.main/src/sample/app/main/welcome/ftests.txt
+sample.app.main/src/sample/app/main/welcome/index.pt
+sample.app.main/src/sample/app/main/welcome/interfaces.py
+sample.app.main/src/sample/app/main/welcome/views.py
+sample.app.main/src/sample/app/main/welcome/static/logo.png
+sample.app.main/src/sample/app/main/welcome/static/style.css
+sample.app.main/templates/zope_conf.in
+sample.app.main/var/filestorage/README.txt
+sample.app.main/var/log/README.txt
+
+We check the namespace is ok:
+
+>>> print open(os.path.join('sample.app.main', 'setup.py')).read()
+from setuptools import setup, find_packages
+...
+      namespace_packages=['sample', 'sample.app'],
+...
+shell = sample.app.main.debug:Shell
+...

Modified: bluebream/trunk/src/bluebream/bluebream_base/tests/test_bluebream.py
===================================================================
--- bluebream/trunk/src/bluebream/bluebream_base/tests/test_bluebream.py	2010-03-31 00:40:51 UTC (rev 110350)
+++ bluebream/trunk/src/bluebream/bluebream_base/tests/test_bluebream.py	2010-03-31 00:44:03 UTC (rev 110351)
@@ -27,6 +27,7 @@
         'bluebream.txt',
         setUp=easy_install_SetUp,
         tearDown=zc.buildout.testing.buildoutTearDown,
+        optionflags=doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE,
         checker=renormalizing.RENormalizing([
                 zc.buildout.testing.normalize_path,
                 zc.buildout.testing.normalize_endings,



More information about the checkins mailing list