Skip to content
Snippets Groups Projects
workbook_utilities.py 3.87 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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