sandwitches 2.3.3__py3-none-any.whl → 2.4.1__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/admin.py +10 -2
- sandwitches/forms.py +66 -6
- sandwitches/migrations/0012_rename_is_community_made_historicalrecipe_is_approved_and_more.py +22 -0
- sandwitches/migrations/0013_cartitem.py +55 -0
- sandwitches/migrations/0014_ensure_groups_exist.py +22 -0
- sandwitches/migrations/0015_order_completed_alter_order_status_and_more.py +56 -0
- sandwitches/models.py +35 -2
- sandwitches/templates/admin/admin_base.html +4 -0
- sandwitches/templates/admin/dashboard.html +1 -0
- sandwitches/templates/admin/partials/order_rows.html +1 -1
- sandwitches/templates/admin/recipe_approval_list.html +56 -0
- sandwitches/templates/admin/recipe_form.html +115 -20
- sandwitches/templates/admin/recipe_list.html +1 -1
- sandwitches/templates/cart.html +102 -0
- sandwitches/templates/community.html +111 -14
- sandwitches/templates/components/navbar.html +6 -0
- sandwitches/templates/components/recipe_header.html +3 -3
- sandwitches/templates/order_detail.html +68 -0
- sandwitches/templates/partials/recipe_list.html +11 -3
- sandwitches/templates/profile.html +90 -0
- sandwitches/urls.py +13 -0
- sandwitches/views.py +204 -17
- {sandwitches-2.3.3.dist-info → sandwitches-2.4.1.dist-info}/METADATA +1 -1
- {sandwitches-2.3.3.dist-info → sandwitches-2.4.1.dist-info}/RECORD +25 -18
- {sandwitches-2.3.3.dist-info → sandwitches-2.4.1.dist-info}/WHEEL +0 -0
sandwitches/views.py
CHANGED
|
@@ -8,7 +8,7 @@ from django.contrib.auth import get_user_model
|
|
|
8
8
|
from django.contrib.auth.decorators import login_required
|
|
9
9
|
from django.contrib.admin.views.decorators import staff_member_required
|
|
10
10
|
from django.utils.translation import gettext as _
|
|
11
|
-
from .models import Recipe, Rating, Tag, Order
|
|
11
|
+
from .models import Recipe, Rating, Tag, Order, CartItem
|
|
12
12
|
from .forms import (
|
|
13
13
|
RecipeForm,
|
|
14
14
|
AdminSetupForm,
|
|
@@ -28,6 +28,7 @@ from PIL import Image
|
|
|
28
28
|
from django.db.models import Q, Avg
|
|
29
29
|
from django_tasks.backends.database.models import DBTaskResult
|
|
30
30
|
from django.contrib.auth.views import LoginView
|
|
31
|
+
from django.core.paginator import Paginator
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
from sandwitches import __version__ as sandwitches_version
|
|
@@ -42,7 +43,7 @@ def community(request):
|
|
|
42
43
|
if form.is_valid():
|
|
43
44
|
recipe = form.save(commit=False)
|
|
44
45
|
recipe.uploaded_by = request.user
|
|
45
|
-
recipe.
|
|
46
|
+
recipe.is_approved = False
|
|
46
47
|
recipe.save()
|
|
47
48
|
form.save_m2m()
|
|
48
49
|
messages.success(
|
|
@@ -53,16 +54,17 @@ def community(request):
|
|
|
53
54
|
else:
|
|
54
55
|
form = UserRecipeSubmissionForm()
|
|
55
56
|
|
|
56
|
-
# Community recipes =
|
|
57
|
-
recipes = Recipe.objects.filter(
|
|
58
|
-
"
|
|
59
|
-
)
|
|
57
|
+
# Community recipes = uploaded by users in 'community' group
|
|
58
|
+
recipes = Recipe.objects.filter( # ty:ignore[unresolved-attribute]
|
|
59
|
+
uploaded_by__groups__name="community"
|
|
60
|
+
).prefetch_related("favorited_by")
|
|
60
61
|
|
|
61
|
-
if not request.user.is_staff:
|
|
62
|
+
if not (request.user.is_staff or request.user.groups.filter(name="admin").exists()):
|
|
62
63
|
# Regular users only see approved community recipes or their own
|
|
63
|
-
recipes = recipes.filter(
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
recipes = recipes.filter(Q(is_approved=True) | Q(uploaded_by=request.user))
|
|
65
|
+
else:
|
|
66
|
+
# Admins see all community recipes
|
|
67
|
+
pass
|
|
66
68
|
|
|
67
69
|
recipes = recipes.order_by("-created_at")
|
|
68
70
|
|
|
@@ -155,7 +157,7 @@ def admin_dashboard(request):
|
|
|
155
157
|
order_counts = [d["count"] for d in order_data]
|
|
156
158
|
|
|
157
159
|
pending_recipes = Recipe.objects.filter( # ty:ignore[unresolved-attribute]
|
|
158
|
-
|
|
160
|
+
is_approved=False, uploaded_by__groups__name="community"
|
|
159
161
|
).order_by("-created_at")
|
|
160
162
|
context = {
|
|
161
163
|
"recipe_count": recipe_count,
|
|
@@ -220,6 +222,21 @@ def admin_recipe_list(request):
|
|
|
220
222
|
)
|
|
221
223
|
|
|
222
224
|
|
|
225
|
+
@staff_member_required
|
|
226
|
+
def admin_recipe_approval_list(request):
|
|
227
|
+
recipes = Recipe.objects.filter( # ty:ignore[unresolved-attribute]
|
|
228
|
+
is_approved=False, uploaded_by__groups__name="community"
|
|
229
|
+
).order_by("-created_at")
|
|
230
|
+
return render(
|
|
231
|
+
request,
|
|
232
|
+
"admin/recipe_approval_list.html",
|
|
233
|
+
{
|
|
234
|
+
"recipes": recipes,
|
|
235
|
+
"version": sandwitches_version,
|
|
236
|
+
},
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
|
|
223
240
|
@staff_member_required
|
|
224
241
|
def admin_recipe_add(request):
|
|
225
242
|
if request.method == "POST":
|
|
@@ -266,11 +283,14 @@ def admin_recipe_edit(request, pk):
|
|
|
266
283
|
@staff_member_required
|
|
267
284
|
def admin_recipe_approve(request, pk):
|
|
268
285
|
recipe = get_object_or_404(Recipe, pk=pk)
|
|
269
|
-
recipe.
|
|
286
|
+
recipe.is_approved = True
|
|
270
287
|
recipe.save()
|
|
271
288
|
messages.success(
|
|
272
289
|
request, _("Recipe '%(title)s' approved.") % {"title": recipe.title}
|
|
273
290
|
)
|
|
291
|
+
referer = request.META.get("HTTP_REFERER")
|
|
292
|
+
if referer and "dashboard/approvals" in referer:
|
|
293
|
+
return redirect("admin_recipe_approval_list")
|
|
274
294
|
return redirect("admin_recipe_list")
|
|
275
295
|
|
|
276
296
|
|
|
@@ -494,10 +514,19 @@ def admin_order_list(request):
|
|
|
494
514
|
def recipe_detail(request, slug):
|
|
495
515
|
recipe = get_object_or_404(Recipe, slug=slug)
|
|
496
516
|
|
|
497
|
-
|
|
517
|
+
# If it's a community recipe, it must be approved or viewed by staff/owner
|
|
518
|
+
is_community = (
|
|
519
|
+
recipe.uploaded_by
|
|
520
|
+
and recipe.uploaded_by.groups.filter(name="community").exists()
|
|
521
|
+
)
|
|
522
|
+
if is_community and not recipe.is_approved:
|
|
498
523
|
if not (
|
|
499
524
|
request.user.is_authenticated
|
|
500
|
-
and (
|
|
525
|
+
and (
|
|
526
|
+
request.user.is_staff
|
|
527
|
+
or recipe.uploaded_by == request.user
|
|
528
|
+
or request.user.groups.filter(name="admin").exists()
|
|
529
|
+
)
|
|
501
530
|
):
|
|
502
531
|
raise Http404("Recipe not found or pending approval.")
|
|
503
532
|
|
|
@@ -668,8 +697,8 @@ def index(request):
|
|
|
668
697
|
|
|
669
698
|
recipes = Recipe.objects.all().prefetch_related("favorited_by") # ty:ignore[unresolved-attribute]
|
|
670
699
|
|
|
671
|
-
# Only show
|
|
672
|
-
recipes = recipes.filter(
|
|
700
|
+
# Only show recipes from people in the admin group
|
|
701
|
+
recipes = recipes.filter(uploaded_by__groups__name="admin")
|
|
673
702
|
|
|
674
703
|
# Filtering
|
|
675
704
|
q = request.GET.get("q")
|
|
@@ -743,6 +772,8 @@ def setup(request):
|
|
|
743
772
|
First-time setup page: create initial superuser if none exists.
|
|
744
773
|
Visible only while there are no superusers in the DB.
|
|
745
774
|
"""
|
|
775
|
+
from django.contrib.auth.models import Group
|
|
776
|
+
|
|
746
777
|
# do not allow access if a superuser already exists
|
|
747
778
|
if User.objects.filter(is_superuser=True).exists():
|
|
748
779
|
return redirect("index")
|
|
@@ -751,6 +782,12 @@ def setup(request):
|
|
|
751
782
|
form = AdminSetupForm(request.POST)
|
|
752
783
|
if form.is_valid():
|
|
753
784
|
user = form.save()
|
|
785
|
+
|
|
786
|
+
# Ensure groups exist and add user to admin group
|
|
787
|
+
admin_group, created = Group.objects.get_or_create(name="admin")
|
|
788
|
+
Group.objects.get_or_create(name="community")
|
|
789
|
+
user.groups.add(admin_group)
|
|
790
|
+
|
|
754
791
|
user.backend = "django.contrib.auth.backends.ModelBackend"
|
|
755
792
|
login(request, user)
|
|
756
793
|
messages.success(request, _("Admin account created and signed in."))
|
|
@@ -765,10 +802,17 @@ def signup(request):
|
|
|
765
802
|
"""
|
|
766
803
|
User signup page: create new regular user accounts.
|
|
767
804
|
"""
|
|
805
|
+
from django.contrib.auth.models import Group
|
|
806
|
+
|
|
768
807
|
if request.method == "POST":
|
|
769
808
|
form = UserSignupForm(request.POST, request.FILES)
|
|
770
809
|
if form.is_valid():
|
|
771
810
|
user = form.save()
|
|
811
|
+
|
|
812
|
+
# Add user to community group
|
|
813
|
+
community_group, created = Group.objects.get_or_create(name="community")
|
|
814
|
+
user.groups.add(community_group)
|
|
815
|
+
|
|
772
816
|
# log in the newly created user
|
|
773
817
|
user.backend = "django.contrib.auth.backends.ModelBackend"
|
|
774
818
|
login(request, user)
|
|
@@ -815,6 +859,149 @@ def user_profile(request):
|
|
|
815
859
|
return redirect("user_profile")
|
|
816
860
|
else:
|
|
817
861
|
form = UserProfileForm(instance=request.user)
|
|
862
|
+
|
|
863
|
+
orders = request.user.orders.select_related("recipe").all()
|
|
864
|
+
|
|
865
|
+
# Filtering
|
|
866
|
+
status_filter = request.GET.get("status")
|
|
867
|
+
if status_filter:
|
|
868
|
+
orders = orders.filter(status=status_filter)
|
|
869
|
+
|
|
870
|
+
# Sorting
|
|
871
|
+
sort_param = request.GET.get("sort", "-created_at")
|
|
872
|
+
allowed_sorts = {
|
|
873
|
+
"date_asc": "created_at",
|
|
874
|
+
"date_desc": "-created_at",
|
|
875
|
+
"price_asc": "total_price",
|
|
876
|
+
"price_desc": "-total_price",
|
|
877
|
+
"status": "status",
|
|
878
|
+
}
|
|
879
|
+
order_by = allowed_sorts.get(sort_param, "-created_at")
|
|
880
|
+
orders = orders.order_by(order_by)
|
|
881
|
+
|
|
882
|
+
# Pagination
|
|
883
|
+
paginator = Paginator(orders, 5) # Show 5 orders per page
|
|
884
|
+
page_number = request.GET.get("page")
|
|
885
|
+
page_obj = paginator.get_page(page_number)
|
|
886
|
+
|
|
818
887
|
return render(
|
|
819
|
-
request,
|
|
888
|
+
request,
|
|
889
|
+
"profile.html",
|
|
890
|
+
{
|
|
891
|
+
"form": form,
|
|
892
|
+
"version": sandwitches_version,
|
|
893
|
+
"orders": page_obj,
|
|
894
|
+
"current_status": status_filter,
|
|
895
|
+
"current_sort": sort_param,
|
|
896
|
+
"status_choices": Order.STATUS_CHOICES,
|
|
897
|
+
},
|
|
820
898
|
)
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
@login_required
|
|
902
|
+
def user_order_detail(request, pk):
|
|
903
|
+
order = get_object_or_404(Order, pk=pk, user=request.user)
|
|
904
|
+
return render(
|
|
905
|
+
request,
|
|
906
|
+
"order_detail.html",
|
|
907
|
+
{"order": order, "version": sandwitches_version},
|
|
908
|
+
)
|
|
909
|
+
|
|
910
|
+
|
|
911
|
+
@login_required
|
|
912
|
+
def view_cart(request):
|
|
913
|
+
cart_items = CartItem.objects.filter(user=request.user).select_related("recipe") # ty:ignore[unresolved-attribute]
|
|
914
|
+
total = sum(item.total_price for item in cart_items)
|
|
915
|
+
return render(
|
|
916
|
+
request,
|
|
917
|
+
"cart.html",
|
|
918
|
+
{
|
|
919
|
+
"cart_items": cart_items,
|
|
920
|
+
"total": total,
|
|
921
|
+
"version": sandwitches_version,
|
|
922
|
+
},
|
|
923
|
+
)
|
|
924
|
+
|
|
925
|
+
|
|
926
|
+
@login_required
|
|
927
|
+
def add_to_cart(request, pk):
|
|
928
|
+
recipe = get_object_or_404(Recipe, pk=pk)
|
|
929
|
+
if not recipe.price:
|
|
930
|
+
messages.error(request, _("This recipe cannot be ordered (no price set)."))
|
|
931
|
+
return redirect("recipe_detail", slug=recipe.slug)
|
|
932
|
+
|
|
933
|
+
cart_item, created = CartItem.objects.get_or_create( # ty:ignore[unresolved-attribute]
|
|
934
|
+
user=request.user, recipe=recipe
|
|
935
|
+
)
|
|
936
|
+
if not created:
|
|
937
|
+
cart_item.quantity += 1
|
|
938
|
+
cart_item.save()
|
|
939
|
+
|
|
940
|
+
messages.success(
|
|
941
|
+
request, _("Added %(title)s to your cart.") % {"title": recipe.title}
|
|
942
|
+
)
|
|
943
|
+
return redirect("view_cart")
|
|
944
|
+
|
|
945
|
+
|
|
946
|
+
@login_required
|
|
947
|
+
def remove_from_cart(request, pk):
|
|
948
|
+
cart_item = get_object_or_404(CartItem, pk=pk, user=request.user)
|
|
949
|
+
cart_item.delete()
|
|
950
|
+
messages.success(request, _("Removed from cart."))
|
|
951
|
+
return redirect("view_cart")
|
|
952
|
+
|
|
953
|
+
|
|
954
|
+
@login_required
|
|
955
|
+
def update_cart_quantity(request, pk):
|
|
956
|
+
if request.method == "POST":
|
|
957
|
+
cart_item = get_object_or_404(CartItem, pk=pk, user=request.user)
|
|
958
|
+
try:
|
|
959
|
+
quantity = int(request.POST.get("quantity", 1))
|
|
960
|
+
if quantity > 0:
|
|
961
|
+
cart_item.quantity = quantity
|
|
962
|
+
cart_item.save()
|
|
963
|
+
else:
|
|
964
|
+
cart_item.delete()
|
|
965
|
+
except ValueError:
|
|
966
|
+
pass
|
|
967
|
+
return redirect("view_cart")
|
|
968
|
+
|
|
969
|
+
|
|
970
|
+
@login_required
|
|
971
|
+
def checkout_cart(request):
|
|
972
|
+
cart_items = CartItem.objects.filter(user=request.user) # ty:ignore[unresolved-attribute]
|
|
973
|
+
if not cart_items.exists():
|
|
974
|
+
messages.error(request, _("Your cart is empty."))
|
|
975
|
+
return redirect("view_cart")
|
|
976
|
+
|
|
977
|
+
created_orders = [] # noqa: F841
|
|
978
|
+
errors = []
|
|
979
|
+
|
|
980
|
+
# We use a transaction to ensure either all orders are created or none if something goes wrong
|
|
981
|
+
from django.db import transaction
|
|
982
|
+
|
|
983
|
+
try:
|
|
984
|
+
with transaction.atomic():
|
|
985
|
+
for item in cart_items:
|
|
986
|
+
# Create Order for each recipe in cart (quantity times?)
|
|
987
|
+
# Current Order model doesn't have quantity, so we create multiple orders or update Order model.
|
|
988
|
+
# For now, let's create 'quantity' number of orders as per current schema
|
|
989
|
+
# OR we could update Order model to support quantity.
|
|
990
|
+
# Let's see if Order has quantity. (Checked: it does not).
|
|
991
|
+
for i in range(item.quantity):
|
|
992
|
+
try:
|
|
993
|
+
Order.objects.create(user=request.user, recipe=item.recipe) # ty:ignore[unresolved-attribute]
|
|
994
|
+
except (ValidationError, ValueError) as e:
|
|
995
|
+
errors.append(f"{item.recipe.title}: {str(e)}")
|
|
996
|
+
raise e # Trigger rollback
|
|
997
|
+
|
|
998
|
+
cart_items.delete()
|
|
999
|
+
messages.success(request, _("Orders submitted successfully!"))
|
|
1000
|
+
return redirect("user_profile")
|
|
1001
|
+
except Exception:
|
|
1002
|
+
if errors:
|
|
1003
|
+
for error in errors:
|
|
1004
|
+
messages.error(request, error)
|
|
1005
|
+
else:
|
|
1006
|
+
messages.error(request, _("An error occurred during checkout."))
|
|
1007
|
+
return redirect("view_cart")
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
sandwitches/__init__.py,sha256=YTDsQDSdJmxV2Z0dTbBqZhuJRuXcNLSKL0SX73Lu2u8,195
|
|
2
|
-
sandwitches/admin.py,sha256=-
|
|
2
|
+
sandwitches/admin.py,sha256=-4QA5InEvLHyb6VFAGKapWbJO9mXdiV4GeQcGsM4xlI,2510
|
|
3
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=VoQ81COBCgwuS161dhF8IVeeAp8dLiQakzs56SV6-T8,9541
|
|
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
9
|
sandwitches/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -20,20 +20,25 @@ sandwitches/migrations/0008_historicalrecipe_daily_orders_count_and_more.py,sha2
|
|
|
20
20
|
sandwitches/migrations/0009_historicalrecipe_is_approved_recipe_is_approved.py,sha256=XP76J2_HiMOFeIU17Yu8AYXtswE-dcsNZq3lJGFgGtg,588
|
|
21
21
|
sandwitches/migrations/0010_rename_is_approved_historicalrecipe_is_community_made_and_more.py,sha256=9Xv-rBRUvx5UWbr7i4BeWbllCcVkcNuC8T3sxKSdWyU,575
|
|
22
22
|
sandwitches/migrations/0011_alter_historicalrecipe_is_community_made_and_more.py,sha256=O2D57bAsSwBklYqfMTWrHE3Zxj3lrk-CO9yDP8sQS0M,659
|
|
23
|
+
sandwitches/migrations/0012_rename_is_community_made_historicalrecipe_is_approved_and_more.py,sha256=bCDPpHmZTIW70-YeL30WhuJ2mORktkrsntKqTw0vj94,577
|
|
24
|
+
sandwitches/migrations/0013_cartitem.py,sha256=KYMinpnZiLHwjo7p7EdJHQExuEGC9jtpcZcbm1r7JFo,1787
|
|
25
|
+
sandwitches/migrations/0014_ensure_groups_exist.py,sha256=5FSA742bEQtwHZl5CWZQYIdmS8FBxMgWS079dOaOltY,564
|
|
26
|
+
sandwitches/migrations/0015_order_completed_alter_order_status_and_more.py,sha256=PTXQZUE8RqTAK8l0vkZhiGKv2T0PDiWEue7f6qz3AQ0,1670
|
|
23
27
|
sandwitches/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
-
sandwitches/models.py,sha256=
|
|
28
|
+
sandwitches/models.py,sha256=kU71fC9Lf6Ij_8vpN0nB0OUKWpzWxi9WxqIYEzP4Ogg,11144
|
|
25
29
|
sandwitches/settings.py,sha256=5_eQAJCAV093hnhr3XOxHekT4IF-PEJcRiTecq71_SQ,5841
|
|
26
30
|
sandwitches/storage.py,sha256=ibBG6tVtArqzgEKsRimZPwsqW7i9j4WiPLLHrOJchow,3578
|
|
27
31
|
sandwitches/tasks.py,sha256=YiliAT2rj0fh7hrwKq5_qWtv9AGhd5iulj_iBwZBBKg,6024
|
|
28
|
-
sandwitches/templates/admin/admin_base.html,sha256=
|
|
32
|
+
sandwitches/templates/admin/admin_base.html,sha256=aXba3MKFOKhaauFf0z0fFRjPpFHEbT_fREQx31TyxAM,4497
|
|
29
33
|
sandwitches/templates/admin/confirm_delete.html,sha256=HfsZI_gV8JQTKz215TYgPWBrgrFhGv1UB3N-0Hln-14,804
|
|
30
|
-
sandwitches/templates/admin/dashboard.html,sha256=
|
|
34
|
+
sandwitches/templates/admin/dashboard.html,sha256=Ial8zH2odIPpstSkQmzGrasl0QxvgGhFPAGy7V5xRzY,5916
|
|
31
35
|
sandwitches/templates/admin/order_list.html,sha256=eHFUn2speXaaj5_SFUG0Z0HfWVUR9-VCDRBeb8ufFb0,819
|
|
32
36
|
sandwitches/templates/admin/partials/dashboard_charts.html,sha256=NYrt-LDZO4__2KDWhAYL5K_f-2Zgj0iiuaZQiRZlBWg,3639
|
|
33
|
-
sandwitches/templates/admin/partials/order_rows.html,sha256=
|
|
37
|
+
sandwitches/templates/admin/partials/order_rows.html,sha256=C7_ArHw1udaGjx6CRJHhksje0OReP7UUhdsHcdFPqCc,940
|
|
34
38
|
sandwitches/templates/admin/rating_list.html,sha256=8CHAsBfKfs4izhb-IyOiDjJXqAZxFcStoRSGh4pRlgM,1365
|
|
35
|
-
sandwitches/templates/admin/
|
|
36
|
-
sandwitches/templates/admin/
|
|
39
|
+
sandwitches/templates/admin/recipe_approval_list.html,sha256=M6GFYI45lAkLkvqP44cu5tDYVOeeVNklEphof1euesM,2281
|
|
40
|
+
sandwitches/templates/admin/recipe_form.html,sha256=wVKKBFl3vN11aknnmv2Hxkj66zZk9iZ0x_iS1j_X_Ro,12884
|
|
41
|
+
sandwitches/templates/admin/recipe_list.html,sha256=5fGnRIQ7JfvM3yfG-sngEIEgiPnPDkjK1Tn3nO8EDh4,5359
|
|
37
42
|
sandwitches/templates/admin/tag_form.html,sha256=JRWgAl4fz_Oy-Kuo1K6Mex_CXdsHMABzzyPazthr1Kg,989
|
|
38
43
|
sandwitches/templates/admin/tag_list.html,sha256=ttxwXgfdxkEs4Cmrz5RHaGmaqLd7JDmWhjv80XIQqyw,1246
|
|
39
44
|
sandwitches/templates/admin/task_detail.html,sha256=dO5zHOG-yTY1ly3VPA3o3jjie0wmxw0gdddtSKpN-W8,3825
|
|
@@ -42,7 +47,8 @@ sandwitches/templates/admin/user_form.html,sha256=7_6GShLROFeJJexL1XLFUXdW9_lYF8
|
|
|
42
47
|
sandwitches/templates/admin/user_list.html,sha256=6O1YctULY-tqJnagybJof9ERA_NL1LX_a8cAu6_aWVQ,2193
|
|
43
48
|
sandwitches/templates/base.html,sha256=mwCESNirfvvdyMg2e1Siy_LA8fLH29m0aS_Jv0Qom4U,3597
|
|
44
49
|
sandwitches/templates/base_beer.html,sha256=4QgU4_gu_RRMtimmRAhATDJ3mj_WANxtilQJYNgAL60,2077
|
|
45
|
-
sandwitches/templates/
|
|
50
|
+
sandwitches/templates/cart.html,sha256=YqmrzOLLPAXSqeXeUTrt9AwTTWOitOLTaD_k3mYYVpM,4537
|
|
51
|
+
sandwitches/templates/community.html,sha256=-YhpPtLbrVK9mc2Go1XBInLK-7OXrtb7kKukjl7rGbg,9607
|
|
46
52
|
sandwitches/templates/components/carousel_scripts.html,sha256=9vEL5JJv8zUUjEtsnHW-BwwXUNWqQ6w_vf6UdxgEv_I,1934
|
|
47
53
|
sandwitches/templates/components/favorites_search_form.html,sha256=tpD8SpS47TUDJBwxhMuvjhTN9pjWoRGFW50TBv48Ld4,5202
|
|
48
54
|
sandwitches/templates/components/footer.html,sha256=Qk-myRtXS6-1b3fMowVGnSuFb_UkUgX6BYX9zgh_SV8,486
|
|
@@ -50,9 +56,9 @@ sandwitches/templates/components/ingredients_scripts.html,sha256=2zKTC65GYF589uW
|
|
|
50
56
|
sandwitches/templates/components/ingredients_section.html,sha256=XsaVXTs9MIwjfJeLjlzah3GWWj8oFU-_HJd9i9l1HAo,665
|
|
51
57
|
sandwitches/templates/components/instructions_section.html,sha256=RFlA4uPiI6vf1e2QgiD5KzGoy7Vg7y7nFY7TFabCYLA,277
|
|
52
58
|
sandwitches/templates/components/language_dialog.html,sha256=iz-6QhFe4f_dsVhGDhVx6KKKLgQz4grX8tbIqSQjDsg,1184
|
|
53
|
-
sandwitches/templates/components/navbar.html,sha256=
|
|
59
|
+
sandwitches/templates/components/navbar.html,sha256=t-ZWvd9Z3UQRR2RswcsRXRNbygiesOD0Bh1jhmm2vEY,1396
|
|
54
60
|
sandwitches/templates/components/rating_section.html,sha256=8O5IsFfQwnElMQZLnDpJiuCvvQMLa3jCS67u_RhMi7o,2717
|
|
55
|
-
sandwitches/templates/components/recipe_header.html,sha256=
|
|
61
|
+
sandwitches/templates/components/recipe_header.html,sha256=U6CxuR275QD9TIqo3VQftqvV6tqmH1rJdDcQotnXxYM,2001
|
|
56
62
|
sandwitches/templates/components/search_form.html,sha256=B8579Jo44gLrlmvkkc2-Vuv_QD93Ljt6F2J1WgTDV60,6617
|
|
57
63
|
sandwitches/templates/components/search_scripts.html,sha256=HvsO5e50DoTZeoFiYeNP5S8S5h7Zfr9VULOWKKR1i_M,3423
|
|
58
64
|
sandwitches/templates/components/side_menu.html,sha256=qXYyk8W-GnG-u_mJ65ADa4HWfUa2ubxnQAKwxwacF9M,1787
|
|
@@ -61,17 +67,18 @@ sandwitches/templates/detail.html,sha256=g-O_RsW9Ix9ivWC0nZ4FwHY2NhgYZ3bEGLpqGY0
|
|
|
61
67
|
sandwitches/templates/favorites.html,sha256=0cPpW07N6Isrb8XpvA5Eh97L2-12QFZ43EzeJvbOlXo,917
|
|
62
68
|
sandwitches/templates/index.html,sha256=7anU7k8s80JYk59Rwsm8EdlNYd7B5clCvV7pKq2IUy0,2518
|
|
63
69
|
sandwitches/templates/login.html,sha256=LiQskhkOkfx0EE4ssA1ToqQ3oEll08OPYLDIkLjHfU8,2177
|
|
64
|
-
sandwitches/templates/
|
|
65
|
-
sandwitches/templates/
|
|
70
|
+
sandwitches/templates/order_detail.html,sha256=D6MjUVibQuED2VRNHSjKVnLHcLgFtLvcVmuwlzfoJzo,2498
|
|
71
|
+
sandwitches/templates/partials/recipe_list.html,sha256=LUHKFKG90D72K9X2X3d1osvj2jX1QU_MbPe0lNwRSII,4555
|
|
72
|
+
sandwitches/templates/profile.html,sha256=m3-31b_z5QhHLgol-QwHrb3MM9B9kk5kybL3B1nWC5Y,8539
|
|
66
73
|
sandwitches/templates/setup.html,sha256=iNveFgePATsCSO4XMbGPa8TnWHyvj8S_5WwcW6i7pbo,4661
|
|
67
74
|
sandwitches/templates/signup.html,sha256=pNBSlRGZI_B5ccF3dWpUgWBcjODkdLlq7HhyJLYIHCI,6176
|
|
68
75
|
sandwitches/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
76
|
sandwitches/templatetags/custom_filters.py,sha256=0KDFlFz4b5LwlcURBAmzyYWKKea-LwydZytJGVkkuKA,243
|
|
70
77
|
sandwitches/templatetags/markdown_extras.py,sha256=0ibmRzxE3r85x4k7kK71R-9UT0CgeegYF7MHzj3juTI,344
|
|
71
|
-
sandwitches/urls.py,sha256=
|
|
78
|
+
sandwitches/urls.py,sha256=TysY6JhOV2kGC-9KloZjLDfk4TUZS6xX95A_RfG971g,4940
|
|
72
79
|
sandwitches/utils.py,sha256=SJP-TkeRZ0OIfaMigYrOSbxRqYXswoqoWhwll3nFuAM,7245
|
|
73
|
-
sandwitches/views.py,sha256=
|
|
80
|
+
sandwitches/views.py,sha256=pDDDXaojPstj5E_k5gBQmW901Lol0R3gUl3qWGwUmI0,32145
|
|
74
81
|
sandwitches/wsgi.py,sha256=Eyncpnahq_4s3Lr9ruB-R3Lu9j9zBXqgPbUj7qhIbwU,399
|
|
75
|
-
sandwitches-2.
|
|
76
|
-
sandwitches-2.
|
|
77
|
-
sandwitches-2.
|
|
82
|
+
sandwitches-2.4.1.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
83
|
+
sandwitches-2.4.1.dist-info/METADATA,sha256=97JvkhJ7rzJpQIfULxJ-0yz3rN1EfGZkhB-zpihx4wg,3111
|
|
84
|
+
sandwitches-2.4.1.dist-info/RECORD,,
|
|
File without changes
|