#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""

Convert sphinx gallery notebook from empty to image filled

Created on Fri Sep  1 16:43:45 2017

@author: rflamary
"""

import sys
import json
import glob
import hashlib
import subprocess

import os

cache_file='cache_nbrun'

path_doc='source/auto_examples/'
path_nb='../notebooks/'

def load_json(fname):
    try:
        f=open(fname)
        nb=json.load(f)
        f.close()
    except (OSError, IOError) :
        nb={}
    return nb

def save_json(fname,nb):
    f=open(fname,'w')
    f.write(json.dumps(nb))
    f.close()


def md5(fname):
    hash_md5 = hashlib.md5()
    with open(fname, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()

def to_update(fname,cache):
    if fname in cache:
        if md5(path_doc+fname)==cache[fname]:
            res=False
        else:
            res=True
    else:
        res=True
    
    return res

def update(fname,cache):
    
    # jupyter nbconvert --to notebook --execute mynotebook.ipynb --output targte
    subprocess.check_call(['cp',path_doc+fname,path_nb])
    print(' '.join(['jupyter','nbconvert','--to','notebook','--ExecutePreprocessor.timeout=600','--execute',path_nb+fname,'--inplace']))
    subprocess.check_call(['jupyter','nbconvert','--to','notebook','--ExecutePreprocessor.timeout=600','--execute',path_nb+fname,'--inplace'])
    cache[fname]=md5(path_doc+fname)
    


cache=load_json(cache_file)

lst_file=glob.glob(path_doc+'*.ipynb')

lst_file=[os.path.basename(name) for name in lst_file]

for fname in lst_file:
    if to_update(fname,cache):
        print('Updating file: {}'.format(fname))
        update(fname,cache)
        save_json(cache_file,cache)




