sandwitches 1.5.0__tar.gz → 2.1.0__tar.gz

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.
Files changed (63) hide show
  1. {sandwitches-1.5.0 → sandwitches-2.1.0}/PKG-INFO +1 -1
  2. {sandwitches-1.5.0 → sandwitches-2.1.0}/pyproject.toml +3 -1
  3. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/side_menu.html +4 -0
  4. sandwitches-2.1.0/src/sandwitches/templates/setup.html +105 -0
  5. sandwitches-1.5.0/src/sandwitches/templates/setup.html +0 -55
  6. {sandwitches-1.5.0 → sandwitches-2.1.0}/README.md +0 -0
  7. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/__init__.py +0 -0
  8. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/admin.py +0 -0
  9. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/api.py +0 -0
  10. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/asgi.py +0 -0
  11. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/feeds.py +0 -0
  12. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/forms.py +0 -0
  13. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/locale/nl/LC_MESSAGES/django.mo +0 -0
  14. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/locale/nl/LC_MESSAGES/django.po +0 -0
  15. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/migrations/0001_initial.py +0 -0
  16. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/migrations/0002_historicalrecipe_servings_recipe_servings.py +0 -0
  17. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/migrations/0003_setting.py +0 -0
  18. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/migrations/0004_alter_setting_ai_api_key_and_more.py +0 -0
  19. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/migrations/0005_rating_comment.py +0 -0
  20. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/migrations/__init__.py +0 -0
  21. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/models.py +0 -0
  22. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/settings.py +0 -0
  23. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/storage.py +0 -0
  24. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/tasks.py +0 -0
  25. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/admin_base.html +0 -0
  26. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/confirm_delete.html +0 -0
  27. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/dashboard.html +0 -0
  28. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/rating_list.html +0 -0
  29. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/recipe_form.html +0 -0
  30. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/recipe_list.html +0 -0
  31. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/tag_form.html +0 -0
  32. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/tag_list.html +0 -0
  33. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/task_detail.html +0 -0
  34. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/task_list.html +0 -0
  35. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/user_form.html +0 -0
  36. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/admin/user_list.html +0 -0
  37. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/base.html +0 -0
  38. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/base_beer.html +0 -0
  39. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/favorites_search_form.html +0 -0
  40. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/footer.html +0 -0
  41. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/ingredients_scripts.html +0 -0
  42. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/ingredients_section.html +0 -0
  43. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/instructions_section.html +0 -0
  44. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/language_dialog.html +0 -0
  45. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/navbar.html +0 -0
  46. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/rating_section.html +0 -0
  47. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/recipe_header.html +0 -0
  48. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/search_form.html +0 -0
  49. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/search_scripts.html +0 -0
  50. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/components/user_menu.html +0 -0
  51. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/detail.html +0 -0
  52. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/favorites.html +0 -0
  53. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/index.html +0 -0
  54. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/partials/recipe_list.html +0 -0
  55. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/recipe_form.html +0 -0
  56. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templates/signup.html +0 -0
  57. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templatetags/__init__.py +0 -0
  58. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templatetags/custom_filters.py +0 -0
  59. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/templatetags/markdown_extras.py +0 -0
  60. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/urls.py +0 -0
  61. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/utils.py +0 -0
  62. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/views.py +0 -0
  63. {sandwitches-1.5.0 → sandwitches-2.1.0}/src/sandwitches/wsgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sandwitches
3
- Version: 1.5.0
3
+ Version: 2.1.0
4
4
  Summary: Add your description here
5
5
  Author: Martyn van Dijke
6
6
  Author-email: Martyn van Dijke <martijnvdijke600@gmail.com>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sandwitches"
3
- version = "1.5.0"
3
+ version = "2.1.0"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -35,6 +35,7 @@ build-backend = "uv_build"
35
35
  dev = [
36
36
  "invoke>=2.2.1",
37
37
  "pytest-django>=4.11.1",
38
+ "pytest-playwright>=0.7.2",
38
39
  "pytest>=8.4.2",
39
40
  "ruff>=0.14.3",
40
41
  "ty>=0.0.1a26",
@@ -45,3 +46,4 @@ package = true
45
46
 
46
47
  [tool.pytest.ini_options]
47
48
  DJANGO_SETTINGS_MODULE = "sandwitches.settings"
49
+ pytest_playwright_sync_api = true
@@ -20,6 +20,10 @@
20
20
  <i class="extra padding">api</i>
21
21
  <span class="large-text">{% trans "API Docs" %}</span>
22
22
  </a>
23
+ <a href="{% url 'latest_recipes_feed' %}" class="padding">
24
+ <i class="extra padding">rss_feed</i>
25
+ <span class="large-text">{% trans "RSS Feed" %}</span>
26
+ </a>
23
27
  {% if user.is_staff %}
24
28
  <div class="divider"></div>
25
29
  <a href="{% url 'admin_dashboard' %}" class="padding">
@@ -0,0 +1,105 @@
1
+ {% extends "base_beer.html" %}
2
+ {% load static i18n %}
3
+ {% block title %}{% trans "Initial setup — Create admin" %}{% endblock %}
4
+
5
+ {% block content %}
6
+ <div class="large-space"></div>
7
+
8
+ <div class="large-space"></div>
9
+
10
+ <div class="grid">
11
+ <div class="s12 m10 l8 xl6 middle-align center-align" style="margin: 0 auto;">
12
+ <article class="round elevate">
13
+ <div class="padding">
14
+ <h4 class="center-align primary-text">{% trans "Create initial administrator" %}</h4>
15
+ <p class="center-align">
16
+ {% trans "This page is only available when there are no admin users in the database." %}
17
+ </p>
18
+ <p class="center-align">
19
+ {% trans "After creating the account you will be logged in and redirected to the admin." %}
20
+ </p>
21
+ </div>
22
+
23
+ <form method="post" novalidate>
24
+ {% csrf_token %}
25
+
26
+ {% if form.non_field_errors %}
27
+ <div class="padding error surface round mb">
28
+ {% for err in form.non_field_errors %}
29
+ <div class="row align-center">
30
+ <i class="error-text">warning</i>
31
+ <span class="error-text">{{ err }}</span>
32
+ </div>
33
+ {% endfor %}
34
+ </div>
35
+ {% endif %}
36
+
37
+ <div class="grid">
38
+ <div class="s12 m6">
39
+ <div class="field label border round {% if form.first_name.errors %}error{% endif %}">
40
+ <input type="text" name="{{ form.first_name.name }}" id="{{ form.first_name.id_for_label }}" value="{{ form.first_name.value|default:'' }}">
41
+ <label>{% trans "First name" %}</label>
42
+ {% if form.first_name.errors %}
43
+ <span class="helper error-text">{{ form.first_name.errors.0 }}</span>
44
+ {% endif %}
45
+ </div>
46
+ </div>
47
+ <div class="s12 m6">
48
+ <div class="field label border round {% if form.last_name.errors %}error{% endif %}">
49
+ <input type="text" name="{{ form.last_name.name }}" id="{{ form.last_name.id_for_label }}" value="{{ form.last_name.value|default:'' }}">
50
+ <label>{% trans "Last name" %}</label>
51
+ {% if form.last_name.errors %}
52
+ <span class="helper error-text">{{ form.last_name.errors.0 }}</span>
53
+ {% endif %}
54
+ </div>
55
+ </div>
56
+ </div>
57
+
58
+ <div class="field label border round {% if form.username.errors %}error{% endif %}">
59
+ <input type="text" name="{{ form.username.name }}" id="{{ form.username.id_for_label }}" value="{{ form.username.value|default:'' }}">
60
+ <label>{% trans "Username" %}</label>
61
+ {% if form.username.errors %}
62
+ <span class="helper error-text">{{ form.username.errors.0 }}</span>
63
+ {% endif %}
64
+ </div>
65
+
66
+ <div class="field label border round {% if form.email.errors %}error{% endif %}">
67
+ <input type="email" name="{{ form.email.name }}" id="{{ form.email.id_for_label }}" value="{{ form.email.value|default:'' }}">
68
+ <label>{% trans "Email (optional)" %}</label>
69
+ {% if form.email.errors %}
70
+ <span class="helper error-text">{{ form.email.errors.0 }}</span>
71
+ {% endif %}
72
+ </div>
73
+
74
+ <div class="space"></div>
75
+ <div class="divider"></div>
76
+ <div class="space"></div>
77
+
78
+ <div class="field label border round {% if form.password1.errors %}error{% endif %}">
79
+ <input type="password" name="{{ form.password1.name }}" id="{{ form.password1.id_for_label }}">
80
+ <label>{% trans "Password" %}</label>
81
+ {% if form.password1.errors %}
82
+ <span class="helper error-text">{{ form.password1.errors.0 }}</span>
83
+ {% endif %}
84
+ </div>
85
+
86
+ <div class="field label border round {% if form.password2.errors %}error{% endif %}">
87
+ <input type="password" name="{{ form.password2.name }}" id="{{ form.password2.id_for_label }}">
88
+ <label>{% trans "Confirm password" %}</label>
89
+ {% if form.password2.errors %}
90
+ <span class="helper error-text">{{ form.password2.errors.0 }}</span>
91
+ {% endif %}
92
+ </div>
93
+
94
+ <div class="large-space"></div>
95
+
96
+ <nav class="right-align">
97
+ <a class="button transparent border round" href="{% url 'index' %}">{% trans "Cancel" %}</a>
98
+ <button type="submit" class="button primary round">{% trans "Create admin" %}</button>
99
+ </nav>
100
+
101
+ </form>
102
+ </article>
103
+ </div>
104
+ </div>
105
+ {% endblock %}
@@ -1,55 +0,0 @@
1
- {% extends "base_beer.html" %}
2
- {% load static i18n %}
3
- {% block title %}{% trans "Initial setup — Create admin" %}{% endblock %}
4
-
5
- {% block content %}
6
- <div class="container" style="max-width:720px; margin:2rem auto;">
7
- <article class="card">
8
- <div class="card-body">
9
- <h2>{% trans "Create initial administrator" %}</h2>
10
- <p>
11
- {% trans "This page is only available when there are no admin users in the database." %}
12
- </p>
13
- <p>
14
- {% trans "After creating the account you will be logged in and redirected to the admin." %}
15
- </p>
16
-
17
- <form method="post" novalidate>
18
- {% csrf_token %}
19
- {% if form.non_field_errors %}
20
- <div class="card-panel" role="alert">
21
- <ul>
22
- {% for err in form.non_field_errors %}
23
- <li>{{ err }}</li>
24
- {% endfor %}
25
- </ul>
26
- </div>
27
- {% endif %}
28
-
29
- <label for="{{ form.username.id_for_label }}">{% trans "Username" %}</label>
30
- {{ form.username }}
31
-
32
- <label for="{{ form.email.id_for_label }}">{% trans "Email (optional)" %}</label>
33
- {{ form.email }}
34
-
35
- <label for="{{ form.first_name.id_for_label }}">{% trans "First name" %}</label>
36
- {{ form.first_name }}
37
-
38
- <label for="{{ form.last_name.id_for_label }}">{% trans "Last name" %}</label>
39
- {{ form.last_name }}
40
-
41
- <label for="{{ form.password1.id_for_label }}">{% trans "Password" %}</label>
42
- {{ form.password1 }}
43
-
44
- <label for="{{ form.password2.id_for_label }}">{% trans "Confirm password" %}</label>
45
- {{ form.password2 }}
46
-
47
- <p style="margin-top:1rem;">
48
- <button type="submit">{% trans "Create admin" %}</button>
49
- <a class="contrast" href="{% url 'index' %}">{% trans "Cancel" %}</a>
50
- </p>
51
- </form>
52
- </div>
53
- </article>
54
- </div>
55
- {% endblock %}
File without changes