sandwitches 2.3.0__py3-none-any.whl → 2.3.2__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.
- sandwitches/api.py +22 -1
- sandwitches/forms.py +36 -0
- sandwitches/management/__init__.py +0 -0
- sandwitches/management/commands/__init__.py +0 -0
- sandwitches/management/commands/reset_daily_orders.py +14 -0
- sandwitches/migrations/0008_historicalrecipe_daily_orders_count_and_more.py +36 -0
- sandwitches/migrations/0009_historicalrecipe_is_approved_recipe_is_approved.py +22 -0
- sandwitches/migrations/0010_rename_is_approved_historicalrecipe_is_community_made_and_more.py +22 -0
- sandwitches/migrations/0011_alter_historicalrecipe_is_community_made_and_more.py +25 -0
- sandwitches/models.py +28 -1
- sandwitches/settings.py +1 -0
- sandwitches/tasks.py +74 -0
- sandwitches/templates/admin/admin_base.html +8 -4
- sandwitches/templates/admin/dashboard.html +132 -69
- sandwitches/templates/admin/order_list.html +30 -0
- sandwitches/templates/admin/partials/dashboard_charts.html +90 -0
- sandwitches/templates/admin/partials/order_rows.html +28 -0
- sandwitches/templates/admin/rating_list.html +2 -0
- sandwitches/templates/admin/recipe_form.html +26 -0
- sandwitches/templates/admin/recipe_list.html +65 -15
- sandwitches/templates/base.html +12 -0
- sandwitches/templates/{recipe_form.html → community.html} +30 -8
- sandwitches/templates/components/recipe_header.html +9 -0
- sandwitches/templates/components/side_menu.html +4 -0
- sandwitches/templates/profile.html +1 -1
- sandwitches/urls.py +8 -0
- sandwitches/views.py +178 -21
- {sandwitches-2.3.0.dist-info → sandwitches-2.3.2.dist-info}/METADATA +1 -1
- {sandwitches-2.3.0.dist-info → sandwitches-2.3.2.dist-info}/RECORD +30 -20
- {sandwitches-2.3.0.dist-info → sandwitches-2.3.2.dist-info}/WHEEL +0 -0
sandwitches/views.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from django.core.exceptions import ValidationError
|
|
1
3
|
from django.shortcuts import render, get_object_or_404, redirect
|
|
2
4
|
from django.urls import reverse
|
|
3
5
|
from django.contrib import messages
|
|
@@ -6,7 +8,7 @@ from django.contrib.auth import get_user_model
|
|
|
6
8
|
from django.contrib.auth.decorators import login_required
|
|
7
9
|
from django.contrib.admin.views.decorators import staff_member_required
|
|
8
10
|
from django.utils.translation import gettext as _
|
|
9
|
-
from .models import Recipe, Rating, Tag
|
|
11
|
+
from .models import Recipe, Rating, Tag, Order
|
|
10
12
|
from .forms import (
|
|
11
13
|
RecipeForm,
|
|
12
14
|
AdminSetupForm,
|
|
@@ -15,10 +17,11 @@ from .forms import (
|
|
|
15
17
|
UserEditForm,
|
|
16
18
|
TagForm,
|
|
17
19
|
UserProfileForm,
|
|
20
|
+
UserRecipeSubmissionForm,
|
|
18
21
|
)
|
|
19
|
-
from django.http import HttpResponseBadRequest
|
|
22
|
+
from django.http import HttpResponseBadRequest, Http404
|
|
20
23
|
from django.conf import settings
|
|
21
|
-
from django.http import FileResponse
|
|
24
|
+
from django.http import FileResponse
|
|
22
25
|
from pathlib import Path
|
|
23
26
|
import mimetypes
|
|
24
27
|
from PIL import Image
|
|
@@ -32,6 +35,50 @@ from sandwitches import __version__ as sandwitches_version
|
|
|
32
35
|
User = get_user_model()
|
|
33
36
|
|
|
34
37
|
|
|
38
|
+
@login_required
|
|
39
|
+
def community(request):
|
|
40
|
+
if request.method == "POST":
|
|
41
|
+
form = UserRecipeSubmissionForm(request.POST, request.FILES)
|
|
42
|
+
if form.is_valid():
|
|
43
|
+
recipe = form.save(commit=False)
|
|
44
|
+
recipe.uploaded_by = request.user
|
|
45
|
+
recipe.is_community_made = True
|
|
46
|
+
recipe.save()
|
|
47
|
+
form.save_m2m()
|
|
48
|
+
messages.success(
|
|
49
|
+
request,
|
|
50
|
+
_("Your recipe has been submitted and is awaiting admin approval."),
|
|
51
|
+
)
|
|
52
|
+
return redirect("user_profile")
|
|
53
|
+
else:
|
|
54
|
+
form = UserRecipeSubmissionForm()
|
|
55
|
+
|
|
56
|
+
# Community recipes = non-staff uploaded
|
|
57
|
+
recipes = Recipe.objects.filter(is_community_made=True).prefetch_related( # ty:ignore[unresolved-attribute]
|
|
58
|
+
"favorited_by"
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
if not request.user.is_staff:
|
|
62
|
+
# Regular users only see approved community recipes or their own
|
|
63
|
+
recipes = recipes.filter(
|
|
64
|
+
Q(is_community_made=True) | Q(uploaded_by=request.user)
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
recipes = recipes.order_by("-created_at")
|
|
68
|
+
|
|
69
|
+
return render(
|
|
70
|
+
request,
|
|
71
|
+
"community.html",
|
|
72
|
+
{
|
|
73
|
+
"form": form,
|
|
74
|
+
"recipes": recipes,
|
|
75
|
+
"title": _("Community"),
|
|
76
|
+
"version": sandwitches_version,
|
|
77
|
+
"user": request.user,
|
|
78
|
+
},
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
|
|
35
82
|
class CustomLoginView(LoginView):
|
|
36
83
|
template_name = "login.html"
|
|
37
84
|
redirect_authenticated_user = True
|
|
@@ -88,6 +135,15 @@ def admin_dashboard(request):
|
|
|
88
135
|
.order_by("date")
|
|
89
136
|
)
|
|
90
137
|
|
|
138
|
+
# Orders over time
|
|
139
|
+
order_data = (
|
|
140
|
+
Order.objects.filter(created_at__date__range=(start_date, end_date)) # ty:ignore[unresolved-attribute]
|
|
141
|
+
.annotate(date=TruncDate("created_at"))
|
|
142
|
+
.values("date")
|
|
143
|
+
.annotate(count=Count("id"))
|
|
144
|
+
.order_by("date")
|
|
145
|
+
)
|
|
146
|
+
|
|
91
147
|
# Prepare labels and data for JS
|
|
92
148
|
recipe_labels = [d["date"].strftime("%d/%m/%Y") for d in recipe_data]
|
|
93
149
|
recipe_counts = [d["count"] for d in recipe_data]
|
|
@@ -95,36 +151,72 @@ def admin_dashboard(request):
|
|
|
95
151
|
rating_labels = [d["date"].strftime("%d/%m/%Y") for d in rating_data]
|
|
96
152
|
rating_avgs = [float(d["avg"]) for d in rating_data]
|
|
97
153
|
|
|
154
|
+
order_labels = [d["date"].strftime("%d/%m/%Y") for d in order_data]
|
|
155
|
+
order_counts = [d["count"] for d in order_data]
|
|
156
|
+
|
|
157
|
+
pending_recipes = Recipe.objects.filter( # ty:ignore[unresolved-attribute]
|
|
158
|
+
uploaded_by__is_staff=False, uploaded_by__is_superuser=False
|
|
159
|
+
).order_by("-created_at")
|
|
160
|
+
context = {
|
|
161
|
+
"recipe_count": recipe_count,
|
|
162
|
+
"user_count": user_count,
|
|
163
|
+
"tag_count": tag_count,
|
|
164
|
+
"recent_recipes": recent_recipes,
|
|
165
|
+
"pending_recipes": pending_recipes,
|
|
166
|
+
"recipe_labels": recipe_labels,
|
|
167
|
+
"recipe_counts": recipe_counts,
|
|
168
|
+
"rating_labels": rating_labels,
|
|
169
|
+
"rating_avgs": rating_avgs,
|
|
170
|
+
"order_labels": order_labels,
|
|
171
|
+
"order_counts": order_counts,
|
|
172
|
+
"start_date": start_date.strftime("%Y-%m-%d"),
|
|
173
|
+
"end_date": end_date.strftime("%Y-%m-%d"),
|
|
174
|
+
"version": sandwitches_version,
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if request.headers.get("HX-Request"):
|
|
178
|
+
return render(request, "admin/partials/dashboard_charts.html", context)
|
|
179
|
+
|
|
98
180
|
return render(
|
|
99
181
|
request,
|
|
100
182
|
"admin/dashboard.html",
|
|
101
|
-
|
|
102
|
-
"recipe_count": recipe_count,
|
|
103
|
-
"user_count": user_count,
|
|
104
|
-
"tag_count": tag_count,
|
|
105
|
-
"recent_recipes": recent_recipes,
|
|
106
|
-
"recipe_labels": recipe_labels,
|
|
107
|
-
"recipe_counts": recipe_counts,
|
|
108
|
-
"rating_labels": rating_labels,
|
|
109
|
-
"rating_avgs": rating_avgs,
|
|
110
|
-
"start_date": start_date.strftime("%Y-%m-%d"),
|
|
111
|
-
"end_date": end_date.strftime("%Y-%m-%d"),
|
|
112
|
-
"version": sandwitches_version,
|
|
113
|
-
},
|
|
183
|
+
context,
|
|
114
184
|
)
|
|
115
185
|
|
|
116
186
|
|
|
117
187
|
@staff_member_required
|
|
118
188
|
def admin_recipe_list(request):
|
|
189
|
+
sort_param = request.GET.get("sort", "-created_at")
|
|
190
|
+
allowed_sorts = {
|
|
191
|
+
"title": "title",
|
|
192
|
+
"-title": "-title",
|
|
193
|
+
"created_at": "created_at",
|
|
194
|
+
"-created_at": "-created_at",
|
|
195
|
+
"uploader": "uploaded_by__username",
|
|
196
|
+
"-uploader": "-uploaded_by__username",
|
|
197
|
+
"price": "price",
|
|
198
|
+
"-price": "-price",
|
|
199
|
+
"orders": "daily_orders_count",
|
|
200
|
+
"-orders": "-daily_orders_count",
|
|
201
|
+
"rating": "avg_rating",
|
|
202
|
+
"-rating": "-avg_rating",
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
order_by = allowed_sorts.get(sort_param, "-created_at")
|
|
206
|
+
|
|
119
207
|
recipes = (
|
|
120
208
|
Recipe.objects.annotate(avg_rating=Avg("ratings__score")) # ty:ignore[unresolved-attribute]
|
|
121
209
|
.prefetch_related("tags")
|
|
122
|
-
.
|
|
210
|
+
.order_by(order_by)
|
|
123
211
|
)
|
|
124
212
|
return render(
|
|
125
213
|
request,
|
|
126
214
|
"admin/recipe_list.html",
|
|
127
|
-
{
|
|
215
|
+
{
|
|
216
|
+
"recipes": recipes,
|
|
217
|
+
"version": sandwitches_version,
|
|
218
|
+
"current_sort": sort_param,
|
|
219
|
+
},
|
|
128
220
|
)
|
|
129
221
|
|
|
130
222
|
|
|
@@ -171,6 +263,17 @@ def admin_recipe_edit(request, pk):
|
|
|
171
263
|
)
|
|
172
264
|
|
|
173
265
|
|
|
266
|
+
@staff_member_required
|
|
267
|
+
def admin_recipe_approve(request, pk):
|
|
268
|
+
recipe = get_object_or_404(Recipe, pk=pk)
|
|
269
|
+
recipe.is_community_made = True
|
|
270
|
+
recipe.save()
|
|
271
|
+
messages.success(
|
|
272
|
+
request, _("Recipe '%(title)s' approved.") % {"title": recipe.title}
|
|
273
|
+
)
|
|
274
|
+
return redirect("admin_recipe_list")
|
|
275
|
+
|
|
276
|
+
|
|
174
277
|
@staff_member_required
|
|
175
278
|
def admin_recipe_delete(request, pk):
|
|
176
279
|
recipe = get_object_or_404(Recipe, pk=pk)
|
|
@@ -366,8 +469,38 @@ def admin_rating_delete(request, pk):
|
|
|
366
469
|
)
|
|
367
470
|
|
|
368
471
|
|
|
472
|
+
@staff_member_required
|
|
473
|
+
def admin_order_list(request):
|
|
474
|
+
orders = (
|
|
475
|
+
Order.objects.select_related("user", "recipe") # ty:ignore[unresolved-attribute]
|
|
476
|
+
.all()
|
|
477
|
+
.order_by("-created_at")
|
|
478
|
+
)
|
|
479
|
+
|
|
480
|
+
if request.headers.get("HX-Request"):
|
|
481
|
+
return render(
|
|
482
|
+
request,
|
|
483
|
+
"admin/partials/order_rows.html",
|
|
484
|
+
{"orders": orders, "version": sandwitches_version},
|
|
485
|
+
)
|
|
486
|
+
|
|
487
|
+
return render(
|
|
488
|
+
request,
|
|
489
|
+
"admin/order_list.html",
|
|
490
|
+
{"orders": orders, "version": sandwitches_version},
|
|
491
|
+
)
|
|
492
|
+
|
|
493
|
+
|
|
369
494
|
def recipe_detail(request, slug):
|
|
370
495
|
recipe = get_object_or_404(Recipe, slug=slug)
|
|
496
|
+
|
|
497
|
+
if not recipe.is_community_made:
|
|
498
|
+
if not (
|
|
499
|
+
request.user.is_authenticated
|
|
500
|
+
and (request.user.is_staff or recipe.uploaded_by == request.user)
|
|
501
|
+
):
|
|
502
|
+
raise Http404("Recipe not found or pending approval.")
|
|
503
|
+
|
|
371
504
|
avg = recipe.average_rating()
|
|
372
505
|
count = recipe.rating_count()
|
|
373
506
|
user_rating = None
|
|
@@ -401,6 +534,28 @@ def recipe_detail(request, slug):
|
|
|
401
534
|
)
|
|
402
535
|
|
|
403
536
|
|
|
537
|
+
@login_required
|
|
538
|
+
def order_recipe(request, pk):
|
|
539
|
+
"""
|
|
540
|
+
Create an order for the given recipe by the logged-in user.
|
|
541
|
+
"""
|
|
542
|
+
recipe = get_object_or_404(Recipe, pk=pk)
|
|
543
|
+
if request.method != "POST":
|
|
544
|
+
return redirect("recipe_detail", slug=recipe.slug)
|
|
545
|
+
|
|
546
|
+
try:
|
|
547
|
+
order = Order.objects.create(user=request.user, recipe=recipe) # ty:ignore[unresolved-attribute]
|
|
548
|
+
logging.debug(f"Created {order}")
|
|
549
|
+
messages.success(
|
|
550
|
+
request,
|
|
551
|
+
_("Your order for %(title)s has been submitted!") % {"title": recipe.title},
|
|
552
|
+
)
|
|
553
|
+
except (ValidationError, ValueError) as e:
|
|
554
|
+
messages.error(request, str(e))
|
|
555
|
+
|
|
556
|
+
return redirect("recipe_detail", slug=recipe.slug)
|
|
557
|
+
|
|
558
|
+
|
|
404
559
|
@login_required
|
|
405
560
|
def recipe_rate(request, pk):
|
|
406
561
|
"""
|
|
@@ -510,9 +665,11 @@ def favorites(request):
|
|
|
510
665
|
def index(request):
|
|
511
666
|
if not User.objects.filter(is_superuser=True).exists():
|
|
512
667
|
return redirect("setup")
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
668
|
+
|
|
669
|
+
recipes = Recipe.objects.all().prefetch_related("favorited_by") # ty:ignore[unresolved-attribute]
|
|
670
|
+
|
|
671
|
+
# Only show "normal" recipes (uploaded by staff or no uploader)
|
|
672
|
+
recipes = recipes.filter(Q(is_community_made=False))
|
|
516
673
|
|
|
517
674
|
# Filtering
|
|
518
675
|
q = request.GET.get("q")
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
sandwitches/__init__.py,sha256=YTDsQDSdJmxV2Z0dTbBqZhuJRuXcNLSKL0SX73Lu2u8,195
|
|
2
2
|
sandwitches/admin.py,sha256=-02WqE8U3rxrVCoNB7sfvtyE4v_e3pt7mFwXfUlindo,2421
|
|
3
|
-
sandwitches/api.py,sha256=
|
|
3
|
+
sandwitches/api.py,sha256=ruD5QeOPY-l9PvkJQiaOYoI0sRARDpqpFrFDgBxo9cQ,6389
|
|
4
4
|
sandwitches/asgi.py,sha256=cygnXdXSSVspM7ZXuj47Ef6oz7HSTw4D7BPzgE2PU5w,399
|
|
5
5
|
sandwitches/feeds.py,sha256=iz1d11dV0utA0ZNsB7VIAp0h8Zr5mFNSKJWHbw_j6YM,683
|
|
6
|
-
sandwitches/forms.py,sha256=
|
|
6
|
+
sandwitches/forms.py,sha256=rcXAL-Dn1gY3mWIPV9X9tZpFp2z6Xrkv6k9f2YUp8OU,7158
|
|
7
7
|
sandwitches/locale/nl/LC_MESSAGES/django.mo,sha256=EzQWzIhz_Na3w9AS7F-YjB-Xv63t4sMRSAkEQ1-g32M,5965
|
|
8
8
|
sandwitches/locale/nl/LC_MESSAGES/django.po,sha256=znxspEoMwkmktusZtbVrt1KG1LDUwIEi4ZEIE3XGeoI,25904
|
|
9
|
+
sandwitches/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
sandwitches/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
sandwitches/management/commands/reset_daily_orders.py,sha256=PrGPFfJ7r3J1SYYgyU5YDaFVvc7uvMGzkkePL07GDyo,480
|
|
9
12
|
sandwitches/migrations/0001_initial.py,sha256=hXnCAhoA91C6YCinXyUdIfQ7QL29NPBHFfTqLgulMsY,12507
|
|
10
13
|
sandwitches/migrations/0002_historicalrecipe_servings_recipe_servings.py,sha256=8E09y99FdVNzaQMn8R1d5zEcCN9jZICVCTW8MsGRBqs,743
|
|
11
14
|
sandwitches/migrations/0003_setting.py,sha256=DmugIrz0Wtftx7B0MrX6ms34j60kSOwcPz1sLRP4wE0,1200
|
|
@@ -13,25 +16,33 @@ sandwitches/migrations/0004_alter_setting_ai_api_key_and_more.py,sha256=516vcSxW
|
|
|
13
16
|
sandwitches/migrations/0005_rating_comment.py,sha256=MRlTZkyATH1aJdkaesPlPkXkYt-mzqBik-MCcNrbLRI,398
|
|
14
17
|
sandwitches/migrations/0006_historicalrecipe_is_highlighted_and_more.py,sha256=BBCx4uxPK9udqsJ6qkoYpZ_3tH4uujquj9j0Gm7Ff6w,566
|
|
15
18
|
sandwitches/migrations/0007_historicalrecipe_price_recipe_price_order.py,sha256=o-hsVK39ArT_KkSkMnZfhCTQu66v81P6LbZPqRxjonU,2793
|
|
19
|
+
sandwitches/migrations/0008_historicalrecipe_daily_orders_count_and_more.py,sha256=PyjettGABOcH6ryCXApOpEPNKBIs23AFIK302uQxpiY,1105
|
|
20
|
+
sandwitches/migrations/0009_historicalrecipe_is_approved_recipe_is_approved.py,sha256=XP76J2_HiMOFeIU17Yu8AYXtswE-dcsNZq3lJGFgGtg,588
|
|
21
|
+
sandwitches/migrations/0010_rename_is_approved_historicalrecipe_is_community_made_and_more.py,sha256=9Xv-rBRUvx5UWbr7i4BeWbllCcVkcNuC8T3sxKSdWyU,575
|
|
22
|
+
sandwitches/migrations/0011_alter_historicalrecipe_is_community_made_and_more.py,sha256=O2D57bAsSwBklYqfMTWrHE3Zxj3lrk-CO9yDP8sQS0M,659
|
|
16
23
|
sandwitches/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
-
sandwitches/models.py,sha256=
|
|
18
|
-
sandwitches/settings.py,sha256=
|
|
24
|
+
sandwitches/models.py,sha256=MmSP1P7Kq2ObjYTJs9AKTEVeWcD5-Pqumj1BTnmBqTc,9986
|
|
25
|
+
sandwitches/settings.py,sha256=5_eQAJCAV093hnhr3XOxHekT4IF-PEJcRiTecq71_SQ,5841
|
|
19
26
|
sandwitches/storage.py,sha256=ibBG6tVtArqzgEKsRimZPwsqW7i9j4WiPLLHrOJchow,3578
|
|
20
|
-
sandwitches/tasks.py,sha256=
|
|
21
|
-
sandwitches/templates/admin/admin_base.html,sha256=
|
|
27
|
+
sandwitches/tasks.py,sha256=YiliAT2rj0fh7hrwKq5_qWtv9AGhd5iulj_iBwZBBKg,6024
|
|
28
|
+
sandwitches/templates/admin/admin_base.html,sha256=Mzq0A6Pl-x61gXv15XegW26X7HKHS0aGcAD-WBSwSG4,4249
|
|
22
29
|
sandwitches/templates/admin/confirm_delete.html,sha256=HfsZI_gV8JQTKz215TYgPWBrgrFhGv1UB3N-0Hln-14,804
|
|
23
|
-
sandwitches/templates/admin/dashboard.html,sha256=
|
|
24
|
-
sandwitches/templates/admin/
|
|
25
|
-
sandwitches/templates/admin/
|
|
26
|
-
sandwitches/templates/admin/
|
|
30
|
+
sandwitches/templates/admin/dashboard.html,sha256=TVrf91iue7w3B9JA3L2cGggAx0UfcSL44zxm8rmStE4,5887
|
|
31
|
+
sandwitches/templates/admin/order_list.html,sha256=eHFUn2speXaaj5_SFUG0Z0HfWVUR9-VCDRBeb8ufFb0,819
|
|
32
|
+
sandwitches/templates/admin/partials/dashboard_charts.html,sha256=NYrt-LDZO4__2KDWhAYL5K_f-2Zgj0iiuaZQiRZlBWg,3639
|
|
33
|
+
sandwitches/templates/admin/partials/order_rows.html,sha256=Ye35liahKbQ3rqa6fIGSTwb7seoXoqyqSw0wyNq2C_o,893
|
|
34
|
+
sandwitches/templates/admin/rating_list.html,sha256=8CHAsBfKfs4izhb-IyOiDjJXqAZxFcStoRSGh4pRlgM,1365
|
|
35
|
+
sandwitches/templates/admin/recipe_form.html,sha256=OpDnsB6WsoC45POtil54qHGn93P4A3DiccKVisM5NGM,8746
|
|
36
|
+
sandwitches/templates/admin/recipe_list.html,sha256=cVsAm1TRP4bsE7rkcxIVsThKs3FLr5MWvebSvJoRmAo,5365
|
|
27
37
|
sandwitches/templates/admin/tag_form.html,sha256=JRWgAl4fz_Oy-Kuo1K6Mex_CXdsHMABzzyPazthr1Kg,989
|
|
28
38
|
sandwitches/templates/admin/tag_list.html,sha256=ttxwXgfdxkEs4Cmrz5RHaGmaqLd7JDmWhjv80XIQqyw,1246
|
|
29
39
|
sandwitches/templates/admin/task_detail.html,sha256=dO5zHOG-yTY1ly3VPA3o3jjie0wmxw0gdddtSKpN-W8,3825
|
|
30
40
|
sandwitches/templates/admin/task_list.html,sha256=3YF7YQ3nbXnWjApKeA07Z7HkhdMuH4s6sLoN7gwg0eE,1535
|
|
31
41
|
sandwitches/templates/admin/user_form.html,sha256=7_6GShLROFeJJexL1XLFUXdW9_lYF87eT6cigB5bQo4,1314
|
|
32
42
|
sandwitches/templates/admin/user_list.html,sha256=6O1YctULY-tqJnagybJof9ERA_NL1LX_a8cAu6_aWVQ,2193
|
|
33
|
-
sandwitches/templates/base.html,sha256=
|
|
43
|
+
sandwitches/templates/base.html,sha256=mwCESNirfvvdyMg2e1Siy_LA8fLH29m0aS_Jv0Qom4U,3597
|
|
34
44
|
sandwitches/templates/base_beer.html,sha256=4QgU4_gu_RRMtimmRAhATDJ3mj_WANxtilQJYNgAL60,2077
|
|
45
|
+
sandwitches/templates/community.html,sha256=6x-Z8E0W3Ii-d0aG7DdCJoWQM9bVKNP_NSP8fTqpo6o,5324
|
|
35
46
|
sandwitches/templates/components/carousel_scripts.html,sha256=9vEL5JJv8zUUjEtsnHW-BwwXUNWqQ6w_vf6UdxgEv_I,1934
|
|
36
47
|
sandwitches/templates/components/favorites_search_form.html,sha256=tpD8SpS47TUDJBwxhMuvjhTN9pjWoRGFW50TBv48Ld4,5202
|
|
37
48
|
sandwitches/templates/components/footer.html,sha256=Qk-myRtXS6-1b3fMowVGnSuFb_UkUgX6BYX9zgh_SV8,486
|
|
@@ -41,27 +52,26 @@ sandwitches/templates/components/instructions_section.html,sha256=RFlA4uPiI6vf1e
|
|
|
41
52
|
sandwitches/templates/components/language_dialog.html,sha256=iz-6QhFe4f_dsVhGDhVx6KKKLgQz4grX8tbIqSQjDsg,1184
|
|
42
53
|
sandwitches/templates/components/navbar.html,sha256=X2qOPHhVrSl4TkTk4YY-60YjpwCG7IEe4L6a9ywMih4,1164
|
|
43
54
|
sandwitches/templates/components/rating_section.html,sha256=8O5IsFfQwnElMQZLnDpJiuCvvQMLa3jCS67u_RhMi7o,2717
|
|
44
|
-
sandwitches/templates/components/recipe_header.html,sha256=
|
|
55
|
+
sandwitches/templates/components/recipe_header.html,sha256=jH9bnT6tis3OuePBq-xzP87IIx2ipDTuw2LO0BQwLXg,1996
|
|
45
56
|
sandwitches/templates/components/search_form.html,sha256=B8579Jo44gLrlmvkkc2-Vuv_QD93Ljt6F2J1WgTDV60,6617
|
|
46
57
|
sandwitches/templates/components/search_scripts.html,sha256=HvsO5e50DoTZeoFiYeNP5S8S5h7Zfr9VULOWKKR1i_M,3423
|
|
47
|
-
sandwitches/templates/components/side_menu.html,sha256=
|
|
58
|
+
sandwitches/templates/components/side_menu.html,sha256=qXYyk8W-GnG-u_mJ65ADa4HWfUa2ubxnQAKwxwacF9M,1787
|
|
48
59
|
sandwitches/templates/components/user_menu.html,sha256=c20cBpyLheGvHdQ5nn-c4fjNlhfnAt3FAsw1V46rTwQ,369
|
|
49
60
|
sandwitches/templates/detail.html,sha256=g-O_RsW9Ix9ivWC0nZ4FwHY2NhgYZ3bEGLpqGY0JSxg,5642
|
|
50
61
|
sandwitches/templates/favorites.html,sha256=0cPpW07N6Isrb8XpvA5Eh97L2-12QFZ43EzeJvbOlXo,917
|
|
51
62
|
sandwitches/templates/index.html,sha256=7anU7k8s80JYk59Rwsm8EdlNYd7B5clCvV7pKq2IUy0,2518
|
|
52
63
|
sandwitches/templates/login.html,sha256=LiQskhkOkfx0EE4ssA1ToqQ3oEll08OPYLDIkLjHfU8,2177
|
|
53
64
|
sandwitches/templates/partials/recipe_list.html,sha256=oF5zlgAyX_uG63BwulyhFywrn8QLnWXatXVtZPVcPmE,4186
|
|
54
|
-
sandwitches/templates/profile.html,sha256=
|
|
55
|
-
sandwitches/templates/recipe_form.html,sha256=TzdlzeSqUoJTDTuCdFbeF5jCBZUTZEtlTIC_IQM3WL8,4754
|
|
65
|
+
sandwitches/templates/profile.html,sha256=PQTL6_xn0pGUxqEOYuz5j0pmqAyG0Wr3KvyFBO8_k1s,4156
|
|
56
66
|
sandwitches/templates/setup.html,sha256=iNveFgePATsCSO4XMbGPa8TnWHyvj8S_5WwcW6i7pbo,4661
|
|
57
67
|
sandwitches/templates/signup.html,sha256=pNBSlRGZI_B5ccF3dWpUgWBcjODkdLlq7HhyJLYIHCI,6176
|
|
58
68
|
sandwitches/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
69
|
sandwitches/templatetags/custom_filters.py,sha256=0KDFlFz4b5LwlcURBAmzyYWKKea-LwydZytJGVkkuKA,243
|
|
60
70
|
sandwitches/templatetags/markdown_extras.py,sha256=0ibmRzxE3r85x4k7kK71R-9UT0CgeegYF7MHzj3juTI,344
|
|
61
|
-
sandwitches/urls.py,sha256=
|
|
71
|
+
sandwitches/urls.py,sha256=4VeccEtx2dz-Y8IjqD7Cj24nnd89PteoXo2NUUfWJiU,4339
|
|
62
72
|
sandwitches/utils.py,sha256=SJP-TkeRZ0OIfaMigYrOSbxRqYXswoqoWhwll3nFuAM,7245
|
|
63
|
-
sandwitches/views.py,sha256=
|
|
73
|
+
sandwitches/views.py,sha256=bFe1y8FJ00Tke6yUJteY0j3VysXUsZJkuQXmmbK_yso,25876
|
|
64
74
|
sandwitches/wsgi.py,sha256=Eyncpnahq_4s3Lr9ruB-R3Lu9j9zBXqgPbUj7qhIbwU,399
|
|
65
|
-
sandwitches-2.3.
|
|
66
|
-
sandwitches-2.3.
|
|
67
|
-
sandwitches-2.3.
|
|
75
|
+
sandwitches-2.3.2.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
76
|
+
sandwitches-2.3.2.dist-info/METADATA,sha256=tlOlPIGVWSb4EILVME-FpZDSQTqfDLtrQZGB_nQjtII,3111
|
|
77
|
+
sandwitches-2.3.2.dist-info/RECORD,,
|
|
File without changes
|