File tree Expand file tree Collapse file tree 6 files changed +64
-0
lines changed
Expand file tree Collapse file tree 6 files changed +64
-0
lines changed Original file line number Diff line number Diff line change 1313
1414INSTALLED_APPS = [
1515 'mainpage.apps.MainpageConfig' ,
16+
1617 'django.contrib.admin' ,
1718 'django.contrib.auth' ,
1819 'django.contrib.contenttypes' ,
1920 'django.contrib.sessions' ,
2021 'django.contrib.messages' ,
2122 'django.contrib.staticfiles' ,
23+ 'django.contrib.sitemaps' ,
24+
25+ 'memoize' ,
2226]
2327
2428MIDDLEWARE = [
Original file line number Diff line number Diff line change 1+ import datetime
2+
3+ from django .contrib .sitemaps import Sitemap
4+ from django .urls import reverse
5+ from mainpage .utils .github import fetch_last_commit_date_from_github_repo
6+
7+
8+ class LearnSitemap (Sitemap ):
9+ changefreq = "weekly"
10+ priority = 0.5
11+
12+ def items (self ) -> list [str ]:
13+ return ["index" , "index_advanced" ]
14+
15+ def location (self , item : str ) -> str :
16+ return reverse (item )
17+
18+ def lastmod (self , obj : str ) -> datetime .datetime | None :
19+ return fetch_last_commit_date_from_github_repo ('moscowpython' , 'learnpython' )
Original file line number Diff line number Diff line change 11from django .contrib import admin
2+ from django .contrib .sitemaps .views import sitemap
23from django .urls import include , path
34
5+ from landing_page .sitemap import LearnSitemap
6+
47urlpatterns = [
58 path ('' , include ('mainpage.urls' )),
69 path ('admin/' , admin .site .urls ),
10+ path (
11+ "sitemap.xml" ,
12+ sitemap ,
13+ {"sitemaps" : {"static" : LearnSitemap }},
14+ name = "django.contrib.sitemaps.views.sitemap" ,
15+ )
716]
Original file line number Diff line number Diff line change 1+ import datetime
2+
3+ import requests
4+ from memoize import memoize
5+
6+
7+ @memoize (timeout = 24 * 60 * 60 )
8+ def fetch_last_commit_date_from_github_repo (
9+ owner : str ,
10+ repo_name : str ,
11+ timeout_msec : int = 500 ,
12+ ) -> datetime .datetime | None :
13+ response = requests .get (
14+ f"https://api.github.com/repos/{ owner } /{ repo_name } /commits" ,
15+ timeout = timeout_msec / 1000 ,
16+ )
17+ if not response :
18+ return None
19+ all_commits = response .json ()
20+ if not isinstance (all_commits , list ) or not all_commits :
21+ return None
22+ last_commit = all_commits [0 ]
23+ raw_commit_date = last_commit .get ("commit" , {}).get ("author" , {}).get ("date" )
24+ try :
25+ last_commit_date = datetime .datetime .fromisoformat (raw_commit_date ) if raw_commit_date else None
26+ except ValueError :
27+ last_commit_date = None
28+
29+ return last_commit_date
Original file line number Diff line number Diff line change @@ -4,3 +4,4 @@ mypy==1.5.0
44isort == 5.12.0
55pytest == 7.4.0
66pytest-django == 4.5.2
7+ types-requests == 2.31.0.10
Original file line number Diff line number Diff line change 11Django == 4.2.4
22Pillow == 10.0.0
3+ requests == 2.31.0
4+ django-memoize == 2.3.1
You can’t perform that action at this time.
0 commit comments