[Checkins] SVN: bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/ cleaning the code again, and allowing to choose a package name different from

Christophe Combelles ccomb at free.fr
Wed Mar 31 19:57:14 EDT 2010


Log message for revision 110382:
  cleaning the code again, and allowing to choose a package name different from
  the autogenerated one
  

Changed:
  U   bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/etc/site.zcml_tmpl
  U   bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/setup.py_tmpl
  D   bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+main_package+/
  A   bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+ns_prefix++package+.egg-info/
  A   bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+package+/
  U   bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+package+/tests/ftesting.zcml_tmpl
  U   bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+package+/tests/tests.py_tmpl
  D   bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+package+.egg-info/
  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/src/bluebream/bluebream_base/project_template/etc/site.zcml_tmpl
===================================================================
--- bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/etc/site.zcml_tmpl	2010-03-31 23:50:44 UTC (rev 110381)
+++ bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/etc/site.zcml_tmpl	2010-03-31 23:57:13 UTC (rev 110382)
@@ -44,6 +44,6 @@
   <include package="zope.traversing.browser" />
   <include package="zope.app.pagetemplate" />
 
-  <include package="${ns_prefix}${main_package}" />
+  <include package="${ns_prefix}${package}" />
 
 </configure>

Modified: bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/setup.py_tmpl
===================================================================
--- bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/setup.py_tmpl	2010-03-31 23:50:44 UTC (rev 110381)
+++ bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/setup.py_tmpl	2010-03-31 23:57:13 UTC (rev 110382)
@@ -57,9 +57,9 @@
                         ],
       entry_points = """
       [paste.app_factory]
-      main = ${ns_prefix}${main_package}.startup:application_factory
+      main = ${ns_prefix}${package}.startup:application_factory
 
       [paste.global_paster_command]
-      shell = ${ns_prefix}${main_package}.debug:Shell
+      shell = ${ns_prefix}${package}.debug:Shell
       """,
       )

Modified: bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+package+/tests/ftesting.zcml_tmpl
===================================================================
--- bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+main_package+/tests/ftesting.zcml_tmpl	2010-03-31 21:09:25 UTC (rev 110380)
+++ bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+package+/tests/ftesting.zcml_tmpl	2010-03-31 23:57:13 UTC (rev 110382)
@@ -48,6 +48,6 @@
   <grantAll role="zope.Manager" />
   <grant role="zope.Manager" principal="zope.mgr" />
 
-  <include package="${ns_prefix}${main_package}" />
+  <include package="${ns_prefix}${package}" />
 
 </configure>

Modified: bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+package+/tests/tests.py_tmpl
===================================================================
--- bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+main_package+/tests/tests.py_tmpl	2010-03-31 21:09:25 UTC (rev 110380)
+++ bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/project_template/src/+package+/tests/tests.py_tmpl	2010-03-31 23:57:13 UTC (rev 110382)
@@ -1,3 +1,3 @@
 import z3c.testsetup
 
-test_suite = z3c.testsetup.register_all_tests('${ns_prefix}${main_package}')
+test_suite = z3c.testsetup.register_all_tests('${ns_prefix}${package}')

Modified: bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/template.py
===================================================================
--- bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/template.py	2010-03-31 23:50:44 UTC (rev 110381)
+++ bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/template.py	2010-03-31 23:57:13 UTC (rev 110382)
@@ -23,6 +23,8 @@
     summary = "A BlueBream project, base template"
 
     vars = [
+        var('package',
+            'Main Python package (with namespace if any)'),
         var('interpreter',
             'Name of custom Python interpreter',
             default='breampy'),
@@ -39,18 +41,43 @@
             default=False),
         ]
 
-    def check_vars(self, vars, cmd):
-        if vars['package'] in ('bluebream', 'bream', 'zope'):
+    def check_name(self, name):
+        """Disallow certain package names
+        """
+        if name in ('bluebream', 'bream', 'zope'):
             print
             print "Error: The chosen project name results in an invalid " \
-                "package name: %s." % vars['package']
+                "package name: %s." % name
             print "Please choose a different project name."
             sys.exit(1)
 
-        # 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('.')
+    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):
+        """Detect namespaces in the project name
+        """
+        if not command.options.verbose:
+            command.verbose = 0
+        self.ns_split = vars['package'].split('.')
+        vars['package'] = self.ns_split[-1]
         vars['namespace_packages'] = list(reversed([
                     vars['package'].rsplit('.', i)[0]
                     for i in range(1,len(self.ns_split))]))
@@ -58,32 +85,31 @@
         if len(self.ns_split) == 1:
             vars['ns_prefix'] = ''
 
-        return templates.Template.check_vars(self, vars, cmd)
 
-    def write_files(self, command, output_dir, vars):
+    def post(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)
+        # do nothing if there is no namespace
+        if len(self.ns_split) == 1:
+            return
 
-        if len(self.ns_split) > 1:
-            target_dir = os.path.join(output_dir, 'src',
-                                      os.path.join(*self.ns_split[:-1]))
+        # create the intermediate namespace packages
+        target_dir = os.path.join(output_dir, 'src',
+                                  os.path.join(*self.ns_split[:-1]))
 
-            os.makedirs(target_dir)
+        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'])
-            os.rename(main_package_dir,
-                      os.path.join(target_dir,
-                                   os.path.basename(main_package_dir,)))
+        # create each __init__.py with namespace declaration
+        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)
 
+        # move the main package to the last namespace
+        package_dir = os.path.join(output_dir, 'src', vars['package'])
+        os.rename(package_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-03-31 23:50:44 UTC (rev 110381)
+++ bluebream/branches/ccomb-merge-templates/src/bluebream/bluebream_base/tests/bluebream.txt	2010-03-31 23:57:13 UTC (rev 110382)
@@ -22,6 +22,7 @@
 >>> runner = cmd('create')
 >>> option_args = []
 >>> extra_args = [
+...            "package=sample",
 ...            "interpreter=testpy",
 ...            "version=0.1",
 ...            "description=test_description",
@@ -100,6 +101,7 @@
 ----------------------------------------------
 
 >>> project = 'sample.main'
+>>> extra_args[0] = "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
@@ -113,7 +115,7 @@
   keywords:          test_keyword
   license_name:      Test Public License
   long_description:  test_long_description
-  package:           samplemain
+  package:           sample.main
   project:           sample.main
   url:               http://example.com
   version:           0.1
@@ -174,6 +176,7 @@
 ---------------------------------------------
 
 >>> project = 'sample.app.main'
+>>> extra_args[0] = "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
@@ -187,7 +190,7 @@
   keywords:          test_keyword
   license_name:      Test Public License
   long_description:  test_long_description
-  package:           sampleappmain
+  package:           sample.app.main
   project:           sample.app.main
   url:               http://example.com
   version:           0.1



More information about the checkins mailing list