#!/usr/bin/env python """ Python script for building documentation. To build the docs you must have all optional dependencies for statsmodels installed. See the installation instructions for a list of these. Note: currently latex builds do not work because of table formats that are not supported in the latex generation. Usage ----- python make.py clean python make.py html """ import os import shutil import sys import subprocess import base64 os.environ['PYTHONPATH'] = '..' SPHINX_BUILD = 'sphinxbuild' def upload(): sf_account = 'jseabold,statsmodels@web.sourceforge.net' retcode = subprocess.call(['rsync', '-avPrzh', '--inplace', '-e ssh', 'build/html/', sf_account + ':htdocs/vbench/'], stderr=sys.stderr, stdout=sys.stdout) if retcode != 0: msg = "Could not upload vbench result" raise Exception(msg) def clean(): if os.path.exists('build'): shutil.rmtree('build') if os.path.exists('source/generated'): shutil.rmtree('source/generated') def html(): check_build() if os.system('sphinx-build -P -b html -d build/doctrees ' 'source build/html'): raise SystemExit("Building HTML failed.") def check_build(): build_dirs = [ 'build', 'build/doctrees', 'build/html', 'build/plots', 'build/_static', 'build/_templates'] for d in build_dirs: try: os.mkdir(d) except OSError: pass def all(): clean() html() def auto_update(): msg = '' try: clean() html() upload() sendmail() except (Exception, SystemExit) as inst: msg += str(inst) + '\n' sendmail(msg) def sendmail(err_msg=None): if err_msg is None: msgstr = 'vbench uploaded successfully' subject = "VB: update successful" else: msgstr = err_msg subject = "VB: update failed" server_str, port, login, pwd = _get_credentials() import smtplib from email.MIMEText import MIMEText msg = MIMEText(msgstr) msg['Subject'] = subject msg['From'] = login msg['To'] = login to_email = [login] #('josef.pktd' + 'AT' + 'gmail' + '.com').replace('AT', '@')] server = smtplib.SMTP(server_str, port) server.ehlo() server.starttls() server.ehlo() server.login(login, pwd) try: server.sendmail(login, to_email, msg.as_string()) finally: server.close() def _get_dir(subdir=None): import getpass USERNAME = getpass.getuser() if sys.platform == 'darwin': HOME = '/Users/%s' % USERNAME else: HOME = '/home/%s' % USERNAME if subdir is None: subdir = '/code/scripts' conf_dir = '%s%s' % (HOME, subdir) return conf_dir def _get_credentials(): # my security holes with open('/home/skipper/statsmodels/gmail.txt') as f: pwd = f.readline().strip() pwd = base64.b64decode(pwd) email_name = 'statsmodels.dev' + 'AT' + 'gmail' + '.com' email_name = email_name.replace('AT', '@') return 'smtp.gmail.com', 587, email_name, pwd funcd = { 'html': html, 'clean': clean, 'upload': upload, 'auto_update': auto_update, 'all': all, } small_docs = False # current_dir = os.getcwd() # os.chdir(os.path.dirname(os.path.join(current_dir, __file__))) if len(sys.argv) > 1: for arg in sys.argv[1:]: func = funcd.get(arg) if func is None: raise SystemExit('Do not know how to handle %s; valid args are %s' % ( arg, funcd.keys())) func() else: small_docs = False all() # os.chdir(current_dir)