Pylint dix
This commit is contained in:
parent
2e22b04643
commit
dafcdd6377
19
.pylintrc
19
.pylintrc
|
@ -20,7 +20,7 @@ fail-on=
|
|||
fail-under=10.0
|
||||
|
||||
# Files or directories to be skipped. They should be base names, not paths.
|
||||
ignore=CVS
|
||||
ignore=CVS, tests.py, tests_tools.py, tests_models.py, tests_views.py, urls.py, migrations
|
||||
|
||||
# Add files or directories matching the regex patterns to the ignore-list. The
|
||||
# regex matches against paths and can be in Posix or Windows format.
|
||||
|
@ -80,20 +80,11 @@ confidence=
|
|||
# --enable=similarities". If you want to run only the classes checker, but have
|
||||
# no Warning level messages displayed, use "--disable=all --enable=classes
|
||||
# --disable=W".
|
||||
disable=raw-checker-failed,
|
||||
bad-inline-option,
|
||||
locally-disabled,
|
||||
file-ignored,
|
||||
suppressed-message,
|
||||
useless-suppression,
|
||||
deprecated-pragma,
|
||||
use-symbolic-message-instead,
|
||||
empty-docstring,
|
||||
disable=
|
||||
missing-class-docstring,
|
||||
missing-module-docstring,
|
||||
missing-function-docstring,
|
||||
consider-using-f-string,
|
||||
duplicate-code,
|
||||
unsupported-binary-operation,
|
||||
|
||||
# Enable the message, report, category or checker with the given id(s). You can
|
||||
# either give multiple identifier separated by comma (,) or put this option
|
||||
|
@ -571,5 +562,5 @@ preferred-modules=
|
|||
|
||||
# Exceptions that will emit a warning when being caught. Defaults to
|
||||
# "BaseException, Exception".
|
||||
overgeneral-exceptions=BaseException,
|
||||
Exception
|
||||
overgeneral-exceptions=builtins.BaseException,
|
||||
builtins.Exception
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from datetime import date
|
||||
from django.db import models
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.core.validators import MaxValueValidator, MinValueValidator
|
||||
from datetime import date
|
||||
|
||||
from jarvis.tools.models import Markdownizable, Seasonisable
|
||||
from jarvis.people.models import Gymnast, GENDER_CHOICES
|
||||
|
@ -175,7 +175,7 @@ class Chrono(Seasonisable):
|
|||
return f"{self.gymnast} - {self.score} ({self.date} - {self.chrono_type})"
|
||||
|
||||
def timeline_representation(self):
|
||||
return f"<li>{self.date:%d %b %Y} - New personel best {CHRONO_TYPE_CHOICE[self.chrono_type][1]}: {self.score}' ({self.tof}')</li>"
|
||||
return f"<li>{self.date:%d %b %Y} - New personel best {CHRONO_TYPE_CHOICE[self.chrono_type][1]}: {self.score}' ({self.tof}')</li>" # pylint: disable=line-too-long
|
||||
|
||||
@staticmethod
|
||||
def compute_tof(value):
|
||||
|
@ -246,7 +246,7 @@ class Injury(Markdownizable, Seasonisable):
|
|||
return f"{self.gymnast} ({self.date})"
|
||||
|
||||
def timeline_representation(self):
|
||||
return f"<li>{self.date:%d %b %Y} - Accident ({self.skill}): {self.nb_week_off} (weeks off)</li>"
|
||||
return f"<li>{self.date:%d %b %Y} - Accident ({self.skill}): {self.nb_week_off} (weeks off)</li>" # pylint: disable=line-too-long
|
||||
|
||||
|
||||
class LearnedSkill(Seasonisable):
|
||||
|
@ -281,7 +281,7 @@ class LearnedSkill(Seasonisable):
|
|||
return f"{self.gymnast} - {self.date} - {self.learning_step} - {self.skill}"
|
||||
|
||||
def timeline_representation(self):
|
||||
return f"<li>{self.date:%d %b %Y} - learning of {self.skill.long_label} ({self.skill.short_label}): {LEARNING_STEP_CHOICES[self.learning_step][1]}</li>"
|
||||
return f"<li>{self.date:%d %b %Y} - learning of {self.skill.long_label} ({self.skill.short_label}): {LEARNING_STEP_CHOICES[self.learning_step][1]}</li>" # pylint: disable=line-too-long
|
||||
|
||||
|
||||
class Plan(Seasonisable, Markdownizable):
|
||||
|
@ -398,7 +398,7 @@ class WellBeing(Markdownizable, Seasonisable):
|
|||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.gymnast} - {self.date} : {self.mindstate} | {self.sleep} | {self.stress} | {self.fatigue} | {self.muscle_soreness}"
|
||||
return f"{self.gymnast} - {self.date} : {self.mindstate} | {self.sleep} | {self.stress} | {self.fatigue} | {self.muscle_soreness}" # pylint: disable=line-too-long
|
||||
|
||||
@property
|
||||
def get_inversed_stress(self):
|
||||
|
@ -482,7 +482,7 @@ class NumberOfRoutineDone(Seasonisable):
|
|||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.gymnast} - {self.routine_type} ({self.routine}) : {self.number_of_try} | {self.number_of_successes}"
|
||||
return f"{self.gymnast} - {self.routine_type} ({self.routine}) : {self.number_of_try} | {self.number_of_successes}" # pylint: disable=line-too-long
|
||||
|
||||
|
||||
class HeightWeight(Seasonisable):
|
||||
|
@ -573,7 +573,7 @@ class Intensity(Markdownizable, Seasonisable):
|
|||
number_of_passes = models.PositiveSmallIntegerField()
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.gymnast} - {self.date} : {self.time} - {self.difficulty} - {self.quantity_of_skill} - {self.number_of_passes}"
|
||||
return f"{self.gymnast} - {self.date} : {self.time} - {self.difficulty} - {self.quantity_of_skill} - {self.number_of_passes}" # pylint: disable=line-too-long
|
||||
|
||||
@property
|
||||
def mean_time_by_passe(self):
|
||||
|
@ -616,7 +616,7 @@ class SeasonInformation(models.Model):
|
|||
verbose_name_plural = "Season Informations"
|
||||
unique_together = ("gymnast", "season")
|
||||
|
||||
CATEGORY_CHOICES_ARRAY = [(key, value) for key, value in CATEGORY_CHOICES.items()]
|
||||
CATEGORY_CHOICES_ARRAY = list(CATEGORY_CHOICES.items())
|
||||
|
||||
gymnast = models.ForeignKey(
|
||||
Gymnast, on_delete=models.CASCADE, related_name="season_informations"
|
||||
|
@ -648,7 +648,7 @@ class SeasonInformation(models.Model):
|
|||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.gymnast} - {self.season} : {self.number_of_training_sessions_per_week} - {self.number_of_hours_per_week} - {self.category} - {self.club}"
|
||||
return f"{self.gymnast} - {self.season} : {self.number_of_training_sessions_per_week} - {self.number_of_hours_per_week} - {self.category} - {self.club}" # pylint: disable=line-too-long
|
||||
|
||||
|
||||
class CompetitivePointsStats(Markdownizable, Seasonisable):
|
||||
|
@ -704,7 +704,7 @@ class CompetitivePointsStats(Markdownizable, Seasonisable):
|
|||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.age_category} - {self.gender} - {self.routine_type} : {self.total} ({self.statistic_type})"
|
||||
return f"{self.age_category} - {self.gender} - {self.routine_type} : {self.total} ({self.statistic_type})" # pylint: disable=line-too-long
|
||||
|
||||
|
||||
# class Stability(Seasonisable):
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
from datetime import date, datetime
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.views.decorators.http import require_http_methods
|
||||
|
@ -7,12 +8,15 @@ from django.urls import reverse
|
|||
from django.conf import settings
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
||||
from django.core.mail import send_mail
|
||||
|
||||
import pendulum
|
||||
|
||||
from jarvis.people.models import Gymnast
|
||||
from jarvis.planning.models import Event
|
||||
from jarvis.objective.models import Skill
|
||||
from jarvis.tools.date_week_transition import from_date_to_week_number
|
||||
from jarvis.tools.models import Season
|
||||
|
||||
from .models import (
|
||||
CHRONO_TYPE_CHOICE,
|
||||
|
@ -52,16 +56,6 @@ from .forms import (
|
|||
NumberOfRoutineDoneForm,
|
||||
)
|
||||
|
||||
from jarvis.tools.date_week_transition import (
|
||||
from_date_to_week_number,
|
||||
from_week_number_to_date,
|
||||
)
|
||||
|
||||
from jarvis.tools.models import Season
|
||||
|
||||
from datetime import date, datetime
|
||||
import pendulum
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
MAIL_HEADER = """
|
||||
|
@ -129,7 +123,8 @@ def jump_chrono_details(request, chrono_id):
|
|||
Args:
|
||||
chrono_id (int) identifiant chrono
|
||||
|
||||
QTF : Est-ce que je ne devrais pas faire un prefetch_related sur mon objet chrono pour optimiser mon affichage ?
|
||||
QTF : Est-ce que je ne devrais pas faire un prefetch_related sur mon objet chrono pour
|
||||
optimiser mon affichage ?
|
||||
chrono = Chrono.object.get(pk=chrono_id).prefetch_related('chrono_details') ?
|
||||
"""
|
||||
|
||||
|
@ -175,14 +170,8 @@ def average_jump_chrono_details_for_gymnast(
|
|||
season, week_number = from_date_to_week_number(today)
|
||||
else:
|
||||
season = Season(season).label
|
||||
|
||||
if week_number > 52:
|
||||
week_number = 52
|
||||
|
||||
if week_number < 1:
|
||||
week_number = 1
|
||||
|
||||
date_begin, date_end = from_week_number_to_date(season, week_number)
|
||||
week_number = min(week_number, 52)
|
||||
week_number = max(week_number, 1)
|
||||
|
||||
return average_jump_chrono_details_for_season_and_week(
|
||||
request,
|
||||
|
@ -225,8 +214,8 @@ def add_jump_chrono_value(request):
|
|||
|
||||
if created:
|
||||
return HttpResponse(200, (row, created)) # devrait être un 201
|
||||
else:
|
||||
return HttpResponse(400, (row, created))
|
||||
|
||||
return HttpResponse(400, (row, created))
|
||||
|
||||
|
||||
@login_required
|
||||
|
@ -264,7 +253,8 @@ def average_jump_chrono_details_between_two_date(
|
|||
date_begin (date) date de début
|
||||
date_end (date) date de fin
|
||||
|
||||
QTF : le cast en date devrait être dans un try mais comment gérer correctement l'erreur - si erreur il y a ?
|
||||
QTF : le cast en date devrait être dans un try mais comment gérer correctement l'erreur - si
|
||||
erreur il y a ?
|
||||
"""
|
||||
|
||||
if date_end:
|
||||
|
@ -582,14 +572,14 @@ def note_create_or_update(request, note_id=None, gymnast_id=None):
|
|||
return HttpResponseRedirect(
|
||||
reverse("gymnast_details_tab", args=(new_note.gymnast.id, "event"))
|
||||
)
|
||||
else:
|
||||
return render(request, "notes/create.html", {"form": form})
|
||||
else:
|
||||
last_note = (
|
||||
Note.objects.filter(gymnast=gymnast_id, status=1).order_by("-date").first()
|
||||
)
|
||||
if last_note:
|
||||
data["informations"] = last_note.informations
|
||||
|
||||
return render(request, "notes/create.html", {"form": form})
|
||||
|
||||
last_note = (
|
||||
Note.objects.filter(gymnast=gymnast_id, status=1).order_by("-date").first()
|
||||
)
|
||||
if last_note:
|
||||
data["informations"] = last_note.informations
|
||||
|
||||
form = NoteForm(instance=note, initial=data)
|
||||
context = {"form": form, "note_id": note_id}
|
||||
|
@ -658,8 +648,8 @@ def chrono_create_or_update(request, chrono_id=None, gymnast_id=None):
|
|||
return HttpResponseRedirect(
|
||||
reverse("gymnast_details_tab", args=(new_chrono.gymnast.id, "scores"))
|
||||
)
|
||||
else:
|
||||
return render(request, "chronos/create.html", {"form": form})
|
||||
|
||||
return render(request, "chronos/create.html", {"form": form})
|
||||
|
||||
form = ChronoForm(instance=chrono, initial=data)
|
||||
context = {"form": form, "chrono_id": chrono_id}
|
||||
|
@ -746,8 +736,8 @@ def learnedskill_create_or_update(request, gymnast_id=None):
|
|||
return HttpResponseRedirect(
|
||||
reverse("gymnast_details", args=(form.cleaned_data["gymnast"].id,))
|
||||
)
|
||||
else:
|
||||
render(request, "followup/learnedskills/create.html", {"form": form})
|
||||
|
||||
return render(request, "followup/learnedskills/create.html", {"form": form})
|
||||
|
||||
form = LearnedSkillForm(initial=data)
|
||||
context = {"form": form, "gymnast_id": gymnast_id}
|
||||
|
@ -824,8 +814,8 @@ def score_create_or_update(request, score_id=None, gymnast_id=None):
|
|||
args=(form.cleaned_data["gymnast"].id, "scores"),
|
||||
)
|
||||
)
|
||||
else:
|
||||
render(request, "followup/scores/create.html", {"form": form})
|
||||
|
||||
return render(request, "followup/scores/create.html", {"form": form})
|
||||
|
||||
form = ScoreForm(instance=score, initial=data)
|
||||
context = {"form": form, "score_id": score_id}
|
||||
|
@ -950,8 +940,8 @@ def injury_create_or_update(request, injury_id=None, gymnast_id=None):
|
|||
)
|
||||
|
||||
return HttpResponseRedirect(reverse("injury_details", args=(injury.pk,)))
|
||||
else:
|
||||
return render(request, "injuries/create.html", {"form": form})
|
||||
|
||||
return render(request, "injuries/create.html", {"form": form})
|
||||
|
||||
form = InjuryForm(instance=injury, initial=data)
|
||||
context = {"form": form, "injury_id": injury_id}
|
||||
|
@ -1063,8 +1053,8 @@ def wellbeing_create_or_update(
|
|||
return HttpResponseRedirect(
|
||||
reverse("wellbeing_details", args=(wellbeing.pk,))
|
||||
)
|
||||
else:
|
||||
return render(request, "wellbeing/create.html", {"form": form})
|
||||
|
||||
return render(request, "wellbeing/create.html", {"form": form})
|
||||
|
||||
form = WellBeingForm(instance=wellbeing, initial=data)
|
||||
context = {"form": form, "wellbeing_id": wellbeing_id}
|
||||
|
@ -1152,7 +1142,7 @@ def heightweight_create_or_update(request, heightweight_id=None, gymnast_id=None
|
|||
|
||||
send_mail(
|
||||
f"{gymnast} : Nouveau poids/taille enregistré",
|
||||
f"Un nouveau poids/taille enregistré pour {gymnast} ({date}) : {height} cm / {weight} kg (BMI: {bmi}).",
|
||||
f"Un nouveau poids/taille enregistré pour {gymnast} ({date}) : {height} cm / {weight} kg (BMI: {bmi}).", # pylint: disable=line-too-long
|
||||
settings.EMAIL_HOST_USER,
|
||||
receiver,
|
||||
fail_silently=False,
|
||||
|
@ -1172,9 +1162,8 @@ def heightweight_create_or_update(request, heightweight_id=None, gymnast_id=None
|
|||
args=(form.cleaned_data["gymnast"].id, "physiological"),
|
||||
)
|
||||
)
|
||||
else:
|
||||
print(form.errors)
|
||||
return render(request, "heightweight/create.html", {"form": form})
|
||||
|
||||
return render(request, "heightweight/create.html", {"form": form})
|
||||
|
||||
form = HeightWeightForm(instance=heightweight, initial=data)
|
||||
context = {
|
||||
|
@ -1239,8 +1228,8 @@ def increment_routinedone(request):
|
|||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponse(status=200)
|
||||
else:
|
||||
return HttpResponse(status=406)
|
||||
|
||||
return HttpResponse(status=406)
|
||||
|
||||
|
||||
@login_required
|
||||
|
@ -1312,8 +1301,8 @@ def routinedone_create_or_update(request, routinedone_id=None, gymnast_id=None):
|
|||
args=(form.cleaned_data["gymnast"].id, "routine"),
|
||||
)
|
||||
)
|
||||
else:
|
||||
return render(request, "routinedone/create.html", {"form": form})
|
||||
|
||||
return render(request, "routinedone/create.html", {"form": form})
|
||||
|
||||
form = NumberOfRoutineDoneForm(instance=routinedone, initial=data)
|
||||
context = {"form": form, "routinedone_id": routinedone_id}
|
||||
|
@ -1385,8 +1374,8 @@ def plan_create_or_update(request, plan_id=None, gymnast_id=None, skill_id=None)
|
|||
return HttpResponseRedirect(
|
||||
reverse("gymnast_details", args=(form.cleaned_data["gymnast"].id,))
|
||||
)
|
||||
else:
|
||||
return render(request, "plan/create.html", {"form": form})
|
||||
|
||||
return render(request, "plan/create.html", {"form": form})
|
||||
|
||||
form = PlanForm(instance=plan, initial=data)
|
||||
context = {"form": form, "plan_id": plan_id}
|
||||
|
@ -1517,8 +1506,8 @@ def intensity_create_or_update(request, intensity_id=None, gymnast_id=None):
|
|||
args=(form.cleaned_data["gymnast"].id, "routine"),
|
||||
)
|
||||
)
|
||||
else:
|
||||
return render(request, "intensities/create.html", {"form": form})
|
||||
|
||||
return render(request, "intensities/create.html", {"form": form})
|
||||
|
||||
form = IntensityForm(instance=intensity, initial=data)
|
||||
context = {"form": form, "intensity_id": intensity_id}
|
||||
|
@ -1588,8 +1577,8 @@ def season_information_create_or_update(
|
|||
args=(form.cleaned_data["gymnast"].id,),
|
||||
)
|
||||
)
|
||||
else:
|
||||
return render(request, "seasoninformations/create.html", {"form": form})
|
||||
|
||||
return render(request, "seasoninformations/create.html", {"form": form})
|
||||
|
||||
form = SeasonInformationForm(instance=season_information, initial=data)
|
||||
context = {"form": form, "season_information_id": season_information_id}
|
||||
|
|
|
@ -45,7 +45,7 @@ class Place(models.Model):
|
|||
is_active = models.BooleanField(default=1, verbose_name="Active")
|
||||
|
||||
def __str__(self):
|
||||
return "%s (%s)" % (self.name, self.city if self.city else "?")
|
||||
return f"{self.name} ({self.city})"
|
||||
|
||||
|
||||
class Club(models.Model):
|
||||
|
@ -70,4 +70,4 @@ class Club(models.Model):
|
|||
is_active = models.BooleanField(default=1, verbose_name="Active")
|
||||
|
||||
def __str__(self):
|
||||
return "%s (%s)" % (self.name, self.place.city if self.place.city else "?")
|
||||
return f"{self.name} ({self.place.city})"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from django.test import TestCase
|
||||
from django.urls import reverse, resolve
|
||||
from django.urls import resolve
|
||||
|
||||
|
||||
class URLTestCase(TestCase):
|
||||
|
|
|
@ -96,8 +96,8 @@ def place_create_or_update(request, place_id=None):
|
|||
if form.is_valid():
|
||||
place = form.save()
|
||||
return HttpResponseRedirect(reverse("place_details", args=(place.pk,)))
|
||||
else:
|
||||
return render(request, "places/create.html", {"form": form})
|
||||
|
||||
return render(request, "places/create.html", {"form": form})
|
||||
|
||||
form = PlaceForm(instance=place, initial=data)
|
||||
context = {"form": form, "place_id": place_id}
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# from django_extensions.admin import ForeignKeyAutocompleteAdmin
|
||||
|
||||
from django_admin_listfilter_dropdown.filters import (
|
||||
DropdownFilter,
|
||||
ChoiceDropdownFilter,
|
||||
RelatedDropdownFilter,
|
||||
)
|
||||
|
||||
|
|
|
@ -104,13 +104,15 @@ class Educative(Markdownizable):
|
|||
def __str__(self):
|
||||
return f"{self.long_label} ({self.short_label} - {self.difficulty})"
|
||||
|
||||
def breadcrumb(self, path=[]):
|
||||
def breadcrumb(self, path=None):
|
||||
"""
|
||||
Renvoie le breadcrumb pour l'édutatif courant.
|
||||
Exemple :
|
||||
>>> s = Skill.objects.get(pk=44)
|
||||
>>> s.breadcrumb()
|
||||
"""
|
||||
if path is None:
|
||||
path = []
|
||||
|
||||
path = [self] + path
|
||||
if self.prerequisites.all().count() == 0:
|
||||
|
@ -145,7 +147,7 @@ class PrerequisiteClosure(models.Model):
|
|||
path = models.PositiveIntegerField()
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.ancestor.long_label} -> {self.descendant.long_label} ({self.level}|{self.path})"
|
||||
return f"""{self.ancestor.long_label} -> {self.descendant.long_label} ({self.level}|{self.path})""" # pylint: disable=line-too-long
|
||||
|
||||
|
||||
class TouchPosition(models.Model):
|
||||
|
@ -273,8 +275,8 @@ class Routine(Educative):
|
|||
- la difficulté
|
||||
- si c'est une routine (série)
|
||||
- si c'est une routine (série) de compétition
|
||||
A chaque fois qu'on le peut, on garde les informations entrées par les utilisateurs néanmoins on vérifie qu'il
|
||||
n'a pas encodé n'importe quoi.
|
||||
A chaque fois qu'on le peut, on garde les informations entrées par les utilisateurs
|
||||
néanmoins on vérifie qu'il n'a pas encodé n'importe quoi.
|
||||
"""
|
||||
rank = 0
|
||||
level = 0
|
||||
|
|
|
@ -42,7 +42,12 @@ class EducativeTestCase(TestCase):
|
|||
)
|
||||
educ_7.prerequisites.add(educ_6)
|
||||
educ_7.prerequisites.add(educ_1)
|
||||
# educ_8 = Educative.objects.create(long_label="3/4 Avant vrille", difficulty=0.5, level=1, rank=1)
|
||||
# educ_8 = Educative.objects.create(
|
||||
# long_label="3/4 Avant vrille",
|
||||
# difficulty=0.5,
|
||||
# level=1,
|
||||
# rank=1
|
||||
# )
|
||||
# educ_8.prerequisites.add(educ_6)
|
||||
# educ_8.prerequisites.add(educ_2)
|
||||
educ_9 = Educative.objects.create(
|
||||
|
|
|
@ -10,19 +10,19 @@ from jarvis.objective.models import (
|
|||
|
||||
class ToolsModels(TestCase):
|
||||
def setUp(self):
|
||||
""" """
|
||||
"""Set up des variables pour les test."""
|
||||
touch_position_1 = TouchPosition.objects.create(
|
||||
long_label="debout", short_label="debout", is_default=True
|
||||
)
|
||||
touch_position_2 = TouchPosition.objects.create(
|
||||
long_label="quadrupédique", short_label="4 patte", is_default=False
|
||||
)
|
||||
educ_1 = Educative.objects.create(
|
||||
long_label="1/2 vrille", short_label="1/2T", difficulty=0.1, level=1, rank=1
|
||||
)
|
||||
educ_3 = Educative.objects.create(
|
||||
long_label="4 pattes", short_label="4P", difficulty=0.1, level=1, rank=1
|
||||
)
|
||||
# touch_position_2 = TouchPosition.objects.create(
|
||||
# long_label="quadrupédique", short_label="4 patte", is_default=False
|
||||
# )
|
||||
# educ_1 = Educative.objects.create(
|
||||
# long_label="1/2 vrille", short_label="1/2T", difficulty=0.1, level=1, rank=1
|
||||
# )
|
||||
# educ_3 = Educative.objects.create(
|
||||
# long_label="4 pattes", short_label="4P", difficulty=0.1, level=1, rank=1
|
||||
# )
|
||||
skill_1 = Skill.objects.create(
|
||||
long_label="Salto arrière groupé",
|
||||
short_label="Arrière o",
|
||||
|
@ -34,29 +34,29 @@ class ToolsModels(TestCase):
|
|||
landing=touch_position_1,
|
||||
difficulty=0.5,
|
||||
)
|
||||
skill_2 = Skill.objects.create(
|
||||
long_label="Barani groupé",
|
||||
short_label="Barani o",
|
||||
rotation_type=2,
|
||||
notation=".41o",
|
||||
rotation=4,
|
||||
twist=1,
|
||||
departure=touch_position_1,
|
||||
landing=touch_position_1,
|
||||
difficulty=0.5,
|
||||
)
|
||||
# skill_2 = Skill.objects.create(
|
||||
# long_label="Barani groupé",
|
||||
# short_label="Barani o",
|
||||
# rotation_type=2,
|
||||
# notation=".41o",
|
||||
# rotation=4,
|
||||
# twist=1,
|
||||
# departure=touch_position_1,
|
||||
# landing=touch_position_1,
|
||||
# difficulty=0.5,
|
||||
# )
|
||||
routine_1 = Routine.objects.create(
|
||||
long_label="BOT Bronze",
|
||||
short_label="Bronze",
|
||||
is_active=True,
|
||||
is_competitive=True,
|
||||
)
|
||||
routine_skill_1 = RoutineSkill.objects.create(
|
||||
routine=routine_1, skill=skill_1, rank=1
|
||||
)
|
||||
routine_skill_1 = RoutineSkill.objects.create(
|
||||
routine=routine_1, skill=skill_2, rank=2
|
||||
)
|
||||
# routine_skill_1 = RoutineSkill.objects.create(
|
||||
# routine=routine_1, skill=skill_1, rank=1
|
||||
# )
|
||||
# routine_skill_1 = RoutineSkill.objects.create(
|
||||
# routine=routine_1, skill=skill_2, rank=2
|
||||
# )
|
||||
|
||||
def test_touch_position_to_string(self):
|
||||
touch_position = TouchPosition.objects.get(long_label="debout")
|
||||
|
|
|
@ -17,9 +17,9 @@ def nb_skill_by_type(max_value, desired_type="level"):
|
|||
Example:
|
||||
>>> from jarvis.objective.tools import nb_skill_by_type
|
||||
>>> nb_skill_by_type(2)
|
||||
<QuerySet [{'level': 0, 'nb_skill': 23}, {'level': 1, 'nb_skill': 20}, {'level': 2, 'nb_skill': 19}]>
|
||||
<QuerySet [{'level': 0, 'nb_skill': 23}, {'level': 1, 'nb_skill': 20}, {'level': 2, 'nb_skill': 19}]> # pylint: disable=line-too-long
|
||||
"""
|
||||
if desired_type != "level" and desired_type != "rank":
|
||||
if desired_type not in ("level", "rank"):
|
||||
return None
|
||||
|
||||
nb_skill_by_level = (
|
||||
|
@ -48,7 +48,7 @@ def nb_skill_lte_type(max_value, desired_type="level"):
|
|||
>>> nb_skill_lte_type(2)
|
||||
62
|
||||
"""
|
||||
if desired_type != "level" and desired_type != "rank":
|
||||
if desired_type not in ("level", "rank"):
|
||||
return None
|
||||
|
||||
if desired_type == "level":
|
||||
|
@ -79,7 +79,7 @@ def compute_completude(total_skill, gymnast_nb_known_skills, max_level_skill):
|
|||
"""
|
||||
if total_skill:
|
||||
percentage = gymnast_nb_known_skills / total_skill
|
||||
completude = "%s%%" % (int(percentage * 100))
|
||||
completude = f"{int(percentage * 100)}%"
|
||||
evaluated_level = int(max_level_skill * percentage)
|
||||
else:
|
||||
completude = None
|
||||
|
@ -125,7 +125,7 @@ def compute_statistics_by_type(
|
|||
[(1, 5, 2, 40), (2, 5, 4, 80), …]
|
||||
"""
|
||||
|
||||
if desired_type != "level" and desired_type != "rank":
|
||||
if desired_type not in ("level", "rank"):
|
||||
return None
|
||||
|
||||
j = 0
|
||||
|
|
|
@ -24,7 +24,8 @@ from .models import (
|
|||
@require_http_methods(["POST"])
|
||||
def skill_lookup(request):
|
||||
"""
|
||||
Récupère la liste des skill à la volée suivant des caractères de recherche entrés. (min 3 caractères)
|
||||
Récupère la liste des skill à la volée suivant des caractères de recherche entrés (min 3
|
||||
caractères).
|
||||
"""
|
||||
results = []
|
||||
pattern = request.POST.get("pattern", None)
|
||||
|
@ -77,7 +78,7 @@ def skill_listing(request, field=None, expression=None, value=None, level=None):
|
|||
Q(long_label__icontains=pattern) | Q(short_label__icontains=pattern)
|
||||
)
|
||||
elif field and expression and value:
|
||||
kwargs = {"{0}__{1}".format(field, expression): value}
|
||||
kwargs = {f"{field}__{expression}": value}
|
||||
skill_list = Skill.objects.filter(**kwargs)
|
||||
elif level is not None:
|
||||
skill_list = Skill.objects.filter(level=level)
|
||||
|
@ -149,12 +150,12 @@ def skill_details(request, skill_id):
|
|||
|
||||
skill.save()
|
||||
|
||||
# Je sépare les educatifs de type "skill" et les éducatifs de type "combination" pour mieux gérer l'affichage
|
||||
# Du code bien dégueulasse !
|
||||
# Je sépare les educatifs de type "skill" et les éducatifs de type "combination" pour mieux
|
||||
# gérer l'affichage. Du code bien dégueulasse !
|
||||
# QTF : une idée pour faire ca de manière plus propre, plus élégante ?
|
||||
combination_dict = {}
|
||||
educative_skill = skill.educatives.filter(id__in=(Skill.objects.all()))
|
||||
for educative in skill.educatives.filter(id__in=(Routine.objects.all())):
|
||||
educative_skill = skill.educatives.filter(id__in=Skill.objects.all())
|
||||
for educative in skill.educatives.filter(id__in=Routine.objects.all()):
|
||||
combination = Routine.objects.get(pk=educative.id)
|
||||
combination_dict[combination] = []
|
||||
for educ_skill in combination.routine.skill_links.all():
|
||||
|
@ -188,8 +189,7 @@ def skill_create_or_update(request, skill_id=None):
|
|||
if form.is_valid():
|
||||
skill = form.save()
|
||||
return HttpResponseRedirect(reverse("skill_details", args=(skill.pk,)))
|
||||
else:
|
||||
return render(request, "skill/create.html", {"form": form})
|
||||
return render(request, "skill/create.html", {"form": form})
|
||||
|
||||
form = SkillForm(instance=skill)
|
||||
context = {"form": form, "skill_id": skill_id}
|
||||
|
@ -199,7 +199,8 @@ def skill_create_or_update(request, skill_id=None):
|
|||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def competition_routine_listing(request, gymnast_id=None):
|
||||
"""Récupère la liste des routines (séries) de compétition suivant un pattern si celui-ci est défini
|
||||
"""Récupère la liste des routines (séries) de compétition suivant un pattern si celui-ci est
|
||||
défini.
|
||||
|
||||
Args:
|
||||
gymnast_id (int) identifiant de la classe Gymnast
|
||||
|
@ -379,13 +380,14 @@ def combination_create_or_update(request, combination_id=None):
|
|||
combination = form.save()
|
||||
# ici faire un FOR skill in form_skills_list:
|
||||
# record.save() # ca sauve le record dans la table RoutineSkill
|
||||
# something like this : http://stackoverflow.com/questions/3074938/django-m2m-form-save-through-table
|
||||
# something like this :
|
||||
# http://stackoverflow.com/questions/3074938/django-m2m-form-save-through-table
|
||||
# QTF : can you help me ?
|
||||
return HttpResponseRedirect(
|
||||
reverse("combination_details", args=(combination.pk,))
|
||||
)
|
||||
else:
|
||||
return render(request, "combinations/create.html", {"form": form})
|
||||
|
||||
return render(request, "combinations/create.html", {"form": form})
|
||||
|
||||
form = CombinationForm(instance=combination)
|
||||
context = {"form": form, "combination_id": combination_id}
|
||||
|
@ -436,8 +438,8 @@ def link_skill_to_combination(request):
|
|||
rank=form.cleaned_data["rank"],
|
||||
)
|
||||
return HttpResponse(200, (link, created))
|
||||
else:
|
||||
return HttpResponse(406)
|
||||
|
||||
return HttpResponse(406)
|
||||
|
||||
|
||||
@require_http_methods(["POST"])
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
""" Modelisation des gymnastes """
|
||||
|
||||
from datetime import date
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.db.models import Count
|
||||
from django.db import models
|
||||
|
||||
from datetime import date
|
||||
import pendulum
|
||||
|
||||
from jarvis.objective.models import Skill
|
||||
|
@ -121,7 +120,7 @@ class Gymnast(Markdownizable):
|
|||
>>> gymnast.skill_max_for_type("rank")
|
||||
19
|
||||
"""
|
||||
if desired_type != "level" and desired_type != "rank":
|
||||
if desired_type not in ("level", "rank"):
|
||||
return None
|
||||
|
||||
tmp = (
|
||||
|
@ -155,7 +154,7 @@ class Gymnast(Markdownizable):
|
|||
>>> gymnast.nb_known_skill_by_type("rank")
|
||||
<QuerySet [{'rank': 1, 'nb_known_skill': 2}, {'rank': 2, 'nb_known_skill': 4}, …]>
|
||||
"""
|
||||
if desired_type != "level" and desired_type != "rank":
|
||||
if desired_type not in ("level", "rank"):
|
||||
return None
|
||||
|
||||
nb_known_skill_by_type = (
|
||||
|
@ -237,7 +236,7 @@ class Gymnast(Markdownizable):
|
|||
on va chercher tous les Skill qui existent et on les compte.
|
||||
|
||||
"""
|
||||
if desired_type != "level" and desired_type != "rank":
|
||||
if desired_type not in ("level", "rank"):
|
||||
return None
|
||||
|
||||
context = {}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from django.test import TestCase
|
||||
# from django.test import TestCase
|
||||
|
||||
# from django.urls import reverse, resolve
|
||||
# from jarvis.profiles.views import profile_update
|
||||
|
|
|
@ -101,11 +101,6 @@ gymnast_urlpatterns = [
|
|||
views.generate_timeline_report,
|
||||
name="gymnast_timeline_export_from_date",
|
||||
),
|
||||
path(
|
||||
r"report/evaluation/<int:gymnast_id>/",
|
||||
views.gymnast_report_evaluation,
|
||||
name="gymnast_report_evaluation",
|
||||
),
|
||||
# path(
|
||||
# r"resume/<int:gymnast_id>/season/<str:season>/week_number/<int:week_number>/",
|
||||
# views.generate_week_resume,
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
from datetime import date
|
||||
from statistics import mean
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.models import Group
|
||||
from django.contrib.auth import get_user_model
|
||||
|
@ -24,8 +26,7 @@ from weasyprint import HTML, CSS
|
|||
# from weasyprint.fonts import FontConfiguration
|
||||
|
||||
import pendulum
|
||||
from datetime import date
|
||||
from statistics import mean
|
||||
|
||||
|
||||
from jarvis.followup.models import Event
|
||||
from jarvis.followup.forms import GymnastHasRoutineForm
|
||||
|
@ -97,9 +98,9 @@ def gymnast_listing(request):
|
|||
).select_related("gymnast")
|
||||
context = {"season_information_list": season_information_list}
|
||||
return render(request, "gymnasts/list.html", context)
|
||||
else:
|
||||
gymnast = Gymnast.objects.get(user=request.user) # a mettre dans un TRY
|
||||
return gymnast_details(request, gymnast.id)
|
||||
|
||||
gymnast = Gymnast.objects.get(user=request.user) # a mettre dans un TRY
|
||||
return gymnast_details(request, gymnast.id)
|
||||
|
||||
|
||||
@login_required
|
||||
|
@ -199,48 +200,6 @@ def gymnast_report_list(request, gymnast_id):
|
|||
return render(request, "gymnasts/tabs/tab_documents.html", context)
|
||||
|
||||
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def gymnast_report_evaluation(request, gymnast_id):
|
||||
""" """
|
||||
context = {
|
||||
"SITE_TITLE": settings.SITE_TITLE,
|
||||
"CLUB_NAME": settings.CLUB_NAME,
|
||||
"ADDRESS": settings.ADDRESS,
|
||||
"CITY": settings.CITY,
|
||||
"ZIP": settings.ZIP,
|
||||
"HEAD_COACH": settings.HEAD_COACH,
|
||||
"MOBILE_PHONE": settings.MOBILE_PHONE,
|
||||
"HEAD_COACH_EMAIL": settings.HEAD_COACH_EMAIL,
|
||||
# "week_number": week_number,
|
||||
# "gymnast": gymnast,
|
||||
# "today": date_begin,
|
||||
# "season": season,
|
||||
# "sorted_records": sorted_records,
|
||||
}
|
||||
return render(request, "gymnasts/reports/report_evaluation.html", context)
|
||||
# response = HttpResponse(content_type="application/pdf")
|
||||
# response[
|
||||
# "Content-Disposition"
|
||||
# ] = "attachment; filename={lastname}-{firstname}-report-timeline.pdf".format(
|
||||
# lastname=gymnast.last_name,
|
||||
# firstname=gymnast.first_name,
|
||||
# )
|
||||
|
||||
# html = render_to_string("people/gymnasts/reports/report_timeline.html", context)
|
||||
|
||||
# # font_config = FontConfiguration()
|
||||
# HTML(string=html, base_url=request.build_absolute_uri()).write_pdf(
|
||||
# response,
|
||||
# stylesheets=[
|
||||
# CSS(settings.STATICFILES_DIRS[0] + "/css/gymnast_report.css"),
|
||||
# CSS(settings.STATICFILES_DIRS[0] + "/css/black-dashboard_report.css"),
|
||||
# CSS(settings.STATICFILES_DIRS[0] + "/css/font_awesome_all_5.15.3.css"),
|
||||
# ],
|
||||
# ) # , font_config=font_config)
|
||||
# return response
|
||||
|
||||
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def gymnast_display_events_and_notes(request, gymnast_id):
|
||||
|
@ -507,10 +466,8 @@ def gymnast_create_or_update(request, gymnast_id=None):
|
|||
# user.set_password(gymnast.last_name.lower() + _ + str(gymnast.birthdate)[-2:])
|
||||
|
||||
return HttpResponseRedirect(reverse("gymnast_details", args=(gymnast.pk,)))
|
||||
else:
|
||||
return render(
|
||||
request, "people/gymnasts/create.html", {"form": gymnast_form}
|
||||
)
|
||||
|
||||
return render(request, "people/gymnasts/create.html", {"form": gymnast_form})
|
||||
|
||||
form = GymnastForm(instance=gymnast)
|
||||
context = {"form": form, "gymnast_id": gymnast_id}
|
||||
|
@ -546,7 +503,7 @@ def gymnast_display_skill(request, gymnast_id):
|
|||
context.update(gymnast.get_informations_from_type("rank"))
|
||||
|
||||
planned_skill = (
|
||||
Plan.objects.filter(gymnast=gymnast.id, educative__in=(Skill.objects.all()))
|
||||
Plan.objects.filter(gymnast=gymnast.id, educative__in=Skill.objects.all())
|
||||
.select_related("educative", "educative__skill")
|
||||
.order_by("-date", "educative__long_label")
|
||||
)
|
||||
|
@ -571,11 +528,11 @@ def gymnast_display_skill(request, gymnast_id):
|
|||
|
||||
# skill_learned_by_phase = [[]] * 5
|
||||
# print(skill_learned_by_phase)
|
||||
confused_skill = list()
|
||||
skill_whith_help = list()
|
||||
skill_without_help = list()
|
||||
skill_chained = list()
|
||||
skill_masterised = list()
|
||||
confused_skill = []
|
||||
skill_whith_help = []
|
||||
skill_without_help = []
|
||||
skill_chained = []
|
||||
skill_masterised = []
|
||||
for learned_skill in learned_skills:
|
||||
# print('Add skill for ' + str(learned_skill.learning_step) + ' phase')
|
||||
# skill_learned_by_phase[learned_skill.learning_step].append(learned_skill.skill)
|
||||
|
@ -840,7 +797,7 @@ def report_choice(request, gymnast_id):
|
|||
|
||||
|
||||
def __mindstate_analyse(gymnast, date_begin, date_end, period, mindstate_score):
|
||||
""" """
|
||||
"""Analyse de l'état d'esprit entre deux dates."""
|
||||
previous_period_date_end = date_begin
|
||||
if period == "week":
|
||||
period_length = 7
|
||||
|
@ -872,7 +829,7 @@ def __mindstate_analyse(gymnast, date_begin, date_end, period, mindstate_score):
|
|||
|
||||
|
||||
def __height_analyse(gymnast, date_begin, date_end, period, height_score):
|
||||
""" """
|
||||
"""Analyse de la taille du gymnaste entre deux dates."""
|
||||
previous_period_date_end = date_begin
|
||||
if period == "week":
|
||||
period_length = 7
|
||||
|
@ -905,7 +862,7 @@ def __height_analyse(gymnast, date_begin, date_end, period, height_score):
|
|||
|
||||
|
||||
def __weight_analyse(gymnast, date_begin, date_end, period, weight_score):
|
||||
""" """
|
||||
"""Analyse du poids du gymnaste entre deux dates."""
|
||||
previous_period_date_end = date_begin
|
||||
if period == "week":
|
||||
period_length = 7
|
||||
|
@ -1196,7 +1153,7 @@ def generate_report_for_period(
|
|||
|
||||
# PLANNED SKILLS
|
||||
plan_list = (
|
||||
Plan.objects.filter(gymnast=gymnast, educative__in=(Skill.objects.all()))
|
||||
Plan.objects.filter(gymnast=gymnast, educative__in=Skill.objects.all())
|
||||
.filter(Q(is_done=False) | Q(date__gte=date.today()))
|
||||
.order_by("date")
|
||||
.distinct()[:6]
|
||||
|
@ -1284,7 +1241,7 @@ def generate_report_for_period(
|
|||
response = HttpResponse(content_type="application/pdf")
|
||||
response[
|
||||
"Content-Disposition"
|
||||
] = f"attachment; filename={gymnast.last_name}_{gymnast.first_name}_{period}-report_{date_begin}_{date_end}.pdf"
|
||||
] = f"attachment; filename={gymnast.last_name}_{gymnast.first_name}_{period}-report_{date_begin}_{date_end}.pdf" # pylint: disable=line-too-long
|
||||
|
||||
html = render_to_string("gymnasts/reports/report_periodical.html", context)
|
||||
|
||||
|
@ -1524,5 +1481,5 @@ def generate_timeline_report(
|
|||
# date_begin = date_begin.date()
|
||||
|
||||
# wellbeing_list = gymnast.wellbeing.objects.filter(season="season", week_number="week_number")
|
||||
# intensity_list = gymnast.intensities.objects.filter(season="season", week_number="week_number")
|
||||
# intensity_list = gymnast.intensities.objects.filter(season="season", week_number="week_number") # pylint: disable=line-too-long
|
||||
# injury_list = gymnast.injuries.filter(season="season", week_number="week_number")
|
||||
|
|
|
@ -90,7 +90,7 @@ class Event(Markdownizable, Temporizable):
|
|||
|
||||
|
||||
class EventParticipation(models.Model):
|
||||
""" """
|
||||
"""Classe représentant la participation à un évènement."""
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Event Participation"
|
||||
|
|
|
@ -56,8 +56,8 @@ def event_create_or_update(request, event_id=None):
|
|||
if form.is_valid():
|
||||
event = form.save()
|
||||
return HttpResponseRedirect(reverse("event_details", args=(event.pk,)))
|
||||
else:
|
||||
return render(request, "objectives/routines/create.html", {"form": form})
|
||||
|
||||
return render(request, "objectives/routines/create.html", {"form": form})
|
||||
|
||||
form = EventForm(instance=event, initial=data)
|
||||
context = {"form": form, "event_id": event_id}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.contrib import admin
|
||||
from .models import Profile, Notification
|
||||
from django_admin_listfilter_dropdown.filters import RelatedDropdownFilter
|
||||
from .models import Profile, Notification
|
||||
|
||||
|
||||
class ProfileAdmin(admin.ModelAdmin):
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from django.test import TestCase
|
||||
from django.urls import reverse, resolve
|
||||
from django.urls import resolve
|
||||
|
||||
# from jarvis.profiles.views import profile_update
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
from django.test import RequestFactory, TestCase, Client
|
||||
from django.urls import reverse, resolve
|
||||
from django.contrib.auth.models import User, AnonymousUser
|
||||
|
||||
# from django.urls import reverse, resolve
|
||||
from jarvis.profiles.views import profile_update
|
||||
from django.contrib.auth.models import AnonymousUser, User
|
||||
|
||||
|
||||
class ViewsTestCase(TestCase):
|
||||
|
|
|
@ -8,9 +8,9 @@ from django.shortcuts import render, get_object_or_404
|
|||
from django.views.decorators.http import require_http_methods
|
||||
from django.urls import reverse
|
||||
|
||||
from jarvis.people.models import Gymnast
|
||||
from .forms import ProfileForm
|
||||
from .models import Profile, Notification
|
||||
from jarvis.people.models import Gymnast
|
||||
|
||||
|
||||
User = get_user_model()
|
||||
|
@ -85,8 +85,8 @@ def notification_add(request):
|
|||
|
||||
if created:
|
||||
return HttpResponse(200, (row, created)) # devrait être un 201
|
||||
else:
|
||||
return HttpResponse(400, (row, created))
|
||||
|
||||
return HttpResponse(400, (row, created))
|
||||
|
||||
|
||||
@require_http_methods(["POST"])
|
||||
|
|
|
@ -82,7 +82,7 @@ def from_month_number_to_date(season, month_number):
|
|||
|
||||
dash = season.find("-")
|
||||
|
||||
if month_number >= 1 and month_number <= 8:
|
||||
if 8 >= month_number >= 1: # and month_number <= 8:
|
||||
year = int(season[dash + 1 :])
|
||||
else:
|
||||
year = int(season[:dash])
|
||||
|
@ -208,7 +208,8 @@ def get_number_of_weeks_between(first_date, second_date):
|
|||
|
||||
if first_date.year == second.year:
|
||||
return second.week_of_year - first.week_of_year
|
||||
elif second_date.year > first_date.year:
|
||||
|
||||
if second_date.year > first_date.year:
|
||||
return (52 - first.week_of_year) + second.week_of_year
|
||||
else:
|
||||
return (52 - second.week_of_year) + first.week_of_year
|
||||
|
||||
return (52 - second.week_of_year) + first.week_of_year
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
"""Ensemble des classes d'utilité publique :-)"""
|
||||
import re
|
||||
import markdown
|
||||
import pendulum
|
||||
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
|
@ -7,9 +10,6 @@ from .date_week_transition import (
|
|||
get_number_of_weeks_between,
|
||||
from_date_to_week_number,
|
||||
)
|
||||
import markdown
|
||||
import pendulum
|
||||
import re
|
||||
|
||||
|
||||
class Season:
|
||||
|
@ -78,7 +78,7 @@ def get_default_date():
|
|||
|
||||
|
||||
class Seasonisable(models.Model):
|
||||
""" """
|
||||
"""Classe abstraite définissant des champs commun à tout ce qui est relatif à une saison."""
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
@ -224,11 +224,11 @@ def max_even_if_none(value_1, value_2):
|
|||
if value_1 is not None and value_2 is not None:
|
||||
if value_1 > value_2:
|
||||
return value_1
|
||||
else:
|
||||
return value_2
|
||||
elif value_1 is not None:
|
||||
return value_1
|
||||
elif value_2 is not None:
|
||||
return value_2
|
||||
else:
|
||||
return 0
|
||||
|
||||
if value_1 is not None:
|
||||
return value_1
|
||||
|
||||
if value_2 is not None:
|
||||
return value_2
|
||||
return 0
|
||||
|
|
|
@ -12,8 +12,10 @@ def submenuitem(context, url, minititle, title):
|
|||
# css_class = "" + css_class
|
||||
|
||||
return format_html(
|
||||
'<li><a href="{}"><span class="sidebar-mini-icon">{}</span><span class="sidebar-normal">{}</span></a></li>',
|
||||
url,
|
||||
minititle,
|
||||
title,
|
||||
f"""<li>
|
||||
<a href="{url}">
|
||||
<span class="sidebar-mini-icon">{minititle}</span>
|
||||
<span class="sidebar-normal">{title}</span>
|
||||
</a>
|
||||
</li>"""
|
||||
)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
""" Test du module date_week_transition """
|
||||
|
||||
from django.test import TestCase
|
||||
from datetime import datetime
|
||||
import pendulum
|
||||
from django.test import TestCase
|
||||
import pytz
|
||||
|
||||
from jarvis.tools.date_week_transition import (
|
||||
|
@ -10,12 +10,10 @@ from jarvis.tools.date_week_transition import (
|
|||
get_number_of_weeks_between,
|
||||
)
|
||||
|
||||
import pendulum
|
||||
|
||||
|
||||
class FunctionTestCase(TestCase):
|
||||
def test_from_week_number_to_date(self):
|
||||
timezone = pytz.timezone("UTC")
|
||||
# timezone = pytz.timezone("UTC")
|
||||
|
||||
start_date = datetime(2022, 10, 3, 0, 0, 0, tzinfo=pytz.UTC)
|
||||
end_date = datetime(2022, 10, 9, 0, 0, 0, tzinfo=pytz.UTC)
|
||||
|
|
Loading…
Reference in New Issue