[Checkins] SVN: bluebream/branches/ccomb-merge-templates/ cleaned the code again, allow to choose a package name different from the

Christophe Combelles ccomb at free.fr
Thu Apr 1 20:23:20 EDT 2010


Log message for revision 110445:
  cleaned the code again, allow to choose a package name different from the
  project name, and added a test for an edge case
  

Changed:
  U   bluebream/branches/ccomb-merge-templates/CHANGES.txt
  U   bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/template.py
  U   bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/tests/bluebream.txt

-=-
Modified: bluebream/branches/ccomb-merge-templates/CHANGES.txt
===================================================================
--- bluebream/branches/ccomb-merge-templates/CHANGES.txt	2010-04-01 23:08:48 UTC (rev 110444)
+++ bluebream/branches/ccomb-merge-templates/CHANGES.txt	2010-04-02 00:23:19 UTC (rev 110445)
@@ -9,7 +9,7 @@
 - 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.
+  flat or nested namespace structure, and choose the package name.
 
 - Enabled Distribute by default instead of Setuptools
 

Modified: bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/template.py
===================================================================
--- bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/template.py	2010-04-01 23:08:48 UTC (rev 110444)
+++ bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/template.py	2010-04-02 00:23:19 UTC (rev 110445)
@@ -23,8 +23,8 @@
     summary = "A BlueBream project, base template"
 
     vars = [
-        var('package',
-            'Main Python package (with namespace if any)'),
+        var('python_package',
+            'Main Python package (with namespace, if any)'),
         var('interpreter',
             'Name of custom Python interpreter',
             default='breampy'),
@@ -41,34 +41,31 @@
             default=False),
         ]
 
-    def check_name(self, name):
-        """Disallow certain package names
+    def check_vars(self, vars, cmd):
+        """This method checks the variables and ask for missing ones
         """
-        if name in ('bluebream', 'bream', 'zope'):
+        # suggest what Paste chose
+        for var in self.vars:
+            if var.name == 'python_package':
+                var.default = vars['package']
+                # but keep the user's input if there are dots in the middle
+                if '.' in vars['project'][1:-1]:
+                    var.default = re.sub('[^A-Za-z0-9.]+', '_',
+                                         vars['project']).lower()
+
+        # ask remaining variables
+        vars = templates.Template.check_vars(self, vars, cmd)
+
+        # replace Paste default choice with ours
+        vars['package'] = vars['python_package']
+
+        # check for bad python package names
+        if vars['package'] in ('bluebream', 'bream', 'zope'):
             print
             print "Error: The chosen project name results in an invalid " \
                 "package name: %s." % name
             print "Please choose a different project name."
             sys.exit(1)
-
-    def check_vars(self, vars, cmd):
-        """This method checks and cleans the variables
-        passed on the command line
-        """
-        # check once just after the project name choice
-        pkg_name = re.sub('[^A-Za-z0-9.]+', '_', vars['project']).lower()
-        self.check_name(pkg_name)
-
-        # remove Paste chosen value for the package name and suggest a new one
-        del vars['package']
-        for var in self.vars:
-            if var.name == 'package':
-                var.default = pkg_name
-
-        # ask the remaining questions
-        vars = templates.Template.check_vars(self, vars, cmd)
-        # check again since we could chose anything
-        self.check_name(vars['package'])
         return vars
 
     def pre(self, command, output_dir, vars):
@@ -79,7 +76,7 @@
         self.ns_split = vars['package'].split('.')
         vars['package'] = self.ns_split[-1]
         vars['namespace_packages'] = list(reversed([
-                    vars['package'].rsplit('.', i)[0]
+                    vars['python_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:
@@ -93,10 +90,13 @@
         if len(self.ns_split) == 1:
             return
 
+        package_dir = os.path.join(output_dir, 'src', vars['package'])
+        tmp_dir = package_dir + '.tmp'
+        os.rename(package_dir, tmp_dir)
+
         # create the intermediate namespace packages
         target_dir = os.path.join(output_dir, 'src',
                                   os.path.join(*self.ns_split[:-1]))
-
         os.makedirs(target_dir)
 
         # create each __init__.py with namespace declaration
@@ -107,9 +107,8 @@
                                      '__init__.py')
             open(init_file, 'w').write(ns_decl)
 
-        # move the main package to the last namespace
-        package_dir = os.path.join(output_dir, 'src', vars['package'])
-        os.rename(package_dir,
+        # move the (renamed) main package to the last namespace
+        os.rename(tmp_dir,
                   os.path.join(target_dir, os.path.basename(package_dir,)))
 
 

Modified: bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/tests/bluebream.txt
===================================================================
--- bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/tests/bluebream.txt	2010-04-01 23:08:48 UTC (rev 110444)
+++ bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/tests/bluebream.txt	2010-04-02 00:23:19 UTC (rev 110445)
@@ -22,7 +22,7 @@
 >>> runner = cmd('create')
 >>> option_args = []
 >>> extra_args = [
-...            "package=sample",
+...            "python_package=sample",
 ...            "interpreter=testpy",
 ...            "version=0.1",
 ...            "description=test_description",
@@ -49,6 +49,7 @@
   long_description:  test_long_description
   package:           sample
   project:           sample
+  python_package:    sample
   url:               http://example.com
   version:           0.1
   zip_safe:          False
@@ -101,7 +102,7 @@
 ----------------------------------------------
 
 >>> project = 'sample.main'
->>> extra_args[0] = "package=sample.main"
+>>> extra_args[0] = "python_package=sample.main"
 >>> exit_code = runner.run(option_args + ['-t', 'bluebream', project] + extra_args)
 Selected and implied templates:
   bluebream#bluebream  A BlueBream project, base template
@@ -115,8 +116,9 @@
   keywords:          test_keyword
   license_name:      Test Public License
   long_description:  test_long_description
-  package:           sample.main
+  package:           samplemain
   project:           sample.main
+  python_package:    sample.main
   url:               http://example.com
   version:           0.1
   zip_safe:          False
@@ -176,7 +178,7 @@
 ---------------------------------------------
 
 >>> project = 'sample.app.main'
->>> extra_args[0] = "package=sample.app.main"
+>>> extra_args[0] = "python_package=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
@@ -190,8 +192,9 @@
   keywords:          test_keyword
   license_name:      Test Public License
   long_description:  test_long_description
-  package:           sample.app.main
+  package:           sampleappmain
   project:           sample.app.main
+  python_package:    sample.app.main
   url:               http://example.com
   version:           0.1
   zip_safe:          False
@@ -246,3 +249,79 @@
 ...
 shell = sample.app.main.debug:Shell
 ...
+
+
+An edge case:
+
+>>> project = 'foobar.foobar'
+>>> extra_args[0] = "python_package=foobar.foobar"
+>>> 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:               foobar.foobar
+  interpreter:       testpy
+  keywords:          test_keyword
+  license_name:      Test Public License
+  long_description:  test_long_description
+  package:           foobarfoobar
+  project:           foobar.foobar
+  python_package:    foobar.foobar
+  url:               http://example.com
+  version:           0.1
+  zip_safe:          False
+Creating template bluebream
+Creating directory ./foobar.foobar
+
+>>> print_dir('foobar.foobar')
+foobar.foobar/bootstrap.py
+foobar.foobar/buildout.cfg
+foobar.foobar/debug.ini
+foobar.foobar/deploy.ini
+foobar.foobar/setup.py
+foobar.foobar/versions.cfg
+foobar.foobar/etc/site.zcml
+foobar.foobar/src/foobar/__init__.py
+foobar.foobar/src/foobar.foobar.egg-info/PKG-INFO
+foobar.foobar/src/foobar.foobar.egg-info/SOURCES.txt
+foobar.foobar/src/foobar.foobar.egg-info/dependency_links.txt
+foobar.foobar/src/foobar.foobar.egg-info/entry_points.txt
+foobar.foobar/src/foobar.foobar.egg-info/namespace_packages.txt
+foobar.foobar/src/foobar.foobar.egg-info/requires.txt
+foobar.foobar/src/foobar.foobar.egg-info/top_level.txt
+foobar.foobar/src/foobar.foobar.egg-info/zip-safe
+foobar.foobar/src/foobar/foobar/__init__.py
+foobar.foobar/src/foobar/foobar/configure.zcml
+foobar.foobar/src/foobar/foobar/debug.py
+foobar.foobar/src/foobar/foobar/securitypolicy.zcml
+foobar.foobar/src/foobar/foobar/startup.py
+foobar.foobar/src/foobar/foobar/tests/__init__.py
+foobar.foobar/src/foobar/foobar/tests/ftesting.zcml
+foobar.foobar/src/foobar/foobar/tests/tests.py
+foobar.foobar/src/foobar/foobar/welcome/__init__.py
+foobar.foobar/src/foobar/foobar/welcome/app.py
+foobar.foobar/src/foobar/foobar/welcome/configure.zcml
+foobar.foobar/src/foobar/foobar/welcome/ftests.txt
+foobar.foobar/src/foobar/foobar/welcome/index.pt
+foobar.foobar/src/foobar/foobar/welcome/interfaces.py
+foobar.foobar/src/foobar/foobar/welcome/views.py
+foobar.foobar/src/foobar/foobar/welcome/static/logo.png
+foobar.foobar/src/foobar/foobar/welcome/static/style.css
+foobar.foobar/templates/zope_conf.in
+foobar.foobar/var/filestorage/README.txt
+foobar.foobar/var/log/README.txt
+
+>>> print open(os.path.join('foobar.foobar', 'setup.py')).read()
+from setuptools import setup, find_packages
+...
+      namespace_packages=['foobar'],
+...
+shell = foobar.foobar.debug:Shell
+...
+
+
+



More information about the checkins mailing list