From 2594246221f4e0bfd6c9e7ac0e080899e5f83bbd Mon Sep 17 00:00:00 2001 From: JamesRamm Date: Sun, 22 Sep 2019 12:33:34 +0200 Subject: [PATCH] Fixes #256, Fixes #248 --- .travis.yml | 6 +++--- longclaw/basket/api.py | 6 +++--- longclaw/contrib/productrequests/api.py | 4 ++-- longclaw/orders/api.py | 6 +++--- longclaw/tests/settings.py | 3 +++ setup.py | 8 ++++---- tox.ini | 4 ++-- website/pages/en/index.js | 15 +++++---------- 8 files changed, 25 insertions(+), 27 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2881b7d..cd3ada2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,11 +5,11 @@ cache: pip matrix: include: - - env: TOX_ENV=py35-django-213 + - env: TOX_ENV=py35-django-225 python: 3.5 - - env: TOX_ENV=py36-django-213 + - env: TOX_ENV=py36-django-225 python: 3.6 - - env: TOX_ENV=py37-django-213 + - env: TOX_ENV=py37-django-225 python: 3.7 dist: xenial sudo: true diff --git a/longclaw/basket/api.py b/longclaw/basket/api.py index 91195a1..5e6a1dc 100644 --- a/longclaw/basket/api.py +++ b/longclaw/basket/api.py @@ -1,4 +1,4 @@ -from rest_framework.decorators import detail_route, list_route +from rest_framework.decorators import action from rest_framework import permissions, status, viewsets from rest_framework.response import Response from longclaw.basket.models import BasketItem @@ -85,7 +85,7 @@ class BasketViewSet(viewsets.ModelViewSet): return Response(data=serializer.data, status=status.HTTP_200_OK) - @list_route(methods=['get']) + @action(detail=False, methods=['get']) def total_items(self, request): """ Get total number of items in the basket @@ -96,7 +96,7 @@ class BasketViewSet(viewsets.ModelViewSet): return Response(data={"quantity": n_total}, status=status.HTTP_200_OK) - @detail_route(methods=['get']) + @action(detail=True, methods=['get']) def item_count(self, request, variant_id=None): """ Get quantity of a single item in the basket diff --git a/longclaw/contrib/productrequests/api.py b/longclaw/contrib/productrequests/api.py index 785d64b..1a90e9d 100644 --- a/longclaw/contrib/productrequests/api.py +++ b/longclaw/contrib/productrequests/api.py @@ -1,5 +1,5 @@ from rest_framework import viewsets, permissions, status -from rest_framework.decorators import detail_route, list_route +from rest_framework.decorators import action from rest_framework.response import Response from longclaw.contrib.productrequests.serializers import ProductRequestSerializer @@ -31,7 +31,7 @@ class ProductRequestViewSet(viewsets.ModelViewSet): return response - @list_route(methods=['get']) + @action(detail=False, methods=['get']) def requests_for_variant(self, request, variant_id=None): """Get all the requests for a single variant """ diff --git a/longclaw/orders/api.py b/longclaw/orders/api.py index dc923f7..c9d1dba 100644 --- a/longclaw/orders/api.py +++ b/longclaw/orders/api.py @@ -1,4 +1,4 @@ -from rest_framework.decorators import detail_route +from rest_framework.decorators import action from rest_framework import permissions, status, viewsets from rest_framework.response import Response from longclaw.orders.models import Order @@ -10,7 +10,7 @@ class OrderViewSet(viewsets.ModelViewSet): permission_classes = [permissions.IsAdminUser] queryset = Order.objects.all() - @detail_route(methods=['post']) + @action(detail=True, methods=['post']) def refund_order(self, request, pk): """Refund the order specified by the pk """ @@ -18,7 +18,7 @@ class OrderViewSet(viewsets.ModelViewSet): order.refund() return Response(status=status.HTTP_204_NO_CONTENT) - @detail_route(methods=['post']) + @action(detail=True, methods=['post']) def fulfill_order(self, request, pk): """Mark the order specified by pk as fulfilled """ diff --git a/longclaw/tests/settings.py b/longclaw/tests/settings.py index a07c93f..7c33e4f 100644 --- a/longclaw/tests/settings.py +++ b/longclaw/tests/settings.py @@ -24,6 +24,7 @@ INSTALLED_APPS = [ 'django.contrib.contenttypes', 'django.contrib.sites', 'django.contrib.sessions', + 'django.contrib.messages', 'django.contrib.staticfiles', 'wagtail.contrib.forms', @@ -63,6 +64,7 @@ MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', 'wagtail.core.middleware.SiteMiddleware', 'wagtail.contrib.redirects.middleware.RedirectMiddleware', ] @@ -79,6 +81,7 @@ TEMPLATES = [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', 'longclaw.configuration.context_processors.currency', ], }, diff --git a/setup.py b/setup.py index b0d4f06..ae21946 100755 --- a/setup.py +++ b/setup.py @@ -87,10 +87,10 @@ setup( ], include_package_data=True, install_requires=[ - 'django>=2.1', - 'wagtail>=2.3', - 'django-countries>=5.3.2', - 'django-extensions>=2.1.4', + 'django==2.2.5', + 'wagtail==2.6.2', + 'django-countries==5.5', + 'django-extensions==2.2.1', 'djangorestframework>=3.9.0', 'django-ipware>=2.1.0' ], diff --git a/tox.ini b/tox.ini index c1924ff..623a973 100644 --- a/tox.ini +++ b/tox.ini @@ -1,13 +1,13 @@ [tox] envlist = - {py35,py36,py37}-django-213 + {py35,py36,py37}-django-225 [testenv] setenv = PYTHONPATH = {toxinidir}:{toxinidir}/longclaw commands = coverage run --source longclaw runtests.py coverage xml --omit=*/apps.py,*/migrations/*,*/__init__.py,*/gateways/braintree.py,*/gateways/stripe.py,*/bin/longclaw.py deps = - django-213: Django==2.1.3 + django-225: Django==2.2.5 -r{toxinidir}/requirements_dev.txt basepython = py37: python3.7 diff --git a/website/pages/en/index.js b/website/pages/en/index.js index d50a5ab..e3926fb 100755 --- a/website/pages/en/index.js +++ b/website/pages/en/index.js @@ -91,18 +91,12 @@ class Index extends React.Component { ); - const FeatureCallout = () => ( -
( + className="productShowcaseSection paddingBottom" style={{textAlign: 'center'}}> -

Features

-
    -
  • Fully customisable product catalog management. Capture any attribute of your product
  • -
  • Fully integrated with Wagtail - Use all features of Wagtail as normal (add a blog, articles or any other wagtail plugin)
  • -
  • Multiple payment backend integrations; Stripe, Braintree, Paypal...
  • -
  • Dashboard view in the Wagtail admin shows statistics about your shop
  • -
-
+

Quick Start

+ ); const Support = () => ( @@ -215,6 +209,7 @@ class Index extends React.Component {
+