Source code for resistics.project.io

import os
from datetime import datetime
import glob
from typing import Union

from resistics.common.io import checkAndMakeDir
from resistics.config.data import ConfigData
from resistics.config.io import loadConfig
from resistics.project.data import ProjectData
from resistics.project.utils import (
    projectText,
    projectBlock,
    projectWarning,
    projectError,
)


[docs]def newProject( projectPath: str, refTime: Union[str, datetime], configFile: str = "", name: str = "mtProj", ) -> ProjectData: """Create a new project in project path A new project will be created in project path. If the project path directory does not exist, a new one will be made. If a project already exists in project path, this project will be loaded and returned. Parameters ---------- projectPath : str Path for the project directory refTime : datetime The reference time for the project configFile : str, optional Path to a configuration file name : str, optional (default is "mtProj") The name of the project file Returns ------- ProjectData A project data object """ # create project path directory checkAndMakeDir(projectPath) # reference time if isinstance(refTime, str): refTime = datetime.strptime(refTime, "%Y-%m-%d %H:%M:%S") # print info textLst = [ "Creating a new project in path: {}".format(projectPath), "Project name: {}".format(name), ] projectBlock(textLst) # create the subdirectories projectFile = os.path.join(projectPath, "{}.prj".format(name)) timePath = os.path.join(projectPath, "timeData") specPath = os.path.join(projectPath, "specData") statPath = os.path.join(projectPath, "statData") maskPath = os.path.join(projectPath, "maskData") transFuncPath = os.path.join(projectPath, "transFuncData") calPath = os.path.join(projectPath, "calData") imagePath = os.path.join(projectPath, "images") saveProjectFile( projectFile, refTime, calPath, timePath, specPath, statPath, maskPath, transFuncPath, imagePath, ) # configuration file config = ConfigData(configFile) proj = ProjectData( projectFile, refTime, calPath, timePath, specPath, statPath, maskPath, transFuncPath, imagePath, config=config, ) proj.printInfo() proj.config.printInfo() return proj
[docs]def loadProject(projectPath: str, configFile: str = "") -> ProjectData: """Load an existing project Parameters ---------- projectPath : str Path for the project directory configFile : str Path to a configuration file Returns ------- ProjectData A project data object """ # search for the .prj file (hopefully only one) gl = glob.glob(os.path.join(projectPath, "*.prj")) if len(gl) == 0: projectError("Unable to find project file in path: {}".format(projectPath)) projectFile: str = os.path.basename(gl[0]) projectText( "Loading project file: {}".format(os.path.join(projectPath, projectFile)) ) projectPaths = loadProjectFile(os.path.join(projectPath, projectFile)) # check the configuration file config = ConfigData(configFile) proj = ProjectData( projectFile, projectPaths["refTime"], projectPaths["calPath"], projectPaths["timePath"], projectPaths["specPath"], projectPaths["statPath"], projectPaths["maskPath"], projectPaths["transFuncPath"], projectPaths["imagePath"], config=config, ) proj.printInfo() proj.config.printInfo() return proj
[docs]def saveProjectFile( filepath: str, refTime: datetime, calPath: str, timePath: str, specPath: str, statPath: str, maskPath: str, transFuncPath: str, imagePath: str, ) -> None: """Save the project file to filepath Parameters ---------- filepath : str Path to project file """ f = open(filepath, "w") f.write("Calibration data path = {}\n".format(calPath)) f.write("Time data path = {}\n".format(timePath)) f.write("Spectra data path = {}\n".format(specPath)) f.write("Statistics data path = {}\n".format(statPath)) f.write("Mask data path = {}\n".format(maskPath)) f.write("TransFunc data path = {}\n".format(transFuncPath)) f.write("Image data path = {}\n".format(imagePath)) f.write("Reference time = {}\n".format(refTime.strftime("%Y-%m-%d %H:%M:%S"))) f.close()
[docs]def loadProjectFile(filepath: str) -> None: """Load project from path to project file Parameters ---------- filepath : str Path to project file Returns ------- projPath : Dict[str, Union[str, datetime]] A dictionary with various project paths """ f = open(filepath, "r") lines = f.readlines() f.close() projPaths = {} for l in lines: split = l.strip().split("=") if "Calibration data path" in l: projPaths["calPath"] = split[1].strip() if "Time data path" in l: projPaths["timePath"] = split[1].strip() if "Spectra data path" in l: projPaths["specPath"] = split[1].strip() if "Statistics data path" in l: projPaths["statPath"] = split[1].strip() if "Mask data path" in l: projPaths["maskPath"] = split[1].strip() if "TransFunc data path" in l: projPaths["transFuncPath"] = split[1].strip() if "Image data path" in l: projPaths["imagePath"] = split[1].strip() if "Reference time" in l: projPaths["refTime"] = datetime.strptime( split[1].strip(), "%Y-%m-%d %H:%M:%S" ) return projPaths