From d311e65058f166f695d9f4ec39337b561b64f0bd Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Wed, 27 Oct 2021 19:12:07 +0200 Subject: [PATCH] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Major=20bumps=20and=20djan?= =?UTF-8?q?go=20checks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Notably to django 3.2 --- Pipfile | 20 +++++ Pipfile.lock | 198 ++++++++++++++++++++++++++++++++++++++++++ bbssite/settings.py | 7 +- bbssite/urls.py | 12 +-- main/api/views.py | 5 +- main/apps.py | 2 +- main/models.py | 27 +++--- main/views/general.py | 3 +- requirements.txt | 11 --- 9 files changed, 247 insertions(+), 38 deletions(-) create mode 100644 Pipfile create mode 100644 Pipfile.lock delete mode 100644 requirements.txt diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..f1bcbb5 --- /dev/null +++ b/Pipfile @@ -0,0 +1,20 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +django-extensions = "==3.1.*" +easy-thumbnails = "==2.7.*" +facebook-sdk = "==3.0.0" +gunicorn = "==20.1.*" +mysqlclient = "==2.0.*" +djangorestframework = "==3.12.*" +sentry-sdk = "==1.*" +Django = "==3.2.*" +Pillow = "==8.*" + +[dev-packages] + +[requires] +python_version = "3.9" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..f40422c --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,198 @@ +{ + "_meta": { + "hash": { + "sha256": "c079e1ab20a4d9bd30eed7407120599adbc7ef1de635764c5adcab332a08ca1e" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.9" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "asgiref": { + "hashes": [ + "sha256:4ef1ab46b484e3c706329cedeff284a5d40824200638503f5768edb6de7d58e9", + "sha256:ffc141aa908e6f175673e7b1b3b7af4fdb0ecb738fc5c8b88f69f055c2415214" + ], + "markers": "python_version >= '3.6'", + "version": "==3.4.1" + }, + "certifi": { + "hashes": [ + "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", + "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569" + ], + "version": "==2021.10.8" + }, + "charset-normalizer": { + "hashes": [ + "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0", + "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b" + ], + "markers": "python_version >= '3'", + "version": "==2.0.7" + }, + "django": { + "hashes": [ + "sha256:42573831292029639b798fe4d3812996bfe4ff3275f04566da90764daec011a5", + "sha256:f6d2c4069c9b9bfac03bedff927ea1f9e0d29e34525cec8a68fd28eb2a8df7af" + ], + "index": "pypi", + "version": "==3.2.8" + }, + "django-extensions": { + "hashes": [ + "sha256:50de8977794a66a91575dd40f87d5053608f679561731845edbd325ceeb387e3", + "sha256:5f0fea7bf131ca303090352577a9e7f8bfbf5489bd9d9c8aea9401db28db34a0" + ], + "index": "pypi", + "version": "==3.1.3" + }, + "djangorestframework": { + "hashes": [ + "sha256:6d1d59f623a5ad0509fe0d6bfe93cbdfe17b8116ebc8eda86d45f6e16e819aaf", + "sha256:f747949a8ddac876e879190df194b925c177cdeb725a099db1460872f7c0a7f2" + ], + "index": "pypi", + "version": "==3.12.4" + }, + "easy-thumbnails": { + "hashes": [ + "sha256:9d7ed56a9b57aba7a8d0e03dc3b8507ca51aab5e0ed0bc705c3261ff1f659192", + "sha256:a7dd9cf97efaf70ba5d76484a962f08ba65b31f1681bc417257743650e9e8a8a" + ], + "index": "pypi", + "version": "==2.7.2" + }, + "facebook-sdk": { + "hashes": [ + "sha256:8ef0a0d2c98a515a926875bb4be9c9a4630a39fc8190bff8d5265d58af1ef257", + "sha256:c94df84b2bba1c497684c169ed28a713b57917bf56f95fba4c2a5290c16ce81e", + "sha256:f3d450ec313b62d3716fadc4e5098183760e1d2a9e0434a94b74e59ea6ea3e4d" + ], + "index": "pypi", + "version": "==3.0.0" + }, + "gunicorn": { + "hashes": [ + "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e", + "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8" + ], + "index": "pypi", + "version": "==20.1.0" + }, + "idna": { + "hashes": [ + "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff", + "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d" + ], + "markers": "python_version >= '3'", + "version": "==3.3" + }, + "mysqlclient": { + "hashes": [ + "sha256:0ac0dd759c4ca02c35a9fedc24bc982cf75171651e8187c2495ec957a87dfff7", + "sha256:3381ca1a4f37ff1155fcfde20836b46416d66531add8843f6aa6d968982731c3", + "sha256:71c4b330cf2313bbda0307fc858cc9055e64493ba9bf28454d25cf8b3ee8d7f5", + "sha256:f6ebea7c008f155baeefe16c56cd3ee6239f7a5a9ae42396c2f1860f08a7c432", + "sha256:fc575093cf81b6605bed84653e48b277318b880dc9becf42dd47fa11ffd3e2b6" + ], + "index": "pypi", + "version": "==2.0.3" + }, + "pillow": { + "hashes": [ + "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76", + "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585", + "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b", + "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8", + "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55", + "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc", + "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645", + "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff", + "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc", + "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b", + "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6", + "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20", + "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e", + "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a", + "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779", + "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02", + "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39", + "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f", + "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a", + "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409", + "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c", + "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488", + "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b", + "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d", + "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09", + "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b", + "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153", + "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9", + "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad", + "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df", + "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df", + "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed", + "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed", + "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698", + "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29", + "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649", + "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49", + "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b", + "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2", + "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a", + "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78" + ], + "index": "pypi", + "version": "==8.4.0" + }, + "pytz": { + "hashes": [ + "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c", + "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326" + ], + "version": "==2021.3" + }, + "requests": { + "hashes": [ + "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24", + "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==2.26.0" + }, + "sentry-sdk": { + "hashes": [ + "sha256:b9844751e40710e84a457c5bc29b21c383ccb2b63d76eeaad72f7f1c808c8828", + "sha256:c091cc7115ff25fe3a0e410dbecd7a996f81a3f6137d2272daef32d6c3cfa6dc" + ], + "index": "pypi", + "version": "==1.4.3" + }, + "sqlparse": { + "hashes": [ + "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae", + "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d" + ], + "markers": "python_version >= '3.5'", + "version": "==0.4.2" + }, + "urllib3": { + "hashes": [ + "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece", + "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", + "version": "==1.26.7" + } + }, + "develop": {} +} diff --git a/bbssite/settings.py b/bbssite/settings.py index 061ad92..0cbae41 100755 --- a/bbssite/settings.py +++ b/bbssite/settings.py @@ -52,6 +52,7 @@ TEMPLATES = [ 'OPTIONS': { 'context_processors': [ 'django.contrib.auth.context_processors.auth', + 'django.template.context_processors.request', 'django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', @@ -63,13 +64,13 @@ TEMPLATES = [ }, ] -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = [ 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', -) +] ROOT_URLCONF = 'bbssite.urls' @@ -151,6 +152,8 @@ LOGGING = { }, } +DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' + try: from .local_settings import * except ImportError: diff --git a/bbssite/urls.py b/bbssite/urls.py index 098821f..3d9d8d6 100755 --- a/bbssite/urls.py +++ b/bbssite/urls.py @@ -1,9 +1,9 @@ from django.conf import settings -from django.conf.urls import include, url from django.contrib import admin from django.contrib.auth.views import LoginView, LogoutView from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.contrib.staticfiles.views import serve +from django.urls import path, re_path, include from main import urls as main_urls @@ -11,17 +11,17 @@ from main import urls as main_urls admin.autodiscover() urlpatterns = [ - url(r'', include(main_urls)), - url(r'^accounts/login/$', LoginView.as_view(), name='django.contrib.auth.views.login'), - url(r'^accounts/logout/$', LogoutView.as_view(), name='django.contrib.auth.views.logout'), + re_path(r'', include(main_urls)), + path('accounts/login/', LoginView.as_view(), name='django.contrib.auth.views.login'), + path('accounts/logout/', LogoutView.as_view(), name='django.contrib.auth.views.logout'), - url(r'^admin/', include(admin.site.urls)), + path('admin/', admin.site.urls), ] urlpatterns += staticfiles_urlpatterns() if settings.DEBUG: urlpatterns += [ - url(r'^media/(?P.*)$', serve, { + re_path(r'^media/(?P.*)$', serve, { 'document_root': settings.MEDIA_ROOT, }) ] diff --git a/main/api/views.py b/main/api/views.py index fa27ab5..f39d2ee 100644 --- a/main/api/views.py +++ b/main/api/views.py @@ -1,6 +1,5 @@ from rest_framework import mixins -from rest_framework.decorators import list_route -from rest_framework.permissions import AllowAny +from rest_framework.decorators import action from rest_framework.response import Response from main.api.serializers import ProductSerializer, ProductStatSerializer @@ -14,7 +13,7 @@ class ProductViewSet(mixins.ListModelMixin, serializer_class = ProductSerializer queryset = Product.objects.all() - @list_route(methods=['get']) + @action(detail=False, methods=['get']) def group_by_user(self, request): products = self.get_queryset().filter(active=True) serializer = ProductStatSerializer(products, many=True) diff --git a/main/apps.py b/main/apps.py index 5c30c7d..3ea1f72 100644 --- a/main/apps.py +++ b/main/apps.py @@ -2,7 +2,7 @@ from django.apps import AppConfig class BBSAppConfig(AppConfig): - name = 'bbs' + name = 'main' verbose_name = 'Biceps Bar System' def ready(self): diff --git a/main/models.py b/main/models.py index 0d432a8..818715f 100755 --- a/main/models.py +++ b/main/models.py @@ -3,11 +3,10 @@ from datetime import datetime from django.conf import settings from django.db import models -from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ -@python_2_unicode_compatible + class Product(models.Model): name = models.CharField(max_length=64) sale_price_int = models.FloatField() @@ -53,9 +52,9 @@ class Product(models.Model): ordering = ['name'] -@python_2_unicode_compatible + class Order(models.Model): - customer = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, related_name='orders') + customer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True, related_name='orders') order_sum = models.FloatField(db_column='sum') created = models.DateTimeField(auto_now_add=True) @@ -69,10 +68,10 @@ class Order(models.Model): return "{}: {} kr".format(self.customer or "Ekstern", self.order_sum) -@python_2_unicode_compatible + class OrderLine(models.Model): - order = models.ForeignKey('main.Order', related_name='orderlines') - product = models.ForeignKey('main.Product', related_name='orderlines') + order = models.ForeignKey('main.Order', on_delete=models.CASCADE, related_name='orderlines') + product = models.ForeignKey('main.Product', on_delete=models.CASCADE, related_name='orderlines') amount = models.IntegerField() unit_price = models.FloatField(verbose_name=_('Enhetspris')) @@ -87,10 +86,10 @@ class OrderLine(models.Model): unique_together = ('order', 'product') -@python_2_unicode_compatible + class Transaction(models.Model): """ Money """ - user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='transactions') + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='transactions') amount = models.FloatField() created = models.DateTimeField(auto_now_add=True) @@ -98,11 +97,11 @@ class Transaction(models.Model): return "{}: {}: {}".format(self.id, self.user, self.amount) -@python_2_unicode_compatible + class InventoryTransaction(models.Model): """ Goods """ - user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='inventory_transactions') - product = models.ForeignKey('main.Product', related_name='transactions', verbose_name=_('Produkt')) + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='inventory_transactions') + product = models.ForeignKey('main.Product', on_delete=models.CASCADE, related_name='transactions', verbose_name=_('Produkt')) amount = models.FloatField(verbose_name=_('Antall')) unit_price = models.FloatField(verbose_name=_('Enhetspris')) comment = models.TextField(verbose_name=_('Kommentar'), blank=True) @@ -121,9 +120,9 @@ class InventoryTransaction(models.Model): self.unit_price) -@python_2_unicode_compatible + class UserProfile(models.Model): - user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile') + user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='profile') balance = models.FloatField(default=0.0) image = models.URLField(blank=True) diff --git a/main/views/general.py b/main/views/general.py index 6fba7d4..3d0a929 100644 --- a/main/views/general.py +++ b/main/views/general.py @@ -6,11 +6,12 @@ from datetime import datetime, timedelta from django.conf import settings from django.contrib import messages from django.contrib.auth.models import User -from django.core.urlresolvers import reverse from django.db.models import Min from django.forms import formset_factory from django.http import HttpResponseRedirect from django.shortcuts import render, redirect +from django.urls import reverse + from main.forms import OrderLineForm, OrderForm, DepositForm from main.models import Product, OrderLine, Order, Transaction from main.utils import users_format_js, users_with_perm diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 5641c12..0000000 --- a/requirements.txt +++ /dev/null @@ -1,11 +0,0 @@ -django==1.11.15 -django-bootstrap-form==3.4 -django-extensions==2.1.0 -django-widget-tweaks==1.4.2 -easy-thumbnails==2.5 -facebook-sdk==3.0.0 -gunicorn==19.9.0 -mysqlclient==1.3.13 -djangorestframework==3.6.4 -pillow==5.2.0 -raven==6.9.0