[Checkins] SVN: grokproject/trunk/ Better checks and tests for faulty project names.

Jan-Jaap Driessen jdriessen at thehealthagency.com
Wed Feb 2 06:17:34 EST 2011


Log message for revision 120044:
  Better checks and tests for faulty project names.
  
  

Changed:
  U   grokproject/trunk/CHANGES.txt
  U   grokproject/trunk/grokproject/main.py
  U   grokproject/trunk/tests_paste.txt

-=-
Modified: grokproject/trunk/CHANGES.txt
===================================================================
--- grokproject/trunk/CHANGES.txt	2011-02-02 10:28:40 UTC (rev 120043)
+++ grokproject/trunk/CHANGES.txt	2011-02-02 11:17:33 UTC (rev 120044)
@@ -4,7 +4,7 @@
 2.5 (unreleased)
 ----------------
 
-- Nothing changed yet.
+- Better checks and tests for faulty project names.
 
 
 2.4 (2011-01-20)

Modified: grokproject/trunk/grokproject/main.py
===================================================================
--- grokproject/trunk/grokproject/main.py	2011-02-02 10:28:40 UTC (rev 120043)
+++ grokproject/trunk/grokproject/main.py	2011-02-02 11:17:33 UTC (rev 120044)
@@ -5,7 +5,7 @@
 import re
 from grokproject import GrokProject
 
-project_name_re=re.compile('[a-zA-Z_][a-zA-Z0-9_]*')
+project_name_re=re.compile('[A-z_][A-z0-9_]*')
 
 def main(vars=GrokProject.vars, template_name='grok'):
     usage = "usage: %prog [options] PROJECT"
@@ -68,13 +68,25 @@
         extra_args.append('version_url=%s' % options.version_url)
 
     # Assert that the project name is a valid Python identifier.
-    if not (project_name_re.match(project).group() == project):
+    if not project_name_re.match(project):
         print
         print "Error: The chosen project name is not a valid " \
               "package name: %s." % project
         print "Please choose a different project name."
         sys.exit(1)
 
+    existing = False
+    try:
+        __import__(project)
+        existing = True
+    except ImportError:
+        pass
+    if existing:
+        print
+        print "Error: The package '%s' is already on sys.path." % project
+        print "Please choose a different project name."
+        sys.exit(1)
+
     # Create the project.
     exit_code = runner.run(option_args + ['-t', template_name, project] + extra_args)
     sys.exit(exit_code)

Modified: grokproject/trunk/tests_paste.txt
===================================================================
--- grokproject/trunk/tests_paste.txt	2011-02-02 10:28:40 UTC (rev 120043)
+++ grokproject/trunk/tests_paste.txt	2011-02-02 11:17:33 UTC (rev 120044)
@@ -5,16 +5,15 @@
 
     >>> cd(testdir)
 
-Then use paster. Eggs are placed in our freshly created eggs directory:
+Eggs are placed in our freshly created eggs directory:
 
     >>> import os.path
     >>> # Use a specific grok version, because 'current' will change at some
     >>> # point in the future.
     >>> executable = [os.path.join(current_dir, 'bin', 'grokproject')]
     >>> opts = ['--user=a', '--passwd=a', '--eggs-dir=' + eggsdir]
-    >>> version = [
-    ... '--version-url=http://grok.zope.org/releaseinfo/1.3/versions.cfg']
-    >>> sh(executable + opts + version + ['GrokExample'])
+    >>> opts += ['--version-url=http://grok.zope.org/releaseinfo/1.3/versions.cfg']
+    >>> sh(executable + opts + ['GrokExample'])
     ['...grokproject',
      '--user=a',
      '--passwd=a',
@@ -308,3 +307,18 @@
     <BLANKLINE>
     *************** /PICKED VERSIONS ***************
     <BLANKLINE>
+
+Invalid project names
+---------------------
+
+We check for invalid project names:
+
+    >>> sh(executable + opts + ['360profile'])
+    [...]
+    Error: The chosen project name is not a valid package name: 360profile.
+    Please choose a different project name.
+
+    >>> sh(executable + opts + ['profile'])
+    [...]
+    Error: The package 'profile' is already on sys.path.
+    Please choose a different project name.



More information about the checkins mailing list