Probably fixed the mod time issue
This commit is contained in:
parent
d2af261477
commit
bd088ac545
@ -251,8 +251,8 @@ class BackupRotator:
|
||||
items_to_delete = []
|
||||
for item in candidate_items:
|
||||
|
||||
age_seconds = self._detect_item_age_seconds(config=config, item=item)
|
||||
age_days = self._detect_item_age_days(config=config, item=item)
|
||||
age_seconds = Util.detect_item_age_seconds(config=config, item=item)
|
||||
age_days = Util.detect_item_age_days(config=config, item=item)
|
||||
age_formatted = Util.seconds_to_time_string(age_seconds)
|
||||
|
||||
if age_days > config.maximum_age:
|
||||
@ -281,21 +281,20 @@ class BackupRotator:
|
||||
|
||||
candidates: [Path] = []
|
||||
|
||||
for item_name in path.iterdir():
|
||||
for item in path.iterdir():
|
||||
|
||||
item_path = path / item_name
|
||||
self.debug(f"Found an item: {item_name} ==> {item_path}")
|
||||
self.debug(f"Found an item: {item.name}")
|
||||
|
||||
if config.target_type == "file":
|
||||
|
||||
if not item_path.is_file():
|
||||
self.debug(f"Not a file; Skipping: {item_name}")
|
||||
if not item.is_file():
|
||||
self.debug(f"Not a file; Skipping: {item.name}")
|
||||
continue
|
||||
|
||||
elif config.target_type == "directory":
|
||||
|
||||
if not item_path.is_dir():
|
||||
self.debug(f"Not a directory; Skipping: {item_name}")
|
||||
if not item.is_dir():
|
||||
self.debug(f"Not a directory; Skipping: {item.name}")
|
||||
continue
|
||||
|
||||
else:
|
||||
@ -303,7 +302,7 @@ class BackupRotator:
|
||||
f"Unsupported target type: {config.target_type}"
|
||||
)
|
||||
|
||||
candidates.append(item_path)
|
||||
candidates.append(item)
|
||||
|
||||
return candidates
|
||||
|
||||
@ -313,49 +312,16 @@ class BackupRotator:
|
||||
best_ctime = None
|
||||
for item in items:
|
||||
|
||||
ctime = self._detect_item_creation_date(config, item)
|
||||
ctime = Util.detect_item_creation_date(config, item)
|
||||
if best_ctime is None or ctime < best_ctime:
|
||||
best_ctime = ctime
|
||||
best_item = item
|
||||
|
||||
age_seconds = self._detect_item_age_seconds(config, best_item)
|
||||
age_seconds = Util.detect_item_age_seconds(config, best_item)
|
||||
age_string = Util.seconds_to_time_string(age_seconds)
|
||||
|
||||
return best_item, best_ctime, age_seconds, age_string
|
||||
|
||||
@staticmethod
|
||||
def _detect_item_creation_date(config: ConfigFile, item: Path) -> datetime.datetime:
|
||||
|
||||
if config.date_detection == "file":
|
||||
ctime = datetime.datetime.fromtimestamp(
|
||||
item.stat().st_ctime
|
||||
)
|
||||
|
||||
else:
|
||||
raise AssertionError(
|
||||
f"Unsupported date-detection option: {config.date_detection}"
|
||||
)
|
||||
|
||||
return ctime
|
||||
|
||||
def _detect_item_age_seconds(self, config: ConfigFile, item: Path) -> float:
|
||||
|
||||
now = datetime.datetime.now()
|
||||
|
||||
ctime = self._detect_item_creation_date(config=config, item=item)
|
||||
delta = now - ctime.now()
|
||||
|
||||
return delta.seconds
|
||||
|
||||
def _detect_item_age_days(self, config: ConfigFile, item: Path) -> int:
|
||||
|
||||
age_seconds = self._detect_item_age_seconds(
|
||||
config=config, item=item
|
||||
)
|
||||
age_days = int(age_seconds / 86400)
|
||||
|
||||
return age_days
|
||||
|
||||
def _remove_item(self, config: ConfigFile, path: Path):
|
||||
|
||||
if path.is_file():
|
||||
|
@ -1,5 +1,9 @@
|
||||
|
||||
|
||||
from domain.config.ConfigFile import ConfigFile
|
||||
|
||||
|
||||
import datetime
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
@ -22,6 +26,66 @@ class Util:
|
||||
|
||||
return files_paths
|
||||
|
||||
@staticmethod
|
||||
def detect_item_creation_date(config: ConfigFile, item: Path) -> datetime.datetime:
|
||||
|
||||
stat = None
|
||||
|
||||
if config.date_detection == "file":
|
||||
|
||||
# Try for the most accurate stat
|
||||
# First one that raises will just break the block, obv
|
||||
try:
|
||||
stat = item.stat().st_ctime
|
||||
# print("got ctime")
|
||||
stat = item.stat().st_mtime
|
||||
# print("got mtime")
|
||||
stat = item.stat().st_birthtime
|
||||
# print("got btime")
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
else:
|
||||
raise AssertionError(
|
||||
f"Unsupported date-detection option: {config.date_detection}"
|
||||
)
|
||||
|
||||
stamp = datetime.datetime.fromtimestamp(
|
||||
stat
|
||||
)
|
||||
# print("Stat:", stat)
|
||||
# print("Stamp:", stamp)
|
||||
# print(item.name, "==>", stamp)
|
||||
|
||||
return stamp
|
||||
|
||||
@staticmethod
|
||||
def detect_item_age_seconds(config: ConfigFile, item: Path) -> float:
|
||||
|
||||
now = datetime.datetime.now()
|
||||
|
||||
ctime = Util.detect_item_creation_date(config=config, item=item)
|
||||
delta = now - ctime
|
||||
seconds = delta.seconds
|
||||
|
||||
# print(item.name, "==>", seconds, f"({ctime})")
|
||||
# print(">", "Now was:", now)
|
||||
# print(">", "ctime was:", ctime)
|
||||
# print(">", "Delta was:", delta)
|
||||
# print(">", "Seconds was:", delta.total_seconds())
|
||||
|
||||
return delta.total_seconds()
|
||||
|
||||
@staticmethod
|
||||
def detect_item_age_days(config: ConfigFile, item: Path) -> int:
|
||||
|
||||
age_seconds = Util.detect_item_age_seconds(
|
||||
config=config, item=item
|
||||
)
|
||||
age_days = int(age_seconds / 86400)
|
||||
|
||||
return age_days
|
||||
|
||||
@staticmethod
|
||||
def seconds_to_time_string(seconds: float):
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user