1 #!/usr/bin/env python 2 # Copyright 2015-2017 ARM Limited 3 # 4 # Licensed under the Apache License, Version 2.0 (the "License"); 5 # you may not use this file except in compliance with the License. 6 # You may obtain a copy of the License at 7 # 8 # http://www.apache.org/licenses/LICENSE-2.0 9 # 10 # Unless required by applicable law or agreed to in writing, software 11 # distributed under the License is distributed on an "AS IS" BASIS, 12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 # See the License for the specific language governing permissions and 14 # limitations under the License. 15 # 16 17 18 """This is a script to publish a notebook containing Ipython graphs 19 The static data is published as an anonymous gist. GitHub does not 20 allow easy deletions of anonymous gists. 21 """ 22 23 import os 24 import argparse 25 from IPython.nbformat.sign import TrustNotebookApp 26 from argparse import RawTextHelpFormatter 27 28 # Logging Configuration 29 import logging 30 from trappy.plotter import IPythonConf 31 32 logging.basicConfig(level=logging.INFO) 33 34 35 def change_resource_paths(txt): 36 """Change the resource paths from local to 37 Web URLs 38 """ 39 40 # Replace the path for d3-tip 41 txt = txt.replace( 42 IPythonConf.add_web_base("plotter_scripts/EventPlot/d3.tip.v0.6.3"), 43 IPythonConf.D3_TIP_URL) 44 txt = txt.replace( 45 IPythonConf.add_web_base("plotter_scripts/EventPlot/d3.v3.min"), 46 IPythonConf.D3_PLOTTER_URL) 47 txt = txt.replace( 48 IPythonConf.add_web_base("plotter_scripts/EventPlot/EventPlot"), 49 "https://rawgit.com/sinkap/7f89de3e558856b81f10/raw/46144f8f8c5da670c54f826f0c634762107afc66/EventPlot") 50 txt = txt.replace( 51 IPythonConf.add_web_base("plotter_scripts/ILinePlot/synchronizer"), 52 IPythonConf.DYGRAPH_SYNC_URL) 53 txt = txt.replace( 54 IPythonConf.add_web_base("plotter_scripts/ILinePlot/dygraph-combined"), 55 IPythonConf.DYGRAPH_COMBINED_URL) 56 txt = txt.replace( 57 IPythonConf.add_web_base("plotter_scripts/ILinePlot/ILinePlot"), 58 "https://rawgit.com/sinkap/648927dfd6985d4540a9/raw/69d6f1f9031ae3624c15707315ce04be1a9d1ac3/ILinePlot") 59 txt = txt.replace( 60 IPythonConf.add_web_base("plotter_scripts/ILinePlot/underscore-min"), 61 IPythonConf.UNDERSCORE_URL) 62 63 logging.info("Updated Library Paths...") 64 return txt 65 66 67 def publish(source, target): 68 """Publish the notebook for globally viewable interactive 69 plots 70 """ 71 72 txt = "" 73 74 with open(source, 'r') as file_fh: 75 txt = change_resource_paths(file_fh.read()) 76 77 with open(target, 'w') as file_fh: 78 file_fh.write(txt) 79 80 trust = TrustNotebookApp() 81 trust.sign_notebook(target) 82 logging.info("Signed and Saved: %s", target) 83 84 def main(): 85 """Command Line Invocation Routine""" 86 87 parser = argparse.ArgumentParser(description=""" 88 The data for the interactive plots is stored in the ipython profile. 89 In order to make it accessible when the notebook is published or shared, 90 a github gist of the data is created and the links in the notebook are 91 updated. The library links are also updated to their corresponding publicly 92 accessible URLs. 93 """, 94 prog="publish_interactive_plots.py", formatter_class=RawTextHelpFormatter) 95 96 parser.add_argument( 97 "-p", 98 "--profile", 99 help="ipython profile", 100 default="default", 101 type=str) 102 103 parser.add_argument( 104 "-o", 105 "--outfile", 106 help="name of the output notebook", 107 default="", 108 type=str) 109 110 parser.add_argument("notebook") 111 args = parser.parse_args() 112 113 notebook = args.notebook 114 outfile = args.outfile 115 116 if outfile == "": 117 outfile = "published_" + os.path.basename(notebook) 118 logging.info("Setting outfile as %s", outfile) 119 120 elif not outfile.endswith(".ipynb"): 121 outfile += ".ipynb" 122 123 publish(notebook, outfile) 124 125 if __name__ == "__main__": 126 main() 127