Skip to content

Commit

Permalink
Various: Use timezone aware utcnow.
Browse files Browse the repository at this point in the history
TYPE: Feature
LINK: OGC-1665
  • Loading branch information
msom authored Jun 11, 2024
1 parent ca4e50b commit 35f30d1
Show file tree
Hide file tree
Showing 28 changed files with 98 additions and 90 deletions.
14 changes: 8 additions & 6 deletions src/onegov/api/utils.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from datetime import datetime, timedelta
import jwt
from webob.exc import HTTPUnauthorized, HTTPClientError

from datetime import timedelta
from onegov.api import ApiApp
from onegov.api.models import ApiException, ApiKey
from onegov.api.token import try_get_encoded_token, jwt_decode
from onegov.api import ApiApp
from sedate import utcnow
from webob.exc import HTTPUnauthorized, HTTPClientError


from typing import TYPE_CHECKING
Expand Down Expand Up @@ -49,12 +51,12 @@ def check_rate_limit(request: 'CoreRequest') -> dict[str, str]:
limit, expiration = request.app.rate_limit
requests, timestamp = request.app.rate_limit_cache.get_or_create(
addr,
creator=lambda: (0, datetime.utcnow()),
creator=lambda: (0, utcnow()),
)
if (datetime.utcnow() - timestamp).seconds < expiration:
if (utcnow() - timestamp).seconds < expiration:
requests += 1
else:
timestamp = datetime.utcnow()
timestamp = utcnow()
requests = 1
request.app.rate_limit_cache.set(
addr, (requests, timestamp)
Expand Down
6 changes: 3 additions & 3 deletions src/onegov/core/orm/debug.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import click

from contextlib import contextmanager
from datetime import datetime
from sedate import utcnow
from sqlalchemy import event
from sqlalchemy.engine import Engine
from sqlparse import format # type:ignore[import-untyped]
Expand All @@ -24,10 +24,10 @@ class Timer:
# though...

def start(self) -> None:
self.started = datetime.utcnow()
self.started = utcnow()

def stop(self) -> 'timedelta':
return datetime.utcnow() - self.started
return utcnow() - self.started


def print_query(query: bytes) -> None:
Expand Down
7 changes: 4 additions & 3 deletions src/onegov/election_day/layouts/default.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from babel import Locale
from datetime import datetime
from fs.errors import ResourceNotFound
from functools import cached_property
from onegov.core.i18n import SiteLocale
Expand All @@ -10,11 +9,13 @@
from onegov.election_day.collections import SearchableArchivedResultCollection
from onegov.election_day.collections import VoteCollection
from onegov.user import Auth
from sedate import utcnow


from typing import Any
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from datetime import datetime
from onegov.election_day.app import ElectionDayApp
from onegov.election_day.models import Canton
from onegov.election_day.models import Municipality
Expand Down Expand Up @@ -129,7 +130,7 @@ def get_topojson_link(self, id: str, year: int) -> str:

@cached_property
def copyright_year(self) -> int:
return datetime.utcnow().year
return utcnow().year

@cached_property
def manage_link(self) -> str:
Expand Down Expand Up @@ -199,7 +200,7 @@ def archive_download(self) -> str:
return self.request.link(self.principal, name="archive-download")

@property
def last_archive_modification(self) -> datetime | None:
def last_archive_modification(self) -> 'datetime | None':
try:
filestorage = self.request.app.filestorage
assert filestorage is not None
Expand Down
10 changes: 5 additions & 5 deletions src/onegov/event/collections/events.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import hashlib

from uuid import uuid4
from datetime import date, timezone
from datetime import date
from datetime import datetime
from datetime import timedelta
from datetime import timezone
from icalendar import Calendar as vCalendar
from icalendar.prop import vCategory
from lxml import etree
from lxml.etree import SubElement, CDATA
from markupsafe import escape

from onegov.core.collection import Pagination
from onegov.core.utils import increment_name
from onegov.core.utils import normalize_for_url
Expand All @@ -20,8 +19,10 @@
from sedate import replace_timezone
from sedate import standardize_date
from sedate import to_timezone
from sedate import utcnow
from sqlalchemy import and_
from sqlalchemy import or_
from uuid import uuid4


from typing import Any
Expand Down Expand Up @@ -158,8 +159,7 @@ def remove_stale_events(self, max_stale: datetime | None = None) -> None:
"""

if max_stale is None:
max_stale = datetime.utcnow() - timedelta(days=5)
max_stale = standardize_date(max_stale, 'UTC')
max_stale = utcnow() - timedelta(days=5)

events = self.session.query(Event).filter(
Event.state == 'initiated',
Expand Down
2 changes: 1 addition & 1 deletion src/onegov/event/models/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ def get_ical_vevents(self, url: str | None = None) -> 'Iterator[vEvent]':
"""

modified = self.modified or self.created or datetime.utcnow()
modified = self.modified or self.created or utcnow()
rrule = None
if self.recurrence:
rrule = vRecur.from_ical(self.recurrence.replace('RRULE:', ''))
Expand Down
4 changes: 2 additions & 2 deletions src/onegov/event/models/occurrence.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from datetime import datetime
from icalendar import Calendar as vCalendar
from icalendar import Event as vEvent
from onegov.core.orm import Base
Expand All @@ -8,6 +7,7 @@
from onegov.gis import Coordinates
from pytz import UTC
from sedate import to_timezone
from sedate import utcnow
from sqlalchemy import Column
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
Expand Down Expand Up @@ -47,7 +47,7 @@ class Occurrence(Base, OccurrenceMixin, TimestampMixin):
def as_ical(self, url: str | None = None) -> bytes:
""" Returns the occurrence as iCalendar string. """

modified = self.modified or self.created or datetime.utcnow()
modified = self.modified or self.created or utcnow()
event = self.event

vevent = vEvent()
Expand Down
2 changes: 1 addition & 1 deletion src/onegov/form/collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ def add(
# which were never completed (this is way easier than having to use
# some kind of cronjob ;)
self.remove_old_pending_submissions(
older_than=datetime.utcnow() - timedelta(days=1)
older_than=utcnow() - timedelta(days=1)
)

return submission
Expand Down
2 changes: 1 addition & 1 deletion src/onegov/fsi/models/course.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from arrow import utcnow
from onegov.core.html import html_to_text
from onegov.core.orm import Base
from onegov.core.orm.types import UUID
from onegov.search import ORMSearchable
from sedate import utcnow
from sqlalchemy import Column, Text, Boolean, Integer
from sqlalchemy.ext.hybrid import hybrid_property
from uuid import uuid4
Expand Down
5 changes: 3 additions & 2 deletions src/onegov/gazette/layout.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from functools import cached_property
from datetime import datetime
from onegov.core.layout import ChameleonLayout
from onegov.core.static import StaticFile
from onegov.gazette import _
Expand All @@ -14,13 +13,15 @@
from onegov.user import UserCollection
from onegov.user import UserGroupCollection
from sedate import to_timezone
from sedate import utcnow


from typing import Any
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from chameleon import PageTemplateFile
from datetime import date
from datetime import datetime
from onegov.gazette.models import GazetteNotice
from onegov.gazette.request import GazetteRequest
from onegov.user import User
Expand Down Expand Up @@ -85,7 +86,7 @@ def sentry_init_path(self) -> str:

@cached_property
def copyright_year(self) -> int:
return datetime.utcnow().year
return utcnow().year

@cached_property
def homepage_link(self) -> str:
Expand Down
4 changes: 2 additions & 2 deletions src/onegov/gazette/views/categories.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from datetime import datetime
from io import BytesIO
from morepath import redirect
from morepath.request import Response
Expand All @@ -10,6 +9,7 @@
from onegov.gazette.forms import EmptyForm
from onegov.gazette.layout import Layout
from onegov.gazette.models import Category
from sedate import utcnow
from xlsxwriter import Workbook


Expand Down Expand Up @@ -216,7 +216,7 @@ def export_categories(
)
response.content_disposition = 'inline; filename={}-{}.xlsx'.format(
request.translate(_("Categories")).lower(),
datetime.utcnow().strftime('%Y%m%d%H%M')
utcnow().strftime('%Y%m%d%H%M')
)
response.body = output.read()

Expand Down
4 changes: 2 additions & 2 deletions src/onegov/gazette/views/issues.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from datetime import date
from datetime import datetime
from io import BytesIO
from morepath import redirect
from morepath.request import Response
Expand All @@ -13,6 +12,7 @@
from onegov.gazette.models import Issue
from onegov.gazette.pdf import IssuePrintOnlyPdf
from sedate import to_timezone
from sedate import utcnow
from xlsxwriter import Workbook


Expand Down Expand Up @@ -332,7 +332,7 @@ def export_issue(self: IssueCollection, request: 'GazetteRequest') -> Response:
)
response.content_disposition = 'inline; filename={}-{}.xlsx'.format(
request.translate(_("Issues")).lower(),
datetime.utcnow().strftime('%Y%m%d%H%M')
utcnow().strftime('%Y%m%d%H%M')
)
response.body = output.read()

Expand Down
4 changes: 2 additions & 2 deletions src/onegov/gazette/views/notices.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from datetime import datetime
from io import BytesIO
from morepath import redirect
from morepath.request import Response
Expand All @@ -17,6 +16,7 @@
from onegov.gazette.pdf import NoticesPdf
from onegov.gazette.views import get_user
from onegov.gazette.views import get_user_and_group
from sedate import utcnow
from xlsxwriter import Workbook


Expand Down Expand Up @@ -307,7 +307,7 @@ def view_notices_statistics_xlsx(
response.content_disposition = 'inline; filename={}-{}-{}.xlsx'.format(
request.translate(_("Statistics")).lower(),
normalize_for_url(request.translate(TRANSLATIONS.get(self.state, ''))),
datetime.utcnow().strftime('%Y%m%d%H%M')
utcnow().strftime('%Y%m%d%H%M')
)
response.body = output.read()

Expand Down
4 changes: 2 additions & 2 deletions src/onegov/gazette/views/organizations.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from datetime import datetime
from io import BytesIO
from morepath import redirect
from morepath.request import Response
Expand All @@ -11,6 +10,7 @@
from onegov.gazette.layout import Layout
from onegov.gazette.models import Organization
from onegov.gazette.models import OrganizationMove
from sedate import utcnow
from xlsxwriter import Workbook


Expand Down Expand Up @@ -279,7 +279,7 @@ def export_organizations(
)
response.content_disposition = 'inline; filename={}-{}.xlsx'.format(
request.translate(_("Organizations")).lower(),
datetime.utcnow().strftime('%Y%m%d%H%M')
utcnow().strftime('%Y%m%d%H%M')
)
response.body = output.read()

Expand Down
4 changes: 2 additions & 2 deletions src/onegov/gazette/views/users.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from datetime import datetime
from io import BytesIO
from morepath import redirect
from morepath.request import Response
Expand All @@ -17,6 +16,7 @@
from onegov.user import UserCollection
from onegov.user import UserGroup
from onegov.user.utils import password_reset_url
from sedate import utcnow
from webob.exc import HTTPForbidden
from xlsxwriter import Workbook

Expand Down Expand Up @@ -354,7 +354,7 @@ def export_users(
)
response.content_disposition = 'inline; filename={}-{}.xlsx'.format(
request.translate(_("Users")).lower(),
datetime.utcnow().strftime('%Y%m%d%H%M')
utcnow().strftime('%Y%m%d%H%M')
)
response.body = output.read()
return response
Expand Down
17 changes: 6 additions & 11 deletions src/onegov/org/cronjobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
from onegov.ticket import Ticket, TicketCollection
from onegov.org.models import TicketMessage, ExtendedDirectoryEntry
from onegov.user import User, UserCollection
from sedate import replace_timezone, to_timezone, utcnow, align_date_to_day
from sedate import to_timezone, utcnow, align_date_to_day
from sqlalchemy import and_, or_, func
from sqlalchemy.orm import undefer
from uuid import UUID
Expand Down Expand Up @@ -224,8 +224,7 @@ def ticket_statistics_users(app: OrgApp) -> list[User]:
@OrgApp.cronjob(hour=8, minute=30, timezone='Europe/Zurich')
def send_daily_ticket_statistics(request: 'OrgRequest') -> None:

today = replace_timezone(datetime.utcnow(), 'UTC')
today = to_timezone(today, 'Europe/Zurich')
today = to_timezone(utcnow(), 'Europe/Zurich')

if today.weekday() in (SAT, SUN):
return
Expand Down Expand Up @@ -290,8 +289,7 @@ def send_daily_ticket_statistics(request: 'OrgRequest') -> None:
@OrgApp.cronjob(hour=8, minute=45, timezone='Europe/Zurich')
def send_weekly_ticket_statistics(request: 'OrgRequest') -> None:

today = replace_timezone(datetime.utcnow(), 'UTC')
today = to_timezone(today, 'Europe/Zurich')
today = to_timezone(utcnow(), 'Europe/Zurich')

if today.weekday() != MON:
return
Expand Down Expand Up @@ -352,8 +350,7 @@ def send_weekly_ticket_statistics(request: 'OrgRequest') -> None:
@OrgApp.cronjob(hour=9, minute=0, timezone='Europe/Zurich')
def send_monthly_ticket_statistics(request: 'OrgRequest') -> None:

today = replace_timezone(datetime.utcnow(), 'UTC')
today = to_timezone(today, 'Europe/Zurich')
today = to_timezone(utcnow(), 'Europe/Zurich')

if today.weekday() != MON or today.day > 7:
return
Expand Down Expand Up @@ -545,8 +542,7 @@ def form(definition: str) -> type['Form']:

@OrgApp.cronjob(hour='*', minute='*/30', timezone='UTC')
def end_chats_and_create_tickets(request: 'OrgRequest') -> None:
half_hour_ago = replace_timezone(
datetime.utcnow(), 'UTC') - timedelta(minutes=30)
half_hour_ago = utcnow() - timedelta(minutes=30)

chats = ChatCollection(request.session).query().filter(
Chat.active == True).filter(Chat.chat_history != []).filter(
Expand Down Expand Up @@ -628,8 +624,7 @@ def delete_old_tickets(request: 'OrgRequest') -> None:
@OrgApp.cronjob(hour=9, minute=30, timezone='Europe/Zurich')
def send_monthly_mtan_statistics(request: 'OrgRequest') -> None:

today = replace_timezone(datetime.utcnow(), 'UTC')
today = to_timezone(today, 'Europe/Zurich')
today = to_timezone(utcnow(), 'Europe/Zurich')

if today.weekday() != MON or today.day > 7:
return
Expand Down
Loading

0 comments on commit 35f30d1

Please sign in to comment.