Uh oh!
There was an error while loading. Please reload this page.
assign workinghours to participants on federated instances - #1503
Conversation
coveralls
commented
Mar 4, 2025
a545fbd to
7276810CompareUh oh!
There was an error while loading. Please reload this page.
| class Consequence(Model): | ||
| @dont_log # as we log the specific models | ||
| class AbstractConsequence(PolymorphicModel): |
There was a problem hiding this comment.
Currently, the code is not robust against consequence handlers being uninstalled (try removing the youth warden plugin). I think it should be, similar to missing structures and signup flow, it shouldn't crash the application. Maybe setting a custom _default_manager would be a simple solution?
felixrindt
commented
Jul 31, 2025
Here's what we discussed about queryset filtering: defblub():
handlers= [...]
consequence_classes=AbstractConsequence.__subclasses__()
qs=AbstractConsequence.objects.filter(slug__in=map(operator.attrgetter("slug"), handlers)).distinct()
forhandlerinenabled_consequence_handlers:
forConcreteConsequenceinconsequence_classes:
qs=ConcreteConsequence.filter_queryset(handler, qs, user)
# ==> rather ditch annotations and OR Q-ObjectsreturnqsdeflocalConsequence_filter_queryset(handler, qs, user):
returnhandler.filter_local_queryset(qs, user) # filter for nonlocal or other handler or matches criteriadeffederatedConsequence_filter_queryset(handler, qs, user):
returnqs.filter(
Q("is not federated") |Q("matches criteria")
) |
ba01663 to
0a61e84Compare
felixrindt
left a comment
There was a problem hiding this comment.
I sent you a patch on Signal so you can look through my hacks during trying this out.
| if not self.instance and value != AbstractConsequence.States.NEEDS_CONFIRMATION: | ||
| raise serializers.ValidationError( | ||
| _("Consequences must be created in needs_confirmation state") | ||
| ) |
There was a problem hiding this comment.
I think this belongs in the concrete federated code, because in an normal API we would want to serialize consequences in any state?!
| queryset = WorkingHours.objects.all() | ||
| class ConsequenceViewSet(viewsets.ModelViewSet): |
There was a problem hiding this comment.
Again, this is specifically for federated consequences, the name should reflect that. Can it be moved to the plugin?
| def filter_editable_by_user(cls, user: UserProfile): | ||
| return Q(slug=cls.slug) & Q( | ||
| # Qualifications can be granted by people who... | ||
| | Q( # are responsible for the event the consequence originated from, if applicable | ||
| event_id__in=get_objects_for_user(user, perms="change_event", klass=Event), | ||
| Q( # are responsible for the event the consequence originated from, if applicable | ||
| data__event_id__in=get_objects_for_user(user, perms="change_event", klass=Event), | ||
| ) | ||
| | Q( # can edit the affected user anyway | ||
| user__in=get_objects_for_user( | ||
| localconsequence__user__in=get_objects_for_user( | ||
| user, perms="change_userprofile", klass=get_user_model() | ||
| ) | ||
| ) |
There was a problem hiding this comment.
The new version doesn't work for me. Postgres complains about having to implicitly typecast somewhere. I think it might be the json values in list checks.
| phone = models.CharField(_("phone number"), max_length=254, blank=True) | ||
| qualifications = models.ManyToManyField(Qualification) | ||
| federated_instance = models.ForeignKey(FederatedGuest, on_delete=models.CASCADE) | ||
| federated_instance_identifier = models.CharField(null=True, blank=True, max_length=255) |
There was a problem hiding this comment.
I don't think this is filled anywhere?
| if event_title: | ||
| s = _("{user} acquires '{qualification}' after participating in {event}.").format( | ||
| user=user, qualification=qualification_title, event=event_title | ||
| s = _("acquires '{qualification}' after participating in {event}.").format( |
There was a problem hiding this comment.
atm this is just "deleted event" when coming from a federated instance
closes#1501