|
4 | 4 | #
|
5 | 5 | # Modeled on the FTP storage by Rafal Jonca <[email protected]>
|
6 | 6 |
|
| 7 | +import datetime |
7 | 8 | import getpass
|
8 | 9 | import io
|
9 | 10 | import os
|
10 | 11 | import posixpath
|
11 | 12 | import stat
|
12 |
| -from datetime import datetime |
13 | 13 | from urllib.parse import urljoin
|
14 | 14 |
|
15 | 15 | import paramiko
|
16 | 16 | from django.core.files.base import File
|
17 |
| -from django.utils import timezone |
18 | 17 | from django.utils.deconstruct import deconstructible
|
19 | 18 | from paramiko.util import ClosingContextManager
|
20 | 19 |
|
@@ -192,17 +191,20 @@ def size(self, name):
|
192 | 191 | remote_path = self._remote_path(name)
|
193 | 192 | return self.sftp.stat(remote_path).st_size
|
194 | 193 |
|
| 194 | + # From Django |
| 195 | + def _datetime_from_timestamp(self, ts): |
| 196 | + tz = datetime.timezone.utc if setting("USE_TZ") else None |
| 197 | + return datetime.datetime.fromtimestamp(ts, tz=tz) |
| 198 | + |
195 | 199 | def get_accessed_time(self, name):
|
196 | 200 | remote_path = self._remote_path(name)
|
197 | 201 | utime = self.sftp.stat(remote_path).st_atime
|
198 |
| - ts = datetime.fromtimestamp(utime) |
199 |
| - return timezone.make_aware(ts) if setting("USE_TZ") else ts |
| 202 | + return self._datetime_from_timestamp(utime) |
200 | 203 |
|
201 | 204 | def get_modified_time(self, name):
|
202 | 205 | remote_path = self._remote_path(name)
|
203 | 206 | utime = self.sftp.stat(remote_path).st_mtime
|
204 |
| - ts = datetime.fromtimestamp(utime) |
205 |
| - return timezone.make_aware(ts) if setting("USE_TZ") else ts |
| 207 | + return self._datetime_from_timestamp(utime) |
206 | 208 |
|
207 | 209 | def url(self, name):
|
208 | 210 | if self._base_url is None:
|
|
0 commit comments