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 .models import (Department, StudentGroup, TeachingUnit, StudentCard, TeachingSession, Attendance, Absence,
AbsenceAttachment, User)
from . import models
# Register your models here.
@admin.register(User)
@admin.register(models.User)
class AdminUser(admin.ModelAdmin):
list_display = ("id", "username", "email", "first_name", "last_name", "is_staff")
search_fields = ("id", "username", "email", "first_name", "last_name", "is_staff")
list_filter = ("is_staff",)
@admin.register(Department)
@admin.register(models.Department)
class AdminDepartment(admin.ModelAdmin):
list_display = ("id", "name", "email")
search_fields = ("id", "name", "email")
@admin.register(StudentGroup)
@admin.register(models.StudentGroup)
class AdminStudentGroup(admin.ModelAdmin):
list_display = ("id", "name", "owner", "department")
search_fields = ("id", "name", "owner", "department")
@admin.register(TeachingUnit)
@admin.register(models.TeachingUnit)
class AdminTeachingUnit(admin.ModelAdmin):
list_display = ("id", "name")
search_fields = ("id", "name")
@admin.register(StudentCard)
@admin.register(models.StudentCard)
class AdminStudentCard(admin.ModelAdmin):
list_display = ("id", "uid", "owner")
search_fields = ("id", "uid", "owner")
readonly_fields = ("uid",)
@admin.register(TeachingSession)
@admin.register(models.TeachingSession)
class AdminTeachingSession(admin.ModelAdmin):
list_display = ("id", "start", "end", "duration", "teacher")
search_fields = ("id", "start", "end", "duration", "teacher")
list_filter = ("start", "duration")
@admin.register(Attendance)
@admin.register(models.Attendance)
class AdminAttendance(admin.ModelAdmin):
list_display = ("id", "date", "student")
search_fields = ("id", "date", "student")
list_filter = ("date",)
@admin.register(Absence)
@admin.register(models.Absence)
class AdminAbsence(admin.ModelAdmin):
list_display = ("id", "message", "student")
search_fields = ("id", "message", "student")
@admin.register(AbsenceAttachment)
@admin.register(models.AbsenceAttachment)
class AdminAbsenceAttachment(admin.ModelAdmin):
list_display = ("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 Palto.Palto.models import (Department, TeachingUnit, StudentCard, StudentGroup, User, TeachingSession, Attendance,
Absence, AbsenceAttachment)
from Palto.Palto import models
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 request.user.is_superuser:
return True
if request.method in permissions.SAFE_METHODS:
# 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 False
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 request.user.is_superuser:
return True
@ -42,7 +41,7 @@ class DepartmentPermission(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 request.user.is_superuser:
return True
@ -68,7 +67,7 @@ class StudentGroupPermission(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 request.user.is_superuser:
return True
@ -90,7 +89,7 @@ class TeachingUnitPermission(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 request.user.is_superuser:
return True
@ -108,7 +107,7 @@ class StudentCardPermission(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 request.user.is_superuser:
return True
@ -134,7 +133,7 @@ class TeachingSessionPermission(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 request.user.is_superuser:
return True
@ -160,7 +159,7 @@ class AttendancePermission(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 request.user.is_superuser:
return True
@ -186,7 +185,7 @@ class AbsencePermission(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 request.user.is_superuser:
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 Palto.Palto.models import (User, Department, TeachingUnit, StudentCard, TeachingSession, Attendance, Absence,
AbsenceAttachment, StudentGroup)
from Palto.Palto import models
# 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 Meta:
model = User
model = models.User
fields = ['id', 'username', 'first_name', 'last_name', 'email']
class DepartmentSerializer(serializers.ModelSerializer):
class Meta:
model = Department
model = models.Department
fields = ['id', 'name', 'email', 'managers']
# NOTE: teachers, students
class StudentGroupSerializer(serializers.ModelSerializer):
class Meta:
model = StudentGroup
model = models.StudentGroup
fields = ['id', 'name', 'owner', 'department']
# NOTE: students
class TeachingUnitSerializer(serializers.ModelSerializer):
class Meta:
model = TeachingUnit
model = models.TeachingUnit
fields = ['id', 'name', 'department']
# NOTE: managers, teachers, student_groups
class StudentCardSerializer(serializers.ModelSerializer):
class Meta:
model = StudentCard
model = models.StudentCard
fields = ['id', 'uid', 'department', 'owner']
class TeachingSessionSerializer(serializers.ModelSerializer):
class Meta:
model = TeachingSession
model = models.TeachingSession
fields = ['id', 'start', 'duration', 'note', 'unit', 'group', 'teacher']
class AttendanceSerializer(serializers.ModelSerializer):
class Meta:
model = Attendance
model = models.Attendance
fields = ['id', 'date', 'student', 'session']
class AbsenceSerializer(serializers.ModelSerializer):
class Meta:
model = Absence
model = models.Absence
fields = ['id', 'message', 'student', 'session']
class AbsenceAttachmentSerializer(serializers.ModelSerializer):
class Meta:
model = AbsenceAttachment
model = models.AbsenceAttachment
fields = ['id', 'content', 'absence']

View file

@ -6,7 +6,7 @@ Everything to test the API v1 is described here.
from django import test
from Palto.Palto.models import User
from Palto.Palto import models
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 .views import (UserViewSet, AbsenceAttachmentViewSet, AbsenceViewSet, AttendanceViewSet, TeachingSessionViewSet,
StudentCardViewSet, TeachingUnitViewSet, StudentGroupViewSet, DepartmentViewSet)
from . import views
router = routers.DefaultRouter()
router.register(r'users', UserViewSet, basename="User")
router.register(r'departments', DepartmentViewSet, basename="Department")
router.register(r'student_groups', StudentGroupViewSet, basename="StudentGroup")
router.register(r'teaching_units', TeachingUnitViewSet, basename="TeachingUnit")
router.register(r'student_cards', StudentCardViewSet, basename="StudentCard")
router.register(r'teaching_sessions', TeachingSessionViewSet, basename="TeachingSession")
router.register(r'attendances', AttendanceViewSet, basename="Attendance")
router.register(r'absences', AbsenceViewSet, basename="Absence")
router.register(r'absence_attachments', AbsenceAttachmentViewSet, basename="AbsenceAttachment")
router.register(r'users', views.UserViewSet, basename="User")
router.register(r'departments', views.DepartmentViewSet, basename="Department")
router.register(r'student_groups', views.StudentGroupViewSet, basename="StudentGroup")
router.register(r'teaching_units', views.TeachingUnitViewSet, basename="TeachingUnit")
router.register(r'student_cards', views.StudentCardViewSet, basename="StudentCard")
router.register(r'teaching_sessions', views.TeachingSessionViewSet, basename="TeachingSession")
router.register(r'attendances', views.AttendanceViewSet, basename="Attendance")
router.register(r'absences', views.AbsenceViewSet, basename="Absence")
router.register(r'absence_attachments', views.AbsenceAttachmentViewSet, basename="AbsenceAttachment")
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.permissions import IsAuthenticated
from .permissions import (UserPermission, DepartmentPermission, StudentGroupPermission, TeachingUnitPermission,
StudentCardPermission, TeachingSessionPermission, AttendancePermission, AbsencePermission,
AbsenceAttachmentPermission)
from .serializers import (UserSerializer, AbsenceAttachmentSerializer, AbsenceSerializer, AttendanceSerializer,
TeachingSessionSerializer, StudentCardSerializer, StudentGroupSerializer,
DepartmentSerializer, TeachingUnitSerializer)
from ...models import (User, AbsenceAttachment, Absence, Attendance, TeachingSession, StudentCard, TeachingUnit,
StudentGroup, Department)
from . import permissions
from . import serializers
from ... import models
class UserViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer
queryset = User.objects.all()
permission_classes = [IsAuthenticated, UserPermission]
serializer_class = serializers.UserSerializer
queryset = models.User.objects.all()
permission_classes = [IsAuthenticated, permissions.UserPermission]
class DepartmentViewSet(UserViewSet):
serializer_class = DepartmentSerializer
queryset = Department.objects.all()
permission_classes = [DepartmentPermission]
serializer_class = serializers.DepartmentSerializer
queryset = models.Department.objects.all()
permission_classes = [permissions.DepartmentPermission]
class StudentGroupViewSet(UserViewSet):
serializer_class = StudentGroupSerializer
queryset = StudentGroup.objects.all()
permission_classes = [IsAuthenticated, StudentGroupPermission]
serializer_class = serializers.StudentGroupSerializer
queryset = models.StudentGroup.objects.all()
permission_classes = [IsAuthenticated, permissions.StudentGroupPermission]
class TeachingUnitViewSet(UserViewSet):
serializer_class = TeachingUnitSerializer
queryset = TeachingUnit.objects.all()
permission_classes = [IsAuthenticated, TeachingUnitPermission]
serializer_class = serializers.TeachingUnitSerializer
queryset = models.TeachingUnit.objects.all()
permission_classes = [IsAuthenticated, permissions.TeachingUnitPermission]
class StudentCardViewSet(UserViewSet):
serializer_class = StudentCardSerializer
queryset = StudentCard.objects.all()
permission_classes = [IsAuthenticated, StudentCardPermission]
serializer_class = serializers.StudentCardSerializer
queryset = models.StudentCard.objects.all()
permission_classes = [IsAuthenticated, permissions.StudentCardPermission]
class TeachingSessionViewSet(UserViewSet):
serializer_class = TeachingSessionSerializer
queryset = TeachingSession.objects.all()
permission_classes = [IsAuthenticated, TeachingSessionPermission]
serializer_class = serializers.TeachingSessionSerializer
queryset = models.TeachingSession.objects.all()
permission_classes = [IsAuthenticated, permissions.TeachingSessionPermission]
class AttendanceViewSet(UserViewSet):
serializer_class = AttendanceSerializer
queryset = Attendance.objects.all()
permission_classes = [IsAuthenticated, AttendancePermission]
serializer_class = serializers.AttendanceSerializer
queryset = models.Attendance.objects.all()
permission_classes = [IsAuthenticated, permissions.AttendancePermission]
class AbsenceViewSet(UserViewSet):
serializer_class = AbsenceSerializer
queryset = Absence.objects.all()
permission_classes = [IsAuthenticated, AbsencePermission]
serializer_class = serializers.AbsenceSerializer
queryset = models.Absence.objects.all()
permission_classes = [IsAuthenticated, permissions.AbsencePermission]
class AbsenceAttachmentViewSet(UserViewSet):
serializer_class = AbsenceAttachmentSerializer
queryset = AbsenceAttachment.objects.all()
permission_classes = [IsAuthenticated, AbsenceAttachmentPermission]
serializer_class = serializers.AbsenceAttachmentSerializer
queryset = models.AbsenceAttachment.objects.all()
permission_classes = [IsAuthenticated, permissions.AbsenceAttachmentPermission]