98 lines
2.5 KiB
Python
98 lines
2.5 KiB
Python
|
USAGE = """
|
||
|
from web2py main folder
|
||
|
python scripts/make_min_web2py.py /path/to/minweb2py
|
||
|
|
||
|
it will mkdir minweb2py and build a minimal web2py installation
|
||
|
- no admin, no examples, one line welcome
|
||
|
- no scripts
|
||
|
- drops same rarely used contrib modules
|
||
|
- more modules could be dropped but minimal difference
|
||
|
"""
|
||
|
|
||
|
# files to include from top level folder (default.py will be rebuilt)
|
||
|
REQUIRED = """
|
||
|
VERSION
|
||
|
web2py.py
|
||
|
anyserver.py
|
||
|
applications/__init__.py
|
||
|
applications/welcome/controllers/default.py
|
||
|
handlers/fcgihandler.py
|
||
|
handlers/gaehandler.py
|
||
|
handlers/wsgihandler.py
|
||
|
"""
|
||
|
|
||
|
# files and folders to exclude from gluon folder (comment with # if needed)
|
||
|
IGNORED = """
|
||
|
gluon/contrib/websocket_messaging.py
|
||
|
gluon/contrib/feedparser.py
|
||
|
gluon/contrib/generics.py
|
||
|
gluon/contrib/gql.py
|
||
|
gluon/contrib/populate.py
|
||
|
gluon/contrib/sms_utils.py
|
||
|
gluon/contrib/spreadsheet.py
|
||
|
gluon/tests/
|
||
|
gluon/contrib/markdown/
|
||
|
gluon/contrib/pyfpdf/
|
||
|
gluon/contrib/pymysql/
|
||
|
gluon/contrib/pyrtf/
|
||
|
gluon/contrib/pysimplesoap/
|
||
|
"""
|
||
|
|
||
|
import sys
|
||
|
import os
|
||
|
import shutil
|
||
|
import glob
|
||
|
|
||
|
|
||
|
def main():
|
||
|
global REQUIRED, IGNORED
|
||
|
|
||
|
if len(sys.argv) < 2:
|
||
|
print USAGE
|
||
|
|
||
|
# make target folder
|
||
|
target = sys.argv[1]
|
||
|
os.mkdir(target)
|
||
|
|
||
|
# change to os specificsep
|
||
|
REQUIRED = REQUIRED.replace('/', os.sep)
|
||
|
IGNORED = IGNORED.replace('/', os.sep)
|
||
|
|
||
|
# make a list of all files to include
|
||
|
files = [x.strip() for x in REQUIRED.split('\n')
|
||
|
if x and not x[0] == '#']
|
||
|
ignore = [x.strip() for x in IGNORED.split('\n')
|
||
|
if x and not x[0] == '#']
|
||
|
|
||
|
def accept(filename):
|
||
|
for p in ignore:
|
||
|
if filename.startswith(p):
|
||
|
return False
|
||
|
return True
|
||
|
pattern = os.path.join('gluon', '*.py')
|
||
|
while True:
|
||
|
newfiles = [x for x in glob.glob(pattern) if accept(x)]
|
||
|
if not newfiles:
|
||
|
break
|
||
|
files += newfiles
|
||
|
pattern = os.path.join(pattern[:-3], '*.py')
|
||
|
# copy all files, make missing folder, build default.py
|
||
|
files.sort()
|
||
|
defaultpy = os.path.join(
|
||
|
'applications', 'welcome', 'controllers', 'default.py')
|
||
|
for f in files:
|
||
|
dirs = f.split(os.path.sep)
|
||
|
for i in range(1, len(dirs)):
|
||
|
try:
|
||
|
os.mkdir(target + os.sep + os.path.join(*dirs[:i]))
|
||
|
except OSError:
|
||
|
pass
|
||
|
if f == defaultpy:
|
||
|
open(os.path.join(
|
||
|
target, f), 'w').write('def index(): return "hello"\n')
|
||
|
else:
|
||
|
shutil.copyfile(f, os.path.join(target, f))
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|