mirror of
https://github.com/Garmelon/PFERD.git
synced 2023-12-21 10:23:01 +01:00
Set mtime and atime to ILIAS dates where possible
This commit is contained in:
parent
4047fe78f3
commit
34152fbe54
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
|
import math
|
||||||
|
import os
|
||||||
from pathlib import Path, PurePath
|
from pathlib import Path, PurePath
|
||||||
from typing import Callable, List, Optional, Union
|
from typing import Callable, List, Optional, Union
|
||||||
|
|
||||||
@ -119,7 +121,15 @@ class IliasDownloader:
|
|||||||
LOGGER.info("Retrying download: %r", info)
|
LOGGER.info("Retrying download: %r", info)
|
||||||
self._authenticator.authenticate(self._session)
|
self._authenticator.authenticate(self._session)
|
||||||
|
|
||||||
self._organizer.accept_file(tmp_file, info.path)
|
dst_path = self._organizer.accept_file(tmp_file, info.path)
|
||||||
|
if dst_path and info.modification_date:
|
||||||
|
os.utime(
|
||||||
|
dst_path,
|
||||||
|
times=(
|
||||||
|
math.ceil(info.modification_date.timestamp()),
|
||||||
|
math.ceil(info.modification_date.timestamp())
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
def _try_download(self, info: IliasDownloadInfo, target: Path) -> bool:
|
def _try_download(self, info: IliasDownloadInfo, target: Path) -> bool:
|
||||||
url = info.url()
|
url = info.url()
|
||||||
|
@ -7,7 +7,7 @@ import filecmp
|
|||||||
import logging
|
import logging
|
||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path, PurePath
|
from pathlib import Path, PurePath
|
||||||
from typing import List, Set
|
from typing import List, Optional, Set
|
||||||
|
|
||||||
from .download_summary import DownloadSummary
|
from .download_summary import DownloadSummary
|
||||||
from .location import Location
|
from .location import Location
|
||||||
@ -35,8 +35,15 @@ class Organizer(Location):
|
|||||||
|
|
||||||
self.download_summary = DownloadSummary()
|
self.download_summary = DownloadSummary()
|
||||||
|
|
||||||
def accept_file(self, src: Path, dst: PurePath) -> None:
|
def accept_file(self, src: Path, dst: PurePath) -> Optional[Path]:
|
||||||
"""Move a file to this organizer and mark it."""
|
"""
|
||||||
|
Move a file to this organizer and mark it.
|
||||||
|
|
||||||
|
Returns the path the file was moved to, to allow the caller to adjust the metadata.
|
||||||
|
As you might still need to adjust the metadata when the file was identical
|
||||||
|
(e.g. update the timestamp), the path is also returned in this case.
|
||||||
|
In all other cases (ignored, not overwritten, etc.) this method returns None.
|
||||||
|
"""
|
||||||
src_absolute = src.resolve()
|
src_absolute = src.resolve()
|
||||||
dst_absolute = self.resolve(dst)
|
dst_absolute = self.resolve(dst)
|
||||||
|
|
||||||
@ -52,7 +59,7 @@ class Organizer(Location):
|
|||||||
PRETTY.warning(f"File {str(dst_absolute)!r} was already written!")
|
PRETTY.warning(f"File {str(dst_absolute)!r} was already written!")
|
||||||
if not prompt_yes_no(f"Overwrite file?", default=False):
|
if not prompt_yes_no(f"Overwrite file?", default=False):
|
||||||
PRETTY.ignored_file(dst_absolute, "file was written previously")
|
PRETTY.ignored_file(dst_absolute, "file was written previously")
|
||||||
return
|
return None
|
||||||
|
|
||||||
# Destination file is directory
|
# Destination file is directory
|
||||||
if dst_absolute.exists() and dst_absolute.is_dir():
|
if dst_absolute.exists() and dst_absolute.is_dir():
|
||||||
@ -60,7 +67,7 @@ class Organizer(Location):
|
|||||||
shutil.rmtree(dst_absolute)
|
shutil.rmtree(dst_absolute)
|
||||||
else:
|
else:
|
||||||
PRETTY.warning(f"Could not add file {str(dst_absolute)!r}")
|
PRETTY.warning(f"Could not add file {str(dst_absolute)!r}")
|
||||||
return
|
return None
|
||||||
|
|
||||||
# Destination file exists
|
# Destination file exists
|
||||||
if dst_absolute.exists() and dst_absolute.is_file():
|
if dst_absolute.exists() and dst_absolute.is_file():
|
||||||
@ -68,9 +75,7 @@ class Organizer(Location):
|
|||||||
# Bail out, nothing more to do
|
# Bail out, nothing more to do
|
||||||
PRETTY.ignored_file(dst_absolute, "same file contents")
|
PRETTY.ignored_file(dst_absolute, "same file contents")
|
||||||
self.mark(dst)
|
self.mark(dst)
|
||||||
# Touch it to update the timestamp
|
return dst_absolute
|
||||||
dst_absolute.touch()
|
|
||||||
return
|
|
||||||
|
|
||||||
self.download_summary.add_modified_file(dst_absolute)
|
self.download_summary.add_modified_file(dst_absolute)
|
||||||
PRETTY.modified_file(dst_absolute)
|
PRETTY.modified_file(dst_absolute)
|
||||||
@ -87,6 +92,8 @@ class Organizer(Location):
|
|||||||
|
|
||||||
self.mark(dst)
|
self.mark(dst)
|
||||||
|
|
||||||
|
return dst_absolute
|
||||||
|
|
||||||
def mark(self, path: PurePath) -> None:
|
def mark(self, path: PurePath) -> None:
|
||||||
"""Mark a file as used so it will not get cleaned up."""
|
"""Mark a file as used so it will not get cleaned up."""
|
||||||
absolute_path = self.resolve(path)
|
absolute_path = self.resolve(path)
|
||||||
|
Loading…
Reference in New Issue
Block a user