# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Utility for determining whether we need to rate limit.

Don't rate limit on:
 - Weekends
 - PST Nighttime
 - U.S. Holidays
"""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import datetime
import holidays
import pytz


_US_HOLIDAYS = holidays.UnitedStates()
_PST = pytz.timezone('US/Pacific')


def HaveUnlimitedResources():
  """Returns whether it is currently a time with low expected builder load."""
  # App engine is always UTC
  now = pytz.utc.localize(datetime.datetime.now())
  now = now.astimezone(_PST)
  return (
      now.weekday() >= 5  # Is a weekend
      or _IsNightTime(now)
      or _IsHoliday(now))


def _IsNightTime(now):
  """Whether we are sufficiently outside of work hours to not rate limit.

  Args:
    now: A (PST-localized) datetime.datetime instance.
  """
  return now.hour < 9 or now.hour > 18


def _IsHoliday(now):
  """Whether today is a US holiday.

  Args:
    now: A (PST-localized) datetime.datetime instance.
  """
  return now.date() in _US_HOLIDAYS
