def getCsvDataFromEmod(self, jsonFile, binFile): print("Before climateDataFile creation " + time.strftime("%M:%S")) climateDataFile = ClimateDataFile() print("Before json lines " + time.strftime("%M:%S")) # Make string from the file (json) jsonLines = "" lines = iter(jsonFile) for line in lines: jsonLines += line print("Before bin lines " + time.strftime("%M:%S")) # Make string from the file (bin) binLines = "" lines = iter(binFile) for line in lines: binLines += line print("Before climateDataFile.load " + time.strftime("%M:%S")) climateDataFile.load(jsonLines, binLines) print("After climateDataFile.load " + time.strftime("%M:%S")) # Retrieve all necessary data nodeIDs = climateDataFile.nodeIDs climateData = climateDataFile.climateData startDayOfYear = climateDataFile.startDayOfYear dataValueCount = climateDataFile.dataValueCount originalDataYears = climateDataFile.originalDataYears metaData = {'idReference': climateDataFile.idReference, 'updateResolution': climateDataFile.updateResolution, 'dataProvenance': climateDataFile.dataProvenance} # Fill dates months = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] startDayOfYearArray = startDayOfYear.split(" ") for month in range(len(months)): if startDayOfYearArray[0] == months[month]: startMonth = month break else: raise ValueError("Month name in StartDayOfYear must be in it's full name (ie January, not Jan or Jan.) " "StartDayOfYear was " + startDayOfYearArray[0]) startYear = originalDataYears.split("-")[0] # Gets first year of year range (ie 1950 if it is 1950-2000) # This needs to be here to prevent it from incorrectly reading a date like 1955101 as 10/1/1955 instead of 1/01/1955 if startMonth < 10: startMonth = "0" + str(startMonth) fullStartDate = str(startYear) + str(startMonth) + str(startDayOfYearArray[1]) startDate = time.strptime(fullStartDate,'%Y%m%d') startDate = date(startDate.tm_year,startDate.tm_mon,startDate.tm_mday) dates = [] dates.append(startDate.strftime('%m/%d/%Y')) for i in range(dataValueCount-1): newDate = startDate + timedelta(i+1) dates.append(newDate.strftime('%m/%d/%Y')) return json.dumps({'metaData': metaData, 'dates': dates, 'nodeIDs': nodeIDs, 'climateData': climateData}), nodeIDs
def convertCsvToEmod(self, csvData, emodPrefix): path = tempDir binFileName = path + emodPrefix + ".bin" jsonFileName = path + emodPrefix + ".json" metaData = {} metaData['DateCreated'] = time.strftime("%m/%d/%Y") metaData['Tool'] = 'Csv to Emod Converter' metaData['Author'] = getpass.getuser() dates = csvData['dates'] # Set nodeCount and dataValueCount metaData['NodeCount'] = len(csvData['climateData']) metaData['DatavalueCount'] = len(dates) # Determine and set startDayOfYear months = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] startDateArray = dates[0].split('/') startMonth = months[int(startDateArray[1])] startDayOfYear = startMonth + " " + startDateArray[0] metaData['StartDayOfYear'] = startDayOfYear # Determine and set originalDataYears startYear = startDateArray[2] endDateArray = dates[len(dates)-1].split('/') endYear = endDateArray[2] originalDataYears = str(startYear) if startYear != endYear: originalDataYears = originalDataYears + "-" + str(endYear) metaData['OriginalDataYears'] = originalDataYears # Get the remaining meta data metaData['IdReference'] = csvData['metaData']['idReference'] metaData['UpdateResolution'] = csvData['metaData']['updateResolution'] metaData['DataProvenance'] = csvData['metaData']['dataProvenance'] climateDataFile = ClimateDataFile(metaData, csvData['nodeIDs'], csvData['climateData']) climateDataFile.save(jsonFileName, binFileName) return