def setTimeSpan(self, iter_start, iter_end): if isinstance(iter_start, (list, tuple)) and len(iter_start) == 2: iter_start = (iter_start[0], iter_start[1], lastDayOfMonth(*iter_start)) self.iter_start = asDatetime(iter_start) if isinstance(iter_end, (list, tuple)) and len(iter_end) == 2: iter_end = (iter_end[0], iter_end[1], lastDayOfMonth(*iter_end)) self.iter_end = asDatetime(iter_end)
def yearsInterval(date, interval): # always return a calendar year year = date.year + interval # passed date is the last day of a month if date.day == lastDayOfMonth(date.year, date.month): return datetime.datetime(year, date.month, lastDayOfMonth(year, date.month)) # passed date is not last day of month else: return datetime.datetime(year, date.month, date.day)
def yearsDuration(date, duration): # always return a calendar year year = date.year - duration # # date is the last day of a month if date.day == lastDayOfMonth(date.year, date.month): day = lastDayOfMonth(year, date.month) # in case it is Febraury _date = datetime.datetime(year, date.month, day) # date is not last day of month else: _date = datetime.datetime(year, date.month, date.day) return _date + relativedelta(days=1)
def monthsInterval(date, interval): # always return a calendar month month = date.month + interval if month > 12: month -= 12 year = date.year + 1 else: year = date.year # passed date is the last day of a month if date.day == lastDayOfMonth(date.year, date.month): return datetime.datetime(year, month, lastDayOfMonth(year, month)) # passed date is not last day of month else: return datetime.datetime(year, month, date.day)
def __init__(self, hdf5_filepath, config, weather, year, month, timezone, source, region, lons, lats, mode='w'): start_time = datetime.datetime(year, month, 1, 0) end_time = datetime.datetime(year, month, lastDayOfMonth(year, month), 23) HourlyGridFileBuilder.__init__(self, hdf5_filepath, config, weather, region, source, timezone, lons, lats, mode=mode, start_time=start_time, end_time=end_time) self.open('a') self.setFileAttribute('filetype', weather)
def monthTimespan(self, reference_date, **kwargs): if reference_date.day == 1: ref_date = reference_date else: ref_date = reference_date.replace(day=1) ref_time = \ datetime.datetime.combine(ref_date,datetime.time(hour=0)) timezone = kwargs.get('timezone', self.file_tzinfo) start_time = ref_time = tzutils.asHourInTimezone(ref_time, timezone) num_days = lastDayOfMonth(ref_date.year, ref_date.month) end_time = start_time.replace(day=num_days, hour=23) return start_time, end_time
def setTimeSpan(self, iter_start, iter_end): if isinstance(iter_start, (list, tuple)): if len(iter_start) == 2: iter_start = (iter_start[0], iter_start[1], lastDayOfMonth(*iter_start)) iter_start = datetime.date(*iter_start) elif not isinstance(iter_start, datetime.date): errmsg = 'Invalid type for iter_start : %s' raise TypeError, errmsg % (iter_start.__class__.__name__, str(iter_start)) if isinstance(iter_end, (list, tuple)): if len(iter_end) == 2: iter_end = (iter_end[0], iter_end[1], lastDayOfMonth(*iter_end)) iter_end = datetime.date(*iter_end) elif not isinstance(iter_end, datetime.date): errmsg = 'Invalid type for iter_end : %s' raise TypeError, errmsg % (iter_end.__class__.__name__, str(iter_end)) return iter_start, iter_end
def slices(self, slice_start_time, slice_end_time): slices = [ ] start_time = tzutils.tzaDatetime(slice_start_time, self.tzinfo) end_time = tzutils.tzaDatetime(slice_end_time, self.tzinfo) if start_time.month == end_time.month: slices.append((start_time, end_time)) else: last_day = lastDayOfMonth(start_time) month_end = start_time.replace(day=last_day, hour=23) slices.append((start_time, month_end)) month = start_time.month + 1 while month < end_time.month: month_start = start_time.replace(month=month, day=1, hour=0) last_day = lastDayOfMonth(month_start) month_end = month_start.replace(day=last_day, hour=23) slices.append((month_start, month_end)) slices.append((end_time.replace(day=1, hour=0), end_time)) return tuple(slices)
def checkPreviousMonth(target_date, grid_dataset, grid_region): if target_date.month > 1: month_end_date = lastDayOfMonth(target_date.year, target_date.month - 1) filepath = grid_factory.ndfdGridFilepath(month_end_date, grid_dataset, grid_region) if os.path.exists(filepath): reader = grid_factory.ndfdGridFileReader(month_end_date, grid_dataset, grid_region) last_update = reader.lastUpdate(grid_dataset, None) reader.close() if last_update not in (None, 'never'): return month_end_date, last_update.date() return month_end_date, None return None, None
def lastAvailableGribHour(self, variable, reference_time): year = reference_time.year month = reference_time.month last_day = lastDayOfMonth(year, month) last_hour = datetime.datetime(year, month, last_day, 23) target_hour = tzutils.asUtcTime(last_hour, 'UTC') # look for the last available file in the month while target_hour.month == month: filepath = self.gribFilepath(target_hour, variable, self.grib_region, make_directory=False) if os.path.exists(filepath): return target_hour target_hour -= ONE_HOUR # no data available for the month return None
def weatherFileTimespan(self, year, month, timezone='UTC'): """ Returns tuple with start hour and end hour for the monthly file. If timezone is specified, times will be adjust to that timezone. Otherwise, times are in UTC timezones (same as times in file). """ start_time = datetime.datetime(year, month, 1, 0) start_time = tzutils.tzaDatetime(start_time, 'UTC') last_day = lastDayOfMonth(year, month) end_time = datetime.datetime(year, month, last_day, 23) end_time = tzutils.tzaDatetime(end_time, 'UTC') if timezone != 'UTC': start_time = tzutils.asLocalTime(start_time, timezone) end_time = tzutils.asLocalTime(end_time, timezone) return start_time, end_time
def slices(self, data_start_time, data_end_time, hours_per_slice=24): prev_month = data_start_time.month num_hours = tzutils.hoursInTimespan(data_start_time, data_end_time) if data_end_time.month == data_start_time.month: return ((data_start_time, data_end_time), ) slices = [] slice_start = data_start_time slice_month = slice_start_month while slice_start.month < data_end_time.month: last_day = lastDayOfMonth(slice_start.year, slice_start.month) slice_end = slice_start.replace(day=last_day, hour=23) slices.append((slice_start, slice_end)) slice_start = slice_end + ONE_HOUR slices.append((slice_start, data_end_time)) return tuple(slices)
def monthsDuration(date, duration): # always return a calendar month # # date is the last day of a month if date.day == lastDayOfMonth(date.year, date.month): month = date.month - duration + 1 if month < 1: month += 12 year = date.year - 1 else: year = date.year return datetime.datetime(year, month, 1) # day is always 1 # date is not last day of month else: month = date.month - duration if month < 1: month += 12 year = date.year - 1 else: year = date.year _date = datetime.datetime(year, month, date.day) return _date + relativedelta(days=1)
if not tzutils.isSameTimezone(local_tzinfo, file_tzinfo): # convert local time to UTC time (file_tzinfo) data_end_time = tzutils.toTimeInZone(data_end_time, file_tzinfo) hours = int(args_2.replace('b', '')) data_start_time = data_end_time - datetime.timedelta(hours=hours) else: # arg_2 == specific hour (UTC time) on current day data_start_time = data_end_time = \ hourInTimezone(now.year, now.month, now.day, args_2, file_tzinfo) elif num_time_args == 2: arg_2 = int(args[2]) arg_3 = int(args[3].replace('h', '')) if arg_3 == 99: # all hours for a month # args ... 2 = month, 3 is the trigger data_start_time = hourInTimezone(now.year, arg_2, 1, 0, file_tzinfo) last_day = lastDayOfMonth(now.year, arg_2) data_end_time = hourInTimezone(now.year, arg_2, last_day, 23, file_tzinfo) elif 'h' in args[3]: data_start_time = data_end_time = hourInTimezone( now.year, now.month, arg_2, arg_3, file_tzinfo) else: # all hours (UTC time) on multiple days in current month # args ... 2 = 1st day, 3 = last day data_start_time = hourInTimezone(now.year, now.month, arg_2, 0, file_tzinfo) data_end_time = hourInTimezone(now.year, now.month, arg_3, 23, file_tzinfo) elif num_time_args == 3: # span multiple hours (UTC time) on a single day arg_2 = int(args[2]) if arg_2 > 99:
debug = options.debug dev_mode = options.dev_mode local_timezone = options.local_timezone periods = ('daily','average') region_key = options.grid_region source_key = options.grid_source verbose = options.verbose or debug now = tzutils.asUtcHour(datetime.datetime.now(), local_timezone) weather_key = 'temps' # default to current year & month year = now.year month = current_month = now.month last_day = datetime.date(year, month, lastDayOfMonth(year, month)) last_day_end = tzutils.asUtcTime(datetime.datetime.combine(last_day, datetime.time(hour=23))) num_time_args = len(args) if num_time_args == 0 : # no time args, discover them from times in the files start_time = None end_time = None elif num_time_args == 1: month = int(args[0]) start_time = tzutils.asUTCTime(datetime.datetime(year, month, 1, 0)) end_time = tzutils.asUTCTime(datetime.datetime(year, month, last_day, 23)) elif num_time_args == 2: arg_0 = int(args[0])
factory = GrapeGridFactory() variety = getGrapeVariety(args[0]) num_date_args = len(args[1:]) if num_date_args == 0: start_date = datetime.now() end_date = None elif num_date_args == 1: target_year = int(args[1]) start_date, end_date = factory.getTargetDateSpan(target_year) elif num_date_args == 2: year = int(args[1]) month = int(args[2]) start_date = datetime(year, month, 1) last_day = lastDayOfMonth(year, month) end_date = datetime(year, month, last_day) target_year = factory.getTargetYear(start_date) elif num_date_args in (3, 4, 6): year = int(args[1]) month = int(args[2]) day = int(args[3]) start_date = datetime(year, month, day) end_date = None #!TODO: remove when allowing multiple days if num_date_args == 3: end_date = None elif num_date_args == 4: end_date = start_date + relativedelta(days=int(args[4]) - 1) elif num_date_args == 6: year = int(args[4]) month = int(args[5]) day = int(args[6])
if not tzutils.isSameTimezone(local_tzinfo, file_tzinfo): # convert local time to UTC time (file_tzinfo) update_end_time = tzutils.toTimeInZone(update_end_time, file_tzinfo) hours = int(args_1.replace('b','')) update_start_time = update_end_time - datetime.timedelta(hours=hours) else: # arg_0 == specific hour (UTC time) on current day update_start_time = update_end_time = \ hourInTimezone(now.year, now.month, now.day, int(args_1), file_tzinfo) elif num_time_args == 2: arg_0 = int(args[0]) arg_1 = int(args[1]) if arg_1 == 99: # all hours for a month # args ... 1 = month, 2 is the trigger update_start_time = hourInTimezone(now.year, arg_0, 1, 0, file_tzinfo) last_day = lastDayOfMonth(now.year, arg_0) update_end_time = hourInTimezone(now.year, arg_0, last_day, 23, file_tzinfo) else: # all hours (UTC time) on multiple days in current month # args ... 1 = 1st day, 2 = last day update_start_time = hourInTimezone(now.year, now.month, arg_0, 0, file_tzinfo) update_end_time = hourInTimezone(now.year, now.month, arg_1, 23, file_tzinfo) elif num_time_args == 3: # span multiple hours (UTC time) on a single day arg_0 = int(args[0]) if arg_0 > 99: month = int(args[1]) arg_2 = int(args[2]) if arg_2 == 99: # all hours for a year/month # args ... 1 = year, 2 = month, 3 is the trigger update_start_time = hourInTimezone(arg_0, month, 1, 0, file_tzinfo) last_day = lastDayOfMonth(arg_0, month)
from atmosci.utils import tzutils from atmosci.utils.timeutils import elapsedTime, lastDayOfMonth from turf.threats.smart_models import SmartThreatModelFactory # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # HOURS_IN_DAY = datetime.timedelta(hours=24) HOURS_TO_START = datetime.timedelta(hours=23) ONE_HOUR = datetime.timedelta(hours=1) ONE_DAY = datetime.timedelta(days=1) TODAY = datetime.date.today() YESTERDAY = TODAY - ONE_DAY LAST_DAY_OF_MONTH = datetime.date(TODAY.year, TODAY.month, lastDayOfMonth(TODAY.year, TODAY.month)) FIRST_DAY_NEXT_MONTH = LAST_DAY_OF_MONTH + ONE_DAY # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # usage = '%prog [date] [options]' usage += '\n When passing dates without year :' usage += '\n %prog [day_in_current_month] [options]' usage += '\n %prog [month day] [options]' usage += '\n %prog [month 1st_day last_day] [options]' usage += '\n %prog [1st_month day last_month day] [options]' usage += '\n When passing dates with year :' usage += '\n %prog [year month day] [options]' usage += '\n %prog [year month 1st_day last_day] [options]' usage += '\n %prog [year 1st_month day last_month day] [options]' usage += '\n\nno date args passed : update all days since perevious analysis.'
debug = options.debug dev_mode = options.dev_mode local_timezone = options.local_timezone region_key = options.grid_region source_key = options.grid_source verbose = options.verbose or debug weather_key = 'temps' # only allow forecasts based on current date now = datetime.datetime.now() year = now.year month = now.month last_day_end = tzutils.asUtcTime( datetime.datetime(year, month, lastDayOfMonth(year, month), 23), 'UTC') # create a factory for disease file access turf_factory = TurfWeatherFileFactory() if dev_mode: turf_factory.useDirpathsForMode('dev') region = turf_factory.regionConfig(region_key) source = turf_factory.sourceConfig(source_key) # get a weather_manager for the weather files weather_manager = turf_factory.weatherFileManager(weather_key, year, month, region, mode='r') weather_manager.close()
models = options.models test_file = options.test_file verbose = options.verbose or debug update_db = options.update factory = AppleGridFactory() num_args = len(args) if num_args == 0: start_date = datetime.datetime.now() - ONE_DAY end_date = None elif num_args == 2: year = int(args[0]) month = int(args[1]) start_date = datetime.datetime(year, month, 1) end_date = datetime.datetime(year, month, lastDayOfMonth(year, month)) elif num_args in (3, 4, 5, 6): year = int(args[0]) month = int(args[1]) day = int(args[2]) start_date = datetime.datetime(year, month, day) if num_args == 3: end_date = None elif num_args == 4: end_date = datetime.datetime(year, month, int(args[3])) elif num_args == 5: end_date = datetime.datetime(year, int(args[3]), int(args[4])) elif num_args == 6: year = int(args[3]) month = int(args[4]) day = int(args[5]) end_date = datetime.datetime(year, month, day)
from atmosci.utils import tzutils from atmosci.utils.timeutils import lastDayOfMonth, elapsedTime from atmosci.ndfd.factory import NdfdGridFileFactory from atmosci.reanalysis.factory import ReanalysisGridFileFactory from turf.weather.factory import TurfWeatherFileFactory # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # TODAY = datetime.date.today() THIS_YEAR = TODAY.year THIS_MONTH = TODAY.month LAST_DAY_OF_MONTH = datetime.date(THIS_YEAR, THIS_MONTH, lastDayOfMonth(THIS_YEAR, THIS_MONTH)) if THIS_MONTH < 12: NEXT_YEAR = THIS_YEAR NEXT_MONTH = THIS_MONTH + 1 else: NEXT_YEAR = THIS_YEAR + 1 NEXT_MONTH = 1 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # from optparse import OptionParser parser = OptionParser() parser.add_option('-d', action='store_true', dest='dev_mode',