Exemple #1
0
    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
Exemple #2
0
    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