fnschool 20251013.81200.824__py3-none-any.whl → 20251013.81919.815__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.
- fnschoo1/__init__.py +1 -45
- fnschoo1/canteen/templates/canteen/consumption/create.html +33 -8
- fnschoo1/canteen/views.py +96 -93
- fnschoo1/canteen/workbook/generate.py +4 -1
- fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- fnschoo1/manage.py +33 -0
- fnschoo1/static/js/fnschool.js +11 -2
- {fnschool-20251013.81200.824.dist-info → fnschool-20251013.81919.815.dist-info}/METADATA +1 -1
- {fnschool-20251013.81200.824.dist-info → fnschool-20251013.81919.815.dist-info}/RECORD +18 -13
- fnschool-20251013.81919.815.dist-info/SOURCES.txt.py +104 -0
- fnschool-20251013.81919.815.dist-info/dependency_links.txt.py +1 -0
- fnschool-20251013.81919.815.dist-info/entry_points.txt +2 -0
- fnschool-20251013.81919.815.dist-info/entry_points.txt.py +2 -0
- fnschool-20251013.81919.815.dist-info/requires.txt.py +13 -0
- fnschool-20251013.81919.815.dist-info/top_level.txt.py +1 -0
- fnschool-20251013.81200.824.dist-info/entry_points.txt +0 -2
- {fnschool-20251013.81200.824.dist-info → fnschool-20251013.81919.815.dist-info}/WHEEL +0 -0
- {fnschool-20251013.81200.824.dist-info → fnschool-20251013.81919.815.dist-info}/licenses/LICENSE +0 -0
- {fnschool-20251013.81200.824.dist-info → fnschool-20251013.81919.815.dist-info}/top_level.txt +0 -0
fnschoo1/__init__.py
CHANGED
|
@@ -6,48 +6,4 @@ import random
|
|
|
6
6
|
import sys
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
|
|
9
|
-
__version__ = "20251013.
|
|
10
|
-
|
|
11
|
-
FNSCHOOL_PATH = Path(__file__).parent
|
|
12
|
-
if FNSCHOOL_PATH.as_posix() not in sys.path:
|
|
13
|
-
sys.path.insert(0, FNSCHOOL_PATH.as_posix())
|
|
14
|
-
|
|
15
|
-
system_name = platform.system()
|
|
16
|
-
is_linux = False
|
|
17
|
-
is_windows = False
|
|
18
|
-
is_macos = False
|
|
19
|
-
|
|
20
|
-
if system_name == "Linux":
|
|
21
|
-
is_linux = True
|
|
22
|
-
elif system_name == "Windows":
|
|
23
|
-
is_windows = True
|
|
24
|
-
elif system_name == "Darwin":
|
|
25
|
-
is_macos = True
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def main():
|
|
29
|
-
"""Run administrative tasks."""
|
|
30
|
-
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fnschool.settings")
|
|
31
|
-
try:
|
|
32
|
-
from django.core.management import execute_from_command_line
|
|
33
|
-
except ImportError as exc:
|
|
34
|
-
raise ImportError(
|
|
35
|
-
"Couldn't import Django. Are you sure it's installed and "
|
|
36
|
-
"available on your PYTHONPATH environment variable? Did you "
|
|
37
|
-
"forget to activate a virtual environment?"
|
|
38
|
-
) from exc
|
|
39
|
-
|
|
40
|
-
if len(sys.argv) < 2:
|
|
41
|
-
local_port = str(random.randint(8080, 65530))
|
|
42
|
-
local_url = "http://127.0.0.1:" + local_port
|
|
43
|
-
sys.argv.append("runserver")
|
|
44
|
-
sys.argv.append(str(local_port))
|
|
45
|
-
try:
|
|
46
|
-
if is_windows:
|
|
47
|
-
os.startfile(local_url)
|
|
48
|
-
else:
|
|
49
|
-
os.system("sleep 5 && open " + local_url)
|
|
50
|
-
except Exception as e:
|
|
51
|
-
print(e)
|
|
52
|
-
|
|
53
|
-
execute_from_command_line(sys.argv)
|
|
9
|
+
__version__ = "20251013.81919.815"
|
|
@@ -8,8 +8,15 @@
|
|
|
8
8
|
<hr>
|
|
9
9
|
<div class="container">
|
|
10
10
|
<div class="row justify-content-end">
|
|
11
|
-
<button class="btn btn-success col-md-1 col-lg-1 col-2"
|
|
12
|
-
|
|
11
|
+
<button class="btn btn-outline-success col-md-1 col-lg-1 col-2 mx-2"
|
|
12
|
+
onclick="list_consumptions_by_week();">{% trans "Consume by Week" %}</button>
|
|
13
|
+
|
|
14
|
+
<button class="btn btn-outline-success col-md-1 col-lg-1 col-2"
|
|
15
|
+
onclick="list_consumptions_rapidly();">{% trans "Rapid Consumption" %}</button>
|
|
16
|
+
|
|
17
|
+
<a class="btn btn-success col-md-1 col-lg-1 col-2 mx-2"
|
|
18
|
+
target="canteen_list_categories"
|
|
19
|
+
href="{% url "canteen:list_categories" %}">{% trans "Ingredient Categories" %}</a>
|
|
13
20
|
|
|
14
21
|
<div class="col col-3 col-md-2 col-lg-2">
|
|
15
22
|
<input class=" form-control"
|
|
@@ -98,6 +105,24 @@
|
|
|
98
105
|
|
|
99
106
|
date_range = JSON.parse($("#date_range").text())
|
|
100
107
|
|
|
108
|
+
function list_consumptions_rapidly() {
|
|
109
|
+
query = {
|
|
110
|
+
'by_week': 'false',
|
|
111
|
+
"rapidly": 'true'
|
|
112
|
+
}
|
|
113
|
+
set_cookies(query)
|
|
114
|
+
update_href(query)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function list_consumptions_by_week() {
|
|
118
|
+
query = {
|
|
119
|
+
'by_week': 'true',
|
|
120
|
+
"rapidly": 'false'
|
|
121
|
+
}
|
|
122
|
+
set_cookies(query)
|
|
123
|
+
update_href(query)
|
|
124
|
+
}
|
|
125
|
+
|
|
101
126
|
function get_previous_month_date(date = new Date()) {
|
|
102
127
|
const prevMonthDate = new Date(date);
|
|
103
128
|
prevMonthDate.setDate(1);
|
|
@@ -110,6 +135,12 @@
|
|
|
110
135
|
return dayOfWeek === 0 || dayOfWeek === 6;
|
|
111
136
|
}
|
|
112
137
|
|
|
138
|
+
$(document).ready(function() {
|
|
139
|
+
var td1 = $(".table tr > :nth-child(1):first")
|
|
140
|
+
$(".table tr > :nth-child(2)").css("left", td1.width() * 1.05)
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
|
|
113
144
|
$(document).ready(function() {
|
|
114
145
|
$(months).each(function(index, value) {
|
|
115
146
|
$('.workbook-month-select').append(`<option>${value}</option>`)
|
|
@@ -200,12 +231,6 @@
|
|
|
200
231
|
}
|
|
201
232
|
|
|
202
233
|
|
|
203
|
-
|
|
204
|
-
$(document).ready(function() {
|
|
205
|
-
var td1 = $(".table tr > :nth-child(1):first")
|
|
206
|
-
$(".table tr > :nth-child(2)").css("left", td1.width() * 1.05)
|
|
207
|
-
});
|
|
208
|
-
|
|
209
234
|
$(document).ready(function() {
|
|
210
235
|
dont_submit = true
|
|
211
236
|
var progress = 0
|
fnschoo1/canteen/views.py
CHANGED
|
@@ -156,113 +156,40 @@ def split_price(total_price, quantity, prec=2):
|
|
|
156
156
|
return [[total_price0, quantity0], [total_price1, quantity1]]
|
|
157
157
|
|
|
158
158
|
|
|
159
|
-
|
|
159
|
+
@login_required
|
|
160
|
+
def create_consumptions(request, ingredient_id=None):
|
|
160
161
|
date_start = request.GET.get(
|
|
161
162
|
"storage_date_start", None
|
|
162
163
|
) or request.COOKIES.get("storage_date_start", None)
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
)
|
|
166
|
-
ingredients = Ingredient.objects
|
|
167
|
-
queries = Q()
|
|
168
|
-
queries = (
|
|
169
|
-
Q(user=request.user) & Q(is_disabled=False) & Q(is_ignorable=False)
|
|
170
|
-
)
|
|
171
|
-
if date_start:
|
|
172
|
-
date_start = date_parser.parse(date_start).date()
|
|
173
|
-
queries &= Q(storage_date__gte=date_start)
|
|
174
|
-
if date_end:
|
|
175
|
-
date_end = date_parser.parse(date_end).date()
|
|
176
|
-
queries &= Q(storage_date__lte=date_end)
|
|
177
|
-
|
|
178
|
-
if not date_start and not date_end:
|
|
179
|
-
queries &= Q(quantity__gt=F("total_consumed"))
|
|
180
|
-
ingredients = ingredients.annotate(
|
|
164
|
+
if not date_start:
|
|
165
|
+
ingredients = Ingredient.objects.annotate(
|
|
181
166
|
total_consumed=Coalesce(
|
|
182
167
|
Sum("consumptions__amount_used"), 0, output_field=IntegerField()
|
|
183
168
|
)
|
|
184
|
-
)
|
|
185
|
-
|
|
186
|
-
ingredients = ingredients.filter(queries).order_by(
|
|
187
|
-
"name", "storage_date", "meal_type__name", "category__name"
|
|
188
|
-
)
|
|
189
|
-
|
|
190
|
-
return ingredients
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
def get_date_range(ingredients):
|
|
194
|
-
date_start = ingredients.order_by("storage_date").first().storage_date
|
|
195
|
-
today = datetime.now().date()
|
|
196
|
-
date_end = (today.replace(day=1) + relativedelta(months=2)) - relativedelta(
|
|
197
|
-
days=1
|
|
198
|
-
)
|
|
199
|
-
date_range = list(pd.date_range(start=date_start, end=date_end))
|
|
200
|
-
date_range = [d.date() for d in date_range]
|
|
201
|
-
|
|
202
|
-
return date_range
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
@login_required
|
|
206
|
-
@require_POST
|
|
207
|
-
def new_consumption(request, consumption_id=None):
|
|
208
|
-
form = None
|
|
209
|
-
if consumption_id:
|
|
210
|
-
consumption = Consumption.objects.filter(
|
|
211
|
-
Q(pk=consumption_id)
|
|
212
|
-
& Q(ingredient__user=request.user)
|
|
169
|
+
).filter(
|
|
170
|
+
Q(quantity__gt=F("total_consumed"))
|
|
213
171
|
& Q(is_disabled=False)
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
if (
|
|
219
|
-
posted_amount_used.replace(".", "").isnumeric()
|
|
220
|
-
and Decimal(posted_amount_used).is_zero()
|
|
221
|
-
):
|
|
222
|
-
consumption.delete()
|
|
223
|
-
return HttpResponse("OK", status=201)
|
|
224
|
-
|
|
225
|
-
form = ConsumptionForm(request.POST, instance=consumption)
|
|
226
|
-
else:
|
|
227
|
-
return HttpResponse("Accepted", status=202)
|
|
172
|
+
& Q(is_ignorable=False)
|
|
173
|
+
& Q(user=request.user)
|
|
174
|
+
)
|
|
175
|
+
date_start = ingredients.order_by("storage_date").first().storage_date
|
|
228
176
|
|
|
229
177
|
else:
|
|
230
|
-
|
|
231
|
-
Q(user=request.user) & Q(pk=request.POST.get("ingredient"))
|
|
232
|
-
).first()
|
|
233
|
-
if not ingredient:
|
|
234
|
-
return HttpResponse("Accepted", status=202)
|
|
235
|
-
|
|
236
|
-
consumption = Consumption()
|
|
237
|
-
consumption.ingredient = ingredient
|
|
238
|
-
form = ConsumptionForm(request.POST, instance=consumption)
|
|
239
|
-
|
|
240
|
-
if form.is_valid() and not form.instance.is_disabled:
|
|
241
|
-
consumption = form.save(commit=False)
|
|
242
|
-
consumption.save()
|
|
243
|
-
return HttpResponse("OK", status=201)
|
|
244
|
-
|
|
245
|
-
return HttpResponse("Accepted", status=202)
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
@login_required
|
|
249
|
-
def create_consumptions(request, ingredient_id=None):
|
|
250
|
-
ingredients = get_consumption_ingredients(request)
|
|
251
|
-
date_range = None
|
|
252
|
-
if not ingredients:
|
|
253
|
-
return render(
|
|
254
|
-
request,
|
|
255
|
-
"canteen/consumption/create.html",
|
|
256
|
-
{"ingredients": ingredients, "date_range": date_range},
|
|
257
|
-
)
|
|
178
|
+
date_start = date_parser.parse(date_start).date()
|
|
258
179
|
|
|
259
|
-
date_range = get_date_range(ingredients)
|
|
260
180
|
date_end = request.GET.get("storage_date_end", None) or request.COOKIES.get(
|
|
261
181
|
"storage_date_end", None
|
|
262
182
|
)
|
|
263
|
-
if date_end:
|
|
183
|
+
if not date_end:
|
|
184
|
+
today = datetime.now().date()
|
|
185
|
+
date_end = (
|
|
186
|
+
today.replace(day=1) + relativedelta(months=2)
|
|
187
|
+
) - relativedelta(days=1)
|
|
188
|
+
else:
|
|
264
189
|
date_end = date_parser.parse(date_end).date()
|
|
265
|
-
|
|
190
|
+
|
|
191
|
+
date_range = list(pd.date_range(start=date_start, end=date_end))
|
|
192
|
+
date_range = [d.date() for d in date_range]
|
|
266
193
|
|
|
267
194
|
if ingredient_id:
|
|
268
195
|
ingredient = get_object_or_404(Ingredient, pk=ingredient_id)
|
|
@@ -304,8 +231,41 @@ def create_consumptions(request, ingredient_id=None):
|
|
|
304
231
|
"canteen/consumption/_create.html",
|
|
305
232
|
{"form_list": form_list},
|
|
306
233
|
)
|
|
234
|
+
by_week = (
|
|
235
|
+
request.GET.get("by_week", "") or request.COOKIES.get("by_week", "")
|
|
236
|
+
) == "true"
|
|
237
|
+
rapidly = (
|
|
238
|
+
request.GET.get("rapidly", "") or request.COOKIES.get("rapidly", "")
|
|
239
|
+
) == "true" or not by_week
|
|
240
|
+
|
|
241
|
+
queries = (
|
|
242
|
+
Q(storage_date__gte=date_start)
|
|
243
|
+
& Q(storage_date__lte=date_end)
|
|
244
|
+
& Q(user=request.user)
|
|
245
|
+
& Q(is_disabled=False)
|
|
246
|
+
& Q(is_ignorable=False)
|
|
247
|
+
)
|
|
248
|
+
ingredients = Ingredient.objects
|
|
249
|
+
print("by_week", by_week, "rapidly", rapidly)
|
|
250
|
+
ingredients = (
|
|
251
|
+
ingredients.filter(queries).order_by(
|
|
252
|
+
"name", "storage_date", "meal_type__name", "category__name"
|
|
253
|
+
)
|
|
254
|
+
if rapidly
|
|
255
|
+
else ingredients.filter(queries).order_by(
|
|
256
|
+
"storage_date", "meal_type__name", "name", "category__name"
|
|
257
|
+
)
|
|
258
|
+
)
|
|
307
259
|
|
|
308
260
|
ingredients = ingredients.all()
|
|
261
|
+
|
|
262
|
+
if not ingredients:
|
|
263
|
+
return render(
|
|
264
|
+
request,
|
|
265
|
+
"canteen/consumption/create.html",
|
|
266
|
+
{"ingredients": ingredients, "date_range": date_range},
|
|
267
|
+
)
|
|
268
|
+
|
|
309
269
|
ingredients_pinned = []
|
|
310
270
|
ingredients_unpinned = []
|
|
311
271
|
categories_top = Category.objects.filter(
|
|
@@ -341,6 +301,49 @@ def create_consumptions(request, ingredient_id=None):
|
|
|
341
301
|
)
|
|
342
302
|
|
|
343
303
|
|
|
304
|
+
@login_required
|
|
305
|
+
@require_POST
|
|
306
|
+
def new_consumption(request, consumption_id=None):
|
|
307
|
+
form = None
|
|
308
|
+
if consumption_id:
|
|
309
|
+
consumption = Consumption.objects.filter(
|
|
310
|
+
Q(pk=consumption_id)
|
|
311
|
+
& Q(ingredient__user=request.user)
|
|
312
|
+
& Q(is_disabled=False)
|
|
313
|
+
).first()
|
|
314
|
+
if consumption:
|
|
315
|
+
|
|
316
|
+
posted_amount_used = request.POST.get("amount_used")
|
|
317
|
+
if (
|
|
318
|
+
posted_amount_used.replace(".", "").isnumeric()
|
|
319
|
+
and Decimal(posted_amount_used).is_zero()
|
|
320
|
+
):
|
|
321
|
+
consumption.delete()
|
|
322
|
+
return HttpResponse("OK", status=201)
|
|
323
|
+
|
|
324
|
+
form = ConsumptionForm(request.POST, instance=consumption)
|
|
325
|
+
else:
|
|
326
|
+
return HttpResponse("Accepted", status=202)
|
|
327
|
+
|
|
328
|
+
else:
|
|
329
|
+
ingredient = Ingredient.objects.filter(
|
|
330
|
+
Q(user=request.user) & Q(pk=request.POST.get("ingredient"))
|
|
331
|
+
).first()
|
|
332
|
+
if not ingredient:
|
|
333
|
+
return HttpResponse("Accepted", status=202)
|
|
334
|
+
|
|
335
|
+
consumption = Consumption()
|
|
336
|
+
consumption.ingredient = ingredient
|
|
337
|
+
form = ConsumptionForm(request.POST, instance=consumption)
|
|
338
|
+
|
|
339
|
+
if form.is_valid() and not form.instance.is_disabled:
|
|
340
|
+
consumption = form.save(commit=False)
|
|
341
|
+
consumption.save()
|
|
342
|
+
return HttpResponse("OK", status=201)
|
|
343
|
+
|
|
344
|
+
return HttpResponse("Accepted", status=202)
|
|
345
|
+
|
|
346
|
+
|
|
344
347
|
@login_required()
|
|
345
348
|
def delete_ingredient(request, ingredient_id):
|
|
346
349
|
ingredient = get_object_or_404(Ingredient, pk=ingredient_id)
|
|
@@ -1819,9 +1819,12 @@ class CanteenWorkBook:
|
|
|
1819
1819
|
ingredient_name_cell.value = ingredient.name
|
|
1820
1820
|
if ingredient.name:
|
|
1821
1821
|
ingredient_name_cell.comment = Comment(
|
|
1822
|
-
_(
|
|
1822
|
+
_(
|
|
1823
|
+
"{meal_type} ({category}, Checked/Storaged at {storage_date})"
|
|
1824
|
+
).format(
|
|
1823
1825
|
meal_type=ingredient.meal_type,
|
|
1824
1826
|
category=ingredient.category,
|
|
1827
|
+
storage_date=ingredient.storage_date,
|
|
1825
1828
|
),
|
|
1826
1829
|
user.username,
|
|
1827
1830
|
)
|
|
Binary file
|
fnschoo1/manage.py
CHANGED
|
@@ -4,6 +4,23 @@ import os
|
|
|
4
4
|
import platform
|
|
5
5
|
import random
|
|
6
6
|
import sys
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
FNSCHOOL_PATH = Path(__file__).parent
|
|
10
|
+
if FNSCHOOL_PATH.as_posix() not in sys.path:
|
|
11
|
+
sys.path.insert(0, FNSCHOOL_PATH.as_posix())
|
|
12
|
+
|
|
13
|
+
system_name = platform.system()
|
|
14
|
+
is_linux = False
|
|
15
|
+
is_windows = False
|
|
16
|
+
is_macos = False
|
|
17
|
+
|
|
18
|
+
if system_name == "Linux":
|
|
19
|
+
is_linux = True
|
|
20
|
+
elif system_name == "Windows":
|
|
21
|
+
is_windows = True
|
|
22
|
+
elif system_name == "Darwin":
|
|
23
|
+
is_macos = True
|
|
7
24
|
|
|
8
25
|
|
|
9
26
|
def main():
|
|
@@ -18,6 +35,22 @@ def main():
|
|
|
18
35
|
"forget to activate a virtual environment?"
|
|
19
36
|
) from exc
|
|
20
37
|
|
|
38
|
+
os.chdir(FNSCHOOL_PATH)
|
|
39
|
+
sys.argv[0] = "manage.py"
|
|
40
|
+
|
|
41
|
+
if len(sys.argv) < 2:
|
|
42
|
+
local_port = str(random.randint(8080, 65530))
|
|
43
|
+
local_url = "http://127.0.0.1:" + local_port
|
|
44
|
+
sys.argv.append("runserver")
|
|
45
|
+
sys.argv.append(str(local_port))
|
|
46
|
+
try:
|
|
47
|
+
if is_windows:
|
|
48
|
+
os.startfile(local_url)
|
|
49
|
+
else:
|
|
50
|
+
os.system("open " + local_url + "&")
|
|
51
|
+
except Exception as e:
|
|
52
|
+
print(e)
|
|
53
|
+
|
|
21
54
|
execute_from_command_line(sys.argv)
|
|
22
55
|
|
|
23
56
|
|
fnschoo1/static/js/fnschool.js
CHANGED
|
@@ -9,7 +9,16 @@ function get_cookie(name) {
|
|
|
9
9
|
return null
|
|
10
10
|
}
|
|
11
11
|
function delete_cookie(name) {
|
|
12
|
-
document.cookie =
|
|
12
|
+
document.cookie =
|
|
13
|
+
name +
|
|
14
|
+
`=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${window.location.pathname}`
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function set_cookies(cookies) {
|
|
18
|
+
cookies = new Map(Object.entries(cookies))
|
|
19
|
+
for (var [key, value] of cookies) {
|
|
20
|
+
set_simple_cookie(key, value)
|
|
21
|
+
}
|
|
13
22
|
}
|
|
14
23
|
|
|
15
24
|
function set_simple_cookie(key, value) {
|
|
@@ -19,7 +28,7 @@ function set_simple_cookie(key, value) {
|
|
|
19
28
|
}
|
|
20
29
|
const expiryDate = new Date()
|
|
21
30
|
expiryDate.setFullYear(expiryDate.getFullYear() + 20)
|
|
22
|
-
document.cookie = `${key}=${value}; expires=${expiryDate.toUTCString()}; path
|
|
31
|
+
document.cookie = `${key}=${value}; expires=${expiryDate.toUTCString()}; path=${window.location.pathname}`
|
|
23
32
|
}
|
|
24
33
|
function update_href(query) {
|
|
25
34
|
query = new Map(Object.entries(query))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fnschool
|
|
3
|
-
Version: 20251013.
|
|
3
|
+
Version: 20251013.81919.815
|
|
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,5 +1,5 @@
|
|
|
1
|
-
fnschoo1/__init__.py,sha256=
|
|
2
|
-
fnschoo1/manage.py,sha256=
|
|
1
|
+
fnschoo1/__init__.py,sha256=WSDGaE349YUVvVkCJW2Z7ZyVBVTTahlxerGH_D7vSY0,197
|
|
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
|
|
@@ -7,7 +7,7 @@ fnschoo1/canteen/forms.py,sha256=4Y75VHpnONdN5hM8aShyr7tbQSElLa-22PQK7fDRflw,229
|
|
|
7
7
|
fnschoo1/canteen/models.py,sha256=20r24iNJW0hmPwhY96pQLYaIgqf8kc_Tx76IqORR_LE,5219
|
|
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=
|
|
10
|
+
fnschoo1/canteen/views.py,sha256=gY-dcBqIAxvZS5ToIHNijU-DDj2GAAaSnP31VTYHF_w,26269
|
|
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
|
|
@@ -28,7 +28,7 @@ fnschoo1/canteen/templates/canteen/category/delete.html,sha256=MnPyFzjO3HonOljwx
|
|
|
28
28
|
fnschoo1/canteen/templates/canteen/category/list.html,sha256=aj81uoA-jmdv8mZT-Y9DxjOHVGrSfI1z0DB1YnJWb4w,2045
|
|
29
29
|
fnschoo1/canteen/templates/canteen/category/update.html,sha256=8Nzdbe8UorrJHzElkrdqvLaPnUvcvGhrViZB4D86wqo,815
|
|
30
30
|
fnschoo1/canteen/templates/canteen/consumption/_create.html,sha256=lpST1R0vL1PEI1YE9d0-bcWWpCMH-INjIF-7pweAHuU,1008
|
|
31
|
-
fnschoo1/canteen/templates/canteen/consumption/create.html,sha256=
|
|
31
|
+
fnschoo1/canteen/templates/canteen/consumption/create.html,sha256=UQOwZ5yS5g98LSxzSdRxUCzzR5R_RID0DGkbq9M_HFc,15568
|
|
32
32
|
fnschoo1/canteen/templates/canteen/ingredient/close.html,sha256=pLYeJmGaOEJKMUJdZmYzz_n--l28IRDQ4fXvetP_Vsc,200
|
|
33
33
|
fnschoo1/canteen/templates/canteen/ingredient/create.html,sha256=xZvh0tP_cv2HPQ96JSHChO6Ni23tzHc5YJCUhE2yEqM,807
|
|
34
34
|
fnschoo1/canteen/templates/canteen/ingredient/create_one.html,sha256=O8EPSvAnEZ-4VJiwFdoyxJrMOoMpRkH6CyfvWwHaVgc,599
|
|
@@ -40,7 +40,7 @@ fnschoo1/canteen/templates/canteen/meal_type/delete.html,sha256=1UmCyXD-6lbYl-IE
|
|
|
40
40
|
fnschoo1/canteen/templates/canteen/meal_type/list.html,sha256=c5kJUE1OgpRtSrMV4wFwL_gbRSaX_XMM4Zt1JTx34_g,1907
|
|
41
41
|
fnschoo1/canteen/templates/canteen/meal_type/update.html,sha256=Rfv1TamSFIKHzvUNlgnmrPmfmzrehPpuo5Hv8VF0yek,818
|
|
42
42
|
fnschoo1/canteen/workbook/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
43
|
-
fnschoo1/canteen/workbook/generate.py,sha256=
|
|
43
|
+
fnschoo1/canteen/workbook/generate.py,sha256=1UUXdeGLdHFzZDGzMFOcoD6rsZtjRAzYFfKLpiRpVps,84102
|
|
44
44
|
fnschoo1/fnschool/__init__.py,sha256=TmHhzykpKNMoMf6eD-EKvbvmnlzs1XGHtvD55ae1sXs,287
|
|
45
45
|
fnschoo1/fnschool/asgi.py,sha256=kzkqosS10uBlyBX53EXcsATcvEZmac6nsPzyOHCuucE,393
|
|
46
46
|
fnschoo1/fnschool/settings.py,sha256=l9Y1iQCivSfmsNfnHltfXLzxP6gG4VMIL4GEZgAp8YM,4357
|
|
@@ -50,7 +50,7 @@ fnschoo1/fnschool/wsgi.py,sha256=dQq4S0vZWCz8w5R9KooJeLYTVFXvEgJRYe7NFZwVxU8,393
|
|
|
50
50
|
fnschoo1/fnschool/templatetags/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
51
51
|
fnschoo1/fnschool/templatetags/fnschool_tags.py,sha256=l5Zov4VlQKpz-69SFftP4kXyMymz-a0D5F_ss_eiFc4,568
|
|
52
52
|
fnschoo1/locale/en/LC_MESSAGES/django.mo,sha256=M8AB6fmjwlEd761iFlasNWdiEYfE-2nIwBoioGtEVUo,404
|
|
53
|
-
fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=
|
|
53
|
+
fnschoo1/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=LMXr4V7PzsK1AkSxnQmV1a6mDIdXRTJv3H-Om092BHc,19994
|
|
54
54
|
fnschoo1/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
55
|
fnschoo1/profiles/admin.py,sha256=93UCvdODI63KzCDfFFnKmfvCMGCp6FCG9WErE91i79Y,522
|
|
56
56
|
fnschoo1/profiles/apps.py,sha256=WDu6eceFnDkBFMqquAolMZMo7XPb0ah6l2q2AruTrl4,215
|
|
@@ -76,7 +76,7 @@ fnschoo1/static/css/fnschool.css,sha256=nPjOh0vWuuFnZWrXcT2E3j3adL77v_PRyeml65Mv
|
|
|
76
76
|
fnschoo1/static/images/favicon.ico,sha256=S8Tf0NsUdHnoYO0SEn-sig6YjB0atIpEtSlm7p1HxjY,5014
|
|
77
77
|
fnschoo1/static/js/bootstrap.bundle.min.js,sha256=6kw84LCFc4QJzifgkle0FsvQrpt2NVRNPNjSSc9caiM,125881
|
|
78
78
|
fnschoo1/static/js/bootstrap.min.js,sha256=0SHpZTHghUOz_BNedMzuH00z5lgwOSRKP_KI9G5Ogbk,88597
|
|
79
|
-
fnschoo1/static/js/fnschool.js,sha256=
|
|
79
|
+
fnschoo1/static/js/fnschool.js,sha256=A_IsEK7F_X83P-maARL5jDaQm90e1K48zAIv5r-34Vw,3019
|
|
80
80
|
fnschoo1/static/js/jquery.min.js,sha256=np_WnfpAmUmEO_iheFAJKf6mbm0_laW3Ns4x7kjSlt4,162505
|
|
81
81
|
fnschoo1/static/js/jquery.slim.min.js,sha256=p5YkbOjgHxX3hTadKlGuDW58NvJ1ldjjokDuDQ_5yXs,129962
|
|
82
82
|
fnschoo1/static/js/popper.min.js,sha256=O2xdmtEow7gq3I7-0lKjshvxHkBe0hTWrMkbX2fy0XQ,36887
|
|
@@ -93,9 +93,14 @@ fnschoo1/templates/includes/_navigation.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
|
|
|
93
93
|
fnschoo1/templates/includes/_paginator.html,sha256=Z-Hxcdmun4SJ1YcHnWTDLfW8wrngROiBTwr4NZWaPP4,1246
|
|
94
94
|
fnschoo1/templates/registration/logged_out.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
95
95
|
fnschoo1/templates/registration/login.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
96
|
-
fnschool-20251013.
|
|
97
|
-
fnschool-20251013.
|
|
98
|
-
fnschool-20251013.
|
|
99
|
-
fnschool-20251013.
|
|
100
|
-
fnschool-20251013.
|
|
101
|
-
fnschool-20251013.
|
|
96
|
+
fnschool-20251013.81919.815.dist-info/licenses/LICENSE,sha256=2n6rt7r999OuXp8iOqW9we7ORaxWncIbOwN1ILRGR2g,7651
|
|
97
|
+
fnschool-20251013.81919.815.dist-info/METADATA,sha256=yixkF9j3Fzj8y4Qz2QpRMoMB9rQwEV3_vJvgLfl7KZU,4752
|
|
98
|
+
fnschool-20251013.81919.815.dist-info/SOURCES.txt.py,sha256=2LY2mshgNtxI3ICB-oBjyMYgJk2bQqeGFM5J5ay5TQs,4954
|
|
99
|
+
fnschool-20251013.81919.815.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
100
|
+
fnschool-20251013.81919.815.dist-info/dependency_links.txt.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
101
|
+
fnschool-20251013.81919.815.dist-info/entry_points.txt,sha256=Ow5nChVFJY3O4TJAIE1ZydMev1MUtgRsT1b8eFP6728,54
|
|
102
|
+
fnschool-20251013.81919.815.dist-info/entry_points.txt.py,sha256=7iOwIx_m9Y6xJt___BZHWJh27LV5hqWnUjmj77MoRys,47
|
|
103
|
+
fnschool-20251013.81919.815.dist-info/requires.txt.py,sha256=PqRcHIQSMPUb271hacYrlSDHwB1WDZmlWUkh6RnBz_g,113
|
|
104
|
+
fnschool-20251013.81919.815.dist-info/top_level.txt,sha256=s6ZKnNm94Q0-247a50eI7jDK98uPF6P2kC9Ovd3LUlM,9
|
|
105
|
+
fnschool-20251013.81919.815.dist-info/top_level.txt.py,sha256=_7CbrSihm0dzBn_tTy2ass_Y2VlkVNT2eylE8mcfwHY,9
|
|
106
|
+
fnschool-20251013.81919.815.dist-info/RECORD,,
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
XXXXXXX
|
|
2
|
+
XXXXXXXXX
|
|
3
|
+
XXXXXXXXXXXXXX
|
|
4
|
+
XXXXXXXXXXXXXXXXXXXXXXXX
|
|
5
|
+
XXXXXXXXXXXXXXXXXXXXXX
|
|
6
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
7
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
8
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
9
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
10
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
11
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
12
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
13
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
14
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
15
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
16
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
17
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
18
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
19
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
20
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
21
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
22
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
23
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
24
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
25
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
26
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
27
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
28
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
29
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
30
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
31
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
32
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
33
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
34
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
35
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
36
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
37
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
38
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
39
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
40
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
41
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
42
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
43
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
44
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
45
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
46
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
47
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
48
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
49
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
50
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
51
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
52
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
53
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
54
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
55
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
56
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
57
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
58
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
59
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
60
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
61
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
62
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
63
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
64
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
65
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
66
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
67
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
68
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
69
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
70
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
71
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
72
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
73
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
74
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
75
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
76
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
77
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
78
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
79
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
80
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
81
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
82
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
83
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
84
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
85
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
86
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
87
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
88
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
89
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
90
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
91
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
92
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
93
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
94
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
95
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
96
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
97
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
98
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
99
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
100
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
101
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
102
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
103
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
104
|
+
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
XXXXXXXX
|
|
File without changes
|
{fnschool-20251013.81200.824.dist-info → fnschool-20251013.81919.815.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
{fnschool-20251013.81200.824.dist-info → fnschool-20251013.81919.815.dist-info}/top_level.txt
RENAMED
|
File without changes
|