import os # enable logging import logging logger = logging.getLogger("workbook") # save the starting cwd basecwd = os.getcwd() def load_src(name, fpath): logger.info("-:Loading Python script:%s", fpath) import imp return imp.load_source(name, os.path.join(os.path.dirname(__file__), fpath)) def run_compute_py(dir): # Change the cwd to be relative to the py directory os.chdir(os.path.join(basecwd, dir)) # Load/run compute.py logger.info("%s:Running compute.py", dir) load_src('dynamicPythonLoader', os.path.join(dir, 'py', 'compute.py')) logger.info("%s:SUCCESS in running compute.py", dir) # Return the cwd to the root of the workbook os.chdir(basecwd) def read_project_json(dir, project_data = {}): import json project_data["dir"] = dir fileName = os.path.join(basecwd, dir, "project.json") logger.debug("%s:Reading project.json", dir) with open(fileName) as json_file: json_data = json.load(json_file) if "title" in json_data: project_data["title"] = json_data["title"] if "index" in json_data: project_data["index"] = json_data["index"] if "type" in json_data: project_data["type"] = json_data["type"] return project_data def read_metadata_json(dir, metadata = {}): import json fileName = os.path.join(basecwd, dir, "metadata.json") if os.path.isfile(fileName) == False: logger.debug("%s:No metadata.json found", dir) return metadata logger.debug("%s:Reading metadata.json", dir) with open(fileName) as metadata_file: metadata = json.load(metadata_file) metadata["dir"] = dir return metadata def construct_navigation(): logger.debug("*:Constructing navigation...") # Reset the navigation global variable state navigation = {} navigation["experiences"] = [] navigation["projects"] = [] navigation["demos"] = [] # Scan all of the directories for index, rpath in enumerate(os.listdir(basecwd)): path = os.path.join(basecwd, rpath) if os.path.isdir(path): project_data = {} project_data["dir"] = rpath # Attempt to infer the type of project: if rpath.startswith("project_"): project_data["type"] = "Project" elif rpath.startswith("exp_"): project_data["type"] = "Experience" elif rpath.startswith("demo_"): project_data["type"] = "Demo" else: project_data["type"] = "Unknown" project_data["title"] = rpath[ (rpath.find('_') + 1):: ] project_data["index"] = index # Check for the project.json json_file_path = os.path.join(path, "project.json") if os.path.isfile( json_file_path ): try: project_data = read_project_json( rpath, project_data ) except: logger.warning("%s:Bad project.json, not adding to navigation!", rpath) continue # If no project.json file exists, skip this directory else: logger.debug("%s:No project.json, not adding to navigation.", rpath) continue # Populate the global dictionary for templates if project_data["type"] == "Experience": navigation["experiences"].append(project_data) elif project_data["type"] == "Project": navigation["projects"].append(project_data) elif project_data["type"] == "Demo": navigation["demos"].append(project_data) else: logger.warning("%s:Unknown project type: " + project_data["type"] + ". Not added to navigation.", rpath) continue logger.debug("%s:Added to navigation as a %s.", rpath, project_data["type"]) return navigation