/scripts/make_min_web2py.py
Python | 97 lines | 97 code | 0 blank | 0 comment | 0 complexity | bd13d7b05022375df4b524609de69b98 MD5 | raw file
Possible License(s): LGPL-2.1, BSD-2-Clause, MIT, BSD-3-Clause, Apache-2.0
- 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()