From ec638d51f95a2fc5bd68e0a97eb449a681194e7a Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Sun, 22 Nov 2015 12:51:12 +0100 Subject: [PATCH] Python 3 fixes --- bbssite/urls.py | 2 +- bbssite/wsgi.py | 6 ++--- main/apps.py | 10 +++++++ main/models.py | 63 +++++++++++++++++++++------------------------ main/signals.py | 11 ++++++++ main/utils.py | 2 +- main/views/stats.py | 6 +++-- main/views/users.py | 8 +----- 8 files changed, 61 insertions(+), 47 deletions(-) create mode 100644 main/apps.py create mode 100644 main/signals.py diff --git a/bbssite/urls.py b/bbssite/urls.py index 78cf691..cb1d76d 100755 --- a/bbssite/urls.py +++ b/bbssite/urls.py @@ -11,7 +11,7 @@ admin.autodiscover() urlpatterns = [ url(r'', include(main_urls)), url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'), - url(r'^accounts/logout/$', 'main.views.users.logout', name='logout'), + url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', name='logout'), url(r'^admin/', include(admin.site.urls)), ] diff --git a/bbssite/wsgi.py b/bbssite/wsgi.py index dcea718..fce2b90 100644 --- a/bbssite/wsgi.py +++ b/bbssite/wsgi.py @@ -1,6 +1,6 @@ import os -import django.core.handlers.wsgi -os.environ['DJANGO_SETTINGS_MODULE'] = 'bbssite.settings' +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bbssite.settings') -application = django.core.handlers.wsgi.WSGIHandler() +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() diff --git a/main/apps.py b/main/apps.py new file mode 100644 index 0000000..512f424 --- /dev/null +++ b/main/apps.py @@ -0,0 +1,10 @@ +from django.apps import AppConfig + + +class BBSAppConfig(AppConfig): + name = 'bbs' + verbose_name = 'Biceps Bar System' + + def ready(self): + # all models are loaded, now attach signals + import main.signals diff --git a/main/models.py b/main/models.py index 952c3c8..6fcf61d 100755 --- a/main/models.py +++ b/main/models.py @@ -1,16 +1,14 @@ -from django.contrib.auth.models import User -from django.db import models -from django.db.models.signals import post_save -from django.dispatch import receiver -from django.utils.translation import ugettext_lazy as _ +from __future__ import unicode_literals 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): - - def __unicode__(self): - return self.name - name = models.CharField(max_length=64) sale_price_int = models.FloatField() sale_price_ext = models.FloatField() @@ -48,12 +46,16 @@ class Product(models.Model): def wholesale_value(self): return self.wholesale_unit_price * self.inventory_amount + def __str__(self): + return self.name + class Meta: ordering = ['name'] +@python_2_unicode_compatible class Order(models.Model): - customer = models.ForeignKey(User, null=True, blank=True, related_name='orders') + customer = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, related_name='orders') order_sum = models.FloatField(db_column='sum') created = models.DateTimeField(auto_now_add=True) @@ -61,12 +63,13 @@ class Order(models.Model): return self.customer is None def reciept(self): - return u"{0}".format(u", ".join([str(ol) for ol in self.orderlines.all()])) + return "{}".format(", ".join([str(ol) for ol in self.orderlines.all()])) - def __unicode__(self): - return u"{0}: {1} kr".format(self.customer or u"Ekstern", self.order_sum) + def __str__(self): + 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') @@ -77,26 +80,28 @@ class OrderLine(models.Model): def price(self): return self.amount * self.unit_price - def __unicode__(self): - return u"{0} {1} ({2} kr per)".format(self.amount, self.product, self.unit_price) + def __str__(self): + return "{} {} ({} kr per)".format(self.amount, self.product, self.unit_price) class Meta: unique_together = ('order', 'product') +@python_2_unicode_compatible class Transaction(models.Model): """ Money """ - user = models.ForeignKey(User, related_name='transactions') + user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='transactions') amount = models.FloatField() created = models.DateTimeField(auto_now_add=True) - def __unicode__(self): - return u"{0}: {1}: {2}".format(self.id, self.user, self.amount) + def __str__(self): + return "{}: {}: {}".format(self.id, self.user, self.amount) +@python_2_unicode_compatible class InventoryTransaction(models.Model): """ Goods """ - user = models.ForeignKey(User, related_name='inventory_transactions') + user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='inventory_transactions') product = models.ForeignKey('main.Product', related_name='transactions', verbose_name=_('Produkt')) amount = models.FloatField(verbose_name=_('Antall')) unit_price = models.FloatField(verbose_name=_('Enhetspris')) @@ -107,8 +112,8 @@ class InventoryTransaction(models.Model): def price(self): return self.amount * self.unit_price - def __unicode__(self): - return u"{0}: {1}: {2} ({3} kr per)".format( + def __str__(self): + return "{}: {}: {} ({} kr per)".format( self.id, self.user, self.product, @@ -116,10 +121,10 @@ class InventoryTransaction(models.Model): self.unit_price) +@python_2_unicode_compatible class UserProfile(models.Model): - user = models.OneToOneField(User, related_name='profile') + user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile') balance = models.FloatField(default=0.0) - #image = models.ImageField(upload_to='users', blank=True) image = models.URLField(blank=True) def last_purchase(self): @@ -131,7 +136,6 @@ class UserProfile(models.Model): def last_purchase_date(self): last = self.last_purchase() last_p = last.created if last else datetime.min - print(self.user, last_p) return last_p def profile_image_url(self): @@ -142,12 +146,5 @@ class UserProfile(models.Model): return self.image - def __unicode__(self): - return u"{0}".format(self.user) - - -# Create a new UserProfile object when we create a new User. -@receiver(post_save, sender=User, dispatch_uid='randomz') -def create_user_profile(sender, instance, created, **kwargs): - if created: - UserProfile.objects.create(user=instance) \ No newline at end of file + def __str__(self): + return "{}".format(self.user) diff --git a/main/signals.py b/main/signals.py new file mode 100644 index 0000000..475b6e7 --- /dev/null +++ b/main/signals.py @@ -0,0 +1,11 @@ +from django.contrib.auth.models import User +from django.db.models.signals import post_save +from django.dispatch import receiver +from main.models import UserProfile + + +@receiver(post_save, sender=User, dispatch_uid='randomz') +def create_user_profile(sender, instance, created, **kwargs): + # Create a new UserProfile object when we create a new User. + if created: + UserProfile.objects.create(user=instance) \ No newline at end of file diff --git a/main/utils.py b/main/utils.py index 825eec2..080f44f 100644 --- a/main/utils.py +++ b/main/utils.py @@ -21,5 +21,5 @@ def users_format_js(users): users_js = [] for user in users: users_js.append('"' + user.first_name + ' ' + user.last_name[:1] + '"') - users_js = "[{0}]".format(u",".join(users_js)) + users_js = "[{}]".format(u",".join(users_js)) return users_js diff --git a/main/views/stats.py b/main/views/stats.py index 30a56ab..fde3642 100644 --- a/main/views/stats.py +++ b/main/views/stats.py @@ -1,10 +1,12 @@ from __future__ import unicode_literals -from datetime import datetime, timedelta, time +import time +from datetime import datetime, timedelta from django.db.models import Sum, Count from django.http import JsonResponse from django.shortcuts import render, get_object_or_404 from itertools import groupby +from django.utils import six from main.models import Product, OrderLine, Order @@ -61,7 +63,7 @@ def stats_product(product): f_per_user.append([who, num]) response = { - 'product': serialize_product(Product.objects.get(pk=product)) if type(product) is unicode else serialize_product(product), + 'product': serialize_product(Product.objects.get(pk=product)) if type(product) in six.string_types else serialize_product(product), 'counts': f_per_user, 'total_counts': sum([row['num'] for row in per_user]), } diff --git a/main/views/users.py b/main/views/users.py index 34d83d2..a3c87eb 100644 --- a/main/views/users.py +++ b/main/views/users.py @@ -6,23 +6,17 @@ from django.contrib.auth.decorators import login_required from django.db import connection from django.db.models import Sum, Count from django.shortcuts import render, redirect -from django.contrib.auth import logout as auth_logout from main.forms import SimpleCreateUserForm from main.models import Order from main.models import Transaction -def logout(request): - auth_logout(request) - return render(request, 'registration/logout.html') - - def create_user(request): if request.method == "POST": form = SimpleCreateUserForm(data=request.POST) if form.is_valid(): user = form.save() - messages.success(request, "Hurra! {0} {1} er lagt til".format(user.first_name, user.last_name)) + messages.success(request, "Hurra! {} {} er lagt til".format(user.first_name, user.last_name)) return redirect('create-user') else: