Skip to content

Commit 1d43c44

Browse files
pytz removal (#12792)
* pytz removal * fix typos
1 parent 850b9f3 commit 1d43c44

12 files changed

+63
-50
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 4.2+ on 2024-01-01 12:00
2+
3+
import zoneinfo
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('dojo', '0234_finding_cvssv4_finding_cvssv4_score'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='system_settings',
16+
name='time_zone',
17+
field=models.CharField(choices=[(tz, tz) for tz in zoneinfo.available_timezones()], default='UTC', max_length=50),
18+
),
19+
]

dojo/filters.py

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
import decimal
33
import logging
44
import warnings
5+
import zoneinfo
56
from datetime import datetime, timedelta
67

7-
import pytz
88
import six
99
import tagulous
1010
from auditlog.models import LogEntry
@@ -97,7 +97,7 @@
9797

9898
logger = logging.getLogger(__name__)
9999

100-
local_tz = pytz.timezone(get_system_setting("time_zone"))
100+
local_tz = zoneinfo.ZoneInfo(get_system_setting("time_zone"))
101101

102102
BOOLEAN_CHOICES = (("false", "No"), ("true", "Yes"))
103103
EARLIEST_FINDING = None
@@ -125,7 +125,7 @@ def vulnerability_id_filter(queryset, name, value):
125125

126126

127127
def now():
128-
return local_tz.localize(datetime.today())
128+
return datetime.today().replace(tzinfo=local_tz)
129129

130130

131131
class NumberInFilter(filters.BaseInFilter, filters.NumberFilter):
@@ -199,9 +199,8 @@ def __init__(self, *args, **kwargs):
199199
def filter(self, qs, value):
200200
earliest_finding = get_earliest_finding(qs)
201201
if earliest_finding is not None:
202-
start_date = local_tz.localize(datetime.combine(
203-
earliest_finding.date, datetime.min.time()),
204-
)
202+
start_date = datetime.combine(
203+
earliest_finding.date, datetime.min.time()).replace(tzinfo=local_tz)
205204
self.start_date = _truncate(start_date - timedelta(days=1))
206205
self.end_date = _truncate(now() + timedelta(days=1))
207206
try:
@@ -818,26 +817,23 @@ class MetricsDateRangeFilter(ChoiceFilter):
818817
def any(self, qs, name):
819818
earliest_finding = get_earliest_finding(qs)
820819
if earliest_finding is not None:
821-
start_date = local_tz.localize(datetime.combine(
822-
earliest_finding.date, datetime.min.time()),
823-
)
820+
start_date = datetime.combine(
821+
earliest_finding.date, datetime.min.time()).replace(tzinfo=local_tz)
824822
self.start_date = _truncate(start_date - timedelta(days=1))
825823
self.end_date = _truncate(now() + timedelta(days=1))
826824
return qs.all()
827825
return None
828826

829827
def current_month(self, qs, name):
830-
self.start_date = local_tz.localize(
831-
datetime(now().year, now().month, 1, 0, 0, 0))
828+
self.start_date = datetime(now().year, now().month, 1, 0, 0, 0).replace(tzinfo=local_tz)
832829
self.end_date = now()
833830
return qs.filter(**{
834831
f"{name}__year": self.start_date.year,
835832
f"{name}__month": self.start_date.month,
836833
})
837834

838835
def current_year(self, qs, name):
839-
self.start_date = local_tz.localize(
840-
datetime(now().year, 1, 1, 0, 0, 0))
836+
self.start_date = datetime(now().year, 1, 1, 0, 0, 0).replace(tzinfo=local_tz)
841837
self.end_date = now()
842838
return qs.filter(**{
843839
f"{name}__year": now().year,
@@ -887,9 +883,8 @@ def filter(self, qs, value):
887883
return qs
888884
earliest_finding = get_earliest_finding(qs)
889885
if earliest_finding is not None:
890-
start_date = local_tz.localize(datetime.combine(
891-
earliest_finding.date, datetime.min.time()),
892-
)
886+
start_date = datetime.combine(
887+
earliest_finding.date, datetime.min.time()).replace(tzinfo=local_tz)
893888
self.start_date = _truncate(start_date - timedelta(days=1))
894889
self.end_date = _truncate(now() + timedelta(days=1))
895890
try:

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
23
from pathlib import Path
34

45
from django.core.management.base import BaseCommand
5-
from pytz import timezone
66

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

10-
locale = timezone(get_system_setting("time_zone"))
10+
locale = zoneinfo.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,7 +1,7 @@
11
import logging
2+
import zoneinfo
23

34
from django.core.management.base import BaseCommand
4-
from pytz import timezone
55

66
from dojo.models import Finding, Product
77
from dojo.utils import (
@@ -12,7 +12,7 @@
1212
mass_model_updater,
1313
)
1414

15-
locale = timezone(get_system_setting("time_zone"))
15+
locale = zoneinfo.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
12
from pathlib import Path
23

34
from django.core.management.base import BaseCommand
45
from django.db import connection
5-
from pytz import timezone
66

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

10-
locale = timezone(get_system_setting("time_zone"))
10+
locale = zoneinfo.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,15 +1,15 @@
11
import logging
2+
import zoneinfo
23

34
from django.core.management.base import BaseCommand
4-
from pytz import timezone
55

66
import dojo.jira_link.helper as jira_helper
77
from dojo.models import Finding
88
from dojo.utils import get_system_setting
99

1010
logger = logging.getLogger(__name__)
1111

12-
locale = timezone(get_system_setting("time_zone"))
12+
locale = zoneinfo.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,16 +1,16 @@
11
import logging
22
import re
3+
import zoneinfo
34

45
from django.core.management.base import BaseCommand
5-
from pytz import timezone
66

77
from dojo.celery import app
88
from dojo.models import Finding, Test_Type
99
from dojo.utils import get_system_setting
1010

1111
logger = logging.getLogger(__name__)
1212

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

1515
"""
1616
Author: Aaron Weaver

dojo/management/commands/stamp_finding_last_reviewed.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
import zoneinfo
2+
13
from auditlog.models import LogEntry
24
from django.contrib.contenttypes.models import ContentType
35
from django.core.management.base import BaseCommand
4-
from pytz import timezone
56

67
from dojo.models import Finding
78
from dojo.utils import get_system_setting
89

9-
locale = timezone(get_system_setting("time_zone"))
10+
locale = zoneinfo.ZoneInfo(get_system_setting("time_zone"))
1011

1112
"""
1213
Authors: Jay Paz

dojo/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import logging
55
import re
66
import warnings
7+
import zoneinfo
78
from contextlib import suppress
89
from datetime import datetime, timedelta
910
from decimal import Decimal
@@ -39,7 +40,6 @@
3940
from polymorphic.base import ManagerInheritanceWarning
4041
from polymorphic.managers import PolymorphicManager
4142
from polymorphic.models import PolymorphicModel
42-
from pytz import all_timezones
4343
from tagulous.models import TagField
4444
from tagulous.models.managers import FakeTagRelatedManager
4545

@@ -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 all_timezones],
441+
choices=[(tz, tz) for tz in zoneinfo.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)

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ Pillow==11.3.0 # required by django-imagekit
3434
psycopg[c]==3.2.9
3535
cryptography==45.0.5
3636
python-dateutil==2.9.0.post0
37-
pytz==2025.1
3837
redis==6.2.0
3938
requests==2.32.4
4039
sqlalchemy==2.0.41 # Required by Celery broker transport

0 commit comments

Comments
 (0)