feat: switch all timezone naive datetimes to timezone aware
This commit is contained in:
parent
41fc0a73a5
commit
e22abb383c
30 changed files with 322 additions and 226 deletions
|
@ -3,28 +3,28 @@ import logging
|
|||
from datetime import datetime, timedelta, timezone
|
||||
from typing import Optional
|
||||
|
||||
from flask import Blueprint, render_template, request, url_for, redirect
|
||||
from flask import Blueprint, redirect, render_template, request, url_for
|
||||
from flask.typing import ResponseReturnValue
|
||||
from markupsafe import Markup
|
||||
from sqlalchemy import desc, or_, func
|
||||
from sqlalchemy import desc, func, or_
|
||||
|
||||
from app.alarms import alarms_for
|
||||
from app.models.activity import Activity
|
||||
from app.models.alarms import Alarm, AlarmState
|
||||
from app.models.base import Group
|
||||
from app.models.bridges import Bridge
|
||||
from app.models.mirrors import Origin, Proxy
|
||||
from app.models.base import Group
|
||||
from app.models.onions import Eotk
|
||||
from app.portal.country import bp as country
|
||||
from app.portal.cloud import bp as cloud
|
||||
from app.portal.automation import bp as automation
|
||||
from app.portal.bridgeconf import bp as bridgeconf
|
||||
from app.portal.bridge import bp as bridge
|
||||
from app.portal.bridgeconf import bp as bridgeconf
|
||||
from app.portal.cloud import bp as cloud
|
||||
from app.portal.country import bp as country
|
||||
from app.portal.eotk import bp as eotk
|
||||
from app.portal.group import bp as group
|
||||
from app.portal.list import bp as list_
|
||||
from app.portal.origin import bp as origin
|
||||
from app.portal.onion import bp as onion
|
||||
from app.portal.origin import bp as origin
|
||||
from app.portal.pool import bp as pool
|
||||
from app.portal.proxy import bp as proxy
|
||||
from app.portal.smart_proxy import bp as smart_proxy
|
||||
|
@ -57,7 +57,7 @@ def calculate_bridge_expiry(b: Bridge) -> str:
|
|||
logging.warning("Bridge expiry requested by template for a bridge %s that was not expiring.", b.id)
|
||||
return "Not expiring"
|
||||
expiry = b.deprecated + timedelta(hours=b.conf.expiry_hours)
|
||||
countdown = expiry - datetime.utcnow()
|
||||
countdown = expiry - datetime.now(tz=timezone.utc)
|
||||
if countdown.days == 0:
|
||||
return f"{countdown.seconds // 3600} hours"
|
||||
return f"{countdown.days} days"
|
||||
|
@ -66,7 +66,7 @@ def calculate_bridge_expiry(b: Bridge) -> str:
|
|||
@portal.app_template_filter("mirror_expiry")
|
||||
def calculate_mirror_expiry(s: datetime) -> str:
|
||||
expiry = s + timedelta(days=3)
|
||||
countdown = expiry - datetime.utcnow()
|
||||
countdown = expiry - datetime.now(tz=timezone.utc)
|
||||
if countdown.days == 0:
|
||||
return f"{countdown.seconds // 3600} hours"
|
||||
return f"{countdown.days} days"
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
from typing import Optional
|
||||
|
||||
from flask import render_template, flash, Response, Blueprint, current_app
|
||||
from flask import Blueprint, Response, current_app, flash, render_template
|
||||
from flask.typing import ResponseReturnValue
|
||||
from flask_wtf import FlaskForm
|
||||
from sqlalchemy import exc, desc
|
||||
from wtforms import SubmitField, BooleanField
|
||||
from sqlalchemy import desc, exc
|
||||
from wtforms import BooleanField, SubmitField
|
||||
|
||||
from app.extensions import db
|
||||
from app.models.automation import Automation, AutomationLogs
|
||||
from app.models.tfstate import TerraformState
|
||||
from app.portal.util import view_lifecycle, response_404
|
||||
from app.portal.util import response_404, view_lifecycle
|
||||
|
||||
bp = Blueprint("automation", __name__)
|
||||
|
||||
|
@ -54,7 +54,7 @@ def automation_edit(automation_id: int) -> ResponseReturnValue:
|
|||
form = EditAutomationForm(enabled=automation.enabled)
|
||||
if form.validate_on_submit():
|
||||
automation.enabled = form.enabled.data
|
||||
automation.updated = datetime.utcnow()
|
||||
automation.updated = datetime.now(tz=timezone.utc)
|
||||
try:
|
||||
db.session.commit()
|
||||
flash("Saved changes to bridge configuration.", "success")
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
from datetime import datetime
|
||||
from typing import Optional, List
|
||||
from datetime import datetime, timezone
|
||||
from typing import List, Optional
|
||||
|
||||
from flask import render_template, url_for, flash, redirect, Response, Blueprint
|
||||
from flask import (Blueprint, Response, flash, redirect, render_template,
|
||||
url_for)
|
||||
from flask.typing import ResponseReturnValue
|
||||
from flask_wtf import FlaskForm
|
||||
from sqlalchemy import exc
|
||||
from wtforms import SelectField, StringField, IntegerField, SubmitField
|
||||
from wtforms import IntegerField, SelectField, StringField, SubmitField
|
||||
from wtforms.validators import DataRequired, NumberRange
|
||||
|
||||
from app.extensions import db
|
||||
|
@ -99,8 +100,8 @@ def bridgeconf_new(group_id: Optional[int] = None) -> ResponseReturnValue:
|
|||
bridgeconf.max_number = form.max_number.data
|
||||
bridgeconf.expiry_hours = form.expiry_hours.data
|
||||
bridgeconf.provider_allocation = ProviderAllocation[form.provider_allocation.data]
|
||||
bridgeconf.created = datetime.utcnow()
|
||||
bridgeconf.updated = datetime.utcnow()
|
||||
bridgeconf.added = datetime.now(tz=timezone.utc)
|
||||
bridgeconf.updated = datetime.now(tz=timezone.utc)
|
||||
try:
|
||||
db.session.add(bridgeconf)
|
||||
db.session.commit()
|
||||
|
@ -137,7 +138,7 @@ def bridgeconf_edit(bridgeconf_id: int) -> ResponseReturnValue:
|
|||
bridgeconf.max_number = form.max_number.data
|
||||
bridgeconf.expiry_hours = form.expiry_hours.data
|
||||
bridgeconf.provider_allocation = ProviderAllocation[form.provider_allocation.data]
|
||||
bridgeconf.updated = datetime.utcnow()
|
||||
bridgeconf.updated = datetime.now(tz=timezone.utc)
|
||||
try:
|
||||
db.session.commit()
|
||||
flash("Saved changes to bridge configuration.", "success")
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
|
||||
import sqlalchemy
|
||||
from flask import Blueprint, render_template, Response, flash
|
||||
from flask import Blueprint, Response, flash, render_template
|
||||
from flask.typing import ResponseReturnValue
|
||||
from flask_wtf import FlaskForm
|
||||
from wtforms import IntegerField, BooleanField, SubmitField
|
||||
from wtforms import BooleanField, IntegerField, SubmitField
|
||||
|
||||
from app.extensions import db
|
||||
from app.models.mirrors import Country
|
||||
|
@ -63,7 +63,7 @@ def country_edit(country_id: int) -> ResponseReturnValue:
|
|||
country.risk_level_override = form.risk_level_override_number.data
|
||||
else:
|
||||
country.risk_level_override = None
|
||||
country.updated = datetime.utcnow()
|
||||
country.updated = datetime.now(tz=timezone.utc)
|
||||
try:
|
||||
db.session.commit()
|
||||
flash("Saved changes to country.", "success")
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from flask import render_template, url_for, flash, redirect, Response, Blueprint
|
||||
import sqlalchemy
|
||||
from flask import (Blueprint, Response, flash, redirect, render_template,
|
||||
url_for)
|
||||
from flask.typing import ResponseReturnValue
|
||||
from flask_wtf import FlaskForm
|
||||
import sqlalchemy
|
||||
from wtforms import StringField, BooleanField, SubmitField
|
||||
from wtforms import BooleanField, StringField, SubmitField
|
||||
from wtforms.validators import DataRequired
|
||||
|
||||
from app.extensions import db
|
||||
|
@ -72,7 +73,7 @@ def group_edit(group_id: int) -> ResponseReturnValue:
|
|||
if form.validate_on_submit():
|
||||
group.description = form.description.data
|
||||
group.eotk = form.eotk.data
|
||||
group.updated = datetime.utcnow()
|
||||
group.updated = datetime.now(tz=timezone.utc)
|
||||
try:
|
||||
db.session.commit()
|
||||
flash("Saved changes to group.", "success")
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import json
|
||||
from datetime import datetime
|
||||
from typing import Optional, Any
|
||||
from datetime import datetime, timezone
|
||||
from typing import Any, Optional
|
||||
|
||||
from flask import render_template, url_for, flash, redirect, Blueprint, Response
|
||||
from flask import (Blueprint, Response, flash, redirect, render_template,
|
||||
url_for)
|
||||
from flask.typing import ResponseReturnValue
|
||||
from flask_wtf import FlaskForm
|
||||
from sqlalchemy import exc
|
||||
|
@ -103,8 +104,8 @@ def list_new(group_id: Optional[int] = None) -> ResponseReturnValue:
|
|||
list_.branch = form.branch.data
|
||||
list_.role = form.role.data
|
||||
list_.filename = form.filename.data
|
||||
list_.created = datetime.utcnow()
|
||||
list_.updated = datetime.utcnow()
|
||||
list_.added = datetime.now(tz=timezone.utc)
|
||||
list_.updated = datetime.now(tz=timezone.utc)
|
||||
try:
|
||||
db.session.add(list_)
|
||||
db.session.commit()
|
||||
|
@ -176,7 +177,7 @@ def list_edit(list_id: int) -> ResponseReturnValue:
|
|||
list_.branch = form.branch.data
|
||||
list_.role = form.role.data
|
||||
list_.filename = form.filename.data
|
||||
list_.updated = datetime.utcnow()
|
||||
list_.updated = datetime.now(tz=timezone.utc)
|
||||
try:
|
||||
db.session.commit()
|
||||
flash("Saved changes to group.", "success")
|
||||
|
|
|
@ -1,20 +1,22 @@
|
|||
import urllib.parse
|
||||
from datetime import datetime
|
||||
from typing import Optional, List
|
||||
from datetime import datetime, timezone
|
||||
from typing import List, Optional
|
||||
|
||||
import requests
|
||||
import sqlalchemy
|
||||
from flask import flash, redirect, url_for, render_template, Response, Blueprint
|
||||
from flask import (Blueprint, Response, flash, redirect, render_template,
|
||||
url_for)
|
||||
from flask.typing import ResponseReturnValue
|
||||
from flask_wtf import FlaskForm
|
||||
from sqlalchemy import exc
|
||||
from wtforms import StringField, SelectField, SubmitField, BooleanField, IntegerField
|
||||
from wtforms import (BooleanField, IntegerField, SelectField, StringField,
|
||||
SubmitField)
|
||||
from wtforms.validators import DataRequired
|
||||
|
||||
from app.extensions import db
|
||||
from app.models.base import Group
|
||||
from app.models.mirrors import Origin, Country
|
||||
from app.portal.util import response_404, view_lifecycle, LifecycleForm
|
||||
from app.models.mirrors import Country, Origin
|
||||
from app.portal.util import LifecycleForm, response_404, view_lifecycle
|
||||
|
||||
bp = Blueprint("origin", __name__)
|
||||
|
||||
|
@ -64,8 +66,8 @@ def origin_new(group_id: Optional[int] = None) -> ResponseReturnValue:
|
|||
origin.auto_rotation = form.auto_rotate.data
|
||||
origin.smart = form.smart_proxy.data
|
||||
origin.assets = form.asset_domain.data
|
||||
origin.created = datetime.utcnow()
|
||||
origin.updated = datetime.utcnow()
|
||||
origin.added = datetime.now(tz=timezone.utc)
|
||||
origin.updated = datetime.now(tz=timezone.utc)
|
||||
try:
|
||||
db.session.add(origin)
|
||||
db.session.commit()
|
||||
|
@ -106,7 +108,7 @@ def origin_edit(origin_id: int) -> ResponseReturnValue:
|
|||
origin.risk_level_override = form.risk_level_override_number.data
|
||||
else:
|
||||
origin.risk_level_override = None
|
||||
origin.updated = datetime.utcnow()
|
||||
origin.updated = datetime.now(tz=timezone.utc)
|
||||
try:
|
||||
db.session.commit()
|
||||
flash(f"Saved changes for origin {origin.domain_name}.", "success")
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
# mypy: ignore-errors
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
from flask import Blueprint, render_template
|
||||
from flask.typing import ResponseReturnValue
|
||||
from sqlalchemy import func, and_, desc
|
||||
from sqlalchemy import and_, desc, func
|
||||
from sqlalchemy.orm import aliased
|
||||
|
||||
from app.extensions import db
|
||||
from app.models import Deprecation
|
||||
from app.models.mirrors import Proxy, Origin, Country
|
||||
from app.models.mirrors import Country, Origin, Proxy
|
||||
|
||||
report = Blueprint("report", __name__)
|
||||
|
||||
|
||||
def generate_subqueries():
|
||||
DeprecationAlias = aliased(Deprecation)
|
||||
now = datetime.utcnow()
|
||||
now = datetime.now(tz=timezone.utc)
|
||||
deprecations_24hr_subquery = (
|
||||
db.session.query(
|
||||
DeprecationAlias.resource_id,
|
||||
|
@ -98,7 +98,7 @@ def report_blocks() -> ResponseReturnValue:
|
|||
Proxy.deprecated,
|
||||
Proxy.deprecation_reason
|
||||
).join(Origin, Origin.id == Proxy.origin_id
|
||||
).filter(and_(Proxy.deprecated > datetime.utcnow() - timedelta(days=1),
|
||||
).filter(and_(Proxy.deprecated > datetime.now(tz=timezone.utc) - timedelta(days=1),
|
||||
Proxy.deprecation_reason.like('block_%'))).all()
|
||||
|
||||
return render_template("report_blocks.html.j2",
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
from typing import Optional
|
||||
|
||||
from flask import render_template, flash, Response, Blueprint
|
||||
from flask import Blueprint, Response, flash, render_template
|
||||
from flask.typing import ResponseReturnValue
|
||||
from flask_wtf import FlaskForm
|
||||
from sqlalchemy import exc
|
||||
from wtforms import SubmitField, BooleanField
|
||||
from wtforms import BooleanField, SubmitField
|
||||
|
||||
from app.extensions import db
|
||||
from app.models.automation import Automation
|
||||
from app.models.tfstate import TerraformState
|
||||
from app.portal.util import view_lifecycle, response_404
|
||||
from app.portal.util import response_404, view_lifecycle
|
||||
|
||||
bp = Blueprint("storage", __name__)
|
||||
|
||||
|
@ -39,7 +39,7 @@ def storage_edit(storage_key: str) -> ResponseReturnValue:
|
|||
if form.validate_on_submit():
|
||||
if form.force_unlock.data:
|
||||
storage.lock = None
|
||||
storage.updated = datetime.utcnow()
|
||||
storage.updated = datetime.now(tz=timezone.utc)
|
||||
try:
|
||||
db.session.commit()
|
||||
flash("Storage has been force unlocked.", "success")
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
from typing import Optional
|
||||
|
||||
from flask import Blueprint, flash, Response, render_template, redirect, url_for
|
||||
from flask import (Blueprint, Response, flash, redirect, render_template,
|
||||
url_for)
|
||||
from flask.typing import ResponseReturnValue
|
||||
from flask_wtf import FlaskForm
|
||||
from sqlalchemy import exc
|
||||
from wtforms import StringField, SelectField, SubmitField
|
||||
from wtforms import SelectField, StringField, SubmitField
|
||||
from wtforms.validators import DataRequired
|
||||
|
||||
from app.extensions import db
|
||||
|
@ -70,7 +71,7 @@ def webhook_edit(webhook_id: int) -> ResponseReturnValue:
|
|||
webhook.description = form.description.data
|
||||
webhook.format = form.description.data
|
||||
webhook.url = form.description.data
|
||||
webhook.updated = datetime.utcnow()
|
||||
webhook.updated = datetime.now(tz=timezone.utc)
|
||||
try:
|
||||
db.session.commit()
|
||||
flash("Saved changes to webhook.", "success")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue