docs: def open_assignments(self):
          '''
              Returns the list of open assignments from the
              viewpoint of this user.
          '''
          # Include only assignments with future, or no, hard deadline
          qs = Assignment.objects.filter(hard_deadline__gt=timezone.now(
          )) | Assignment.objects.filter(hard_deadline__isnull=True)
          # Include only assignments that are already published,
          # as long as you are not a tutor / course owner
          if not self.can_see_future():
              qs = qs.filter(publish_at__lt=timezone.now())
          # Include only assignments from courses that you are registered for
          qs = qs.filter(course__in=self.user_courses())
          # Ordering of resulting list
          qs = qs.order_by('soft_deadline', '-gradingScheme', 'title')
          waiting_for_action = [subm.assignment for subm in self.user.authored.all(
          ).exclude(state=Submission.WITHDRAWN)]
          # Emulate is_null sorting for soft_deadline
          qs_without_soft_deadline = qs.filter(soft_deadline__isnull=True)
          qs_with_soft_deadline = qs.filter(soft_deadline__isnull=False)
          ass_list = [
              ass for ass in qs_without_soft_deadline if ass not in waiting_for_action]
          ass_list += [
              ass for ass in qs_with_soft_deadline if ass not in waiting_for_action]
          return ass_list