mirror of https://github.com/scrapy/scrapy.git
Merge pull request #817 from nramirezuy/fix-startproject-project-name
[MRG] Fix startproject project name
This commit is contained in:
commit
511a26978f
|
|
@ -1,8 +1,8 @@
|
|||
from __future__ import print_function
|
||||
import sys
|
||||
import string
|
||||
import re
|
||||
import shutil
|
||||
import string
|
||||
from importlib import import_module
|
||||
from os.path import join, exists, abspath
|
||||
from shutil import copytree, ignore_patterns
|
||||
|
||||
|
|
@ -11,6 +11,7 @@ from scrapy.command import ScrapyCommand
|
|||
from scrapy.utils.template import render_templatefile, string_camelcase
|
||||
from scrapy.exceptions import UsageError
|
||||
|
||||
|
||||
TEMPLATES_PATH = join(scrapy.__path__[0], 'templates', 'project')
|
||||
|
||||
TEMPLATES_TO_RENDER = (
|
||||
|
|
@ -22,6 +23,7 @@ TEMPLATES_TO_RENDER = (
|
|||
|
||||
IGNORE = ignore_patterns('*.pyc', '.svn')
|
||||
|
||||
|
||||
class Command(ScrapyCommand):
|
||||
|
||||
requires_project = False
|
||||
|
|
@ -32,17 +34,33 @@ class Command(ScrapyCommand):
|
|||
def short_desc(self):
|
||||
return "Create new project"
|
||||
|
||||
def _is_valid_name(self, project_name):
|
||||
def _module_exists(module_name):
|
||||
try:
|
||||
import_module(module_name)
|
||||
return True
|
||||
except ImportError:
|
||||
return False
|
||||
|
||||
if not re.search(r'^[_a-zA-Z]\w*$', project_name):
|
||||
print('Error: Project names must begin with a letter and contain'\
|
||||
' only\nletters, numbers and underscores')
|
||||
elif exists(project_name):
|
||||
print('Error: Directory %r already exists' % project_name)
|
||||
elif _module_exists(project_name):
|
||||
print('Error: Module %r already exists' % project_name)
|
||||
else:
|
||||
return True
|
||||
return False
|
||||
|
||||
def run(self, args, opts):
|
||||
if len(args) != 1:
|
||||
raise UsageError()
|
||||
project_name = args[0]
|
||||
if not re.search(r'^[_a-zA-Z]\w*$', project_name):
|
||||
print('Error: Project names must begin with a letter and contain only\n' \
|
||||
'letters, numbers and underscores')
|
||||
sys.exit(1)
|
||||
elif exists(project_name):
|
||||
print("Error: directory %r already exists" % project_name)
|
||||
sys.exit(1)
|
||||
|
||||
if not self._is_valid_name(project_name):
|
||||
self.exitcode = 1
|
||||
return
|
||||
|
||||
moduletpl = join(TEMPLATES_PATH, 'module')
|
||||
copytree(moduletpl, join(project_name, project_name), ignore=IGNORE)
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ class StartprojectTest(ProjectTest):
|
|||
|
||||
self.assertEqual(1, self.call('startproject', self.project_name))
|
||||
self.assertEqual(1, self.call('startproject', 'wrong---project---name'))
|
||||
self.assertEqual(1, self.call('startproject', 'sys'))
|
||||
|
||||
|
||||
class CommandTest(ProjectTest):
|
||||
|
|
|
|||
Loading…
Reference in New Issue