mirror of
https://github.com/wagtail/wagtail.git
synced 2024-11-24 01:57:32 +01:00
Add wagtail-project command to wagtail set up which when executed creates a wagtail project based on the wagtail 'template'
This commit is contained in:
parent
227765359b
commit
e777b24baa
4
setup.py
4
setup.py
@ -74,5 +74,9 @@ setup(
|
||||
'Topic :: Internet :: WWW/HTTP :: Site Management',
|
||||
],
|
||||
install_requires=install_requires,
|
||||
entry_points="""
|
||||
[console_scripts]
|
||||
wagtail-project=wagtail.bin.wagtail_project:create_project
|
||||
""",
|
||||
zip_safe=False,
|
||||
)
|
||||
|
0
wagtail/bin/__init__.py
Normal file
0
wagtail/bin/__init__.py
Normal file
84
wagtail/bin/wagtail_project.py
Normal file
84
wagtail/bin/wagtail_project.py
Normal file
@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env python
|
||||
import os
|
||||
import subprocess
|
||||
import errno
|
||||
import sys
|
||||
|
||||
from optparse import OptionParser
|
||||
|
||||
TEMPLATE_NAME = 'wagtaildemo' # the name of the folder in wagtail/library
|
||||
|
||||
|
||||
def replace_strings_in_file(filename, old_string, new_string):
|
||||
f = open(filename, 'r')
|
||||
filedata = f.read()
|
||||
f.close()
|
||||
|
||||
newdata = filedata.replace(old_string, new_string)
|
||||
|
||||
f = open(filename, 'w')
|
||||
f.write(newdata)
|
||||
f.close()
|
||||
|
||||
|
||||
def create_project():
|
||||
|
||||
# collect and analyse the name given for the wagtail project
|
||||
parser = OptionParser(usage="Usage: %prog project_name")
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
if len(args) != 1:
|
||||
parser.error("Please specify a name for your wagtail installation")
|
||||
|
||||
project_name = args[0]
|
||||
project_path = os.path.join(os.getcwd(), project_name)
|
||||
|
||||
# Make sure given name is not already in use by another python package/module.
|
||||
try:
|
||||
__import__(project_name)
|
||||
except ImportError:
|
||||
pass
|
||||
else:
|
||||
parser.error("'%s' conflicts with the name of an existing "
|
||||
"Python module and cannot be used as a project "
|
||||
"name. Please try another name." % project_name)
|
||||
|
||||
# make sure directory does not already exist
|
||||
if os.path.exists(project_name):
|
||||
print 'A directory called %(project_name)s already exists. \
|
||||
Please choose another name for your wagtail project or remove the existing directory.' % {'project_name': project_name}
|
||||
sys.exit(errno.EEXIST)
|
||||
|
||||
print "Creating a wagtail project called %(project_name)s" % {'project_name': project_name}
|
||||
|
||||
# create the project from the wagtail template using startapp
|
||||
|
||||
# first find the path to wagtail
|
||||
import wagtail
|
||||
wagtail_path = os.path.dirname(wagtail.__file__)
|
||||
template_path = os.path.join(wagtail_path, 'library', TEMPLATE_NAME)
|
||||
|
||||
# call django-admin startproject
|
||||
subprocess.call(['django-admin.py', 'startproject', '--template=' + template_path, project_name])
|
||||
|
||||
# in newly created project, replace all occurences of TEMPLATE_NAME ('wagtaildemo')
|
||||
os.chdir(project_name)
|
||||
|
||||
# first within the contents of files
|
||||
for folder, subs, files in os.walk(os.getcwd()):
|
||||
for filename in files:
|
||||
replace_strings_in_file(os.path.join(folder, filename), TEMPLATE_NAME, project_name)
|
||||
|
||||
# then in file and folder names
|
||||
for folder, subs, files in os.walk(os.getcwd()):
|
||||
for sub in subs:
|
||||
if TEMPLATE_NAME in sub:
|
||||
os.rename(sub, sub.replace(TEMPLATE_NAME, project_name))
|
||||
for filename in files:
|
||||
if TEMPLATE_NAME in filename:
|
||||
os.rename(filename, filename.replace(TEMPLATE_NAME, project_name))
|
||||
|
||||
print 'Success! %(project_name)s is created' % {'project_name': project_name}
|
||||
|
||||
if __name__ == "__main__":
|
||||
create_project()
|
Loading…
Reference in New Issue
Block a user