Skip to content

Commit

Permalink
Documentatie geupdate en linting errors gefixt
Browse files Browse the repository at this point in the history
  • Loading branch information
LGDTimtou committed May 21, 2024
1 parent 734c285 commit 0d4116a
Show file tree
Hide file tree
Showing 16 changed files with 83 additions and 46 deletions.
9 changes: 3 additions & 6 deletions api/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,12 @@ def __call__(self, request):
try:
Gebruiker.objects.get(pk=request.user.id)
except Gebruiker.DoesNotExist:
directory_path = 'api/base_templates'
directory_path = "api/base_templates"
for filename in os.listdir(directory_path):
file_path = os.path.join(directory_path, filename)
with open(file_path, 'rb') as f:
with open(file_path, "rb") as f:
django_file = File(f)
template_data = {
"user": request.user.id,
"bestand": django_file
}
template_data = {"user": request.user.id, "bestand": django_file}
serializer = TemplateSerializer(data=template_data)
if serializer.is_valid():
serializer.save()
Expand Down
3 changes: 3 additions & 0 deletions api/models/gebruiker.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ class Gebruiker(models.Model):
met een één-op-één-relatie. Dit veld fungeert als het primaire sleutelveld.
is_lesgever (BooleanField): Een boolean veld dat aangeeft of de gebruiker een lesgever is of niet.
Standaard ingesteld op False.
gepinde_vakken (ManyToManyField): Een veld dat verwijst naar het Vak model met een
veel-op-veel-relatie, om de vakken die de gebruiker heeft gepind op te slaan.
Dit veld is optioneel (mag leeg zijn).
Methods:
__str__(): Geeft een representatie van het model als een string terug,
Expand Down
1 change: 1 addition & 0 deletions api/models/groep.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class Groep(models.Model):
de primaire sleutel voor de groep.
studenten (ManyToManyField): Een Many-to-Many relatie met het 'Gebruiker' model,
waarmee meerdere gebruikers aan een groep kunnen worden gekoppeld.
Dit veld is optioneel (mag leeg zijn).
project (ForeignKey): Een ForeignKey relatie met het 'Project' model,
waarmee wordt aangegeven tot welk project deze groep behoort.
Als het bijbehorende project wordt verwijderd,
Expand Down
13 changes: 9 additions & 4 deletions api/models/indiening.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

def upload_to(instance, filename):
"""
Functie om het pad te genereren waar het bestand wordt opgeslagen.
Genereert het pad waar het bestand wordt opgeslagen.
Args:
instance: De huidige instantie van het model.
Expand Down Expand Up @@ -48,11 +48,16 @@ class Indiening(models.Model):
indieningen verwijderd.
tijdstip (DateTimeField): Een veld dat automatisch het tijdstip
registreert waarop de indiening is aangemaakt.
bestand (FileField): Een veld voor het uploaden van het bestand,
met een dynamisch gegenereerd pad.
status (IntegerField): Een veld dat de status van de testen zal bijhouden.
result (TextField): Een veld dat het resultaat van de uitgevoerde testen zal bijhouden.
artefacten (FileField): Een optioneel veld voor het uploaden van extra artefacten.
Methods:
__str__(): Geeft een representatie van het model als een string terug, die de ID van de indiening bevat.
__str__(): Geeft een representatie van het model als een string terug,
die de ID van de indiening bevat.
save(*args, **kwargs): Overschrijft de standaard opslaanmethode om het pad van het bestand bij te werken.
"""

indiening_id = models.AutoField(primary_key=True)
Expand Down Expand Up @@ -86,7 +91,7 @@ def save(self, *args, **kwargs):

def run_tests_async(instance):
"""
Voert tests uit op een asynchrone manier en werkt de status en resultaat van de indiening bij.
Voert tests uit op een asynchrone manier en werkt de status en het resultaat van de indiening bij.
Args:
instance: Het instantie-object van de indiening.
Expand All @@ -109,7 +114,7 @@ def run_tests_async(instance):
def indiening_post_init(sender, instance, created, **kwargs):
"""
Een signaalhandler die wordt geactiveerd na het maken van een nieuwe indiening.
Start een asynchrone thread om de tests uit te voeren.
Start een asynchrone thread om de tests uit te voeren of werkt de status bij indien er geen restricties zijn.
Args:
sender: De verzender van het signaal.
Expand Down
24 changes: 11 additions & 13 deletions api/models/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

def upload_to(instance, filename):
"""
Functie om het pad te genereren waar het opgavebestand wordt opgeslagen.
Genereert het pad waar het opgavebestand wordt opgeslagen.
Args:
instance: De huidige instantie van het model.
Expand All @@ -26,28 +26,26 @@ class Project(models.Model):
titel (CharField): Titel van het project.
beschrijving (TextField): Beschrijving van het project.
opgave_bestand (FileField): Een veld voor het uploaden van het opgavebestand voor het project.
(eventueel uit te breiden tot meerdere bestanden mogelijk)
vak (ForeignKey): Een ForeignKey relatie met het 'Vak' model,
waarmee wordt aangegeven tot welk vak dit project behoort.
waarmee wordt aangegeven tot welk vak dit project behoort.
Als het bijbehorende vak wordt verwijderd, worden ook de bijbehorende projecten verwijderd.
deadline (DateTimeField): Een veld voor het instellen van de deadline voor het project.
Kan optioneel zijn (null=True).
Kan optioneel zijn (null=True, blank=True).
extra_deadline (DateTimeField): Een extra veld voor het instellen van een extra deadline voor het project.
Kan optioneel zijn (null=True).
Kan optioneel zijn (null=True, blank=True).
max_score (IntegerField): Een veld voor het instellen van de maximale score voor het project.
Standaard ingesteld op 20.
max_groep_grootte (IntegerField): Een veld voor het instellen van de max grootte van de groep voor het project.
Standaard ingesteld op 1.
Standaard ingesteld op 20.
max_groep_grootte (IntegerField): Een veld voor het instellen van de maximale grootte van de groep
voor het project. Standaard ingesteld op 1.
student_groep (BooleanField): Een veld om aan te geven of het een individueel project is of niet.
Standaard ingesteld of False.
Standaard ingesteld op False.
zichtbaar (BooleanField): Een veld om aan te geven of het project zichtbaar is of niet.
Standaard ingesteld op True.
Standaard ingesteld op True.
gearchiveerd (BooleanField): Een veld om aan te geven of het project gearchiveerd is of niet.
Standaard ingesteld op False.
Standaard ingesteld op False.
Methoden:
__str__(): Geeft een representatie van het model als een string terug,
die de titel van het project bevat.
__str__(): Geeft een representatie van het model als een string terug, die de titel van het project bevat.
"""

project_id = models.AutoField(primary_key=True)
Expand Down
8 changes: 4 additions & 4 deletions api/models/restrictie.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

def upload_to(instance, filename):
"""
Functie om het pad te genereren waar het opgavebestand wordt opgeslagen.
Genereert het pad waar het opgavebestand wordt opgeslagen.
Args:
instance: De huidige instantie van het model.
Expand All @@ -24,15 +24,15 @@ class Restrictie(models.Model):
Velden:
restrictie_id (AutoField): Automatisch gegenereerd veld dat fungeert als primaire sleutel voor de restrictie.
project (ForeignKey): Een ForeignKey relatie met het 'Project' model,
waarmee wordt aangegeven welk project deze restrictie betreft.
waarmee wordt aangegeven welk project deze restrictie betreft.
Als het bijbehorende project wordt verwijderd, worden ook de bijbehorende restricties verwijderd.
script (FileField): Een veld voor het uploaden van het script van de restrictie/test.
moet_slagen (BooleanField): Een veld om aan te geven of de inzending aan de restrictie/test moet voldoen.
Standaard ingesteld op False.
Standaard ingesteld op False.
Methoden:
__str__(): Geeft een representatie van het model als een string terug,
die het titel van het bijbehorende project en de beschrijving van de restrictie bevat.
die de titel van het bijbehorende project en de beschrijving van de restrictie bevat.
"""

restrictie_id = models.AutoField(primary_key=True)
Expand Down
3 changes: 2 additions & 1 deletion api/models/score.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ class Score(models.Model):
wordt ook de bijbehorende score verwijderd.
Methods:
__str__(): Geeft een representatie van het model als een string terug, die de score-ID bevat.
__str__(): Geeft een representatie van het model als een string terug,
die de score-ID bevat.
"""

score_id = models.AutoField(primary_key=True)
Expand Down
17 changes: 16 additions & 1 deletion api/models/template.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

def upload_to(instance, filename):
"""
Functie om het pad te genereren waar het bestand wordt opgeslagen.
Genereert het pad waar het bestand wordt opgeslagen.
Args:
instance: De huidige instantie van het model.
Expand All @@ -17,6 +17,21 @@ def upload_to(instance, filename):


class Template(models.Model):
"""
Model voor het bijhouden van templates geüpload door gebruikers.
Velden:
template_id (AutoField): Een automatisch gegenereerd veld dat fungeert als de primaire sleutel
voor de template.
user (ForeignKey): Een ForeignKey relatie met het 'User' model,
waarmee wordt aangegeven welke gebruiker de template heeft geüpload.
bestand (FileField): Een veld voor het uploaden van de template,
met een dynamisch gegenereerd pad.
Methoden:
__str__(): Geeft een representatie van het model als een string terug,
die de bestandsnaam van de template bevat.
"""

template_id = models.AutoField(primary_key=True)
user = models.ForeignKey(
Expand Down
8 changes: 3 additions & 5 deletions api/models/vak.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,11 @@ class Vak(models.Model):
vak_id (AutoField): Een automatisch gegenereerd veld dat fungeert als de primaire sleutel voor het vak.
naam (CharField): Een veld om de naam van het vak op te slaan.
jaartal (IntegerField): Een veld om het jaartal van het vak op te slaan. (voor 2024-2025 zou je 2025 opslaan)
gearchiveerd (BooleanField): Een veld om aan te geven als het vak gearchiveerd is.
gearchiveerd (BooleanField): Een veld om aan te geven of het vak gearchiveerd is. Standaard ingesteld op False.
studenten (ManyToManyField): Een Many-to-Many relatie met het 'Gebruiker' model,
waarmee meerdere gebruikers aan het vak kunnen worden gekoppeld als studenten.
waarmee meerdere gebruikers aan het vak kunnen worden gekoppeld als studenten.
lesgevers (ManyToManyField): Een Many-to-Many relatie met het 'Gebruiker' model,
waarmee meerdere gebruikers aan het vak kunnen worden gekoppeld als lesgevers.
invited (ManyToManyField): Een Many-To-Many relatie met het 'Gebruiker' model,
waarmee meerdere gebruikers aan het vak kunenn worden gekoppeld als geinviteerde.
waarmee meerdere gebruikers aan het vak kunnen worden gekoppeld als lesgevers.
Methods:
__str__(): Geeft een representatie van het model als een string terug, die de naam van het vak bevat.
Expand Down
10 changes: 7 additions & 3 deletions api/serializers/gebruiker.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ class GebruikerSerializer(serializers.ModelSerializer):
"""
Serializer voor het serialiseren en deserialiseren van Gebruiker objecten.
Fields:
Velden:
Meta.model (Gebruiker): Het model waarop de serializer is gebaseerd.
Meta.fields (tuple): De velden die moeten worden opgenomen in de serializer.
Meta.fields (list): De velden die moeten worden opgenomen in de serializer.
Hier wordt '__all__' gebruikt om alle velden op te nemen.
Methods:
Methoden:
create(self, validated_data): Maakt een nieuwe gebruiker aan en voegt deze toe aan de database.
update(self, instance, validated_data): Werkt een bestaande gebruiker bij in de database.
"""
Expand All @@ -34,6 +34,8 @@ class Meta:

def create(self, validated_data):
"""
Maakt een nieuwe gebruiker aan.
Args:
validated_data (dict): Gevalideerde gegevens over de gebruiker.
Expand All @@ -50,6 +52,8 @@ def create(self, validated_data):

def update(self, instance, validated_data):
"""
Werkt een bestaande gebruiker bij.
Args:
instance (Gebruiker): De gebruiker die moet worden bijgewerkt.
validated_data (dict): Gevalideerde gegevens over de gebruiker.
Expand Down
4 changes: 3 additions & 1 deletion api/serializers/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,9 @@ def create_groepen(instance):
except Exception:
pass
else:
for _ in range(len(instance.vak.studenten.all())//instance.max_groep_grootte + 1):
for _ in range(
len(instance.vak.studenten.all()) // instance.max_groep_grootte + 1
):
try:
serializer = GroepSerializer(
data={"studenten": [], "project": instance.project_id}
Expand Down
5 changes: 2 additions & 3 deletions api/serializers/template.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@

class TemplateSerializer(serializers.ModelSerializer):
"""
Serializer voor het serialiseren en deserialiseren van IndieningBestand objecten.
Serializer voor het serialiseren en deserialiseren van Template objecten.
Fields:
Meta.model (IndieningBestand): Het model waarop de serializer is gebaseerd.
Meta.model (Template): Het model waarop de serializer is gebaseerd.
Meta.fields (tuple): De velden die moeten worden opgenomen in de serializer. Hier worden alle velden opgenomen.
"""

class Meta:
Expand Down
6 changes: 5 additions & 1 deletion api/serializers/vak.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,11 @@ def add_students_to_group(instance):

else:
groepen = Groep.objects.filter(project=project.project_id)
nieuwe_groepen = len(instance.studenten.all())//project.max_groep_grootte + 1 - len(groepen)
nieuwe_groepen = (
len(instance.studenten.all()) // project.max_groep_grootte
+ 1
- len(groepen)
)
for _ in range(nieuwe_groepen):
try:
serializer = GroepSerializer(
Expand Down
6 changes: 5 additions & 1 deletion api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,11 @@
),
path("api/templates/", template_list, name="template_list"),
path("api/templates/<int:id>/", template_detail, name="template_detail"),
path("api/templates/<int:id>/template/", template_detail_bestand, name="template_detail_bestand")
path(
"api/templates/<int:id>/template/",
template_detail_bestand,
name="template_detail_bestand",
),
]

urlpatterns = format_suffix_patterns(urlpatterns)
8 changes: 7 additions & 1 deletion api/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"scores": "api/scores",
"projecten": "api/projecten",
"restricties": "api/restricties",
"templates": "api/templates"
"templates": "api/templates",
}


Expand Down Expand Up @@ -118,6 +118,12 @@ def get_gebruiker(user):


def send_indiening_confirmation_mail(indiening):
"""
Verstuurt een bevestigingsmail naar alle studenten in de groep voor een specifieke indiening.
Args:
indiening (Indiening): De indiening waarvoor de bevestigingsmail verstuurd moet worden.
"""
project = indiening.groep.project

project_url = f"https://sel2-4.ugent.be/course/{project.vak.vak_id}/assignment/{project.project_id}"
Expand Down
4 changes: 2 additions & 2 deletions api/views/template.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ def template_detail(request, id, format=None):
@api_view(["GET"])
def template_detail_bestand(request, id, format=None):
"""
Een view om het bestand van een specifieke tempalte te downloaden of de content in JSON-formaat te krijgen.
Een view om het bestand van een specifieke template te downloaden of de content in JSON-formaat te krijgen.
Args:
id (int): De primaire sleutel van de template.
Expand All @@ -118,4 +118,4 @@ def template_detail_bestand(request, id, format=None):
]:
return Response({"content": bestand.read()})
return FileResponse(bestand, as_attachment=True)
return Response(status=status.HTTP_403_FORBIDDEN)
return Response(status=status.HTTP_403_FORBIDDEN)

0 comments on commit 0d4116a

Please sign in to comment.