This commit is contained in:
+17
-8
@@ -1,7 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import timedelta
|
||||
from uuid import uuid4
|
||||
from urllib.parse import urlparse
|
||||
|
||||
from django.conf import settings
|
||||
@@ -91,7 +90,7 @@ class Source(TimeStampedModel):
|
||||
return [entry for entry in entries if isinstance(entry, dict)]
|
||||
|
||||
@property
|
||||
def latest_policy_review(self) -> "SourcePolicyReview | None":
|
||||
def latest_policy_review(self) -> SourcePolicyReview | None:
|
||||
return self.policy_reviews.order_by("-created_at").first()
|
||||
|
||||
@property
|
||||
@@ -109,27 +108,37 @@ class Source(TimeStampedModel):
|
||||
if not review:
|
||||
return "Geen review geregistreerd"
|
||||
if review.is_expired:
|
||||
return f"Review verlopen op {review.expires_at:%Y-%m-%d}" if review.expires_at else "Review verlopen"
|
||||
return (
|
||||
f"Review verlopen op {review.expires_at:%Y-%m-%d}"
|
||||
if review.expires_at
|
||||
else "Review verlopen"
|
||||
)
|
||||
if review.expires_at:
|
||||
return f"{review.get_decision_display()} geldig tot {review.expires_at:%Y-%m-%d}"
|
||||
return f"{review.get_decision_display()} zonder vervaldatum"
|
||||
|
||||
@property
|
||||
def requires_terms_review(self) -> bool:
|
||||
return self.policy == Source.Policy.ALLOW and self.policy_review_state in {"missing", "expired"}
|
||||
return self.policy == Source.Policy.ALLOW and self.policy_review_state in {
|
||||
"missing",
|
||||
"expired",
|
||||
}
|
||||
|
||||
def schedule_after_success(self, *, now=None, jitter_seconds: int = 0) -> None:
|
||||
now = now or timezone.now()
|
||||
self.last_success_at = now
|
||||
self.failure_count = 0
|
||||
self.next_run_at = now + timedelta(minutes=self.crawl_interval_minutes) + timedelta(
|
||||
seconds=max(0, jitter_seconds)
|
||||
self.next_run_at = (
|
||||
now
|
||||
+ timedelta(minutes=self.crawl_interval_minutes)
|
||||
+ timedelta(seconds=max(0, jitter_seconds))
|
||||
)
|
||||
self.save(update_fields=["last_success_at", "failure_count", "next_run_at", "updated_at"])
|
||||
|
||||
def schedule_after_failure(
|
||||
self,
|
||||
*, now=None,
|
||||
*,
|
||||
now=None,
|
||||
backoff_minutes: int | None = None,
|
||||
backoff_seconds: int | None = None,
|
||||
) -> None:
|
||||
@@ -186,7 +195,7 @@ class SourceRun(TimeStampedModel):
|
||||
|
||||
class SourceLease(TimeStampedModel):
|
||||
source = models.OneToOneField(Source, on_delete=models.CASCADE, related_name="lease")
|
||||
token = models.CharField(max_length=64, default=lambda: str(uuid4()))
|
||||
token = models.CharField(max_length=64, default="")
|
||||
worker_id = models.CharField(max_length=128, blank=True)
|
||||
expires_at = models.DateTimeField(db_index=True)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user