def _analyzeNewest(self, dataNewest, stateNewest, hoursBack, fileType): if (dataNewest <= stateNewest): return # see if issue time has increased and if so, purge old stuff # create DataFile objects, which requires breaking the full # file into yymmdd/filename sind = stateNewest.find('/') if (sind < 0): raise FileNameMatchError('Cannot parse directory from ' + stateNewest) nind = dataNewest.find('/') if (nind < 0): raise FileNameMatchError('Cannot parse directory from ' + dataNewest) symd = stateNewest[:sind] sfile = stateNewest[sind+1:] nymd = dataNewest[:nind] nfile = dataNewest[nind+1:] WhfLog.debug("Checking %s / %s against %s / %s", symd, sfile, nymd, nfile) try: df0 = df.DataFile(symd, sfile, fileType) df1 = df.DataFile(nymd, nfile, fileType) except FilenameMatchError as fe: WhfLog.debug("Cannot update due to %s", fe) except InvalidArgumentError as ie: WhfLog.debug("Cannot update due to %s", ie) if (df0._time.inputIsNewerIssueHour(df1._time)): WhfLog.debug("%s Issue hour has increased, purge now", fileType) self._update(df1._time, hoursBack, fileType)
def updateWithNew(self, data, hoursBack): """ Update internal state with new data The dataType is used to determine which part of state to update Parameters ---------- data: DataFiles The newest data hoursBack: int Maximum number of hours back to keep data in state Returns ------- list[str] The data file names that are are newly added to state """ ret = [] fnames = data.getFnames() if (not fnames): return ret if (self.isEmpty()): WhfLog.debug("Adding to empty %s list") else: sname = self.newest() if (not sname): WhfLog.error("Expected file, got none") return ret if (fnames[-1] > sname): WhfLog.debug("Newer time encountered") # see if issue time has increased and if so, purge old stuff # create DataFile objects try: df0 = df.DataFile(sname[0:8], sname[9:], 'CFS') df1 = df.DataFile(fnames[-1][0:8], fnames[-1][9:], 'CFS') except FilenameMatchError as fe: WhfLog.debug("Skipping file use due to %s", fe) except InvalidArgumentError as ie: WhfLog.debug("Skipping file use due to %s", ie) if (df0._time.inputIsNewerIssueHour(df1._time)): WhfLog.debug("Issue hour has increased, purge now") self.update(df1._time, hoursBack) for f in fnames: if (self.addFileIfNew(f)): ret.append(f) self.sortFiles() return ret
def regridIfZeroHr(configFile, fileType, fname): """If it is a 0 hour forecast (RAP or HRRR) regrid in a special way Parameters ---------- configFile : str configuration file with all settings fileType: str HRRR, RAP, ... string fname: str name of file to regrid and downscale, with yyyymmdd parent dir Returns ------- None """ # check for 0 hour by creating a DataFile and checking forecast hour try: f = df.DataFile(fname[0:8], fname[9:], fileType) except FilenameMatchError as fe: WhfLog.debug("Cannot check for 0 hour data due to %s", fe) raise except InvalidArgumentError as ie: WhfLog.debug("Cannot check for 0 hour data due to %s", ie) raise if (f._time._forecastHour == 0): WhfLog.setConfigType('AA') WhfLog.debug("SPECIAL 0 hour case %s", fname[9:0]) aaf.forcing(configFile, 'regrid', fileType, fname[9:]) WhfLog.setConfigType('Short')