|
8 | 8 | from django.core.handlers.wsgi import WSGIRequest
|
9 | 9 | from django.db.models import Prefetch
|
10 | 10 | from django.urls import reverse
|
| 11 | +from django.utils import timezone |
11 | 12 | from django.views.generic import DetailView, TemplateView, ListView, RedirectView
|
12 | 13 | from django.http import Http404
|
13 | 14 | from django.contrib.syndication.views import Feed
|
14 | 15 | from django.utils.feedgenerator import Rss201rev2Feed
|
15 |
| -import pytz |
16 | 16 |
|
17 | 17 | from .models import OS, Release, ReleaseFile
|
18 | 18 |
|
@@ -198,38 +198,26 @@ def _fetch_releases(url: str) -> list[dict[str, Any]]:
|
198 | 198 | sorted_releases = sorted(data, key=lambda x: x["release_date"], reverse=True)
|
199 | 199 | return sorted_releases[:10]
|
200 | 200 |
|
201 |
| - def item_title(self, item: dict[str, Any]) -> str: |
| 201 | + def item_title(self, item: Release) -> str: |
202 | 202 | """Return the release name as the item title."""
|
203 |
| - return item.get("name", "Unknown Release") |
| 203 | + return item.name |
204 | 204 |
|
205 |
| - def item_description(self, item: dict[str, Any]) -> str: |
| 205 | + def item_description(self, item): |
206 | 206 | """Return the release version and release date as the item description."""
|
207 |
| - version = item.get("version", "Unknown") |
208 |
| - release_date = item.get("release_date", "Unknown") |
209 |
| - return f"Version: {version}, Release Date: {release_date}" |
| 207 | + return f"Version: {item.version}, Release Date: {item.release_date}" |
210 | 208 |
|
211 |
| - def item_link(self, item: dict[str, Any]) -> str: |
| 209 | + def item_link(self, item): |
212 | 210 | """Return the URL to the release page on python.org."""
|
213 |
| - return reverse("downloads:download_release_detail", args=[item.get("slug", "")]) |
| 211 | + return reverse("downloads:download_release_detail", args=[item.slug]) |
214 | 212 |
|
215 |
| - @staticmethod |
216 |
| - def item_pubdate(item: dict[str, Any]) -> datetime: |
| 213 | + def item_pubdate(self, item: Release) -> datetime: |
217 | 214 | """Return the release date as the item publication date."""
|
218 |
| - try: |
219 |
| - release_date = datetime.strptime( |
220 |
| - item.get("release_date", ""), "%Y-%m-%dT%H:%M:%SZ" |
221 |
| - ) |
222 |
| - return pytz.utc.localize(release_date) |
223 |
| - except ValueError: |
224 |
| - logger.error( |
225 |
| - f"Invalid release date format for item: {item.get('name', 'Unknown')}" |
226 |
| - ) |
227 |
| - return pytz.utc.localize(datetime.now()) |
| 215 | + return timezone.make_aware(item.release_date) if item.release_date else None |
228 | 216 |
|
229 | 217 | @staticmethod
|
230 |
| - def item_guid(item: dict[str, Any]) -> str: |
231 |
| - """Return the release URI as the item GUID.""" |
232 |
| - return item.get("resource_uri", "") |
| 218 | + def item_guid(item: Release) -> str: |
| 219 | + """Return a unique ID for the item based on DB record.""" |
| 220 | + return str(item.pk) |
233 | 221 |
|
234 | 222 | def create_url(self, path: str) -> str:
|
235 | 223 | """Create a full URL using the current site domain."""
|
|
0 commit comments