summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/admin.py4
-rw-r--r--ishtar_common/forms.py4
-rw-r--r--ishtar_common/forms_common.py2
-rw-r--r--ishtar_common/management/commands/gdpr_clean.py3
-rw-r--r--ishtar_common/models.py31
-rw-r--r--ishtar_common/models_common.py27
-rw-r--r--ishtar_common/models_imports.py29
-rw-r--r--ishtar_common/serializers_utils.py3
-rw-r--r--ishtar_common/tasks.py13
-rw-r--r--ishtar_common/utils.py7
-rw-r--r--ishtar_common/views.py4
-rw-r--r--ishtar_common/views_item.py6
-rw-r--r--ishtar_common/wizards.py3
13 files changed, 72 insertions, 64 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index e9728cd09..8d419af7c 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -18,7 +18,6 @@
# See the file COPYING for details.
import csv
-import datetime
import json
from io import TextIOWrapper, BytesIO
import os
@@ -61,6 +60,7 @@ from django.forms import BaseInlineFormSet
from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.shortcuts import render
from django.urls import re_path, reverse
+from django.utils import timezone
from django.utils.decorators import method_decorator
from django.utils.text import slugify
from django.utils.safestring import mark_safe
@@ -1073,7 +1073,7 @@ class GDPRLogAdmin(admin.ModelAdmin):
return False
def get_csv_name(self):
- now = datetime.datetime.now()
+ now = timezone.now()
lbl = str(_("export-gdpr"))
return f"{now.strftime('%Y-%m-%d-%H%M')}-{lbl}"
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 55feef714..d6f622fc0 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -35,7 +35,7 @@ from django.core.exceptions import ValidationError
from django.core import validators
from django.forms.formsets import BaseFormSet, DELETION_FIELD_NAME
from django.urls import reverse
-from django.utils import formats, translation
+from django.utils import formats, translation, timezone
from django.utils.functional import lazy
from django.utils.safestring import mark_safe
from django.utils.text import slugify
@@ -1173,7 +1173,7 @@ class DocumentItemSelect(ImportSelect):
def get_now():
- return datetime.datetime.now().strftime(formats.get_format("DATE_INPUT_FORMATS")[0])
+ return timezone.now().strftime(formats.get_format("DATE_INPUT_FORMATS")[0])
class ClosingDateFormSelection(IshtarForm):
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index ae4d925b1..08c656b1c 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -1967,6 +1967,8 @@ class MergeForm(forms.ModelForm):
from_item.merge_exclusion.add(to_item)
else:
return
+ to_item.save()
+ from_item.save()
try:
self.instance.__class__.objects.get(
**{self.TO_KEY: from_item, self.FROM_KEY: to_item}
diff --git a/ishtar_common/management/commands/gdpr_clean.py b/ishtar_common/management/commands/gdpr_clean.py
index 1f3f413f6..c53d24fcc 100644
--- a/ishtar_common/management/commands/gdpr_clean.py
+++ b/ishtar_common/management/commands/gdpr_clean.py
@@ -4,6 +4,7 @@
import datetime
from django.conf import settings
from django.core.management.base import BaseCommand
+from django.utils import timezone
import sys
from ishtar_common.models import GDPRLog, GDPRPerson
@@ -15,7 +16,7 @@ def get_time():
def clean_gdpr():
- date = datetime.datetime.now() - (
+ date = timezone.now() - (
datetime.timedelta(days=settings.GDPR_RETENTION_PERIOD)
)
q = GDPRLog.objects.filter(date__lte=date)
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index a7bafd1fc..da4a98ce3 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -78,6 +78,7 @@ from django.db.utils import DatabaseError
from django.template import Context, Template
from django.template.defaultfilters import slugify
from django.urls import reverse
+from django.utils import timezone
from django.utils.functional import lazy
from django.utils.safestring import mark_safe
from ishtar_common.data_importer import post_importer_action
@@ -1967,7 +1968,7 @@ class StatsCache(models.Model):
model = models.CharField(_("Model name"), max_length=200)
model_pk = models.IntegerField(_("Associated primary key"))
values = JSONField(default=dict, blank=True)
- updated = models.DateTimeField(default=datetime.datetime.now)
+ updated = models.DateTimeField(default=timezone.now)
update_requested = models.DateTimeField(blank=True, null=True)
class Meta:
@@ -2431,7 +2432,7 @@ class DocumentTemplate(models.Model):
+ os.path.sep
+ slugify(self.name.replace(" ", "_").lower())
+ "-"
- + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")
+ + timezone.now().strftime("%Y-%m-%d-%H%M%S")
)
suffix = "." + self.template.name.split(".")[-1]
len_objects = len(objects)
@@ -3449,7 +3450,7 @@ class GDPRPerson(models.Model):
class GDPRLog(models.Model):
user = models.ForeignKey(User, verbose_name=_("User"), on_delete=models.PROTECT, blank=True,
null=True)
- date = models.DateTimeField(verbose_name=_("Date"), default=datetime.datetime.now)
+ date = models.DateTimeField(verbose_name=_("Date"), default=timezone.now)
ip = models.GenericIPAddressField(verbose_name=_("IP"), blank=True, null=True)
routable_ip = models.BooleanField(verbose_name=_("Routable IP"), default=False)
activity = models.CharField(_("Activity"), max_length=2, choices=GDPR_ACTIVITY)
@@ -3950,7 +3951,7 @@ class BackgroundTask(models.Model):
state = models.CharField(
_("State"), max_length=2, choices=TASK_STATE, default="S"
)
- creation_date = models.DateTimeField(default=datetime.datetime.now)
+ creation_date = models.DateTimeField(default=timezone.now)
launch_date = models.DateTimeField(null=True, blank=True)
finished_date = models.DateTimeField(null=True, blank=True)
result = models.FileField(_("Result"), null=True, blank=True)
@@ -5584,7 +5585,7 @@ class Document(
for path in self._get_base_image_paths():
if path:
return path
- n = datetime.datetime.now()
+ n = timezone.now()
return "upload/{}/{:02d}/{:02d}".format(n.year, n.month, n.day)
def _get_available_filename(self, path, test_link=None):
@@ -6021,7 +6022,7 @@ class AdministrationTask(models.Model):
state = models.CharField(
_("State"), max_length=2, choices=SCRIPT_STATE, default="S"
)
- creation_date = models.DateTimeField(default=datetime.datetime.now)
+ creation_date = models.DateTimeField(default=timezone.now)
launch_date = models.DateTimeField(null=True, blank=True)
finished_date = models.DateTimeField(null=True, blank=True)
result = models.TextField(_("Result"), blank=True, default="")
@@ -6041,7 +6042,7 @@ class AdministrationTask(models.Model):
def execute(self):
if self.state != "S":
return
- self.launch_date = datetime.datetime.now()
+ self.launch_date = timezone.now()
script_dir = settings.ISHTAR_SCRIPT_DIR
@@ -6053,7 +6054,7 @@ class AdministrationTask(models.Model):
)
)
self.state = "FE"
- self.finished_date = datetime.datetime.now()
+ self.finished_date = timezone.now()
self.save()
return
@@ -6067,7 +6068,7 @@ class AdministrationTask(models.Model):
)
)
self.state = "FE"
- self.finished_date = datetime.datetime.now()
+ self.finished_date = timezone.now()
self.save()
return
@@ -6076,7 +6077,7 @@ class AdministrationTask(models.Model):
_('Your ISHTAR_SCRIPT_DIR: "{}" is not a valid directory.')
).format(script_dir)
self.state = "FE"
- self.finished_date = datetime.datetime.now()
+ self.finished_date = timezone.now()
self.save()
return
@@ -6096,13 +6097,13 @@ class AdministrationTask(models.Model):
)
).format(self.script.path)
self.state = "FE"
- self.finished_date = datetime.datetime.now()
+ self.finished_date = timezone.now()
self.save()
return
self.state = "P"
self.save()
- self.finished_date = datetime.datetime.now()
+ self.finished_date = timezone.now()
try:
# nosec: only script inside the script directory can be executed
# this script directory is not web available
@@ -6114,7 +6115,7 @@ class AdministrationTask(models.Model):
self.save()
return
- self.finished_date = datetime.datetime.now()
+ self.finished_date = timezone.now()
if stderr:
self.state = "FE"
self.result = "Error: {}".format(stderr.decode("utf-8"))
@@ -6179,7 +6180,7 @@ class ExportTask(models.Model):
export_dir = models.BooleanField(_("Export directory"), default=True)
export_docs = models.BooleanField(_("Export documents"), default=True)
export_items = models.BooleanField(_("Export main items"), default=True)
- creation_date = models.DateTimeField(default=datetime.datetime.now)
+ creation_date = models.DateTimeField(default=timezone.now)
launch_date = models.DateTimeField(null=True, blank=True)
finished_date = models.DateTimeField(null=True, blank=True)
result = models.FileField(
@@ -6218,7 +6219,7 @@ class ExportTask(models.Model):
class ImportTask(models.Model):
- creation_date = models.DateTimeField(default=datetime.datetime.now)
+ creation_date = models.DateTimeField(default=timezone.now)
launch_date = models.DateTimeField(null=True, blank=True)
finished_date = models.DateTimeField(null=True, blank=True)
import_user = models.ForeignKey(
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index d1a9a521b..31a02580f 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -43,6 +43,7 @@ from django.db.models import JSONField, Q, Count, Max
from django.db.models.signals import post_save, post_delete, m2m_changed
from django.template import loader
from django.template.defaultfilters import slugify
+from django.utils import timezone
from django.utils.safestring import SafeText, mark_safe
from django.utils.translation import activate, deactivate
from ishtar_common.utils import (
@@ -1544,7 +1545,7 @@ class HistoricalRecords(BaseHistoricalRecords):
return
if not history_modifier:
return
- history_date = getattr(instance, "_history_date", datetime.datetime.now())
+ history_date = getattr(instance, "_history_date", timezone.now())
history_change_reason = getattr(instance, "changeReason", None)
force = getattr(instance, "_force_history", False)
manager = getattr(instance, self.manager_name)
@@ -1572,7 +1573,7 @@ class HistoricalRecords(BaseHistoricalRecords):
old_instance = q_history.all()[0]
# multiple saving by the same user in a very short time are generaly
# caused by post_save signals it is not relevant to keep them
- min_history_date = datetime.datetime.now() - datetime.timedelta(seconds=5)
+ min_history_date = timezone.now() - datetime.timedelta(seconds=5)
q = q_history.filter(
history_date__isnull=False, history_date__gt=min_history_date
).order_by("-history_date", "-history_id")
@@ -1634,8 +1635,8 @@ class BaseHistorizedItem(
blank=True,
null=True,
)
- last_modified = models.DateTimeField(blank=True, default=datetime.datetime.now)
- created = models.DateTimeField(blank=True, default=datetime.datetime.now)
+ last_modified = models.DateTimeField(blank=True, default=timezone.now)
+ created = models.DateTimeField(blank=True, default=timezone.now)
history_m2m = JSONField(default=dict, blank=True)
need_update = models.BooleanField(verbose_name=_("Need update"), default=False)
locked = models.BooleanField(
@@ -1763,11 +1764,13 @@ class BaseHistorizedItem(
else:
item = historized[step]
else:
+ date_match = False
for step, item in enumerate(historized):
- if item.history_date == date:
+ if item.history_date == timezone.make_aware(date, item.history_date.tzinfo):
+ date_match = True
break
# ended with no match
- if item.history_date != date:
+ if not date_match:
return
item._step = step
if len(historized) != (step + 1):
@@ -1906,7 +1909,7 @@ class BaseHistorizedItem(
if (not getattr(self, "skip_history_when_saving", False)
and not getattr(self, "_no_last_modified_update", False)) \
or not self.last_modified:
- self.last_modified = datetime.datetime.now()
+ self.last_modified = timezone.now()
if not getattr(self, "skip_history_when_saving", False):
if not hasattr(self, "history_modifier"):
raise NotImplementedError("Should have a history_modifier field.")
@@ -1934,7 +1937,7 @@ class BaseHistorizedItem(
class LightHistorizedItem(BaseHistorizedItem):
- history_date = models.DateTimeField(default=datetime.datetime.now)
+ history_date = models.DateTimeField(default=timezone.now)
class Meta:
abstract = True
@@ -4445,7 +4448,7 @@ def _update_stats(app, model, model_pk, funcname):
current_values[funcname] = value
sc.values = current_values
sc.update_requested = None
- sc.updated = datetime.datetime.now()
+ sc.updated = timezone.now()
sc.save()
@@ -4457,11 +4460,11 @@ def update_stats(statscache, item, funcname):
value = getattr(item, funcname)()
current_values[funcname] = value
statscache.values = current_values
- statscache.updated = datetime.datetime.now()
+ statscache.updated = timezone.now()
statscache.save()
return current_values
- now = datetime.datetime.now()
+ now = timezone.now()
app_name = item._meta.app_label
model_name = item._meta.model_name
statscache.update_requested = now.isoformat()
@@ -4822,7 +4825,7 @@ class ImageContainerModel:
return "{}/{}".format(self._get_base_image_path(), filename)
def _get_base_image_path(self):
- n = datetime.datetime.now()
+ n = timezone.now()
return "upload/{}/{:02d}/{:02d}".format(n.year, n.month, n.day)
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index c588b9f0e..259128b7a 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -52,6 +52,7 @@ from django.db.models import Q
from django.db.models.base import ModelBase
from django.db.models.signals import pre_delete
from django.template.defaultfilters import slugify
+from django.utils import timezone
from django.utils.functional import cached_property
from django.utils.translation import gettext_lazy as _, pgettext_lazy
@@ -1519,7 +1520,7 @@ class BaseImport(models.Model, OwnPerms, SheetItem):
def archive(self):
self.state = "AC"
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
self._archive()
def unarchive(self, state):
@@ -1539,7 +1540,7 @@ class BaseImport(models.Model, OwnPerms, SheetItem):
"info",
)
self.state = "IQ"
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
self.save()
if self.SLUG == "import":
return delayed_import.delay(self.pk)
@@ -1671,12 +1672,12 @@ class ImportGroup(BaseImport):
def initialize(self, user=None, session_key=None):
self.state = "AP"
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
self.save()
for imp in self.imports.all():
imp.initialize(user, session_key)
self.state = "A"
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
self.save()
def importation(
@@ -1691,7 +1692,7 @@ class ImportGroup(BaseImport):
if not q.count():
return
self.state = "IP"
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
self.save()
first = self.import_list()[0]
first.importation(
@@ -1707,7 +1708,7 @@ class ImportGroup(BaseImport):
self.state = "FE"
else:
self.state = "F"
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
self.save()
def _unarchive(self):
@@ -2218,7 +2219,7 @@ class Import(BaseImport):
data.to_csv(filename, index=False, columns=data.columns[range(last_column)],
float_format=np_format_int_float)
except IndexError:
- error_file = f"{slugify(self.name)}_errors_{datetime.datetime.now().strftime('%Y-%m-%d-%H%M')}.csv"
+ error_file = f"{slugify(self.name)}_errors_{timezone.now().strftime('%Y-%m-%d-%H%M')}.csv"
error = str(_("Error while opening the file. Particularly check the number of columns of your file."))
csv_file = f"line,error\n-,{error}"
self.error_file.save(
@@ -2550,7 +2551,7 @@ class Import(BaseImport):
def initialize(self, user=None, session_key=None):
self.state = "AP"
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
if user and not self.user:
self.user = user
self.save()
@@ -2565,7 +2566,7 @@ class Import(BaseImport):
self.save()
return
self.state = "A"
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
self.save()
def delayed_check_modified(self, session_key):
@@ -2577,13 +2578,13 @@ class Import(BaseImport):
"info",
)
self.state = "HQ"
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
self.save()
return delayed_check.delay(self.pk)
def check_modified(self, session_key=None):
self.state = "HP"
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
self.changed_line_numbers = ""
self.changed_checked = False
self.save()
@@ -2646,7 +2647,7 @@ class Import(BaseImport):
verbose=False
):
self.state = "IP"
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
if not line_to_process: # full import
self.imported_line_numbers = ""
self.current_line = 0
@@ -2684,7 +2685,7 @@ class Import(BaseImport):
return importer, None
# result file
filename = slugify(self.importer_type.name)
- now = datetime.datetime.now().isoformat("-").replace(":", "")
+ now = timezone.now().isoformat("-").replace(":", "")
result_file = filename + "_result_%s.csv" % now
self.result_file.save(
result_file, ContentFile(importer.get_csv_result().encode("utf-8"))
@@ -2724,7 +2725,7 @@ class Import(BaseImport):
self.match_file.save(
match_file, ContentFile(importer.get_csv_matches().encode("utf-8"))
)
- self.end_date = datetime.datetime.now()
+ self.end_date = timezone.now()
self.save()
if self.next_import and not importer.errors:
return self.next_import.importation(
diff --git a/ishtar_common/serializers_utils.py b/ishtar_common/serializers_utils.py
index a4494d9c9..d9866f5da 100644
--- a/ishtar_common/serializers_utils.py
+++ b/ishtar_common/serializers_utils.py
@@ -13,6 +13,7 @@ from django.contrib.contenttypes.models import ContentType
from django.contrib.sites.models import Site
from django.core.serializers import serialize
from django.db.models import Q
+from django.utils import timezone
from ishtar_common.version import get_version
from . import models
@@ -46,7 +47,7 @@ def serialization_info(info=None):
"ishtar-version": get_version(),
"domain": site.domain,
"name": site.name,
- "date": datetime.datetime.now().isoformat(),
+ "date": timezone.now().isoformat(),
}
if info:
base_info.update(info)
diff --git a/ishtar_common/tasks.py b/ishtar_common/tasks.py
index 24ae02dcc..08f5dd10d 100644
--- a/ishtar_common/tasks.py
+++ b/ishtar_common/tasks.py
@@ -17,14 +17,11 @@
# See the file COPYING for details.
-import datetime
-
import os
import sys
-from django.conf import settings
from django.core.files import File
-from django.db.models import Q
+from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from ishtar_common.models_common import Town, Department
@@ -56,7 +53,7 @@ def launch_import(import_task_id):
return
if import_task.state != "S":
return
- import_task.launch_date = datetime.datetime.now()
+ import_task.launch_date = timezone.now()
import_task.state = "P"
import_task.save()
@@ -66,7 +63,7 @@ def launch_import(import_task_id):
delete_existing=import_task.delete_before,
release_locks=import_task.releasing_locks,
)
- import_task.finished_date = datetime.datetime.now()
+ import_task.finished_date = timezone.now()
import_task.state = "F"
import_task.save()
@@ -79,7 +76,7 @@ def launch_export(export_task_id):
return
if export_task.state != "S":
return
- export_task.launch_date = datetime.datetime.now()
+ export_task.launch_date = timezone.now()
export_task.state = "P"
export_task.save()
@@ -176,7 +173,7 @@ def launch_export(export_task_id):
with open(archive_name, "rb") as result:
export_task.result.save(archive_name.split(os.sep)[-1], File(result))
os.remove(archive_name)
- export_task.finished_date = datetime.datetime.now()
+ export_task.finished_date = timezone.now()
export_task.state = "F"
export_task.result_info = str(_("Export finished"))
export_task.save()
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 5dcfc119c..baaa25c95 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -70,6 +70,7 @@ from django.db.models import Q
from django.db.models.functions import Length
from django.http import HttpResponseRedirect
from django.urls import re_path, reverse, NoReverseMatch
+from django.utils import timezone
from django.utils.crypto import get_random_string
from django.utils.datastructures import MultiValueDict as BaseMultiValueDict
from django.utils.formats import date_format
@@ -937,7 +938,7 @@ def get_file_from_link(file_link):
def get_current_year():
- return datetime.datetime.now().year
+ return datetime.date.today().year
def get_cache(cls, extra_args=tuple(), app_label=None):
@@ -2378,7 +2379,7 @@ def m2m_historization_changed(sender, **kwargs):
if q.count():
hist = q.all()[0]
hist.history_m2m = hist_values
- hist.history_date = hist.last_modified = datetime.datetime.now()
+ hist.history_date = hist.last_modified = timezone.now()
hist.save()
obj.skip_history_when_saving = True
elif not obj.history_modifier:
@@ -2959,7 +2960,7 @@ def duplicate_item(item, user=None, data=None):
def get_image_path(instance, filename):
# when using migrations instance is not a real ImageModel instance
if not hasattr(instance, "_get_image_path"):
- n = datetime.datetime.now()
+ n = datetime.date.today()
return "upload/{}/{:02d}/{:02d}/{}".format(n.year, n.month, n.day, filename)
return instance._get_image_path(filename)
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 73511c03e..3843d4a19 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -54,7 +54,7 @@ from django.http import (
)
from django.shortcuts import redirect, render, get_object_or_404
from django.urls import reverse, NoReverseMatch
-from django.utils import translation
+from django.utils import timezone, translation
from django.utils.decorators import method_decorator
from django.utils.translation import gettext, gettext_lazy as _
from django.views.generic import ListView, TemplateView, View
@@ -1874,7 +1874,7 @@ class ImportListView(IshtarMixin, LoginRequiredMixin, ListView):
imprt.importation()
except ImporterError as e:
imprt.state = "FE"
- imprt.end_date = datetime.datetime.now()
+ imprt.end_date = timezone.now()
imprt.save()
put_session_message(
request.session.session_key,
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index fd7c2dc3e..9263ae92a 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -56,6 +56,7 @@ from django.http import HttpResponse, Http404
from django.shortcuts import render
from django.template import loader
from django.urls import reverse, NoReverseMatch
+from django.utils import timezone
from django.utils.translation import (
activate,
deactivate,
@@ -583,7 +584,6 @@ def show_item(model, name, extra_dct=None, model_for_perms=None, callback=None):
dct["get_import_updated"] = item.get_imports_updated(request.user, limit=5)
if hasattr(item, "history") and request.user.is_superuser:
-
if date:
try:
if not isinstance(date, datetime.datetime):
@@ -3149,7 +3149,7 @@ def get_item(
return HttpResponse(data, content_type="application/json")
elif data_type == "csv":
response = HttpResponse(content_type="text/csv", charset=ENCODING)
- n = datetime.datetime.now()
+ n = timezone.now()
filename = "%s_%s.csv" % (default_name, n.strftime("%Y%m%d-%H%M%S"))
response["Content-Disposition"] = "attachment; filename=%s" % filename
writer = csv.writer(response, **CSV_OPTIONS)
@@ -3345,7 +3345,7 @@ def external_export(request, source_id, model_name, slug):
return HttpResponse(lbl, status=response.status_code)
response = HttpResponse(response.text, content_type="text/csv")
- n = datetime.datetime.now()
+ n = timezone.now()
filename = f"{model_name}-{n.strftime('%Y%m%d-%H%M%S')}.csv"
response["Content-Disposition"] = "attachment; filename=%s" % filename
return response
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index e580b9e42..c0901a324 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -47,6 +47,7 @@ from django.http import HttpResponseRedirect, Http404
from django.forms import ValidationError
from django.shortcuts import redirect, render, reverse
from django.template import loader
+from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django.utils.safestring import mark_safe
@@ -2115,7 +2116,7 @@ class AccountWizard(Wizard):
account.username = dct["username"]
account.email = dct["email"]
except ObjectDoesNotExist:
- now = datetime.datetime.now()
+ now = timezone.now()
account = models.User.objects.create(
username=dct["username"],
email=dct["email"],