Skip to content

Commit 98e0b87

Browse files
committed
Ruff: Add and fix DTZ002 & DTZ011 + reorg some timezone components
1 parent 95f50fb commit 98e0b87

21 files changed

+87
-53
lines changed

dojo/filters.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
import decimal
33
import logging
44
import warnings
5-
import zoneinfo
65
from datetime import datetime, timedelta
6+
from zoneinfo import ZoneInfo
77

88
import six
99
import tagulous
@@ -97,8 +97,6 @@
9797

9898
logger = logging.getLogger(__name__)
9999

100-
local_tz = zoneinfo.ZoneInfo(get_system_setting("time_zone"))
101-
102100
BOOLEAN_CHOICES = (("false", "No"), ("true", "Yes"))
103101
EARLIEST_FINDING = None
104102

@@ -125,7 +123,8 @@ def vulnerability_id_filter(queryset, name, value):
125123

126124

127125
def now():
128-
return datetime.today().replace(tzinfo=local_tz)
126+
local_tz = ZoneInfo(get_system_setting("time_zone"))
127+
return datetime.now(tz=local_tz)
129128

130129

131130
class NumberInFilter(filters.BaseInFilter, filters.NumberFilter):
@@ -199,6 +198,7 @@ def __init__(self, *args, **kwargs):
199198
def filter(self, qs, value):
200199
earliest_finding = get_earliest_finding(qs)
201200
if earliest_finding is not None:
201+
local_tz = ZoneInfo(get_system_setting("time_zone"))
202202
start_date = datetime.combine(
203203
earliest_finding.date, datetime.min.time()).replace(tzinfo=local_tz)
204204
self.start_date = _truncate(start_date - timedelta(days=1))
@@ -823,6 +823,7 @@ class MetricsDateRangeFilter(ChoiceFilter):
823823
def any(self, qs, name):
824824
earliest_finding = get_earliest_finding(qs)
825825
if earliest_finding is not None:
826+
local_tz = ZoneInfo(get_system_setting("time_zone"))
826827
start_date = datetime.combine(
827828
earliest_finding.date, datetime.min.time()).replace(tzinfo=local_tz)
828829
self.start_date = _truncate(start_date - timedelta(days=1))
@@ -831,6 +832,7 @@ def any(self, qs, name):
831832
return None
832833

833834
def current_month(self, qs, name):
835+
local_tz = ZoneInfo(get_system_setting("time_zone"))
834836
self.start_date = datetime(now().year, now().month, 1, 0, 0, 0).replace(tzinfo=local_tz)
835837
self.end_date = now()
836838
return qs.filter(**{
@@ -839,6 +841,7 @@ def current_month(self, qs, name):
839841
})
840842

841843
def current_year(self, qs, name):
844+
local_tz = ZoneInfo(get_system_setting("time_zone"))
842845
self.start_date = datetime(now().year, 1, 1, 0, 0, 0).replace(tzinfo=local_tz)
843846
self.end_date = now()
844847
return qs.filter(**{
@@ -889,6 +892,7 @@ def filter(self, qs, value):
889892
return qs
890893
earliest_finding = get_earliest_finding(qs)
891894
if earliest_finding is not None:
895+
local_tz = ZoneInfo(get_system_setting("time_zone"))
892896
start_date = datetime.combine(
893897
earliest_finding.date, datetime.min.time()).replace(tzinfo=local_tz)
894898
self.start_date = _truncate(start_date - timedelta(days=1))

dojo/forms.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import pickle
44
import re
55
import warnings
6-
from datetime import date, datetime
6+
from datetime import datetime
77
from pathlib import Path
8+
from zoneinfo import ZoneInfo
89

910
import tagulous
1011
from crispy_forms.bootstrap import InlineCheckboxes, InlineRadios
@@ -188,7 +189,8 @@ def __init__(self, attrs=None, years=None, *, required=True):
188189
if years:
189190
self.years = years
190191
else:
191-
this_year = date.today().year
192+
local_tz = ZoneInfo(get_system_setting("time_zone"))
193+
this_year = datetime.now(tz=local_tz).year
192194
self.years = list(range(this_year - 10, this_year + 1))
193195

194196
def render(self, name, value, attrs=None, renderer=None):
@@ -642,7 +644,8 @@ def clean_tags(self):
642644
# date can only be today or in the past, not the future
643645
def clean_scan_date(self):
644646
date = self.cleaned_data.get("scan_date", None)
645-
if date and date.date() > datetime.today().date():
647+
local_tz = ZoneInfo(get_system_setting("time_zone"))
648+
if date and date.date() > datetime.now(tz=local_tz).date():
646649
msg = "The date cannot be in the future!"
647650
raise forms.ValidationError(msg)
648651
return date
@@ -3582,7 +3585,8 @@ class Meta:
35823585
def clean_expiration(self):
35833586
expiration = self.cleaned_data.get("expiration", None)
35843587
if expiration:
3585-
today = datetime.today().date()
3588+
local_tz = ZoneInfo(get_system_setting("time_zone"))
3589+
today = datetime.now(tz=local_tz).date()
35863590
if expiration < today:
35873591
msg = "The expiration cannot be in the past"
35883592
raise forms.ValidationError(msg)

dojo/management/commands/csv_findings_export.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import csv
2-
import zoneinfo
32
from pathlib import Path
3+
from zoneinfo import ZoneInfo
44

55
from django.core.management.base import BaseCommand
66

77
from dojo.models import Finding
88
from dojo.utils import get_system_setting
99

10-
locale = zoneinfo.ZoneInfo(get_system_setting("time_zone"))
10+
locale = ZoneInfo(get_system_setting("time_zone"))
1111

1212
"""
1313
Author: Aaron Weaver

dojo/management/commands/dedupe.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
import zoneinfo
2+
from zoneinfo import ZoneInfo
33

44
from django.core.management.base import BaseCommand
55

@@ -12,7 +12,7 @@
1212
mass_model_updater,
1313
)
1414

15-
locale = zoneinfo.ZoneInfo(get_system_setting("time_zone"))
15+
locale = ZoneInfo(get_system_setting("time_zone"))
1616

1717
logger = logging.getLogger(__name__)
1818
deduplicationLogger = logging.getLogger("dojo.specific-loggers.deduplication")

dojo/management/commands/import_surveys.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import zoneinfo
21
from pathlib import Path
2+
from zoneinfo import ZoneInfo
33

44
from django.core.management.base import BaseCommand
55
from django.db import connection
66

77
from dojo.models import TextQuestion
88
from dojo.utils import get_system_setting
99

10-
locale = zoneinfo.ZoneInfo(get_system_setting("time_zone"))
10+
locale = ZoneInfo(get_system_setting("time_zone"))
1111

1212
"""
1313
Author: Cody Maffucci

dojo/management/commands/push_to_jira_update.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
import zoneinfo
2+
from zoneinfo import ZoneInfo
33

44
from django.core.management.base import BaseCommand
55

@@ -9,7 +9,7 @@
99

1010
logger = logging.getLogger(__name__)
1111

12-
locale = zoneinfo.ZoneInfo(get_system_setting("time_zone"))
12+
locale = ZoneInfo(get_system_setting("time_zone"))
1313

1414
"""
1515
Author: Aaron Weaver

dojo/management/commands/rename_mend_findings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import logging
22
import re
3-
import zoneinfo
3+
from zoneinfo import ZoneInfo
44

55
from django.core.management.base import BaseCommand
66

@@ -10,7 +10,7 @@
1010

1111
logger = logging.getLogger(__name__)
1212

13-
locale = zoneinfo.ZoneInfo(get_system_setting("time_zone"))
13+
locale = ZoneInfo(get_system_setting("time_zone"))
1414

1515
"""
1616
Author: Aaron Weaver

dojo/management/commands/stamp_finding_last_reviewed.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import zoneinfo
1+
from zoneinfo import ZoneInfo
22

33
from auditlog.models import LogEntry
44
from django.contrib.contenttypes.models import ContentType
@@ -7,7 +7,7 @@
77
from dojo.models import Finding
88
from dojo.utils import get_system_setting
99

10-
locale = zoneinfo.ZoneInfo(get_system_setting("time_zone"))
10+
locale = ZoneInfo(get_system_setting("time_zone"))
1111

1212
"""
1313
Authors: Jay Paz

dojo/metrics/views.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
import logging
44
import operator
55
from calendar import monthrange
6-
from datetime import date, datetime, timedelta
6+
from datetime import datetime, timedelta
7+
from zoneinfo import ZoneInfo
78

89
from dateutil.relativedelta import relativedelta
910
from django.contrib import messages
@@ -769,14 +770,15 @@ def view_engineer(request, eid):
769770

770771
# -------------
771772
# Details table
773+
local_tz = ZoneInfo(get_system_setting("time_zone"))
772774
details = sorted(
773775
(
774776
[
775777
f.test.engagement.product.prod_type.name,
776778
f.test.engagement.product.name,
777779
f.severity,
778780
f.title,
779-
(date.today() - f.date).days,
781+
(datetime.now(tz=local_tz).date() - f.date).days,
780782
"Accepted" if f.risk_accepted else "Active",
781783
f.reporter,
782784
]
@@ -850,7 +852,8 @@ def view_engineer(request, eid):
850852

851853
def _age_buckets(qs):
852854
"""Return aged high/critical finding counts in one SQL round-trip."""
853-
today = date.today()
855+
local_tz = ZoneInfo(get_system_setting("time_zone"))
856+
today = datetime.now(tz=local_tz).date()
854857
return qs.aggregate(
855858
lt=Count("id", filter=Q(date__gte=today - timedelta(days=30))),
856859
ls=Count("id", filter=Q(date__lte=today - timedelta(days=30), date__gt=today - timedelta(days=60))),

dojo/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
import logging
55
import re
66
import warnings
7-
import zoneinfo
87
from contextlib import suppress
98
from datetime import datetime, timedelta
109
from decimal import Decimal
1110
from pathlib import Path
1211
from uuid import uuid4
12+
from zoneinfo import available_timezones
1313

1414
import dateutil
1515
import hyperlink
@@ -438,7 +438,7 @@ class System_Settings(models.Model):
438438
url_prefix = models.CharField(max_length=300, default="", blank=True, help_text=_("URL prefix if DefectDojo is installed in it's own virtual subdirectory."))
439439
team_name = models.CharField(max_length=100, default="", blank=True)
440440
time_zone = models.CharField(max_length=50,
441-
choices=[(tz, tz) for tz in zoneinfo.available_timezones()],
441+
choices=[(tz, tz) for tz in available_timezones()],
442442
default="UTC", blank=False)
443443
enable_product_grade = models.BooleanField(default=False, verbose_name=_("Enable Product Grading"), help_text=_("Displays a grade letter next to a product to show the overall health."))
444444
product_grade = models.CharField(max_length=800, blank=True)

0 commit comments

Comments
 (0)