From 6f026e4f0bca3cc3bb137bc26967283510c135de Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 24 Sep 2017 14:37:09 +0200 Subject: Ajout des propriétés uid et prodid dans les iCalendar --- feeds.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'feeds.py') diff --git a/feeds.py b/feeds.py index 2dd2479..a75e60b 100644 --- a/feeds.py +++ b/feeds.py @@ -27,7 +27,7 @@ from .models import Course, Group, LastUpdate from .templatetags.rooms import format_rooms from .utils import get_current_or_next_week, get_week, group_courses -ICAL_NAMES = ["summary", "description", "location", "start", "dtstart", "dtend"] +ICAL_NAMES = ["uid", "summary", "description", "location", "start", "dtstart", "dtend"] class IcalFeedGenerator(SyndicationFeed): @@ -35,6 +35,7 @@ class IcalFeedGenerator(SyndicationFeed): def write(self, outfile, encoding): calendar = Calendar() + calendar.add("prodid", "-//celcatsanitizer//NONSGML v1.0//EN") calendar.add("version", "2.0") self.write_events(calendar) @@ -71,7 +72,8 @@ class IcalFeed(Feed): return Course.objects.get_courses_for_group(obj).order_by("begin") def item_extra_kwargs(self, item): - return {"dtstart": item.begin, + return {"uid": "{0}@celcatsanitizer".format(item.id), + "dtstart": item.begin, "dtend": item.end, "summary": item.name, "location": format_rooms(item.rooms.all())} -- cgit v1.2.1 From 0949b09c0040a66ffd1869da23a9425da891d56f Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 24 Sep 2017 15:01:59 +0200 Subject: Ajout du champ dtstamp aux fichiers iCalendar. Suppression du order_by("begin") redondant lors de la récupération des cours --- feeds.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'feeds.py') diff --git a/feeds.py b/feeds.py index a75e60b..6dfb851 100644 --- a/feeds.py +++ b/feeds.py @@ -17,6 +17,7 @@ from django.core.exceptions import ObjectDoesNotExist from django.conf import settings from django.contrib.syndication.views import Feed from django.db.models import Q +from django.db.models.functions import ExtractWeek, ExtractYear from django.template import loader from django.urls import reverse from django.utils.feedgenerator import Atom1Feed, SyndicationFeed @@ -27,7 +28,7 @@ from .models import Course, Group, LastUpdate from .templatetags.rooms import format_rooms from .utils import get_current_or_next_week, get_week, group_courses -ICAL_NAMES = ["uid", "summary", "description", "location", "start", "dtstart", "dtend"] +ICAL_NAMES = ["uid", "summary", "description", "location", "start", "dtstart", "dtend", "dtstamp"] class IcalFeedGenerator(SyndicationFeed): @@ -69,12 +70,13 @@ class IcalFeed(Feed): return "" def items(self, obj): - return Course.objects.get_courses_for_group(obj).order_by("begin") + return Course.objects.get_courses_for_group(obj).annotate(year=ExtractYear("begin"), week=ExtractWeek("begin")) def item_extra_kwargs(self, item): return {"uid": "{0}@celcatsanitizer".format(item.id), "dtstart": item.begin, "dtend": item.end, + "dtstamp": LastUpdate.objects.get(timetable=item.timetable, year=item.year, week=item.week).updated_at, "summary": item.name, "location": format_rooms(item.rooms.all())} -- cgit v1.2.1 From e30b0c673cae607175c5bae6df6e87d8b100bdf3 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 24 Sep 2017 17:16:10 +0200 Subject: Suppression du modèle LastUpdate, utilisation du champ last_update à la place. --- feeds.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'feeds.py') diff --git a/feeds.py b/feeds.py index 6dfb851..d7f3ae3 100644 --- a/feeds.py +++ b/feeds.py @@ -16,7 +16,7 @@ from django.core.exceptions import ObjectDoesNotExist from django.conf import settings from django.contrib.syndication.views import Feed -from django.db.models import Q +from django.db.models import Count, Max, Q from django.db.models.functions import ExtractWeek, ExtractYear from django.template import loader from django.urls import reverse @@ -24,7 +24,7 @@ from django.utils.feedgenerator import Atom1Feed, SyndicationFeed from icalendar import Calendar, Event -from .models import Course, Group, LastUpdate +from .models import Course, Group from .templatetags.rooms import format_rooms from .utils import get_current_or_next_week, get_week, group_courses @@ -70,13 +70,13 @@ class IcalFeed(Feed): return "" def items(self, obj): - return Course.objects.get_courses_for_group(obj).annotate(year=ExtractYear("begin"), week=ExtractWeek("begin")) + return Course.objects.get_courses_for_group(obj) def item_extra_kwargs(self, item): return {"uid": "{0}@celcatsanitizer".format(item.id), "dtstart": item.begin, "dtend": item.end, - "dtstamp": LastUpdate.objects.get(timetable=item.timetable, year=item.year, week=item.week).updated_at, + "dtstamp": item.last_update, "summary": item.name, "location": format_rooms(item.rooms.all())} @@ -84,12 +84,14 @@ class IcalFeed(Feed): class RSSFeed(Feed): def get_object(self, request, year_slug, timetable_slug, group_slug): year, week = get_current_or_next_week() + begin, end = get_week(year, week) + try: group = Group.objects.get(timetable__year__slug=year_slug, timetable__slug=timetable_slug, slug=group_slug) - updates = LastUpdate.objects.filter(Q(year=year, week__lte=week) | Q(year__lt=year), timetable__year__slug=year_slug, timetable__slug=timetable_slug).order_by("-year", "-week")[:5] except: raise ObjectDoesNotExist else: + updates = Course.objects.get_courses_for_group(group, begin__lt=end).annotate(year=ExtractYear("begin"), week=ExtractWeek("begin")).values("year", "week").annotate(Count("year", distinct=True), Max("last_update")).order_by("-year", "-week")[:5] return group, updates def link(self, obj): @@ -115,9 +117,9 @@ class RSSFeed(Feed): group = obj[0] for update in obj[1]: - start, end = get_week(update.year, update.week) + start, end = get_week(update["year"], update["week"]) courses = Course.objects.get_courses_for_group(group, begin__gte=start, begin__lt=end) - context = {"group": group, "courses": group_courses(courses), "last_update": update, "year": update.year, "week": update.week} + context = {"group": group, "courses": group_courses(courses), "last_update": update["last_update__max"], "year": update["year"], "week": update["week"]} update.group = group update.description = template.render(context) -- cgit v1.2.1 From a4fbe45dcdc89dbcfe50afd5058b0ecf09ed7642 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sun, 24 Sep 2017 17:37:21 +0200 Subject: Suppression des import inutilisés --- feeds.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'feeds.py') diff --git a/feeds.py b/feeds.py index d7f3ae3..7e8cd80 100644 --- a/feeds.py +++ b/feeds.py @@ -16,7 +16,7 @@ from django.core.exceptions import ObjectDoesNotExist from django.conf import settings from django.contrib.syndication.views import Feed -from django.db.models import Count, Max, Q +from django.db.models import Count, Max from django.db.models.functions import ExtractWeek, ExtractYear from django.template import loader from django.urls import reverse -- cgit v1.2.1 From 701e3d62efe34a0b6b0a599238175704196097de Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Mon, 25 Sep 2017 15:39:05 +0200 Subject: Correction des flux RSS et Atom : update était à l’origine un objet, c’est maintenant un dictionnaire. --- feeds.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'feeds.py') diff --git a/feeds.py b/feeds.py index 7e8cd80..19c9e47 100644 --- a/feeds.py +++ b/feeds.py @@ -103,14 +103,22 @@ class RSSFeed(Feed): return "Emploi du temps du groupe {0}".format(obj[0]) def item_link(self, item): - group = item.group - return reverse("timetable", kwargs={"year_slug": group.timetable.year.slug, "timetable_slug": group.timetable.slug, "group_slug": group.slug, "year": item.year, "week": item.week}) + group = item["group"] + return reverse("timetable", + kwargs={"year_slug": group.timetable.year.slug, + "timetable_slug": group.timetable.slug, + "group_slug": group.slug, + "year": item["year"], + "week": item["week"]}) def item_description(self, item): - return item.description + return item["description"] + + def item_title(self, item): + return "{0}, semaine {1} de {2}".format(item["group"], item["week"], item["year"]) def item_updateddate(self, item): - return item.date + return item["last_update__max"] def items(self, obj): template = loader.get_template("timetable_common.html") @@ -121,8 +129,8 @@ class RSSFeed(Feed): courses = Course.objects.get_courses_for_group(group, begin__gte=start, begin__lt=end) context = {"group": group, "courses": group_courses(courses), "last_update": update["last_update__max"], "year": update["year"], "week": update["week"]} - update.group = group - update.description = template.render(context) + update["group"] = group + update["description"] = template.render(context) return obj[1] -- cgit v1.2.1 From 3d2fa6b15c58b775bc7e60e148f3a6bf1f2631d0 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Mon, 25 Sep 2017 15:50:02 +0200 Subject: Découpage des lignes dépassant les 80 caractères de long dans feeds.py et models.py --- feeds.py | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) (limited to 'feeds.py') diff --git a/feeds.py b/feeds.py index 19c9e47..ff00066 100644 --- a/feeds.py +++ b/feeds.py @@ -28,7 +28,8 @@ from .models import Course, Group from .templatetags.rooms import format_rooms from .utils import get_current_or_next_week, get_week, group_courses -ICAL_NAMES = ["uid", "summary", "description", "location", "start", "dtstart", "dtend", "dtstamp"] +ICAL_NAMES = ["uid", "summary", "description", "location", + "start", "dtstart", "dtend", "dtstamp"] class IcalFeedGenerator(SyndicationFeed): @@ -57,7 +58,9 @@ class IcalFeed(Feed): def get_object(self, request, year_slug, timetable_slug, group_slug): try: - group = Group.objects.get(timetable__year__slug=year_slug, timetable__slug=timetable_slug, slug=group_slug) + group = Group.objects.get(timetable__year__slug=year_slug, + timetable__slug=timetable_slug, + slug=group_slug) except: raise ObjectDoesNotExist else: @@ -87,16 +90,28 @@ class RSSFeed(Feed): begin, end = get_week(year, week) try: - group = Group.objects.get(timetable__year__slug=year_slug, timetable__slug=timetable_slug, slug=group_slug) + group = Group.objects.get(timetable__year__slug=year_slug, + timetable__slug=timetable_slug, + slug=group_slug) except: raise ObjectDoesNotExist else: - updates = Course.objects.get_courses_for_group(group, begin__lt=end).annotate(year=ExtractYear("begin"), week=ExtractWeek("begin")).values("year", "week").annotate(Count("year", distinct=True), Max("last_update")).order_by("-year", "-week")[:5] + updates = Course.objects.get_courses_for_group(group, + begin__lt=end) \ + .annotate(year=ExtractYear("begin"), + week=ExtractWeek("begin")) \ + .values("year", "week") \ + .annotate(Count("year", distinct=True), + Max("last_update")) \ + .order_by("-year", "-week")[:5] return group, updates def link(self, obj): group = obj[0] - link = reverse("timetable", kwargs={"year_slug": group.timetable.year.slug, "timetable_slug": group.timetable.slug, "group_slug": group.slug}) + link = reverse("timetable", + kwargs={"year_slug": group.timetable.year.slug, + "timetable_slug": group.timetable.slug, + "group_slug": group.slug}) return link def title(self, obj): @@ -115,7 +130,9 @@ class RSSFeed(Feed): return item["description"] def item_title(self, item): - return "{0}, semaine {1} de {2}".format(item["group"], item["week"], item["year"]) + return "{0}, semaine {1} de {2}".format(item["group"], + item["week"], + item["year"]) def item_updateddate(self, item): return item["last_update__max"] @@ -126,8 +143,14 @@ class RSSFeed(Feed): for update in obj[1]: start, end = get_week(update["year"], update["week"]) - courses = Course.objects.get_courses_for_group(group, begin__gte=start, begin__lt=end) - context = {"group": group, "courses": group_courses(courses), "last_update": update["last_update__max"], "year": update["year"], "week": update["week"]} + courses = Course.objects.get_courses_for_group(group, + begin__gte=start, + begin__lt=end) + context = {"group": group, + "courses": group_courses(courses), + "last_update": update["last_update__max"], + "year": update["year"], + "week": update["week"]} update["group"] = group update["description"] = template.render(context) -- cgit v1.2.1 From aa7ccf13a8735f162e2ea859ad1d8ebe9f34f657 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Mon, 25 Sep 2017 16:08:01 +0200 Subject: Utilisation de pylint pour améliorer la qualité du code --- feeds.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'feeds.py') diff --git a/feeds.py b/feeds.py index ff00066..cdecd73 100644 --- a/feeds.py +++ b/feeds.py @@ -87,7 +87,7 @@ class IcalFeed(Feed): class RSSFeed(Feed): def get_object(self, request, year_slug, timetable_slug, group_slug): year, week = get_current_or_next_week() - begin, end = get_week(year, week) + _, end = get_week(year, week) try: group = Group.objects.get(timetable__year__slug=year_slug, -- cgit v1.2.1 From cd2c473be7ebc33d7992441ae3ff1bf52785488c Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Thu, 28 Sep 2017 13:30:38 +0200 Subject: Ajout du type de cours dans le nom de l’évèmenent ICS --- feeds.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'feeds.py') diff --git a/feeds.py b/feeds.py index cdecd73..564b285 100644 --- a/feeds.py +++ b/feeds.py @@ -80,7 +80,7 @@ class IcalFeed(Feed): "dtstart": item.begin, "dtend": item.end, "dtstamp": item.last_update, - "summary": item.name, + "summary": item.name + " (" + item.type + ")", "location": format_rooms(item.rooms.all())} -- cgit v1.2.1