import the namespace with the models

This commit is contained in:
Faraphel 2023-11-30 22:00:00 +01:00
parent e7559446a7
commit 7965ecf779
6 changed files with 72 additions and 81 deletions

View file

@ -6,64 +6,63 @@ The admin is the admin page configuration, describing which model should be visi
from django.contrib import admin from django.contrib import admin
from .models import (Department, StudentGroup, TeachingUnit, StudentCard, TeachingSession, Attendance, Absence, from . import models
AbsenceAttachment, User)
# Register your models here. # Register your models here.
@admin.register(User) @admin.register(models.User)
class AdminUser(admin.ModelAdmin): class AdminUser(admin.ModelAdmin):
list_display = ("id", "username", "email", "first_name", "last_name", "is_staff") list_display = ("id", "username", "email", "first_name", "last_name", "is_staff")
search_fields = ("id", "username", "email", "first_name", "last_name", "is_staff") search_fields = ("id", "username", "email", "first_name", "last_name", "is_staff")
list_filter = ("is_staff",) list_filter = ("is_staff",)
@admin.register(Department) @admin.register(models.Department)
class AdminDepartment(admin.ModelAdmin): class AdminDepartment(admin.ModelAdmin):
list_display = ("id", "name", "email") list_display = ("id", "name", "email")
search_fields = ("id", "name", "email") search_fields = ("id", "name", "email")
@admin.register(StudentGroup) @admin.register(models.StudentGroup)
class AdminStudentGroup(admin.ModelAdmin): class AdminStudentGroup(admin.ModelAdmin):
list_display = ("id", "name", "owner", "department") list_display = ("id", "name", "owner", "department")
search_fields = ("id", "name", "owner", "department") search_fields = ("id", "name", "owner", "department")
@admin.register(TeachingUnit) @admin.register(models.TeachingUnit)
class AdminTeachingUnit(admin.ModelAdmin): class AdminTeachingUnit(admin.ModelAdmin):
list_display = ("id", "name") list_display = ("id", "name")
search_fields = ("id", "name") search_fields = ("id", "name")
@admin.register(StudentCard) @admin.register(models.StudentCard)
class AdminStudentCard(admin.ModelAdmin): class AdminStudentCard(admin.ModelAdmin):
list_display = ("id", "uid", "owner") list_display = ("id", "uid", "owner")
search_fields = ("id", "uid", "owner") search_fields = ("id", "uid", "owner")
readonly_fields = ("uid",) readonly_fields = ("uid",)
@admin.register(TeachingSession) @admin.register(models.TeachingSession)
class AdminTeachingSession(admin.ModelAdmin): class AdminTeachingSession(admin.ModelAdmin):
list_display = ("id", "start", "end", "duration", "teacher") list_display = ("id", "start", "end", "duration", "teacher")
search_fields = ("id", "start", "end", "duration", "teacher") search_fields = ("id", "start", "end", "duration", "teacher")
list_filter = ("start", "duration") list_filter = ("start", "duration")
@admin.register(Attendance) @admin.register(models.Attendance)
class AdminAttendance(admin.ModelAdmin): class AdminAttendance(admin.ModelAdmin):
list_display = ("id", "date", "student") list_display = ("id", "date", "student")
search_fields = ("id", "date", "student") search_fields = ("id", "date", "student")
list_filter = ("date",) list_filter = ("date",)
@admin.register(Absence) @admin.register(models.Absence)
class AdminAbsence(admin.ModelAdmin): class AdminAbsence(admin.ModelAdmin):
list_display = ("id", "message", "student") list_display = ("id", "message", "student")
search_fields = ("id", "message", "student") search_fields = ("id", "message", "student")
@admin.register(AbsenceAttachment) @admin.register(models.AbsenceAttachment)
class AdminAbsenceAttachment(admin.ModelAdmin): class AdminAbsenceAttachment(admin.ModelAdmin):
list_display = ("id", "content", "absence") list_display = ("id", "content", "absence")
search_fields = ("id", "content", "absence") search_fields = ("id", "content", "absence")

View file

@ -6,26 +6,25 @@ A permission describe which user is allowed to see and modify which objet with t
from rest_framework import permissions from rest_framework import permissions
from Palto.Palto.models import (Department, TeachingUnit, StudentCard, StudentGroup, User, TeachingSession, Attendance, from Palto.Palto import models
Absence, AbsenceAttachment)
class UserPermission(permissions.BasePermission): class UserPermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj: User) -> bool: def has_object_permission(self, request, view, obj: models.User) -> bool:
# if the requesting user is admin, allow all # if the requesting user is admin, allow all
if request.user.is_superuser: if request.user.is_superuser:
return True return True
if request.method in permissions.SAFE_METHODS: if request.method in permissions.SAFE_METHODS:
# if the user is in one of the same department as the requesting user, allow read # if the user is in one of the same department as the requesting user, allow read
if obj in Department.multiple_related_users(request.user.related_departments): if obj in models.Department.multiple_related_users(request.user.related_departments):
return True return True
return False return False
class DepartmentPermission(permissions.BasePermission): class DepartmentPermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj: Department) -> bool: def has_object_permission(self, request, view, obj: models.Department) -> bool:
# if the requesting user is admin, allow all # if the requesting user is admin, allow all
if request.user.is_superuser: if request.user.is_superuser:
return True return True
@ -42,7 +41,7 @@ class DepartmentPermission(permissions.BasePermission):
class StudentGroupPermission(permissions.BasePermission): class StudentGroupPermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj: StudentGroup) -> bool: def has_object_permission(self, request, view, obj: models.StudentGroup) -> bool:
# if the requesting user is admin, allow all # if the requesting user is admin, allow all
if request.user.is_superuser: if request.user.is_superuser:
return True return True
@ -68,7 +67,7 @@ class StudentGroupPermission(permissions.BasePermission):
class TeachingUnitPermission(permissions.BasePermission): class TeachingUnitPermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj: TeachingUnit) -> bool: def has_object_permission(self, request, view, obj: models.TeachingUnit) -> bool:
# if the requesting user is admin, allow all # if the requesting user is admin, allow all
if request.user.is_superuser: if request.user.is_superuser:
return True return True
@ -90,7 +89,7 @@ class TeachingUnitPermission(permissions.BasePermission):
class StudentCardPermission(permissions.BasePermission): class StudentCardPermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj: StudentCard) -> bool: def has_object_permission(self, request, view, obj: models.StudentCard) -> bool:
# if the requesting user is admin, allow all # if the requesting user is admin, allow all
if request.user.is_superuser: if request.user.is_superuser:
return True return True
@ -108,7 +107,7 @@ class StudentCardPermission(permissions.BasePermission):
class TeachingSessionPermission(permissions.BasePermission): class TeachingSessionPermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj: TeachingSession) -> bool: def has_object_permission(self, request, view, obj: models.TeachingSession) -> bool:
# if the requesting user is admin, allow all # if the requesting user is admin, allow all
if request.user.is_superuser: if request.user.is_superuser:
return True return True
@ -134,7 +133,7 @@ class TeachingSessionPermission(permissions.BasePermission):
class AttendancePermission(permissions.BasePermission): class AttendancePermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj: Attendance) -> bool: def has_object_permission(self, request, view, obj: models.Attendance) -> bool:
# if the requesting user is admin, allow all # if the requesting user is admin, allow all
if request.user.is_superuser: if request.user.is_superuser:
return True return True
@ -160,7 +159,7 @@ class AttendancePermission(permissions.BasePermission):
class AbsencePermission(permissions.BasePermission): class AbsencePermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj: Absence) -> bool: def has_object_permission(self, request, view, obj: models.Absence) -> bool:
# if the requesting user is admin, allow all # if the requesting user is admin, allow all
if request.user.is_superuser: if request.user.is_superuser:
return True return True
@ -186,7 +185,7 @@ class AbsencePermission(permissions.BasePermission):
class AbsenceAttachmentPermission(permissions.BasePermission): class AbsenceAttachmentPermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj: AbsenceAttachment) -> bool: def has_object_permission(self, request, view, obj: models.AbsenceAttachment) -> bool:
# if the requesting user is admin, allow all # if the requesting user is admin, allow all
if request.user.is_superuser: if request.user.is_superuser:
return True return True

View file

@ -6,8 +6,7 @@ A serializers tell the API how should a model should be serialized to be used by
from rest_framework import serializers from rest_framework import serializers
from Palto.Palto.models import (User, Department, TeachingUnit, StudentCard, TeachingSession, Attendance, Absence, from Palto.Palto import models
AbsenceAttachment, StudentGroup)
# TODO(Raphaël): Voir pour les related_name # TODO(Raphaël): Voir pour les related_name
@ -15,56 +14,56 @@ from Palto.Palto.models import (User, Department, TeachingUnit, StudentCard, Tea
class UserSerializer(serializers.ModelSerializer): class UserSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = User model = models.User
fields = ['id', 'username', 'first_name', 'last_name', 'email'] fields = ['id', 'username', 'first_name', 'last_name', 'email']
class DepartmentSerializer(serializers.ModelSerializer): class DepartmentSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Department model = models.Department
fields = ['id', 'name', 'email', 'managers'] fields = ['id', 'name', 'email', 'managers']
# NOTE: teachers, students # NOTE: teachers, students
class StudentGroupSerializer(serializers.ModelSerializer): class StudentGroupSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = StudentGroup model = models.StudentGroup
fields = ['id', 'name', 'owner', 'department'] fields = ['id', 'name', 'owner', 'department']
# NOTE: students # NOTE: students
class TeachingUnitSerializer(serializers.ModelSerializer): class TeachingUnitSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = TeachingUnit model = models.TeachingUnit
fields = ['id', 'name', 'department'] fields = ['id', 'name', 'department']
# NOTE: managers, teachers, student_groups # NOTE: managers, teachers, student_groups
class StudentCardSerializer(serializers.ModelSerializer): class StudentCardSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = StudentCard model = models.StudentCard
fields = ['id', 'uid', 'department', 'owner'] fields = ['id', 'uid', 'department', 'owner']
class TeachingSessionSerializer(serializers.ModelSerializer): class TeachingSessionSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = TeachingSession model = models.TeachingSession
fields = ['id', 'start', 'duration', 'note', 'unit', 'group', 'teacher'] fields = ['id', 'start', 'duration', 'note', 'unit', 'group', 'teacher']
class AttendanceSerializer(serializers.ModelSerializer): class AttendanceSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Attendance model = models.Attendance
fields = ['id', 'date', 'student', 'session'] fields = ['id', 'date', 'student', 'session']
class AbsenceSerializer(serializers.ModelSerializer): class AbsenceSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Absence model = models.Absence
fields = ['id', 'message', 'student', 'session'] fields = ['id', 'message', 'student', 'session']
class AbsenceAttachmentSerializer(serializers.ModelSerializer): class AbsenceAttachmentSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = AbsenceAttachment model = models.AbsenceAttachment
fields = ['id', 'content', 'absence'] fields = ['id', 'content', 'absence']

View file

@ -6,7 +6,7 @@ Everything to test the API v1 is described here.
from django import test from django import test
from Palto.Palto.models import User from Palto.Palto import models
class UserTestCase(test.TestCase): class UserTestCase(test.TestCase):

View file

@ -7,20 +7,19 @@ All the urls for every model of the API are described here.
from rest_framework import routers from rest_framework import routers
from .views import (UserViewSet, AbsenceAttachmentViewSet, AbsenceViewSet, AttendanceViewSet, TeachingSessionViewSet, from . import views
StudentCardViewSet, TeachingUnitViewSet, StudentGroupViewSet, DepartmentViewSet)
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register(r'users', UserViewSet, basename="User") router.register(r'users', views.UserViewSet, basename="User")
router.register(r'departments', DepartmentViewSet, basename="Department") router.register(r'departments', views.DepartmentViewSet, basename="Department")
router.register(r'student_groups', StudentGroupViewSet, basename="StudentGroup") router.register(r'student_groups', views.StudentGroupViewSet, basename="StudentGroup")
router.register(r'teaching_units', TeachingUnitViewSet, basename="TeachingUnit") router.register(r'teaching_units', views.TeachingUnitViewSet, basename="TeachingUnit")
router.register(r'student_cards', StudentCardViewSet, basename="StudentCard") router.register(r'student_cards', views.StudentCardViewSet, basename="StudentCard")
router.register(r'teaching_sessions', TeachingSessionViewSet, basename="TeachingSession") router.register(r'teaching_sessions', views.TeachingSessionViewSet, basename="TeachingSession")
router.register(r'attendances', AttendanceViewSet, basename="Attendance") router.register(r'attendances', views.AttendanceViewSet, basename="Attendance")
router.register(r'absences', AbsenceViewSet, basename="Absence") router.register(r'absences', views.AbsenceViewSet, basename="Absence")
router.register(r'absence_attachments', AbsenceAttachmentViewSet, basename="AbsenceAttachment") router.register(r'absence_attachments', views.AbsenceAttachmentViewSet, basename="AbsenceAttachment")
urlpatterns = router.urls urlpatterns = router.urls

View file

@ -7,65 +7,60 @@ An API view describe which models should display which files to user with which
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from .permissions import (UserPermission, DepartmentPermission, StudentGroupPermission, TeachingUnitPermission, from . import permissions
StudentCardPermission, TeachingSessionPermission, AttendancePermission, AbsencePermission, from . import serializers
AbsenceAttachmentPermission) from ... import models
from .serializers import (UserSerializer, AbsenceAttachmentSerializer, AbsenceSerializer, AttendanceSerializer,
TeachingSessionSerializer, StudentCardSerializer, StudentGroupSerializer,
DepartmentSerializer, TeachingUnitSerializer)
from ...models import (User, AbsenceAttachment, Absence, Attendance, TeachingSession, StudentCard, TeachingUnit,
StudentGroup, Department)
class UserViewSet(viewsets.ModelViewSet): class UserViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer serializer_class = serializers.UserSerializer
queryset = User.objects.all() queryset = models.User.objects.all()
permission_classes = [IsAuthenticated, UserPermission] permission_classes = [IsAuthenticated, permissions.UserPermission]
class DepartmentViewSet(UserViewSet): class DepartmentViewSet(UserViewSet):
serializer_class = DepartmentSerializer serializer_class = serializers.DepartmentSerializer
queryset = Department.objects.all() queryset = models.Department.objects.all()
permission_classes = [DepartmentPermission] permission_classes = [permissions.DepartmentPermission]
class StudentGroupViewSet(UserViewSet): class StudentGroupViewSet(UserViewSet):
serializer_class = StudentGroupSerializer serializer_class = serializers.StudentGroupSerializer
queryset = StudentGroup.objects.all() queryset = models.StudentGroup.objects.all()
permission_classes = [IsAuthenticated, StudentGroupPermission] permission_classes = [IsAuthenticated, permissions.StudentGroupPermission]
class TeachingUnitViewSet(UserViewSet): class TeachingUnitViewSet(UserViewSet):
serializer_class = TeachingUnitSerializer serializer_class = serializers.TeachingUnitSerializer
queryset = TeachingUnit.objects.all() queryset = models.TeachingUnit.objects.all()
permission_classes = [IsAuthenticated, TeachingUnitPermission] permission_classes = [IsAuthenticated, permissions.TeachingUnitPermission]
class StudentCardViewSet(UserViewSet): class StudentCardViewSet(UserViewSet):
serializer_class = StudentCardSerializer serializer_class = serializers.StudentCardSerializer
queryset = StudentCard.objects.all() queryset = models.StudentCard.objects.all()
permission_classes = [IsAuthenticated, StudentCardPermission] permission_classes = [IsAuthenticated, permissions.StudentCardPermission]
class TeachingSessionViewSet(UserViewSet): class TeachingSessionViewSet(UserViewSet):
serializer_class = TeachingSessionSerializer serializer_class = serializers.TeachingSessionSerializer
queryset = TeachingSession.objects.all() queryset = models.TeachingSession.objects.all()
permission_classes = [IsAuthenticated, TeachingSessionPermission] permission_classes = [IsAuthenticated, permissions.TeachingSessionPermission]
class AttendanceViewSet(UserViewSet): class AttendanceViewSet(UserViewSet):
serializer_class = AttendanceSerializer serializer_class = serializers.AttendanceSerializer
queryset = Attendance.objects.all() queryset = models.Attendance.objects.all()
permission_classes = [IsAuthenticated, AttendancePermission] permission_classes = [IsAuthenticated, permissions.AttendancePermission]
class AbsenceViewSet(UserViewSet): class AbsenceViewSet(UserViewSet):
serializer_class = AbsenceSerializer serializer_class = serializers.AbsenceSerializer
queryset = Absence.objects.all() queryset = models.Absence.objects.all()
permission_classes = [IsAuthenticated, AbsencePermission] permission_classes = [IsAuthenticated, permissions.AbsencePermission]
class AbsenceAttachmentViewSet(UserViewSet): class AbsenceAttachmentViewSet(UserViewSet):
serializer_class = AbsenceAttachmentSerializer serializer_class = serializers.AbsenceAttachmentSerializer
queryset = AbsenceAttachment.objects.all() queryset = models.AbsenceAttachment.objects.all()
permission_classes = [IsAuthenticated, AbsenceAttachmentPermission] permission_classes = [IsAuthenticated, permissions.AbsenceAttachmentPermission]