mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-22 14:13:21 +00:00
Merge pull request #691 from ae-utbm/update-django
Update django (3.2 => 4.2)
This commit is contained in:
commit
47fec973bc
@ -207,11 +207,11 @@ class Club(models.Model):
|
|||||||
cache.set(f"sith_club_{self.unix_name}", self)
|
cache.set(f"sith_club_{self.unix_name}", self)
|
||||||
|
|
||||||
def delete(self, *args, **kwargs):
|
def delete(self, *args, **kwargs):
|
||||||
super().delete(*args, **kwargs)
|
|
||||||
# Invalidate the cache of this club and of its memberships
|
# Invalidate the cache of this club and of its memberships
|
||||||
for membership in self.members.ongoing().select_related("user"):
|
for membership in self.members.ongoing().select_related("user"):
|
||||||
cache.delete(f"membership_{self.id}_{membership.user.id}")
|
cache.delete(f"membership_{self.id}_{membership.user.id}")
|
||||||
cache.delete(f"sith_club_{self.unix_name}")
|
cache.delete(f"sith_club_{self.unix_name}")
|
||||||
|
super().delete(*args, **kwargs)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
@ -46,6 +46,8 @@ class ClubTest(TestCase):
|
|||||||
def setUpTestData(cls):
|
def setUpTestData(cls):
|
||||||
# subscribed users - initial members
|
# subscribed users - initial members
|
||||||
cls.skia = User.objects.get(username="skia")
|
cls.skia = User.objects.get(username="skia")
|
||||||
|
# by default, Skia is in the AE, which creates side effect
|
||||||
|
cls.skia.memberships.all().delete()
|
||||||
cls.richard = User.objects.get(username="rbatsbak")
|
cls.richard = User.objects.get(username="rbatsbak")
|
||||||
cls.comptable = User.objects.get(username="comptable")
|
cls.comptable = User.objects.get(username="comptable")
|
||||||
cls.sli = User.objects.get(username="sli")
|
cls.sli = User.objects.get(username="sli")
|
||||||
@ -62,38 +64,32 @@ class ClubTest(TestCase):
|
|||||||
cls.public = User.objects.get(username="public")
|
cls.public = User.objects.get(username="public")
|
||||||
|
|
||||||
cls.ae = Club.objects.filter(pk=SITH_MAIN_CLUB_ID)[0]
|
cls.ae = Club.objects.filter(pk=SITH_MAIN_CLUB_ID)[0]
|
||||||
|
cls.club = Club.objects.create(
|
||||||
def setUp(self):
|
|
||||||
# by default, Skia is in the AE, which creates side effect
|
|
||||||
self.skia.memberships.all().delete()
|
|
||||||
|
|
||||||
# create a fake club
|
|
||||||
self.club = Club.objects.create(
|
|
||||||
name="Fake Club",
|
name="Fake Club",
|
||||||
unix_name="fake-club",
|
unix_name="fake-club",
|
||||||
address="5 rue de la République, 90000 Belfort",
|
address="5 rue de la République, 90000 Belfort",
|
||||||
)
|
)
|
||||||
self.members_url = reverse(
|
cls.members_url = reverse("club:club_members", kwargs={"club_id": cls.club.id})
|
||||||
"club:club_members", kwargs={"club_id": self.club.id}
|
|
||||||
)
|
|
||||||
a_month_ago = now() - timedelta(days=30)
|
a_month_ago = now() - timedelta(days=30)
|
||||||
yesterday = now() - timedelta(days=1)
|
yesterday = now() - timedelta(days=1)
|
||||||
Membership.objects.create(
|
Membership.objects.create(
|
||||||
club=self.club, user=self.skia, start_date=a_month_ago, role=3
|
club=cls.club, user=cls.skia, start_date=a_month_ago, role=3
|
||||||
)
|
)
|
||||||
Membership.objects.create(club=self.club, user=self.richard, role=1)
|
Membership.objects.create(club=cls.club, user=cls.richard, role=1)
|
||||||
Membership.objects.create(
|
Membership.objects.create(
|
||||||
club=self.club, user=self.comptable, start_date=a_month_ago, role=10
|
club=cls.club, user=cls.comptable, start_date=a_month_ago, role=10
|
||||||
)
|
)
|
||||||
|
|
||||||
# sli was a member but isn't anymore
|
# sli was a member but isn't anymore
|
||||||
Membership.objects.create(
|
Membership.objects.create(
|
||||||
club=self.club,
|
club=cls.club,
|
||||||
user=self.sli,
|
user=cls.sli,
|
||||||
start_date=a_month_ago,
|
start_date=a_month_ago,
|
||||||
end_date=yesterday,
|
end_date=yesterday,
|
||||||
role=2,
|
role=2,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
cache.clear()
|
cache.clear()
|
||||||
|
|
||||||
|
|
||||||
@ -176,14 +172,11 @@ class MembershipQuerySetTest(ClubTest):
|
|||||||
# should delete the subscriptions of skia and comptable
|
# should delete the subscriptions of skia and comptable
|
||||||
self.club.members.ongoing().board().delete()
|
self.club.members.ongoing().board().delete()
|
||||||
|
|
||||||
assert (
|
for membership in (mem_skia, mem_comptable):
|
||||||
cache.get(f"membership_{mem_skia.club_id}_{mem_skia.user_id}")
|
cached_mem = cache.get(
|
||||||
== "not_member"
|
f"membership_{membership.club_id}_{membership.user_id}"
|
||||||
)
|
|
||||||
assert (
|
|
||||||
cache.get(f"membership_{mem_comptable.club_id}_{mem_comptable.user_id}")
|
|
||||||
== "not_member",
|
|
||||||
)
|
)
|
||||||
|
assert cached_mem == "not_member"
|
||||||
|
|
||||||
|
|
||||||
class ClubModelTest(ClubTest):
|
class ClubModelTest(ClubTest):
|
||||||
|
19
core/migrations/0038_alter_preferences_receive_weekmail.py
Normal file
19
core/migrations/0038_alter_preferences_receive_weekmail.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Generated by Django 4.2 on 2024-06-26 09:26
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("core", "0037_auto_20211105_1708"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="preferences",
|
||||||
|
name="receive_weekmail",
|
||||||
|
field=models.BooleanField(
|
||||||
|
default=False, verbose_name="receive the Weekmail"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
@ -162,8 +162,9 @@
|
|||||||
<div>
|
<div>
|
||||||
{% trans %}Not subscribed{% endtrans %}
|
{% trans %}Not subscribed{% endtrans %}
|
||||||
{% if user.is_board_member %}
|
{% if user.is_board_member %}
|
||||||
<a href="{{ url('subscription:subscription') }}?member={{ profile.id }}">{% trans %}New subscription{% endtrans
|
<a href="{{ url('subscription:subscription') }}?member={{ profile.id }}">
|
||||||
%}</a>
|
{% trans %}New subscription{% endtrans %}
|
||||||
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -133,8 +133,9 @@
|
|||||||
</p>
|
</p>
|
||||||
{%- elif user.is_root -%}
|
{%- elif user.is_root -%}
|
||||||
<p>
|
<p>
|
||||||
<a href="{{ url('core:password_root_change', user_id=form.instance.id) }}">{%- trans -%}Change user password{%-
|
<a href="{{ url('core:password_root_change', user_id=form.instance.id) }}">
|
||||||
endtrans -%}</a>
|
{%- trans -%}Change user password{%- endtrans -%}
|
||||||
|
</a>
|
||||||
</p>
|
</p>
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ from django.conf import settings
|
|||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from PIL import ExifTags
|
from PIL import ExifTags
|
||||||
|
from PIL.Image import Resampling
|
||||||
|
|
||||||
|
|
||||||
def get_git_revision_short_hash() -> str:
|
def get_git_revision_short_hash() -> str:
|
||||||
@ -109,7 +110,8 @@ def resize_image(im, edge, format):
|
|||||||
(w, h) = im.size
|
(w, h) = im.size
|
||||||
(width, height) = scale_dimension(w, h, long_edge=edge)
|
(width, height) = scale_dimension(w, h, long_edge=edge)
|
||||||
content = BytesIO()
|
content = BytesIO()
|
||||||
im = im.resize((width, height), PIL.Image.ANTIALIAS)
|
# use the lanczos filter for antialiasing
|
||||||
|
im = im.resize((width, height), Resampling.LANCZOS)
|
||||||
try:
|
try:
|
||||||
im.save(
|
im.save(
|
||||||
fp=content,
|
fp=content,
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
from datetime import timezone
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
from django.utils.timezone import utc
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
@ -17,7 +17,9 @@ class Migration(migrations.Migration):
|
|||||||
field=models.DateTimeField(
|
field=models.DateTimeField(
|
||||||
verbose_name="activity time",
|
verbose_name="activity time",
|
||||||
auto_now=True,
|
auto_now=True,
|
||||||
default=datetime.datetime(2016, 8, 26, 17, 5, 31, 202824, tzinfo=utc),
|
default=datetime.datetime(
|
||||||
|
2016, 8, 26, 17, 5, 31, 202824, tzinfo=timezone.utc
|
||||||
|
),
|
||||||
),
|
),
|
||||||
preserve_default=False,
|
preserve_default=False,
|
||||||
)
|
)
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
# Generated by Django 4.2 on 2024-06-26 09:26
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [("counter", "0020_auto_20221215_1709")]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name="cashregistersummaryitem",
|
||||||
|
old_name="check",
|
||||||
|
new_name="is_check",
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="cashregistersummaryitem",
|
||||||
|
name="is_check",
|
||||||
|
field=models.BooleanField(
|
||||||
|
default=False,
|
||||||
|
help_text="True if this is a bank check, else False",
|
||||||
|
verbose_name="check",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
@ -19,8 +19,8 @@ import base64
|
|||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
from datetime import date, datetime, timedelta
|
from datetime import date, datetime, timedelta, timezone
|
||||||
from typing import Optional, Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
from dict2xml import dict2xml
|
from dict2xml import dict2xml
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@ -534,7 +534,7 @@ class Counter(models.Model):
|
|||||||
.order_by("-perm_sum")
|
.order_by("-perm_sum")
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_top_customers(self, since: Optional[date] = None) -> QuerySet:
|
def get_top_customers(self, since: datetime | date | None = None) -> QuerySet:
|
||||||
"""
|
"""
|
||||||
Return a QuerySet querying the money spent by customers of this counter
|
Return a QuerySet querying the money spent by customers of this counter
|
||||||
since the specified date, ordered by descending amount of money spent.
|
since the specified date, ordered by descending amount of money spent.
|
||||||
@ -543,9 +543,13 @@ class Counter(models.Model):
|
|||||||
- the full name (first name + last name) of the customer
|
- the full name (first name + last name) of the customer
|
||||||
- the nickname of the customer
|
- the nickname of the customer
|
||||||
- the amount of money spent by the customer
|
- the amount of money spent by the customer
|
||||||
|
|
||||||
|
:param since: timestamp from which to perform the calculation
|
||||||
"""
|
"""
|
||||||
if since is None:
|
if since is None:
|
||||||
since = get_start_of_semester()
|
since = get_start_of_semester()
|
||||||
|
if isinstance(since, date):
|
||||||
|
since = datetime(since.year, since.month, since.day, tzinfo=timezone.utc)
|
||||||
return (
|
return (
|
||||||
self.sellings.filter(date__gte=since)
|
self.sellings.filter(date__gte=since)
|
||||||
.annotate(
|
.annotate(
|
||||||
@ -568,19 +572,18 @@ class Counter(models.Model):
|
|||||||
.order_by("-selling_sum")
|
.order_by("-selling_sum")
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_total_sales(self, since=None) -> CurrencyField:
|
def get_total_sales(self, since: datetime | date | None = None) -> CurrencyField:
|
||||||
"""
|
"""
|
||||||
Compute and return the total turnover of this counter
|
Compute and return the total turnover of this counter
|
||||||
since the date specified in parameter (by default, since the start of the current
|
since the date specified in parameter (by default, since the start of the current
|
||||||
semester)
|
semester)
|
||||||
:param since: timestamp from which to perform the calculation
|
:param since: timestamp from which to perform the calculation
|
||||||
:type since: datetime | date | None
|
|
||||||
:return: Total revenue earned at this counter
|
:return: Total revenue earned at this counter
|
||||||
"""
|
"""
|
||||||
if since is None:
|
if since is None:
|
||||||
since = get_start_of_semester()
|
since = get_start_of_semester()
|
||||||
if isinstance(since, date):
|
if isinstance(since, date):
|
||||||
since = datetime.combine(since, datetime.min.time())
|
since = datetime(since.year, since.month, since.day, tzinfo=timezone.utc)
|
||||||
total = self.sellings.filter(date__gte=since).aggregate(
|
total = self.sellings.filter(date__gte=since).aggregate(
|
||||||
total=Sum(F("quantity") * F("unit_price"), output_field=CurrencyField())
|
total=Sum(F("quantity") * F("unit_price"), output_field=CurrencyField())
|
||||||
)["total"]
|
)["total"]
|
||||||
@ -927,25 +930,25 @@ class CashRegisterSummary(models.Model):
|
|||||||
if name[:5] == "check":
|
if name[:5] == "check":
|
||||||
checks = self.items.filter(check=True).order_by("value").all()
|
checks = self.items.filter(check=True).order_by("value").all()
|
||||||
if name == "ten_cents":
|
if name == "ten_cents":
|
||||||
return self.items.filter(value=0.1, check=False).first()
|
return self.items.filter(value=0.1, is_check=False).first()
|
||||||
elif name == "twenty_cents":
|
elif name == "twenty_cents":
|
||||||
return self.items.filter(value=0.2, check=False).first()
|
return self.items.filter(value=0.2, is_check=False).first()
|
||||||
elif name == "fifty_cents":
|
elif name == "fifty_cents":
|
||||||
return self.items.filter(value=0.5, check=False).first()
|
return self.items.filter(value=0.5, is_check=False).first()
|
||||||
elif name == "one_euro":
|
elif name == "one_euro":
|
||||||
return self.items.filter(value=1, check=False).first()
|
return self.items.filter(value=1, is_check=False).first()
|
||||||
elif name == "two_euros":
|
elif name == "two_euros":
|
||||||
return self.items.filter(value=2, check=False).first()
|
return self.items.filter(value=2, is_check=False).first()
|
||||||
elif name == "five_euros":
|
elif name == "five_euros":
|
||||||
return self.items.filter(value=5, check=False).first()
|
return self.items.filter(value=5, is_check=False).first()
|
||||||
elif name == "ten_euros":
|
elif name == "ten_euros":
|
||||||
return self.items.filter(value=10, check=False).first()
|
return self.items.filter(value=10, is_check=False).first()
|
||||||
elif name == "twenty_euros":
|
elif name == "twenty_euros":
|
||||||
return self.items.filter(value=20, check=False).first()
|
return self.items.filter(value=20, is_check=False).first()
|
||||||
elif name == "fifty_euros":
|
elif name == "fifty_euros":
|
||||||
return self.items.filter(value=50, check=False).first()
|
return self.items.filter(value=50, is_check=False).first()
|
||||||
elif name == "hundred_euros":
|
elif name == "hundred_euros":
|
||||||
return self.items.filter(value=100, check=False).first()
|
return self.items.filter(value=100, is_check=False).first()
|
||||||
elif name == "check_1":
|
elif name == "check_1":
|
||||||
return checks[0] if 0 < len(checks) else None
|
return checks[0] if 0 < len(checks) else None
|
||||||
elif name == "check_2":
|
elif name == "check_2":
|
||||||
@ -993,7 +996,11 @@ class CashRegisterSummaryItem(models.Model):
|
|||||||
)
|
)
|
||||||
value = CurrencyField(_("value"))
|
value = CurrencyField(_("value"))
|
||||||
quantity = models.IntegerField(_("quantity"), default=0)
|
quantity = models.IntegerField(_("quantity"), default=0)
|
||||||
check = models.BooleanField(_("check"), default=False)
|
is_check = models.BooleanField(
|
||||||
|
_("check"),
|
||||||
|
default=False,
|
||||||
|
help_text=_("True if this is a bank check, else False"),
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _("cash register summary item")
|
verbose_name = _("cash register summary item")
|
||||||
|
@ -1204,35 +1204,35 @@ class CashRegisterSummaryForm(forms.Form):
|
|||||||
cash_summary=summary,
|
cash_summary=summary,
|
||||||
value=cd["check_1_value"],
|
value=cd["check_1_value"],
|
||||||
quantity=cd["check_1_quantity"],
|
quantity=cd["check_1_quantity"],
|
||||||
check=True,
|
is_check=True,
|
||||||
).save()
|
).save()
|
||||||
if cd["check_2_quantity"]:
|
if cd["check_2_quantity"]:
|
||||||
CashRegisterSummaryItem(
|
CashRegisterSummaryItem(
|
||||||
cash_summary=summary,
|
cash_summary=summary,
|
||||||
value=cd["check_2_value"],
|
value=cd["check_2_value"],
|
||||||
quantity=cd["check_2_quantity"],
|
quantity=cd["check_2_quantity"],
|
||||||
check=True,
|
is_check=True,
|
||||||
).save()
|
).save()
|
||||||
if cd["check_3_quantity"]:
|
if cd["check_3_quantity"]:
|
||||||
CashRegisterSummaryItem(
|
CashRegisterSummaryItem(
|
||||||
cash_summary=summary,
|
cash_summary=summary,
|
||||||
value=cd["check_3_value"],
|
value=cd["check_3_value"],
|
||||||
quantity=cd["check_3_quantity"],
|
quantity=cd["check_3_quantity"],
|
||||||
check=True,
|
is_check=True,
|
||||||
).save()
|
).save()
|
||||||
if cd["check_4_quantity"]:
|
if cd["check_4_quantity"]:
|
||||||
CashRegisterSummaryItem(
|
CashRegisterSummaryItem(
|
||||||
cash_summary=summary,
|
cash_summary=summary,
|
||||||
value=cd["check_4_value"],
|
value=cd["check_4_value"],
|
||||||
quantity=cd["check_4_quantity"],
|
quantity=cd["check_4_quantity"],
|
||||||
check=True,
|
is_check=True,
|
||||||
).save()
|
).save()
|
||||||
if cd["check_5_quantity"]:
|
if cd["check_5_quantity"]:
|
||||||
CashRegisterSummaryItem(
|
CashRegisterSummaryItem(
|
||||||
cash_summary=summary,
|
cash_summary=summary,
|
||||||
value=cd["check_5_value"],
|
value=cd["check_5_value"],
|
||||||
quantity=cd["check_5_quantity"],
|
quantity=cd["check_5_quantity"],
|
||||||
check=True,
|
is_check=True,
|
||||||
).save()
|
).save()
|
||||||
if summary.items.count() < 1:
|
if summary.items.count() < 1:
|
||||||
summary.delete()
|
summary.delete()
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
from datetime import timezone
|
||||||
|
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
from django.utils.timezone import utc
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
@ -226,7 +226,9 @@ class Migration(migrations.Migration):
|
|||||||
"last_read_date",
|
"last_read_date",
|
||||||
models.DateTimeField(
|
models.DateTimeField(
|
||||||
verbose_name="last read date",
|
verbose_name="last read date",
|
||||||
default=datetime.datetime(1999, 1, 1, 0, 0, tzinfo=utc),
|
default=datetime.datetime(
|
||||||
|
1999, 1, 1, 0, 0, tzinfo=timezone.utc
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
|
File diff suppressed because it is too large
Load Diff
27
pedagogy/migrations/0003_alter_uv_language.py
Normal file
27
pedagogy/migrations/0003_alter_uv_language.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Generated by Django 4.2 on 2024-06-26 09:26
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("pedagogy", "0002_auto_20190827_2251"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="uv",
|
||||||
|
name="language",
|
||||||
|
field=models.CharField(
|
||||||
|
choices=[
|
||||||
|
("FR", "French"),
|
||||||
|
("EN", "English"),
|
||||||
|
("DE", "German"),
|
||||||
|
("SP", "Spanish"),
|
||||||
|
],
|
||||||
|
default="FR",
|
||||||
|
max_length=10,
|
||||||
|
verbose_name="language",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
29
poetry.lock
generated
29
poetry.lock
generated
@ -413,19 +413,19 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "django"
|
name = "django"
|
||||||
version = "3.2.25"
|
version = "4.2.13"
|
||||||
description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design."
|
description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "Django-3.2.25-py3-none-any.whl", hash = "sha256:a52ea7fcf280b16f7b739cec38fa6d3f8953a5456986944c3ca97e79882b4e38"},
|
{file = "Django-4.2.13-py3-none-any.whl", hash = "sha256:a17fcba2aad3fc7d46fdb23215095dbbd64e6174bf4589171e732b18b07e426a"},
|
||||||
{file = "Django-3.2.25.tar.gz", hash = "sha256:7ca38a78654aee72378594d63e51636c04b8e28574f5505dff630895b5472777"},
|
{file = "Django-4.2.13.tar.gz", hash = "sha256:837e3cf1f6c31347a1396a3f6b65688f2b4bb4a11c580dcb628b5afe527b68a5"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
asgiref = ">=3.3.2,<4"
|
asgiref = ">=3.6.0,<4"
|
||||||
pytz = "*"
|
sqlparse = ">=0.3.1"
|
||||||
sqlparse = ">=0.2.2"
|
tzdata = {version = "*", markers = "sys_platform == \"win32\""}
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
argon2 = ["argon2-cffi (>=19.1.0)"]
|
argon2 = ["argon2-cffi (>=19.1.0)"]
|
||||||
@ -1776,6 +1776,17 @@ files = [
|
|||||||
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
|
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tzdata"
|
||||||
|
version = "2024.1"
|
||||||
|
description = "Provider of IANA time zone data"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2"
|
||||||
|
files = [
|
||||||
|
{file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"},
|
||||||
|
{file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "urllib3"
|
name = "urllib3"
|
||||||
version = "2.2.2"
|
version = "2.2.2"
|
||||||
@ -1842,4 +1853,4 @@ filelock = ">=3.4"
|
|||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.10,<3.12"
|
python-versions = "^3.10,<3.12"
|
||||||
content-hash = "7f807b6216c032932ac20e2bdac462c7a2c4e8db328cdd3536281d6fbc009776"
|
content-hash = "b090426042093af41cfbbced92a1a47bf0834ce88865dc7f51d0b7b04fda99a7"
|
||||||
|
@ -21,7 +21,7 @@ license = "GPL-3.0-only"
|
|||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.10,<3.12" # Version is held back by mistune
|
python = "^3.10,<3.12" # Version is held back by mistune
|
||||||
Django = "^3.2"
|
Django = "^4.2.13"
|
||||||
Pillow = "^9.2"
|
Pillow = "^9.2"
|
||||||
mistune = "^0.8.4"
|
mistune = "^0.8.4"
|
||||||
django-jinja = "^2.10"
|
django-jinja = "^2.10"
|
||||||
|
@ -187,6 +187,7 @@ TEMPLATES = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
FORM_RENDERER = "django.forms.renderers.DjangoDivFormRenderer"
|
||||||
|
|
||||||
HAYSTACK_CONNECTIONS = {
|
HAYSTACK_CONNECTIONS = {
|
||||||
"default": {
|
"default": {
|
||||||
@ -248,8 +249,6 @@ TIME_ZONE = "Europe/Paris"
|
|||||||
|
|
||||||
USE_I18N = True
|
USE_I18N = True
|
||||||
|
|
||||||
USE_L10N = True
|
|
||||||
|
|
||||||
USE_TZ = True
|
USE_TZ = True
|
||||||
|
|
||||||
LOCALE_PATHS = (os.path.join(BASE_DIR, "locale"),)
|
LOCALE_PATHS = (os.path.join(BASE_DIR, "locale"),)
|
||||||
@ -690,7 +689,6 @@ if DEBUG:
|
|||||||
"sith.toolbar_debug.TemplatesPanel",
|
"sith.toolbar_debug.TemplatesPanel",
|
||||||
"debug_toolbar.panels.cache.CachePanel",
|
"debug_toolbar.panels.cache.CachePanel",
|
||||||
"debug_toolbar.panels.signals.SignalsPanel",
|
"debug_toolbar.panels.signals.SignalsPanel",
|
||||||
"debug_toolbar.panels.logging.LoggingPanel",
|
|
||||||
"debug_toolbar.panels.redirects.RedirectsPanel",
|
"debug_toolbar.panels.redirects.RedirectsPanel",
|
||||||
]
|
]
|
||||||
SASS_INCLUDE_FOLDERS = ["core/static/"]
|
SASS_INCLUDE_FOLDERS = ["core/static/"]
|
||||||
|
Loading…
Reference in New Issue
Block a user