From 5546c12aeaf31ad80b8b931fff10c3712fb1ec37 Mon Sep 17 00:00:00 2001 From: Paul Hebble Date: Tue, 26 May 2020 18:07:33 -0500 Subject: [PATCH] Check release date in AutoFreezer --- netkan/netkan/auto_freezer.py | 12 +++++++----- netkan/netkan/indexer.py | 3 +++ netkan/netkan/metadata.py | 16 +++++++++++++++- netkan/netkan/status.py | 1 + 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/netkan/netkan/auto_freezer.py b/netkan/netkan/auto_freezer.py index 6771461b..67ce4910 100644 --- a/netkan/netkan/auto_freezer.py +++ b/netkan/netkan/auto_freezer.py @@ -59,13 +59,15 @@ def _ids(self) -> Iterable[str]: def _too_old(self, ident: str, update_cutoff: datetime) -> bool: status = ModStatus.get(ident) + release_date = getattr(status, 'release_date', None) + if release_date: + return release_date < update_cutoff last_indexed = getattr(status, 'last_indexed', None) - if not last_indexed: - # Never indexed since the start of status tracking = 4+ years old - # ... except for mods that were updated by the old webhooks :( - return False - else: + if last_indexed: return last_indexed < update_cutoff + # Never indexed since the start of status tracking = 4+ years old + # ... except for mods that were updated by the old webhooks :( + return False def _add_freezee(self, ident: str) -> None: self.nk_repo.git_repo.index.move([ diff --git a/netkan/netkan/indexer.py b/netkan/netkan/indexer.py index cf195ef5..2c283269 100644 --- a/netkan/netkan/indexer.py +++ b/netkan/netkan/indexer.py @@ -108,6 +108,9 @@ def status_attrs(self, new: bool = False) -> Dict[str, Any]: attrs['ModIdentifier'] = self.ModIdentifier if self.indexed: attrs['last_indexed'] = datetime.now(timezone.utc) + release_date = getattr(self.ckan, 'release_date', None) + if release_date: + attrs['release_date'] = release_date return attrs def _process_ckan(self) -> None: diff --git a/netkan/netkan/metadata.py b/netkan/netkan/metadata.py index f9d082fe..3e958a4f 100644 --- a/netkan/netkan/metadata.py +++ b/netkan/netkan/metadata.py @@ -6,6 +6,7 @@ import uuid import urllib.parse import github +import dateutil.parser from typing import Optional, List, Tuple, Union, Any, Dict @@ -253,6 +254,9 @@ def __str__(self) -> str: 'application/x-compressed-tar': 'tar.gz', 'application/zip': 'zip', } + ISODATETIME_PROPERTIES = [ + 'release_date' + ] def __init__(self, filename: Union[str, Path] = None, contents: str = None) -> None: if filename: @@ -260,7 +264,17 @@ def __init__(self, filename: Union[str, Path] = None, contents: str = None) -> N self.contents = self.filename.read_text() elif contents: self.contents = contents - self._raw = json.loads(self.contents) + self._raw = json.loads(self.contents, object_hook=self._custom_parser) + + def _custom_parser(self, dct: Dict[str, Any]) -> Dict[str, Any]: + # Special handling for DateTime fields + for k in self.ISODATETIME_PROPERTIES: + if k in dct: + try: + dct[k] = dateutil.parser.isoparse(dct[k]) + except: + pass + return dct def __getattr__(self, name: str) -> Any: if name in self._raw: diff --git a/netkan/netkan/status.py b/netkan/netkan/status.py index ce7a3d78..dfde6ca7 100644 --- a/netkan/netkan/status.py +++ b/netkan/netkan/status.py @@ -40,6 +40,7 @@ class Meta: last_checked = UTCDateTimeAttribute(null=True) last_indexed = UTCDateTimeAttribute(null=True) last_inflated = UTCDateTimeAttribute(null=True) + release_date = UTCDateTimeAttribute(null=True) success = BooleanAttribute() frozen = BooleanAttribute(default=False) resources: 'MapAttribute[str, Any]' = MapAttribute(default={})