Skip to content

Commit ee0beb1

Browse files
committed
Ruff: Add and fix DTZ002 & DTZ011 + reorg some timezone components
1 parent 8a40e70 commit ee0beb1

File tree

14 files changed

+68
-35
lines changed

14 files changed

+68
-35
lines changed

dojo/filters.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import logging
44
import warnings
55
from datetime import datetime, timedelta
6+
from zoneinfo import ZoneInfo
67

78
import six
89
import tagulous
@@ -816,6 +817,7 @@ class MetricsDateRangeFilter(ChoiceFilter):
816817
def any(self, qs, name):
817818
earliest_finding = get_earliest_finding(qs)
818819
if earliest_finding is not None:
820+
ZoneInfo(get_system_setting("time_zone"))
819821
start_date = datetime.combine(
820822
earliest_finding.date, datetime.min.time()).replace(tzinfo=tzinfo())
821823
self.start_date = _truncate(start_date - timedelta(days=1))
@@ -882,6 +884,7 @@ def filter(self, qs, value):
882884
return qs
883885
earliest_finding = get_earliest_finding(qs)
884886
if earliest_finding is not None:
887+
ZoneInfo(get_system_setting("time_zone"))
885888
start_date = datetime.combine(
886889
earliest_finding.date, datetime.min.time()).replace(tzinfo=tzinfo())
887890
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/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/survey/views.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import pickle
2-
from datetime import date, timedelta
2+
from datetime import datetime, timedelta
3+
from zoneinfo import ZoneInfo
34

45
from django.contrib import messages
56
from django.contrib.admin.utils import NestedObjects
@@ -51,7 +52,7 @@
5152
System_Settings,
5253
TextQuestion,
5354
)
54-
from dojo.utils import add_breadcrumb, get_page_items, get_setting
55+
from dojo.utils import add_breadcrumb, get_page_items, get_setting, get_system_setting
5556

5657

5758
@user_is_authorized(Engagement, Permissions.Engagement_Edit, "eid")
@@ -136,7 +137,8 @@ def answer_questionnaire(request, eid, sid):
136137
if questions_are_valid:
137138
survey.completed = True
138139
survey.responder = request.user
139-
survey.answered_on = date.today()
140+
local_tz = ZoneInfo(get_system_setting("time_zone"))
141+
survey.answered_on = datetime.now(tz=local_tz).date()
140142
survey.save()
141143
messages.add_message(
142144
request,
@@ -788,7 +790,8 @@ def answer_empty_survey(request, esid):
788790
if questions_are_valid:
789791
survey.completed = True
790792
survey.responder = request.user if not request.user.is_anonymous else None
791-
survey.answered_on = date.today()
793+
local_tz = ZoneInfo(get_system_setting("time_zone"))
794+
survey.answered_on = datetime.now(tz=local_tz).date()
792795
survey.save()
793796
general_survey.num_responses += 1
794797
general_survey.save()

dojo/tasks.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import logging
2-
from datetime import date, timedelta
2+
from datetime import datetime, timedelta
3+
from zoneinfo import ZoneInfo
34

45
from auditlog.models import LogEntry
56
from celery.utils.log import get_task_logger
@@ -13,7 +14,7 @@
1314
from dojo.celery import app
1415
from dojo.models import Alerts, Announcement, Endpoint, Engagement, Finding, Product, System_Settings, User
1516
from dojo.notifications.helper import create_notification
16-
from dojo.utils import calculate_grade, sla_compute_and_notify
17+
from dojo.utils import calculate_grade, get_system_setting, sla_compute_and_notify
1718

1819
logger = get_task_logger(__name__)
1920
deduplicationLogger = logging.getLogger("dojo.specific-loggers.deduplication")
@@ -98,7 +99,8 @@ def flush_auditlog(*args, **kwargs):
9899
return
99100

100101
logger.info("Running Cleanup Task for Logentries with %d Months retention", retention_period)
101-
retention_date = date.today() - relativedelta(months=retention_period)
102+
local_tz = ZoneInfo(get_system_setting("time_zone"))
103+
retention_date = datetime.now(tz=local_tz).date() - relativedelta(months=retention_period)
102104
subset = LogEntry.objects.filter(timestamp__date__lt=retention_date)
103105
event_count = subset.count()
104106
logger.debug("Initially received %d Logentries", event_count)

dojo/test/views.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import time
66
from datetime import datetime
77
from functools import reduce
8+
from zoneinfo import ZoneInfo
89

910
from django.contrib import messages
1011
from django.contrib.admin.utils import NestedObjects
@@ -692,7 +693,8 @@ def add_temp_finding(request, tid, fid):
692693

693694
new_finding.tags = form.cleaned_data["tags"]
694695
new_finding.cvssv3 = finding.cvssv3
695-
new_finding.date = form.cleaned_data["date"] or datetime.today()
696+
local_tz = ZoneInfo(get_system_setting("time_zone"))
697+
new_finding.date = form.cleaned_data["date"] or datetime.now(tz=local_tz).date()
696698

697699
finding_helper.update_finding_status(new_finding, request.user)
698700

dojo/tools/hydra/parser.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import json
22
import logging
3-
from datetime import date
3+
from datetime import datetime
4+
from zoneinfo import ZoneInfo
45

56
from django.utils.dateparse import parse_datetime
67

78
from dojo.models import Endpoint, Finding
9+
from dojo.utils import get_system_setting
810

911
logger = logging.getLogger(__name__)
1012

@@ -78,7 +80,7 @@ def __extract_finding(
7880
title="Weak username / password combination found for " + host,
7981
date=parse_datetime(metadata.date)
8082
if metadata.date
81-
else date.today(),
83+
else datetime.now(tz=ZoneInfo(get_system_setting("time_zone"))).date(),
8284
severity="High",
8385
description=host
8486
+ " on port "

dojo/tools/noseyparker/parser.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import hashlib
22
import json
33
from datetime import datetime
4+
from zoneinfo import ZoneInfo
45

56
from dojo.models import Finding
7+
from dojo.utils import get_system_setting
68

79

810
class NoseyParkerParser:
@@ -82,6 +84,7 @@ def version_0_16_0(self, line, test):
8284
self.dupes[key] = finding
8385
else:
8486
self.dupes[key] = True
87+
local_tz = ZoneInfo(get_system_setting("time_zone"))
8588
# Create Finding object
8689
finding = Finding(
8790
test=test,
@@ -90,7 +93,7 @@ def version_0_16_0(self, line, test):
9093
description=description,
9194
severity="High",
9295
mitigation="Reset the account/token and remove from source code. Store secrets/tokens/passwords in secret managers or secure vaults.",
93-
date=datetime.today().strftime("%Y-%m-%d"),
96+
date=datetime.now(tz=local_tz).strftime("%Y-%m-%d"),
9497
verified=False,
9598
active=True,
9699
is_mitigated=False,
@@ -142,6 +145,7 @@ def version_0_22_0(self, line, test):
142145
self.dupes[key] = finding
143146
else:
144147
self.dupes[key] = True
148+
local_tz = ZoneInfo(get_system_setting("time_zone"))
145149
# Create Finding object
146150
finding = Finding(
147151
test=test,
@@ -150,7 +154,7 @@ def version_0_22_0(self, line, test):
150154
description=description,
151155
severity="High",
152156
mitigation="Reset the account/token and remove from source code. Store secrets/tokens/passwords in secret managers or secure vaults.",
153-
date=datetime.today().strftime("%Y-%m-%d"),
157+
date=datetime.now(tz=local_tz).strftime("%Y-%m-%d"),
154158
verified=False,
155159
active=True,
156160
is_mitigated=False,

ruff.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ select = [
4242
"A",
4343
"COM",
4444
"C4",
45-
"DTZ003", "DTZ004", "DTZ012", "DTZ901",
45+
"DTZ002", "DTZ003", "DTZ004", "DTZ01", "DTZ901",
4646
"T10",
4747
"DJ003", "DJ01",
4848
"EM",

unittests/test_flush_auditlog.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import logging
2-
from datetime import UTC, date, datetime
2+
from datetime import UTC, datetime
3+
from zoneinfo import ZoneInfo
34

45
from auditlog.models import LogEntry
56
from dateutil.relativedelta import relativedelta
67
from django.test import override_settings
78

89
from dojo.models import Finding
910
from dojo.tasks import flush_auditlog
11+
from dojo.utils import get_system_setting
1012

1113
from .dojo_test_case import DojoTestCase
1214

@@ -25,9 +27,10 @@ def test_flush_auditlog_disabled(self):
2527

2628
@override_settings(AUDITLOG_FLUSH_RETENTION_PERIOD=0)
2729
def test_delete_all_entries(self):
28-
entries_before = LogEntry.objects.filter(timestamp__date__lt=date.today()).count()
30+
local_tz = ZoneInfo(get_system_setting("time_zone"))
31+
entries_before = LogEntry.objects.filter(timestamp__date__lt=datetime.now(tz=local_tz).date()).count()
2932
flush_auditlog()
30-
entries_after = LogEntry.objects.filter(timestamp__date__lt=date.today()).count()
33+
entries_after = LogEntry.objects.filter(timestamp__date__lt=datetime.now(tz=local_tz).date()).count()
3134
# we have three old log entries in our testdata
3235
self.assertEqual(entries_before - 3, entries_after)
3336

0 commit comments

Comments
 (0)