コード例 #1
0
    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)
コード例 #2
0
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)
コード例 #3
0
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)
コード例 #4
0
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)
コード例 #5
0
    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)
コード例 #6
0
    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
コード例 #7
0
    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
コード例 #8
0
    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)
コード例 #9
0
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
コード例 #10
0
 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
コード例 #11
0
    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
コード例 #12
0
    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)
コード例 #13
0
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)
コード例 #14
0
        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:
コード例 #15
0
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])
コード例 #16
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])
コード例 #17
0
        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)
コード例 #18
0
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.'
コード例 #19
0
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()
コード例 #20
0
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)
コード例 #21
0
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',