Merge branch 'release/3.2.0'
This commit is contained in:
commit
f9e7a50e58
34
poetry.lock
generated
34
poetry.lock
generated
@ -235,7 +235,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "django"
|
name = "django"
|
||||||
version = "4.1.5"
|
version = "4.1.6"
|
||||||
description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
|
description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
@ -878,11 +878,11 @@ python-versions = "*"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "selenium"
|
name = "selenium"
|
||||||
version = "4.7.2"
|
version = "4.8.0"
|
||||||
description = ""
|
description = ""
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "~=3.7"
|
python-versions = ">=3.7"
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
certifi = ">=2021.10.8"
|
certifi = ">=2021.10.8"
|
||||||
@ -892,7 +892,7 @@ urllib3 = {version = ">=1.26,<2.0", extras = ["socks"]}
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sentry-sdk"
|
name = "sentry-sdk"
|
||||||
version = "1.13.0"
|
version = "1.14.0"
|
||||||
description = "Python client for Sentry (https://sentry.io)"
|
description = "Python client for Sentry (https://sentry.io)"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
@ -913,7 +913,7 @@ falcon = ["falcon (>=1.4)"]
|
|||||||
fastapi = ["fastapi (>=0.79.0)"]
|
fastapi = ["fastapi (>=0.79.0)"]
|
||||||
flask = ["blinker (>=1.1)", "flask (>=0.11)"]
|
flask = ["blinker (>=1.1)", "flask (>=0.11)"]
|
||||||
httpx = ["httpx (>=0.16.0)"]
|
httpx = ["httpx (>=0.16.0)"]
|
||||||
opentelemetry = ["opentelemetry-distro (>=0.350b0)"]
|
opentelemetry = ["opentelemetry-distro (>=0.35b0)"]
|
||||||
pure-eval = ["asttokens", "executing", "pure-eval"]
|
pure-eval = ["asttokens", "executing", "pure-eval"]
|
||||||
pymongo = ["pymongo (>=3.1)"]
|
pymongo = ["pymongo (>=3.1)"]
|
||||||
pyspark = ["pyspark (>=2.4.4)"]
|
pyspark = ["pyspark (>=2.4.4)"]
|
||||||
@ -927,7 +927,7 @@ tornado = ["tornado (>=5)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "setuptools"
|
name = "setuptools"
|
||||||
version = "66.1.1"
|
version = "67.1.0"
|
||||||
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
description = "Easily download, build, install, upgrade, and uninstall Python packages"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
@ -972,7 +972,7 @@ python-versions = ">=3.5"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stripe"
|
name = "stripe"
|
||||||
version = "5.0.0"
|
version = "5.1.0"
|
||||||
description = "Python bindings for the Stripe API"
|
description = "Python bindings for the Stripe API"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
@ -1350,8 +1350,8 @@ defusedxml = [
|
|||||||
{file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
|
{file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
|
||||||
]
|
]
|
||||||
django = [
|
django = [
|
||||||
{file = "Django-4.1.5-py3-none-any.whl", hash = "sha256:4b214a05fe4c99476e99e2445c8b978c8369c18d4dea8e22ec412862715ad763"},
|
{file = "Django-4.1.6-py3-none-any.whl", hash = "sha256:c6fe7ebe7c017fe59f1029821dae0acb5a2ddcd6c9a0138fd20a8bfefac914bc"},
|
||||||
{file = "Django-4.1.5.tar.gz", hash = "sha256:ff56ebd7ead0fd5dbe06fe157b0024a7aaea2e0593bb3785fb594cf94dad58ef"},
|
{file = "Django-4.1.6.tar.gz", hash = "sha256:bceb0fe1a386781af0788cae4108622756cd05e7775448deec04a71ddf87685d"},
|
||||||
]
|
]
|
||||||
django-allauth = [
|
django-allauth = [
|
||||||
{file = "django-allauth-0.52.0.tar.gz", hash = "sha256:e380661ceafe55734c40102819ae720403027036f28e9f9827f0faeddc24ed5f"},
|
{file = "django-allauth-0.52.0.tar.gz", hash = "sha256:e380661ceafe55734c40102819ae720403027036f28e9f9827f0faeddc24ed5f"},
|
||||||
@ -1796,16 +1796,16 @@ rjsmin = [
|
|||||||
{file = "rjsmin-1.2.1.tar.gz", hash = "sha256:1f982be8e011438777a94307279b40134a3935fc0f079312ee299725b8af5411"},
|
{file = "rjsmin-1.2.1.tar.gz", hash = "sha256:1f982be8e011438777a94307279b40134a3935fc0f079312ee299725b8af5411"},
|
||||||
]
|
]
|
||||||
selenium = [
|
selenium = [
|
||||||
{file = "selenium-4.7.2-py3-none-any.whl", hash = "sha256:06a1c7d9f313130b21c3218ddd8852070d0e7419afdd31f96160cd576555a5ce"},
|
{file = "selenium-4.8.0-py3-none-any.whl", hash = "sha256:20f28ee4ea9b273b4112a7df5276ebb3052f79ff6eff42a564db6143e5926683"},
|
||||||
{file = "selenium-4.7.2.tar.gz", hash = "sha256:3aefa14a28a42e520550c1cd0f29cf1d566328186ea63aa9a3e01fb265b5894d"},
|
{file = "selenium-4.8.0.tar.gz", hash = "sha256:fee36724d6cf0b18c73781bb8ec7be4a35ab1e2564e64e64e64da75e50e052af"},
|
||||||
]
|
]
|
||||||
sentry-sdk = [
|
sentry-sdk = [
|
||||||
{file = "sentry-sdk-1.13.0.tar.gz", hash = "sha256:72da0766c3069a3941eadbdfa0996f83f5a33e55902a19ba399557cfee1dddcc"},
|
{file = "sentry-sdk-1.14.0.tar.gz", hash = "sha256:273fe05adf052b40fd19f6d4b9a5556316807246bd817e5e3482930730726bb0"},
|
||||||
{file = "sentry_sdk-1.13.0-py2.py3-none-any.whl", hash = "sha256:b7ff6318183e551145b5c4766eb65b59ad5b63ff234dffddc5fb50340cad6729"},
|
{file = "sentry_sdk-1.14.0-py2.py3-none-any.whl", hash = "sha256:72c00322217d813cf493fe76590b23a757e063ff62fec59299f4af7201dd4448"},
|
||||||
]
|
]
|
||||||
setuptools = [
|
setuptools = [
|
||||||
{file = "setuptools-66.1.1-py3-none-any.whl", hash = "sha256:6f590d76b713d5de4e49fe4fbca24474469f53c83632d5d0fd056f7ff7e8112b"},
|
{file = "setuptools-67.1.0-py3-none-any.whl", hash = "sha256:a7687c12b444eaac951ea87a9627c4f904ac757e7abdc5aac32833234af90378"},
|
||||||
{file = "setuptools-66.1.1.tar.gz", hash = "sha256:ac4008d396bc9cd983ea483cb7139c0240a07bbc74ffb6232fceffedc6cf03a8"},
|
{file = "setuptools-67.1.0.tar.gz", hash = "sha256:e261cdf010c11a41cb5cb5f1bf3338a7433832029f559a6a7614bd42a967c300"},
|
||||||
]
|
]
|
||||||
six = [
|
six = [
|
||||||
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
|
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
|
||||||
@ -1824,8 +1824,8 @@ sqlparse = [
|
|||||||
{file = "sqlparse-0.4.3.tar.gz", hash = "sha256:69ca804846bb114d2ec380e4360a8a340db83f0ccf3afceeb1404df028f57268"},
|
{file = "sqlparse-0.4.3.tar.gz", hash = "sha256:69ca804846bb114d2ec380e4360a8a340db83f0ccf3afceeb1404df028f57268"},
|
||||||
]
|
]
|
||||||
stripe = [
|
stripe = [
|
||||||
{file = "stripe-5.0.0-py2.py3-none-any.whl", hash = "sha256:50f69a5fc9cd6f7629861b80ea70a3c6da0c76401ddc159474f2d45fab9215d6"},
|
{file = "stripe-5.1.0-py2.py3-none-any.whl", hash = "sha256:e25e5fe34afa9adda1b64be1852c3081d6b3f198fccd718fc9936dbcd2c175a7"},
|
||||||
{file = "stripe-5.0.0.tar.gz", hash = "sha256:bdc8c5ee8e6b53c4767bbe720752cedb8af91db46ad96e511edd0fb74964ac5d"},
|
{file = "stripe-5.1.0.tar.gz", hash = "sha256:f2d91d8e3daa4f385403c6cdbb6b38f5482b2de82b6e834a300b36352380e68e"},
|
||||||
]
|
]
|
||||||
sympy = [
|
sympy = [
|
||||||
{file = "sympy-1.11.1-py3-none-any.whl", hash = "sha256:938f984ee2b1e8eae8a07b884c8b7a1146010040fccddc6539c54f401c8f6fcf"},
|
{file = "sympy-1.11.1-py3-none-any.whl", hash = "sha256:938f984ee2b1e8eae8a07b884c8b7a1146010040fccddc6539c54f401c8f6fcf"},
|
||||||
|
|||||||
@ -103,8 +103,8 @@ MIDDLEWARE = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
if DEBUG:
|
if DEBUG:
|
||||||
INSTALLED_APPS + ['debug_toolbar']
|
INSTALLED_APPS += ['debug_toolbar']
|
||||||
MIDDLEWARE + ['debug_toolbar.middleware.DebugToolbarMiddleware']
|
MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware']
|
||||||
|
|
||||||
|
|
||||||
ROOT_URLCONF = 'ptcoffee.urls'
|
ROOT_URLCONF = 'ptcoffee.urls'
|
||||||
|
|||||||
@ -722,6 +722,15 @@ article + article {
|
|||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.product__figure img {
|
||||||
|
max-height: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product__item button {
|
||||||
|
grid-column: span 2;
|
||||||
|
align-self: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
.product__item h3,
|
.product__item h3,
|
||||||
.product__info h1 {
|
.product__info h1 {
|
||||||
/*text-decoration: underline;*/
|
/*text-decoration: underline;*/
|
||||||
@ -753,6 +762,10 @@ article + article {
|
|||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.product__item button {
|
||||||
|
grid-column: span 1;
|
||||||
|
}
|
||||||
|
|
||||||
.product__figure {
|
.product__figure {
|
||||||
grid-row: 1;
|
grid-row: 1;
|
||||||
justify-self: center;
|
justify-self: center;
|
||||||
@ -770,12 +783,10 @@ article + article {
|
|||||||
|
|
||||||
|
|
||||||
.subscription-coffee {
|
.subscription-coffee {
|
||||||
display: flex;
|
display: grid;
|
||||||
gap: 2rem;
|
gap: 2rem;
|
||||||
overflow-x: scroll;
|
grid-template-columns: repeat(4, 1fr);
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
border-right: var(--default-border);
|
|
||||||
border-left: var(--default-border);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.subscription-coffee div {
|
.subscription-coffee div {
|
||||||
@ -783,13 +794,16 @@ article + article {
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 1rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.subscription-coffee img {
|
.subscription-coffee img {
|
||||||
max-height: 300px;
|
max-height: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.subscription-coffee .product__desc {
|
||||||
|
flex-grow: 2;
|
||||||
|
}
|
||||||
|
|
||||||
.subscription-coffee input[type=number] {
|
.subscription-coffee input[type=number] {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
@ -817,10 +831,19 @@ article + article {
|
|||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 900px) {
|
||||||
|
.subscription-coffee {
|
||||||
|
grid-template-columns: repeat(2, 1fr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 600px) {
|
@media screen and (max-width: 600px) {
|
||||||
.subscription-products {
|
.subscription-products {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
.subscription-coffee {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -24,8 +24,9 @@
|
|||||||
<div>
|
<div>
|
||||||
<h3>{{ product.name }}</h3>
|
<h3>{{ product.name }}</h3>
|
||||||
<h5>{{ product.subtitle }}</h5>
|
<h5>{{ product.subtitle }}</h5>
|
||||||
<p>{{product.description|truncatewords:20}}</p>
|
<p>{{product.description}}</p>
|
||||||
</div>
|
</div>
|
||||||
|
<button>Shop now</button>
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@ -25,8 +25,9 @@
|
|||||||
<div>
|
<div>
|
||||||
<h3>{{ product.name }}</h3>
|
<h3>{{ product.name }}</h3>
|
||||||
<h5>{{ product.subtitle }}</h5>
|
<h5>{{ product.subtitle }}</h5>
|
||||||
<p>{{product.description|truncatewords:20}}</p>
|
<p>{{product.description}}</p>
|
||||||
</div>
|
</div>
|
||||||
|
<button>Shop now</button>
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@ -30,16 +30,17 @@
|
|||||||
</section>
|
</section>
|
||||||
<section class="cart__list">
|
<section class="cart__list">
|
||||||
<h3>Items</h3>
|
<h3>Items</h3>
|
||||||
<h4>Size: {{ sub_cart.size }}</h4>
|
<a href="{% url 'storefront:subscription-form' %}" class="btn">Edit items</a>
|
||||||
<h4>Grind: {{ sub_cart.grind }}</h4>
|
|
||||||
{% for item in sub_cart.items %}
|
{% for item in sub_cart.items %}
|
||||||
<div class="cart__item">
|
<div class="cart__item">
|
||||||
{% with product=item.product %}
|
{% with product=item.product %}
|
||||||
<figure>
|
<figure class="item__figure">
|
||||||
<img src="{{product.get_first_img.image.url}}" alt="{{product.get_first_img.image}}">
|
<img class="item__image" src="{{product.get_first_img.image.url}}" alt="{{product.get_first_img.image}}">
|
||||||
</figure>
|
</figure>
|
||||||
<div>
|
<div class="item__info">
|
||||||
<h2>{{ item.quantity }} × {{product.name}}</h2>
|
<h4>{{ item.quantity }} × {{product.name}}</h4>
|
||||||
|
<h5>Size: {{ sub_cart.size }}</h5>
|
||||||
|
<h5>Grind: {{ sub_cart.grind }}</h5>
|
||||||
</div>
|
</div>
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -21,8 +21,18 @@
|
|||||||
<figure class="product__figure">
|
<figure class="product__figure">
|
||||||
<img class="product__image" src="{{ product.get_first_img.image.url }}">
|
<img class="product__image" src="{{ product.get_first_img.image.url }}">
|
||||||
</figure>
|
</figure>
|
||||||
<strong>{{ product }}</strong>
|
<div class="product__desc">
|
||||||
<input type="number" min="0" max="20" pattern="[0-9]*" data-id="{{ product.pk }}" name="product_{{ product.name }}" placeholder="Quantity">
|
<h3>{{ product.name }}</h3>
|
||||||
|
<p>{{product.description}}</p>
|
||||||
|
</div>
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
min="0" max="20"
|
||||||
|
pattern="[0-9]*"
|
||||||
|
data-id="{{ product.pk }}"
|
||||||
|
name="product_{{ product.name }}"
|
||||||
|
placeholder="Quantity"
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user