fix: add fallback and validation for report and cron timezones (#17338)

* add fallback and validation for report and cron timezones

* add logging to exception catch

* Run black

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>
This commit is contained in:
Elizabeth Thompson
2021-11-12 12:28:17 -08:00
committed by GitHub
parent bfc813dea2
commit f10bc6d8fe
5 changed files with 103 additions and 8 deletions

View File

@@ -15,21 +15,29 @@
# specific language governing permissions and limitations
# under the License.
import logging
from datetime import datetime, timedelta, timezone as dt_timezone
from typing import Iterator
import pytz
from croniter import croniter
from pytz import timezone as pytz_timezone, UnknownTimeZoneError
from superset import app
logger = logging.getLogger(__name__)
def cron_schedule_window(cron: str, timezone: str) -> Iterator[datetime]:
window_size = app.config["ALERT_REPORTS_CRON_WINDOW_SIZE"]
# create a time-aware datetime in utc
time_now = datetime.now(tz=dt_timezone.utc)
tz = pytz.timezone(timezone)
utc = pytz.timezone("UTC")
try:
tz = pytz_timezone(timezone)
except UnknownTimeZoneError:
# fallback to default timezone
tz = pytz_timezone("UTC")
logger.warning("Timezone %s was invalid. Falling back to 'UTC'", timezone)
utc = pytz_timezone("UTC")
# convert the current time to the user's local time for comparison
time_now = time_now.astimezone(tz)
start_at = time_now - timedelta(seconds=1)