Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: foundation of breaking circular dependencies #17

Merged
merged 31 commits into from
Oct 24, 2023

Conversation

SKairinos
Copy link
Contributor

@SKairinos SKairinos commented Oct 23, 2023

This change is Reviewable

Copy link
Contributor Author

@SKairinos SKairinos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: 0 of 38 files reviewed, 5 unresolved discussions


codeforlife/pagination.py line 9 at r3 (raw file):

class LimitOffsetPagination(_LimitOffsetPagination):
    default_limit = 50
    max_limit = 500

150


codeforlife/tests/api.py line 208 at r3 (raw file):

    ):
        """
        Get a different user that is also in a school.

clearer doc strings


codeforlife/user/filters/user.py line 8 at r3 (raw file):

class UserFilterSet(filters.FilterSet):
    students_in_class = filters.CharFilter(
        "new_student__class_field__access_code", "exact"

use new_student__class_field


codeforlife/user/views/user.py line 16 at r3 (raw file):

        user: User = self.request.user
        if user.teacher is None:
            return User.objects.filter(id=user.id)

students can read all other students in their class


codeforlife/user/views/user.py line 21 at r3 (raw file):

            new_teacher__school=user.teacher.school_id
        )
        students = User.objects.filter(

if admin, all students in all classes
else, all students in classes teacher owns

Copy link
Contributor

@faucomte97 faucomte97 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 5 of 17 files at r1, 1 of 1 files at r2, 32 of 32 files at r3, all commit messages.
Reviewable status: all files reviewed, 41 unresolved discussions (waiting on @SKairinos)


codeforlife/pagination.py line 9 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

150

Reminder


codeforlife/settings/django.py line 127 at r3 (raw file):

# Installed Apps
# https://docs.djangoproject.com/en/4.2/ref/settings/#installed-apps

Wrong Django version


codeforlife/tests/api.py line 208 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

clearer doc strings

Reminder


codeforlife/user/models/user.py line 97 at r3 (raw file):

    @property
    def developer(self):
        return self.userprofile.developer

Don't think we need this

Code quote:

    @property
    def developer(self):
        return self.userprofile.developer

codeforlife/user/serializers/__init__.py line 5 at r3 (raw file):

from .teacher import TeacherSerializer
from .user import UserSerializer
from .school import SchoolSerializer

These aren't ordered it seems

Code quote:

from .klass import ClassSerializer
from .student import StudentSerializer
from .teacher import TeacherSerializer
from .user import UserSerializer
from .school import SchoolSerializer

codeforlife/user/tests/views/test_school.py line 9 at r3 (raw file):

from ...serializers import SchoolSerializer
from ...views import SchoolViewSet
from ...models import User, School, Teacher, Student, Class, UserProfile

Organise imports? Does it not order relative imports alphabetically?

Code quote:

import typing as t

from rest_framework import status
from rest_framework.permissions import IsAuthenticated

from ....tests import APITestCase, APIClient
from ...serializers import SchoolSerializer
from ...views import SchoolViewSet
from ...models import User, School, Teacher, Student, Class, UserProfile

codeforlife/user/tests/views/test_school.py line 90 at r3 (raw file):

        - student: A school student.
        - indy_student: A non-school student.
    

Extra whitespaces


codeforlife/user/tests/views/test_school.py line 111 at r3 (raw file):

    def test_retrieve__indy_student(self):
        """
        Independent student can not retrieve any school.

cannot


codeforlife/user/tests/views/test_school.py line 144 at r3 (raw file):

    def test_retrieve__teacher__not_same_school(self):
        """
        Teacher can not retrieve a school they are not in.

cannot


codeforlife/user/tests/views/test_school.py line 154 at r3 (raw file):

        self._retrieve_school(
            school,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

Why is this a 404 and not a 403?


codeforlife/user/tests/views/test_school.py line 159 at r3 (raw file):

    def test_retrieve__student__not_same_school(self):
        """
        Student can not retrieve a school they are not in.

cannot


codeforlife/user/tests/views/test_school.py line 171 at r3 (raw file):

        self._retrieve_school(
            school,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

Same question here


codeforlife/user/tests/views/test_user.py line 179 at r3 (raw file):

    def test_retrieve__student__teacher__same_school(self):
        """
        Student can not retrieve a teacher from the same school.

cannot


codeforlife/user/tests/views/test_user.py line 195 at r3 (raw file):

        self._retrieve_user(
            other_user,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

Why not 403


codeforlife/user/tests/views/test_user.py line 200 at r3 (raw file):

    def test_retrieve__student__student__same_school(self):
        """
        Student can not retrieve another student from the same school.

cannot


codeforlife/user/tests/views/test_user.py line 216 at r3 (raw file):

        self._retrieve_user(
            other_user,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

Why not 403?


codeforlife/user/tests/views/test_user.py line 221 at r3 (raw file):

    def test_retrieve__teacher__teacher__not_same_school(self):
        """
        Teacher can not retrieve another teacher from another school.

cannot


codeforlife/user/tests/views/test_user.py line 237 at r3 (raw file):

        self._retrieve_user(
            other_user,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

403?


codeforlife/user/tests/views/test_user.py line 242 at r3 (raw file):

    def test_retrieve__teacher__student__not_same_school(self):
        """
        Teacher can not retrieve a student from another school.

cannot


codeforlife/user/tests/views/test_user.py line 258 at r3 (raw file):

        self._retrieve_user(
            other_user,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

bleh?


codeforlife/user/tests/views/test_user.py line 263 at r3 (raw file):

    def test_retrieve__student__teacher__not_same_school(self):
        """
        Student can not retrieve a teacher from another school.

fuse


codeforlife/user/tests/views/test_user.py line 279 at r3 (raw file):

        self._retrieve_user(
            other_user,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

?


codeforlife/user/tests/views/test_user.py line 284 at r3 (raw file):

    def test_retrieve__student__student__not_same_school(self):
        """
        Student can not retrieve another student from another school.

.


codeforlife/user/tests/views/test_user.py line 300 at r3 (raw file):

        self._retrieve_user(
            other_user,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

xyz


codeforlife/user/tests/views/test_user.py line 305 at r3 (raw file):

    def test_retrieve__indy_student__teacher(self):
        """
        Independent student can not retrieve a teacher.

bonjour


codeforlife/user/tests/views/test_user.py line 310 at r3 (raw file):

        user = self._login_indy_student()

        self.get_other_school_user(

Why are we using get_other_school_user instead of retrieve_user like we've done before?


codeforlife/user/tests/views/test_user.py line 318 at r3 (raw file):

    def test_retrieve__indy_student__student(self):
        """
        Independent student can not retrieve a student.

au revoir


codeforlife/user/tests/views/test_user.py line 323 at r3 (raw file):

        user = self._login_indy_student()

        self.get_other_school_user(

Same question as above


codeforlife/user/tests/views/test_user.py line 339 at r3 (raw file):

        - student: A school student.
        - indy_student: A non-school student.
    

Extra whitespaces


codeforlife/user/tests/views/test_user.py line 357 at r3 (raw file):

        )

    def test_list__teacher(self):

only admins


codeforlife/user/tests/views/test_user.py line 369 at r3 (raw file):

                new_student__class_field__teacher__school=user.teacher.school
            )
        )

If I understand what this is doing, why not just do user.teacher.school.teacher_school.all()? 😅

Code quote:

        self._list_users(
            User.objects.filter(new_teacher__school=user.teacher.school)
            | User.objects.filter(
                new_student__class_field__teacher__school=user.teacher.school
            )
        )

codeforlife/user/tests/views/test_user.py line 371 at r3 (raw file):

        )

    def test_list__teacher__students_in_class(self):

only admins


codeforlife/user/tests/views/test_user.py line 373 at r3 (raw file):

    def test_list__teacher__students_in_class(self):
        """
        Teacher can list all the users in the same school.

This docstring is incorrect


codeforlife/user/tests/views/test_user.py line 386 at r3 (raw file):

            ),
            filters={"students_in_class": access_code},
        )

Same as above, we can just get the students from the class reverse field - I think I might be missing the point of these tests & the list function

Code quote:

        self._list_users(
            User.objects.filter(
                new_student__class_field__access_code=access_code
            ),
            filters={"students_in_class": access_code},
        )

codeforlife/user/views/__init__.py line 3 at r3 (raw file):

from .klass import ClassViewSet
from .user import UserViewSet
from .school import SchoolViewSet

Organise imports?

Code quote:

from .klass import ClassViewSet
from .user import UserViewSet
from .school import SchoolViewSet

codeforlife/user/views/klass.py line 6 at r3 (raw file):

from ..models import Class, User
from ..serializers import ClassSerializer
from ..permissions import IsSchoolMember

Imports? Really starting to think it doesn't sort relative imports

Code quote:

from ..models import Class, User
from ..serializers import ClassSerializer
from ..permissions import IsSchoolMember

codeforlife/user/views/klass.py line 18 at r3 (raw file):

        user: User = self.request.user
        if user.teacher is None:
            return Class.objects.filter(students=user)

At a quick glance it seems weird to me that user is passed in to a plural arg called students - how come that's the case?


codeforlife/user/views/school.py line 6 at r3 (raw file):

from ..models import User, School
from ..serializers import SchoolSerializer
from ..permissions import IsSchoolMember

Again

Code quote:

from ..models import User, School
from ..serializers import SchoolSerializer
from ..permissions import IsSchoolMember

codeforlife/user/views/user.py line 16 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

students can read all other students in their class

Reminder


codeforlife/user/views/user.py line 21 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

if admin, all students in all classes
else, all students in classes teacher owns

Reminder

Copy link
Contributor Author

@SKairinos SKairinos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: 27 of 38 files reviewed, 36 unresolved discussions (waiting on @faucomte97)


codeforlife/settings/django.py line 127 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Wrong Django version

Done.


codeforlife/user/models/user.py line 97 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Don't think we need this

Done.


codeforlife/user/serializers/__init__.py line 5 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

These aren't ordered it seems

Done.


codeforlife/user/tests/views/test_school.py line 9 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Organise imports? Does it not order relative imports alphabetically?

It does. It's my fault - I forgot to enable import sorting.


codeforlife/user/tests/views/test_school.py line 90 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Extra whitespaces

Done.


codeforlife/user/tests/views/test_school.py line 111 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

cannot

Done.


codeforlife/user/tests/views/test_school.py line 144 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

cannot

Done.


codeforlife/user/tests/views/test_school.py line 154 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Why is this a 404 and not a 403?

it's 404 not found because the queryset only contains schools the user has access to. Because this is an indy student, they don't have access to any schools. Therefore the queryset is empty and the school they are requesting is not found in the queryset.


codeforlife/user/tests/views/test_school.py line 159 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

cannot

Done.


codeforlife/user/tests/views/test_school.py line 171 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Same question here

see above


codeforlife/user/tests/views/test_user.py line 179 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

cannot

Done.


codeforlife/user/tests/views/test_user.py line 195 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Why not 403

Done.


codeforlife/user/tests/views/test_user.py line 200 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

cannot

Done.


codeforlife/user/tests/views/test_user.py line 216 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Why not 403?

Done.


codeforlife/user/tests/views/test_user.py line 221 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

cannot

Done.


codeforlife/user/tests/views/test_user.py line 237 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

403?

Done.


codeforlife/user/tests/views/test_user.py line 242 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

cannot

Done.


codeforlife/user/tests/views/test_user.py line 258 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

bleh?

Done.


codeforlife/user/tests/views/test_user.py line 263 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

fuse

Done.


codeforlife/user/tests/views/test_user.py line 279 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

?

Done.


codeforlife/user/tests/views/test_user.py line 284 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

.

Done.


codeforlife/user/tests/views/test_user.py line 300 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

xyz

Done.


codeforlife/user/tests/views/test_user.py line 305 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

bonjour

Done.


codeforlife/user/tests/views/test_user.py line 310 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Why are we using get_other_school_user instead of retrieve_user like we've done before?

I forgot to _retrieve_user. Added it now


codeforlife/user/tests/views/test_user.py line 318 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

au revoir

Done.


codeforlife/user/tests/views/test_user.py line 323 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Same question as above

see above


codeforlife/user/tests/views/test_user.py line 339 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Extra whitespaces

Done.


codeforlife/user/tests/views/test_user.py line 357 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

only admins

Done.


codeforlife/user/tests/views/test_user.py line 369 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

If I understand what this is doing, why not just do user.teacher.school.teacher_school.all()? 😅

That would only get the teachers in that school. We need the school's teachers OR the school's students. This can be achieved with the "|" operator. It translates to "search for the desired user from the school teachers or school students"


codeforlife/user/tests/views/test_user.py line 371 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

only admins

Done.


codeforlife/user/tests/views/test_user.py line 373 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

This docstring is incorrect

Done.


codeforlife/user/tests/views/test_user.py line 386 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Same as above, we can just get the students from the class reverse field - I think I might be missing the point of these tests & the list function

let's discuss in office


codeforlife/user/views/__init__.py line 3 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Organise imports?

Done.


codeforlife/user/views/klass.py line 6 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Imports? Really starting to think it doesn't sort relative imports

Done.


codeforlife/user/views/klass.py line 18 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

At a quick glance it seems weird to me that user is passed in to a plural arg called students - how come that's the case?

https://github.com/ocadotechnology/codeforlife-portal/blob/e0c4af70c0a0f6ed85654e73b179d4c6b1fda735/cfl_common/common/models.py#L277


codeforlife/user/views/school.py line 6 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Again

Done.

Copy link
Contributor

@faucomte97 faucomte97 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 12 of 12 files at r4, all commit messages.
Reviewable status: all files reviewed, 16 unresolved discussions (waiting on @SKairinos)


codeforlife/tests/api.py line 237 at r4 (raw file):

            # Cannot assert that 2 teachers are in the same class since a class
            # can only have 1 teacher.
            if not (user.teacher is not None and is_teacher):

I find this whole section pretty hard to read 😕
The repeated nots also make it hard to wrap my head around, let alone the other cases below.

Maybe simplify it if you can or add more comments maybe.


codeforlife/user/tests/views/test_school.py line 154 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

it's 404 not found because the queryset only contains schools the user has access to. Because this is an indy student, they don't have access to any schools. Therefore the queryset is empty and the school they are requesting is not found in the queryset.

I thought the test was meant to test the permission classes no? If so wouldn't it make sense to check that the teacher can't retrieve a class that they shouldn't have permission to access as opposed to trying to retrieve nothing?


codeforlife/user/tests/views/test_school.py line 171 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

see above

cf comment above


codeforlife/user/tests/views/test_user.py line 195 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

Done.

Again


codeforlife/user/tests/views/test_user.py line 216 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

Done.

Again


codeforlife/user/tests/views/test_user.py line 237 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

Done.

Again


codeforlife/user/tests/views/test_user.py line 258 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

Done.

Again


codeforlife/user/tests/views/test_user.py line 279 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

Done.

!


codeforlife/user/tests/views/test_user.py line 300 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

Done.

abc


codeforlife/user/tests/views/test_user.py line 369 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

That would only get the teachers in that school. We need the school's teachers OR the school's students. This can be achieved with the "|" operator. It translates to "search for the desired user from the school teachers or school students"

Could we still not replace User.objects.filter(new_teacher__school=user.teacher.school) with user.teacher.school.teacher_school.all() at least?


codeforlife/user/tests/views/test_user.py line 211 at r4 (raw file):

        self._retrieve_user(
            other_user,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

Same question here


codeforlife/user/tests/views/test_user.py line 299 at r4 (raw file):

        self._retrieve_user(
            other_user,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

Same question


codeforlife/user/tests/views/test_user.py line 446 at r4 (raw file):

        self._retrieve_user(
            other_user,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

Same question


codeforlife/user/tests/views/test_user.py line 466 at r4 (raw file):

        self._retrieve_user(
            other_user,
            status_code_assertion=status.HTTP_404_NOT_FOUND,

Again


codeforlife/user/views/klass.py line 18 at r3 (raw file):

Previously, SKairinos (Stefan Kairinos) wrote…

https://github.com/ocadotechnology/codeforlife-portal/blob/e0c4af70c0a0f6ed85654e73b179d4c6b1fda735/cfl_common/common/models.py#L277

I still don't get it. Isn't students just the reverse of the foreign key so it returns a QuerySet of all Students in that class? So why are we passing in a single user? Are you trying to check if the user is in the class?

Copy link
Contributor Author

@SKairinos SKairinos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: 30 of 38 files reviewed, 16 unresolved discussions (waiting on @faucomte97)


codeforlife/tests/api.py line 237 at r4 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

I find this whole section pretty hard to read 😕
The repeated nots also make it hard to wrap my head around, let alone the other cases below.

Maybe simplify it if you can or add more comments maybe.

used properties


codeforlife/user/tests/views/test_school.py line 154 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

I thought the test was meant to test the permission classes no? If so wouldn't it make sense to check that the teacher can't retrieve a class that they shouldn't have permission to access as opposed to trying to retrieve nothing?

Done.


codeforlife/user/tests/views/test_school.py line 171 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

cf comment above

Done.


codeforlife/user/tests/views/test_user.py line 195 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Again

Done.


codeforlife/user/tests/views/test_user.py line 216 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Again

Done.


codeforlife/user/tests/views/test_user.py line 237 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Again

Done.


codeforlife/user/tests/views/test_user.py line 258 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Again

Done.


codeforlife/user/tests/views/test_user.py line 279 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

!

Done.


codeforlife/user/tests/views/test_user.py line 300 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

abc

Done.


codeforlife/user/tests/views/test_user.py line 369 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Could we still not replace User.objects.filter(new_teacher__school=user.teacher.school) with user.teacher.school.teacher_school.all() at least?

no. that would get all the teacher objects in that school. we want the user objects.


codeforlife/user/tests/views/test_user.py line 211 at r4 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Same question here

Done.


codeforlife/user/tests/views/test_user.py line 299 at r4 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Same question

Done.


codeforlife/user/tests/views/test_user.py line 446 at r4 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Same question

Done.


codeforlife/user/tests/views/test_user.py line 466 at r4 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

Again

Done.


codeforlife/user/views/klass.py line 18 at r3 (raw file):

Previously, faucomte97 (Florian Aucomte) wrote…

I still don't get it. Isn't students just the reverse of the foreign key so it returns a QuerySet of all Students in that class? So why are we passing in a single user? Are you trying to check if the user is in the class?

Done.

Copy link
Contributor Author

@SKairinos SKairinos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

Reviewable status: 30 of 38 files reviewed, 16 unresolved discussions (waiting on @faucomte97)

Copy link
Contributor

@faucomte97 faucomte97 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 8 of 8 files at r5, all commit messages.
Reviewable status: all files reviewed, 1 unresolved discussion (waiting on @SKairinos)


codeforlife/user/tests/views/test_klass.py line 36 at r5 (raw file):

        - same_school: The class is in the same school as the user.
        - not_same_school: The class is not in the same school as the user.
    

Extra whitespaces

Copy link
Contributor

@faucomte97 faucomte97 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 1 of 1 files at r6, all commit messages.
Reviewable status: :shipit: complete! all files reviewed, all discussions resolved (waiting on @SKairinos)

@faucomte97 faucomte97 merged commit 21309b6 into main Oct 24, 2023
1 check passed
@faucomte97 faucomte97 deleted the 158-teacher-teach-edit-student-details branch October 24, 2023 10:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants