[Checkins] SVN: bluebream/trunk/ Merge from the ccomb-merge-templates branch:
Christophe Combelles
ccomb at free.fr
Thu Apr 1 20:28:16 EDT 2010
Log message for revision 110446:
Merge from the ccomb-merge-templates branch:
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/trunk/CHANGES.txt
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
D bluebream/trunk/src/bluebream/bluebream_base/project_template/src/+main_package+/
A bluebream/trunk/src/bluebream/bluebream_base/project_template/src/+ns_prefix++package+.egg-info/
A bluebream/trunk/src/bluebream/bluebream_base/project_template/src/+package+/
D bluebream/trunk/src/bluebream/bluebream_base/project_template/src/+package+.egg-info/
U bluebream/trunk/src/bluebream/bluebream_base/template.py
U bluebream/trunk/src/bluebream/bluebream_base/tests/bluebream.txt
-=-
Modified: bluebream/trunk/CHANGES.txt
===================================================================
--- bluebream/trunk/CHANGES.txt 2010-04-02 00:23:19 UTC (rev 110445)
+++ bluebream/trunk/CHANGES.txt 2010-04-02 00:28:16 UTC (rev 110446)
@@ -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/trunk/src/bluebream/bluebream_base/project_template/etc/site.zcml_tmpl
===================================================================
--- bluebream/trunk/src/bluebream/bluebream_base/project_template/etc/site.zcml_tmpl 2010-04-02 00:23:19 UTC (rev 110445)
+++ bluebream/trunk/src/bluebream/bluebream_base/project_template/etc/site.zcml_tmpl 2010-04-02 00:28:16 UTC (rev 110446)
@@ -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/trunk/src/bluebream/bluebream_base/project_template/setup.py_tmpl
===================================================================
--- bluebream/trunk/src/bluebream/bluebream_base/project_template/setup.py_tmpl 2010-04-02 00:23:19 UTC (rev 110445)
+++ bluebream/trunk/src/bluebream/bluebream_base/project_template/setup.py_tmpl 2010-04-02 00:28:16 UTC (rev 110446)
@@ -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/trunk/src/bluebream/bluebream_base/template.py
===================================================================
--- bluebream/trunk/src/bluebream/bluebream_base/template.py 2010-04-02 00:23:19 UTC (rev 110445)
+++ bluebream/trunk/src/bluebream/bluebream_base/template.py 2010-04-02 00:28:16 UTC (rev 110446)
@@ -23,6 +23,8 @@
summary = "A BlueBream project, base template"
vars = [
+ var('python_package',
+ 'Main Python package (with namespace, if any)'),
var('interpreter',
'Name of custom Python interpreter',
default='breampy'),
@@ -40,50 +42,73 @@
]
def check_vars(self, vars, cmd):
+ """This method checks the variables and ask for missing ones
+ """
+ # 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." % vars['package']
+ "package name: %s." % name
print "Please choose a different project name."
sys.exit(1)
+ return vars
- # 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 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]
+ 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:
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]))
+ package_dir = os.path.join(output_dir, 'src', vars['package'])
+ tmp_dir = package_dir + '.tmp'
+ os.rename(package_dir, tmp_dir)
- os.makedirs(target_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)
- 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 (renamed) main package to the last namespace
+ os.rename(tmp_dir,
+ os.path.join(target_dir, os.path.basename(package_dir,)))
+
Modified: bluebream/trunk/src/bluebream/bluebream_base/tests/bluebream.txt
===================================================================
--- bluebream/trunk/src/bluebream/bluebream_base/tests/bluebream.txt 2010-04-02 00:23:19 UTC (rev 110445)
+++ bluebream/trunk/src/bluebream/bluebream_base/tests/bluebream.txt 2010-04-02 00:28:16 UTC (rev 110446)
@@ -22,6 +22,7 @@
>>> runner = cmd('create')
>>> option_args = []
>>> extra_args = [
+... "python_package=sample",
... "interpreter=testpy",
... "version=0.1",
... "description=test_description",
@@ -48,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
@@ -100,6 +102,7 @@
----------------------------------------------
>>> project = '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,6 +118,7 @@
long_description: test_long_description
package: samplemain
project: sample.main
+ python_package: sample.main
url: http://example.com
version: 0.1
zip_safe: False
@@ -174,6 +178,7 @@
---------------------------------------------
>>> project = '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
@@ -189,6 +194,7 @@
long_description: test_long_description
package: sampleappmain
project: sample.app.main
+ python_package: sample.app.main
url: http://example.com
version: 0.1
zip_safe: False
@@ -243,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