fnschool 20251013.81959.843__py3-none-any.whl → 20251014.81347.804__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fnschool might be problematic. Click here for more details.

Files changed (22) hide show
  1. fnschoo1/__init__.py +1 -1
  2. fnschoo1/canteen/forms.py +10 -0
  3. fnschoo1/canteen/migrations/0014_category_priority.py +27 -0
  4. fnschoo1/canteen/models.py +29 -7
  5. fnschoo1/canteen/templates/canteen/category/delete.html +4 -0
  6. fnschoo1/canteen/templates/canteen/category/list.html +2 -0
  7. fnschoo1/canteen/templates/canteen/consumption/create.html +1 -1
  8. fnschoo1/canteen/views.py +0 -1
  9. fnschoo1/canteen/workbook/generate.py +13 -0
  10. fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  11. fnschoo1/static/js/fnschool.js +2 -4
  12. {fnschool-20251013.81959.843.dist-info → fnschool-20251014.81347.804.dist-info}/METADATA +1 -1
  13. {fnschool-20251013.81959.843.dist-info → fnschool-20251014.81347.804.dist-info}/RECORD +22 -21
  14. {fnschool-20251013.81959.843.dist-info → fnschool-20251014.81347.804.dist-info}/SOURCES.txt.py +0 -0
  15. {fnschool-20251013.81959.843.dist-info → fnschool-20251014.81347.804.dist-info}/WHEEL +0 -0
  16. {fnschool-20251013.81959.843.dist-info → fnschool-20251014.81347.804.dist-info}/dependency_links.txt.py +0 -0
  17. {fnschool-20251013.81959.843.dist-info → fnschool-20251014.81347.804.dist-info}/entry_points.txt +0 -0
  18. {fnschool-20251013.81959.843.dist-info → fnschool-20251014.81347.804.dist-info}/entry_points.txt.py +0 -0
  19. {fnschool-20251013.81959.843.dist-info → fnschool-20251014.81347.804.dist-info}/licenses/LICENSE +0 -0
  20. {fnschool-20251013.81959.843.dist-info → fnschool-20251014.81347.804.dist-info}/requires.txt.py +0 -0
  21. {fnschool-20251013.81959.843.dist-info → fnschool-20251014.81347.804.dist-info}/top_level.txt +0 -0
  22. {fnschool-20251013.81959.843.dist-info → fnschool-20251014.81347.804.dist-info}/top_level.txt.py +0 -0
fnschoo1/__init__.py CHANGED
@@ -6,4 +6,4 @@ import random
6
6
  import sys
7
7
  from pathlib import Path
8
8
 
9
- __version__ = "20251013.81959.843"
9
+ __version__ = "20251014.81347.804"
fnschoo1/canteen/forms.py CHANGED
@@ -70,9 +70,19 @@ class CategoryForm(forms.ModelForm):
70
70
  fields = [
71
71
  "name",
72
72
  "abbreviation",
73
+ "priority",
73
74
  "pin_to_consumptions_top",
74
75
  "is_disabled",
75
76
  ]
77
+ widgets = {
78
+ "priority": forms.NumberInput(
79
+ attrs={
80
+ "title": _(
81
+ "Numbers with smaller values have higher priority."
82
+ ),
83
+ },
84
+ ),
85
+ }
76
86
 
77
87
 
78
88
  class MealTypeForm(forms.ModelForm):
@@ -0,0 +1,27 @@
1
+ # Generated by Django 4.2.25 on 2025-10-14 04:46
2
+
3
+ import django.core.validators
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ (
11
+ "canteen",
12
+ "0013_alter_consumption_options_alter_ingredient_options_and_more",
13
+ ),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.AddField(
18
+ model_name="category",
19
+ name="priority",
20
+ field=models.IntegerField(
21
+ blank=True,
22
+ null=True,
23
+ validators=[django.core.validators.MinValueValidator(0)],
24
+ verbose_name="Category Priority",
25
+ ),
26
+ ),
27
+ ]
@@ -45,10 +45,22 @@ class Category(models.Model):
45
45
  is_disabled = models.BooleanField(
46
46
  default=False, verbose_name=_("Is Disabled")
47
47
  )
48
+ priority = models.IntegerField(
49
+ null=True,
50
+ blank=True,
51
+ validators=[
52
+ MinValueValidator(0),
53
+ ],
54
+ verbose_name=_("Category Priority"),
55
+ )
56
+
48
57
  pin_to_consumptions_top = models.BooleanField(
49
58
  default=False, verbose_name=_("Pin to Consumptions Top")
50
59
  )
51
60
 
61
+ class Meta:
62
+ ordering = ["priority"]
63
+
52
64
  def __str__(self):
53
65
  return self.name
54
66
 
@@ -110,12 +122,6 @@ class Ingredient(models.Model):
110
122
  @property
111
123
  def cleaned_consumptions(self):
112
124
  consumptions = self.consumptions.all()
113
- for c1 in consumptions:
114
- for c2 in consumptions:
115
- if c1.date_of_using == c2.date_of_using and c1.id != c2.id:
116
- c1.is_disabled = False
117
- c1.save()
118
- c2.delete()
119
125
  return consumptions
120
126
 
121
127
  @property
@@ -128,6 +134,22 @@ class Ingredient(models.Model):
128
134
  )
129
135
  return quantity
130
136
 
137
+ def get_consuming_quantity(self, date_end):
138
+ consumptions = self.cleaned_consumptions
139
+ if not consumptions:
140
+ return 0
141
+ quantity = sum(
142
+ [
143
+ c.amount_used
144
+ for c in consumptions
145
+ if not c.is_disabled and c.date_of_using <= date_end
146
+ ]
147
+ )
148
+ return quantity
149
+
150
+ def get_remaining_quantity(self, date_end):
151
+ return self.quantity - self.get_consuming_quantity(date_end)
152
+
131
153
  @property
132
154
  def remaining_quantity(self):
133
155
  consumptions = self.cleaned_consumptions
@@ -156,7 +178,7 @@ class Consumption(models.Model):
156
178
 
157
179
  date_of_using = models.DateField(verbose_name=_("Date"))
158
180
  amount_used = models.IntegerField(
159
- verbose_name="消耗数量",
181
+ verbose_name=_("Consuming Quantity"),
160
182
  validators=[MinValueValidator(0)],
161
183
  )
162
184
  is_disabled = models.BooleanField(
@@ -21,6 +21,10 @@
21
21
  <dd>
22
22
  {{ category.created_at }}
23
23
  </dd>
24
+ <dt>{% trans 'Priority' %}</dt>
25
+ <dd>
26
+ {{ category.priority }}
27
+ </dd>
24
28
  <dt>{% trans 'Pin to consumptions top' %}</dt>
25
29
  <dd>
26
30
  {% if category.pin_to_consumptions_top %}
@@ -18,6 +18,7 @@
18
18
  <th>{% trans "Abbreviation" %}</th>
19
19
  <th>{% trans "Created at" %}</th>
20
20
  <th>{% trans "Pin to consumptions top" %}</th>
21
+ <th>{% trans "Priority" %}</th>
21
22
  <th>{% trans "Is Disabled" %}</th>
22
23
  <th>#</th>
23
24
  </tr>
@@ -34,6 +35,7 @@
34
35
  {% trans "Yes" %}
35
36
  {% endif %}
36
37
  </td>
38
+ <td>{{ category.priority|default_if_none:'0' }}</td>
37
39
  <td>
38
40
  {% if category.is_disabled %}
39
41
  {% trans "Yes" %}
@@ -30,7 +30,7 @@
30
30
  <input class="form-control "
31
31
  onkeydown="if(event.keyCode==13){list_consumptions();}"
32
32
  title="{% trans 'The end date of storage.' %}"
33
- id="storage_date_end"
33
+ id="storage_date_end_input"
34
34
  value="{{ request.COOKIES.storage_date_end }}">
35
35
  </input>
36
36
  </div>
fnschoo1/canteen/views.py CHANGED
@@ -784,7 +784,6 @@ class CategoryListView(LoginRequiredMixin, ListView):
784
784
  model = Category
785
785
  template_name = "canteen/category/list.html"
786
786
  context_object_name = "categories"
787
- ordering = ["-created_at"]
788
787
 
789
788
  paginate_by = 10
790
789
  paginate_orphans = 2
@@ -2106,6 +2106,19 @@ class CanteenWorkBook:
2106
2106
  ]:
2107
2107
  set_column_width_in_inches(sheet, col, width)
2108
2108
 
2109
+ def fill_in_food_sheets(self):
2110
+ user = self.request.user
2111
+ date_start = self.date_start
2112
+ date_end = self.date_end
2113
+ meal_type = self.meal_type
2114
+
2115
+ ingredients = Ingredient.objects.filter(
2116
+ Q(is_disabled=False)
2117
+ & Q(is_ignorable=False)
2118
+ & Q(user=user)
2119
+ & Q(meal_type=meal_type)
2120
+ ).all()
2121
+
2109
2122
  def fill_in(self):
2110
2123
  self.fill_in_cover_sheet()
2111
2124
  self.fill_in_storage_sheet()
@@ -9,9 +9,7 @@ function get_cookie(name) {
9
9
  return null
10
10
  }
11
11
  function delete_cookie(name) {
12
- document.cookie =
13
- name +
14
- `=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${window.location.pathname}`
12
+ document.cookie = name + `=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`
15
13
  }
16
14
 
17
15
  function set_cookies(cookies) {
@@ -28,7 +26,7 @@ function set_simple_cookie(key, value) {
28
26
  }
29
27
  const expiryDate = new Date()
30
28
  expiryDate.setFullYear(expiryDate.getFullYear() + 20)
31
- document.cookie = `${key}=${value}; expires=${expiryDate.toUTCString()}; path=${window.location.pathname}`
29
+ document.cookie = `${key}=${value}; expires=${expiryDate.toUTCString()}; path=/`
32
30
  }
33
31
  function update_href(query) {
34
32
  query = new Map(Object.entries(query))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fnschool
3
- Version: 20251013.81959.843
3
+ Version: 20251014.81347.804
4
4
  Summary: Just some school related scripts, without any ambition.
5
5
  Author-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>, Larry W3i <larryw3i@yeah.net>
6
6
  Maintainer-email: larryw3i <larryw3i@163.com>, Larry Wei <larryw3i@126.com>
@@ -1,13 +1,13 @@
1
- fnschoo1/__init__.py,sha256=P5QYmb7ozN6bO6SBiWzHKv5mAxye_K2A3X_5bGBmfXc,197
1
+ fnschoo1/__init__.py,sha256=Oo5lrB265t6WgO2VyARHhiCzSnqnPwPyQqwRCxQNeCk,197
2
2
  fnschoo1/manage.py,sha256=Cr5OtPrRWfEc7KEjW4yYnMKj_qlb0-qpwFRz3vFXvC0,1565
3
3
  fnschoo1/canteen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  fnschoo1/canteen/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
5
5
  fnschoo1/canteen/apps.py,sha256=zUjM0ZJwHW4i72vOm87QewRlvFQORQo5yb053u4YIGs,146
6
- fnschoo1/canteen/forms.py,sha256=4Y75VHpnONdN5hM8aShyr7tbQSElLa-22PQK7fDRflw,2296
7
- fnschoo1/canteen/models.py,sha256=20r24iNJW0hmPwhY96pQLYaIgqf8kc_Tx76IqORR_LE,5219
6
+ fnschoo1/canteen/forms.py,sha256=PDPAzZZ_y533KtMxCixLXXsXok5gjUShCSXeonYgGqQ,2582
7
+ fnschoo1/canteen/models.py,sha256=a4dCdTAcWu84D6PP8CWCSsAF4Q6ZMo74eDluwOmH_R8,5710
8
8
  fnschoo1/canteen/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
9
9
  fnschoo1/canteen/urls.py,sha256=4GtrqC9L59c8zopfjRgqhbcvA5iPnGcAUVuM6CrKWpk,2797
10
- fnschoo1/canteen/views.py,sha256=AXMO6dEMjBMTO-D6sWEV2sDwYZcms0L6hSgq8NHvVfw,26315
10
+ fnschoo1/canteen/views.py,sha256=DGrbOZuU0XuMuTnldFrHpRsm-spYuBHZMzBQq3z_iC0,26284
11
11
  fnschoo1/canteen/migrations/0001_initial.py,sha256=IHlyfT9sNc-kRQZy7NyjgWzp4EGus405QCAUw4oNdAQ,3943
12
12
  fnschoo1/canteen/migrations/0002_ingredient_is_disabled.py,sha256=j8oGWb2b99YwsEk-uwESLA_JRITEcz6b35ekoYOUGGc,444
13
13
  fnschoo1/canteen/migrations/0003_consumption_is_disabled_alter_ingredient_is_disabled.py,sha256=9RB5SHjINgrrqtDpcVIUXEBa3C_MTcR_keXLGG_PcOs,619
@@ -21,14 +21,15 @@ fnschoo1/canteen/migrations/0010_alter_consumption_options_alter_ingredient_opti
21
21
  fnschoo1/canteen/migrations/0011_category_pin_to_consumptions_top.py,sha256=gonvx7T23KlesYUGFx-WTvkz1BLZSnq0n62qKvtWnUo,553
22
22
  fnschoo1/canteen/migrations/0012_alter_ingredient_storage_date.py,sha256=JvU9xrAbGN8uoKHQw00wq6U4CaR_6WojQo-8VwmID3I,436
23
23
  fnschoo1/canteen/migrations/0013_alter_consumption_options_alter_ingredient_options_and_more.py,sha256=hKwsEJ_a1ezANJSrQoca2wEy22AZESwhqH9eonNfOm8,6735
24
+ fnschoo1/canteen/migrations/0014_category_priority.py,sha256=AywjPQhwtwm8xttEEOGQ3yyQ8j890hL5J-wCUNEwbkE,677
24
25
  fnschoo1/canteen/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
26
  fnschoo1/canteen/templates/canteen/close.html,sha256=pLYeJmGaOEJKMUJdZmYzz_n--l28IRDQ4fXvetP_Vsc,200
26
27
  fnschoo1/canteen/templates/canteen/category/create.html,sha256=7Hq62BqEpamDt52_Ut7DTO74_3yEn8_CqXH4e4va6dY,593
27
- fnschoo1/canteen/templates/canteen/category/delete.html,sha256=MnPyFzjO3HonOljwxGf6r1UzmbFjow7VT6h7YGkxxfk,1709
28
- fnschoo1/canteen/templates/canteen/category/list.html,sha256=aj81uoA-jmdv8mZT-Y9DxjOHVGrSfI1z0DB1YnJWb4w,2045
28
+ fnschoo1/canteen/templates/canteen/category/delete.html,sha256=gkEg3oiIbjVsZMKEywkAeXtb21oHTofi8cOER4dW6cc,1802
29
+ fnschoo1/canteen/templates/canteen/category/list.html,sha256=QLO2GA13Co48Ijd0DCCN4lcMm1fgJqT2CprH5VdLZPw,2148
29
30
  fnschoo1/canteen/templates/canteen/category/update.html,sha256=8Nzdbe8UorrJHzElkrdqvLaPnUvcvGhrViZB4D86wqo,815
30
31
  fnschoo1/canteen/templates/canteen/consumption/_create.html,sha256=lpST1R0vL1PEI1YE9d0-bcWWpCMH-INjIF-7pweAHuU,1008
31
- fnschoo1/canteen/templates/canteen/consumption/create.html,sha256=NOUKb48EueRHHN3tb1KwTkCsmpWwdWWCwX3Kwqi-A7o,15954
32
+ fnschoo1/canteen/templates/canteen/consumption/create.html,sha256=k7E3SH9B605WlrJ7_ylncfoOe51qhHgIXKr_TYLukEs,15960
32
33
  fnschoo1/canteen/templates/canteen/ingredient/close.html,sha256=pLYeJmGaOEJKMUJdZmYzz_n--l28IRDQ4fXvetP_Vsc,200
33
34
  fnschoo1/canteen/templates/canteen/ingredient/create.html,sha256=xZvh0tP_cv2HPQ96JSHChO6Ni23tzHc5YJCUhE2yEqM,807
34
35
  fnschoo1/canteen/templates/canteen/ingredient/create_one.html,sha256=O8EPSvAnEZ-4VJiwFdoyxJrMOoMpRkH6CyfvWwHaVgc,599
@@ -40,7 +41,7 @@ fnschoo1/canteen/templates/canteen/meal_type/delete.html,sha256=1UmCyXD-6lbYl-IE
40
41
  fnschoo1/canteen/templates/canteen/meal_type/list.html,sha256=c5kJUE1OgpRtSrMV4wFwL_gbRSaX_XMM4Zt1JTx34_g,1907
41
42
  fnschoo1/canteen/templates/canteen/meal_type/update.html,sha256=Rfv1TamSFIKHzvUNlgnmrPmfmzrehPpuo5Hv8VF0yek,818
42
43
  fnschoo1/canteen/workbook/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
43
- fnschoo1/canteen/workbook/generate.py,sha256=1UUXdeGLdHFzZDGzMFOcoD6rsZtjRAzYFfKLpiRpVps,84102
44
+ fnschoo1/canteen/workbook/generate.py,sha256=iCVe844tDqFZXn8eVwpgR7udZRfQJNoTalU-8jJH4x0,84475
44
45
  fnschoo1/fnschool/__init__.py,sha256=TmHhzykpKNMoMf6eD-EKvbvmnlzs1XGHtvD55ae1sXs,287
45
46
  fnschoo1/fnschool/asgi.py,sha256=kzkqosS10uBlyBX53EXcsATcvEZmac6nsPzyOHCuucE,393
46
47
  fnschoo1/fnschool/settings.py,sha256=l9Y1iQCivSfmsNfnHltfXLzxP6gG4VMIL4GEZgAp8YM,4357
@@ -50,7 +51,7 @@ fnschoo1/fnschool/wsgi.py,sha256=dQq4S0vZWCz8w5R9KooJeLYTVFXvEgJRYe7NFZwVxU8,393
50
51
  fnschoo1/fnschool/templatetags/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
51
52
  fnschoo1/fnschool/templatetags/fnschool_tags.py,sha256=l5Zov4VlQKpz-69SFftP4kXyMymz-a0D5F_ss_eiFc4,568
52
53
  fnschoo1/locale/en/LC_MESSAGES/django.mo,sha256=M8AB6fmjwlEd761iFlasNWdiEYfE-2nIwBoioGtEVUo,404
53
- fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=LMXr4V7PzsK1AkSxnQmV1a6mDIdXRTJv3H-Om092BHc,19994
54
+ fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=3Ipol-cSR0HI3vvp7gbK1jxLGR7ZzeKncXX__rzyJCw,20121
54
55
  fnschoo1/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
56
  fnschoo1/profiles/admin.py,sha256=93UCvdODI63KzCDfFFnKmfvCMGCp6FCG9WErE91i79Y,522
56
57
  fnschoo1/profiles/apps.py,sha256=WDu6eceFnDkBFMqquAolMZMo7XPb0ah6l2q2AruTrl4,215
@@ -76,7 +77,7 @@ fnschoo1/static/css/fnschool.css,sha256=nPjOh0vWuuFnZWrXcT2E3j3adL77v_PRyeml65Mv
76
77
  fnschoo1/static/images/favicon.ico,sha256=S8Tf0NsUdHnoYO0SEn-sig6YjB0atIpEtSlm7p1HxjY,5014
77
78
  fnschoo1/static/js/bootstrap.bundle.min.js,sha256=6kw84LCFc4QJzifgkle0FsvQrpt2NVRNPNjSSc9caiM,125881
78
79
  fnschoo1/static/js/bootstrap.min.js,sha256=0SHpZTHghUOz_BNedMzuH00z5lgwOSRKP_KI9G5Ogbk,88597
79
- fnschoo1/static/js/fnschool.js,sha256=A_IsEK7F_X83P-maARL5jDaQm90e1K48zAIv5r-34Vw,3019
80
+ fnschoo1/static/js/fnschool.js,sha256=tq9QzYsq8S3CvCqLk2U9tQuwQTcE-hYpf5YanqIHi4g,2959
80
81
  fnschoo1/static/js/jquery.min.js,sha256=np_WnfpAmUmEO_iheFAJKf6mbm0_laW3Ns4x7kjSlt4,162505
81
82
  fnschoo1/static/js/jquery.slim.min.js,sha256=p5YkbOjgHxX3hTadKlGuDW58NvJ1ldjjokDuDQ_5yXs,129962
82
83
  fnschoo1/static/js/popper.min.js,sha256=O2xdmtEow7gq3I7-0lKjshvxHkBe0hTWrMkbX2fy0XQ,36887
@@ -93,14 +94,14 @@ fnschoo1/templates/includes/_navigation.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
93
94
  fnschoo1/templates/includes/_paginator.html,sha256=Z-Hxcdmun4SJ1YcHnWTDLfW8wrngROiBTwr4NZWaPP4,1246
94
95
  fnschoo1/templates/registration/logged_out.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
96
  fnschoo1/templates/registration/login.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
- fnschool-20251013.81959.843.dist-info/licenses/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
97
- fnschool-20251013.81959.843.dist-info/METADATA,sha256=DC-zwFsEtLabNxJmkbl26HyKqHjaJ_6S-Mm5MvvktP8,4752
98
- fnschool-20251013.81959.843.dist-info/SOURCES.txt.py,sha256=2LY2mshgNtxI3ICB-oBjyMYgJk2bQqeGFM5J5ay5TQs,4954
99
- fnschool-20251013.81959.843.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
100
- fnschool-20251013.81959.843.dist-info/dependency_links.txt.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
101
- fnschool-20251013.81959.843.dist-info/entry_points.txt,sha256=Ow5nChVFJY3O4TJAIE1ZydMev1MUtgRsT1b8eFP6728,54
102
- fnschool-20251013.81959.843.dist-info/entry_points.txt.py,sha256=7iOwIx_m9Y6xJt___BZHWJh27LV5hqWnUjmj77MoRys,47
103
- fnschool-20251013.81959.843.dist-info/requires.txt.py,sha256=PqRcHIQSMPUb271hacYrlSDHwB1WDZmlWUkh6RnBz_g,113
104
- fnschool-20251013.81959.843.dist-info/top_level.txt,sha256=s6ZKnNm94Q0-247a50eI7jDK98uPF6P2kC9Ovd3LUlM,9
105
- fnschool-20251013.81959.843.dist-info/top_level.txt.py,sha256=_7CbrSihm0dzBn_tTy2ass_Y2VlkVNT2eylE8mcfwHY,9
106
- fnschool-20251013.81959.843.dist-info/RECORD,,
97
+ fnschool-20251014.81347.804.dist-info/licenses/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
98
+ fnschool-20251014.81347.804.dist-info/METADATA,sha256=OK9Y8pUH8pBnQF7_lFDDckxCnj-zUsXvco38oP1x7eI,4752
99
+ fnschool-20251014.81347.804.dist-info/SOURCES.txt.py,sha256=2LY2mshgNtxI3ICB-oBjyMYgJk2bQqeGFM5J5ay5TQs,4954
100
+ fnschool-20251014.81347.804.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
101
+ fnschool-20251014.81347.804.dist-info/dependency_links.txt.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
102
+ fnschool-20251014.81347.804.dist-info/entry_points.txt,sha256=Ow5nChVFJY3O4TJAIE1ZydMev1MUtgRsT1b8eFP6728,54
103
+ fnschool-20251014.81347.804.dist-info/entry_points.txt.py,sha256=7iOwIx_m9Y6xJt___BZHWJh27LV5hqWnUjmj77MoRys,47
104
+ fnschool-20251014.81347.804.dist-info/requires.txt.py,sha256=PqRcHIQSMPUb271hacYrlSDHwB1WDZmlWUkh6RnBz_g,113
105
+ fnschool-20251014.81347.804.dist-info/top_level.txt,sha256=s6ZKnNm94Q0-247a50eI7jDK98uPF6P2kC9Ovd3LUlM,9
106
+ fnschool-20251014.81347.804.dist-info/top_level.txt.py,sha256=_7CbrSihm0dzBn_tTy2ass_Y2VlkVNT2eylE8mcfwHY,9
107
+ fnschool-20251014.81347.804.dist-info/RECORD,,