diff --git a/accounts_ext/admin.py b/accounts_ext/admin.py index 47c4d07..9b62ac8 100644 --- a/accounts_ext/admin.py +++ b/accounts_ext/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin from django.contrib.auth import get_user_model -from django.contrib.auth.models import Group as GroupBase from django.contrib.auth.admin import UserAdmin as BaseUserAdmin, GroupAdmin +from django.contrib.auth.models import Group as GroupBase from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _ from import_export import resources @@ -10,7 +10,6 @@ from rangefilter.filter import DateTimeRangeFilter from core.admin import SafeModelAdmin from referral.admin import ReferralAdminInline - from .forms import UserChangeForm, UserCreationForm from .models import Profile, Company, Group diff --git a/accounts_ext/forms.py b/accounts_ext/forms.py index fb8cd1f..70d866a 100644 --- a/accounts_ext/forms.py +++ b/accounts_ext/forms.py @@ -1,13 +1,9 @@ import logging + from crispy_forms.helper import FormHelper from crispy_forms.layout import Layout, Field, Div, Submit, HTML from django import forms -from django.conf import settings from django.contrib.auth import get_user_model, password_validation -from django.urls import reverse, reverse_lazy -from django.utils.translation import ugettext_lazy as _ -from django_email_blacklist import DisposableEmailChecker -from registration.forms import RegistrationFormUniqueEmail from django.contrib.auth.forms import ( AuthenticationForm as AuthenticationFormBase, PasswordResetForm as PasswordResetFormBase, @@ -16,6 +12,10 @@ from django.contrib.auth.forms import ( UserCreationForm as UserCreationFormBase ) from django.contrib.auth.forms import UsernameField +from django.urls import reverse, reverse_lazy +from django.utils.translation import ugettext_lazy as _ +from django_email_blacklist import DisposableEmailChecker +from registration.forms import RegistrationFormUniqueEmail from snowpenguin.django.recaptcha2.fields import ReCaptchaField from snowpenguin.django.recaptcha2.widgets import ReCaptchaWidget diff --git a/accounts_ext/models.py b/accounts_ext/models.py index 9cf06d2..a297bf6 100644 --- a/accounts_ext/models.py +++ b/accounts_ext/models.py @@ -6,9 +6,8 @@ from django.core.validators import RegexValidator 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 django.utils.timezone import now as datetime_now - +from django.utils.translation import ugettext_lazy as _ from registration.signals import user_activated from core.models import ( @@ -18,8 +17,6 @@ from core.models import ( ) -# Create your models here. - class UserManager(ActualOnlyManager, BaseUserManager): def create_superuser(self, email, password): user = self.model( diff --git a/accounts_ext/templatetags/accounts_ext_filters.py b/accounts_ext/templatetags/accounts_ext_filters.py index 30b0a95..7cffc6a 100644 --- a/accounts_ext/templatetags/accounts_ext_filters.py +++ b/accounts_ext/templatetags/accounts_ext_filters.py @@ -2,6 +2,7 @@ from django.template import Library register = Library() + @register.simple_tag(name='get') def get_by_key(dict, key): - return getattr(dict,key) + return getattr(dict, key) diff --git a/accounts_ext/urls.py b/accounts_ext/urls.py index e0517d9..d5a9b30 100644 --- a/accounts_ext/urls.py +++ b/accounts_ext/urls.py @@ -1,6 +1,6 @@ from django.urls import re_path -from . import views +from . import views urlpatterns = [ re_path(r'^login/$', views.LoginView.as_view(), name='login'), @@ -9,6 +9,7 @@ urlpatterns = [ re_path(r'^register/done/$', views.RegistrationDoneView.as_view(), name='register_done'), re_path(r'^password/reset/$', views.ResetPasswordView.as_view(), name='reset_password'), re_path(r'^password/reset/done/$', views.ResetPasswordDoneView.as_view(), name='reset_password_done'), - re_path(r'^password/reset/change/(?P[0-9A-Za-z_\-]+)/(?P.+)/$', views.ResetPasswordConfirmView.as_view(), name='reset_password_change'), + re_path(r'^password/reset/change/(?P[0-9A-Za-z_\-]+)/(?P.+)/$', + views.ResetPasswordConfirmView.as_view(), name='reset_password_change'), re_path(r'^password/reset/complete/$', views.ResetPasswordCompleteView.as_view(), name='reset_password_complete') ] diff --git a/accounts_ext/views.py b/accounts_ext/views.py index ed66f89..7c23e93 100644 --- a/accounts_ext/views.py +++ b/accounts_ext/views.py @@ -1,6 +1,6 @@ import logging + from django.conf import settings -from django.contrib.auth.forms import SetPasswordForm from django.contrib.auth.views import ( LoginView as LoginViewBase, LogoutView, @@ -9,17 +9,15 @@ from django.contrib.auth.views import ( PasswordResetConfirmView as PasswordResetConfirmViewBase, PasswordResetCompleteView as PasswordResetCompleteViewBase, ) +from django.shortcuts import redirect, resolve_url +from django.urls import reverse_lazy +from django.utils.http import is_safe_url, urlencode +from django.utils.translation import ugettext_lazy as _ from django.views.generic import TemplateView - from registration.backends.default.views import ( RegistrationView as RegistrationViewBase, ResendActivationView as ResendActivationViewBase ) -from django.contrib.messages.views import SuccessMessageMixin -from django.shortcuts import redirect, resolve_url -from django.urls import reverse_lazy -from django.utils.http import is_safe_url, urlencode -from django.utils.translation import ugettext_lazy as _ from core.views import ProtectedTemplateView from .forms import ( diff --git a/blog_ext/admin.py b/blog_ext/admin.py index c026fb3..2490172 100644 --- a/blog_ext/admin.py +++ b/blog_ext/admin.py @@ -1,14 +1,11 @@ +from ckeditor_uploader.widgets import CKEditorUploadingWidget from django.contrib import admin from django.utils.translation import ugettext_lazy as _ - -from ckeditor_uploader.widgets import CKEditorUploadingWidget - from pinax.blog.admin import ( PostAdmin as BasePostAdmin, SectionAdmin as BaseSectionAdmin, PostImageSet as BasePostImageSet ) - from pinax.blog.models import ( Post as PinaxPost, Section as PinaxSection, @@ -60,7 +57,6 @@ class PostImageSet(ImageSet): verbose_name_plural = _('Изображения') - admin.site.unregister(BasePostImageSet) admin.site.register( diff --git a/blog_ext/forms.py b/blog_ext/forms.py index dcc35cb..432bfb5 100644 --- a/blog_ext/forms.py +++ b/blog_ext/forms.py @@ -1,6 +1,5 @@ from django.forms import forms from django.utils.translation import ugettext_lazy as _ - from pinax.blog.forms import AdminPostForm as BaseAdminPostForm from blog_ext.models import Post diff --git a/blog_ext/models.py b/blog_ext/models.py index e80f703..3d83680 100644 --- a/blog_ext/models.py +++ b/blog_ext/models.py @@ -1,11 +1,8 @@ -import uuid - import pytz from django.conf import settings from django.db import models from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _ - # Create your models here. from pinax.blog.models import ( Post as BasePost, @@ -14,9 +11,7 @@ from pinax.blog.models import ( Section as BaseSection ) from pinax.images.models import ( - ImageSet as BaseImageSet, - Image as BaseImage, - image_upload_to) + ImageSet as BaseImageSet) from core.models import AbstractStatusModel, AbstractDateTimeModel diff --git a/blog_ext/urls.py b/blog_ext/urls.py index e0c24ae..b77e050 100644 --- a/blog_ext/urls.py +++ b/blog_ext/urls.py @@ -1,6 +1,6 @@ from django.urls import re_path -from . import views +from . import views urlpatterns = [ re_path(r"^$", views.BlogIndexView.as_view(), name="blog"), diff --git a/blog_ext/views.py b/blog_ext/views.py index 16012c7..320c2e4 100644 --- a/blog_ext/views.py +++ b/blog_ext/views.py @@ -5,6 +5,7 @@ from pinax.blog.views import ( SecretKeyPostDetailView as BaseSecretKeyPostDetailView, SlugUniquePostDetailView as BaseSlugUniquePostDetailView) + class SlugUniquePostDetailView(BaseSlugUniquePostDetailView): pass diff --git a/cabinet/views.py b/cabinet/views.py index 1848e2a..703fe96 100644 --- a/cabinet/views.py +++ b/cabinet/views.py @@ -1,4 +1,3 @@ -from django.conf import settings from django.core.paginator import Paginator from django.utils.translation import ugettext_lazy as _ @@ -11,13 +10,13 @@ class IndexTemplateView(ProtectedTemplateView): template_name = 'cabinet/index.html' title = _('Личный кабинет') - def get_ref_link(self,user): + def get_ref_link(self, user): return "{path}?ref={ref_link}".format(**{ 'path': user.referral.url, 'ref_link': user.referral.code }) - def get_bought_item_list(self,user): + def get_bought_item_list(self, user): bought_item_queryset = user.buying_set.filter(status=BUYING_STATUS_PAID).order_by('-create_at').all() paginator = Paginator( object_list=bought_item_queryset, @@ -26,14 +25,14 @@ class IndexTemplateView(ProtectedTemplateView): the_page = 1 return paginator.page(the_page) - def get_full_name(self,user): + def get_full_name(self, user): return '{last_name} {first_name} {patronymic}'.format(**{ 'last_name': user.profile.last_name or "", 'first_name': user.profile.first_name or "", 'patronymic': user.profile.patronymic or "" }) - def get_user_points(self,user): + def get_user_points(self, user): return user.referral.referralstats.points def get_context_data(self, **kwargs): diff --git a/cart/admin.py b/cart/admin.py index 1b23730..dfcea3a 100644 --- a/cart/admin.py +++ b/cart/admin.py @@ -1,25 +1,23 @@ import csv import datetime -import pytils -import weasyprint from decimal import Decimal +import pytils +import weasyprint from django.conf import settings from django.contrib import admin -from django.utils.translation import ugettext_lazy as _ from django.http import HttpResponse from django.template.loader import render_to_string - +from django.utils.translation import ugettext_lazy as _ from jet.admin import CompactInline from jet.filters import DateRangeFilter from rangefilter.filter import DateTimeRangeFilter from core.admin import SafeModelAdmin -from core.models import Certificate from eshop_project.settings.base import PAY_REQUISITES from .models import ( Offer, SupplyType, - Currency, Buying, + Buying, SupplyTarget, Order, Discount, Client) @@ -32,6 +30,7 @@ class ProductOfferInlineAdmin(CompactInline): show_change_link = 1 max_num = 1 + # Supply admins @admin.register(SupplyType) @@ -49,7 +48,7 @@ class SupplyTargetAdmin(admin.ModelAdmin): @admin.register(Discount) class DiscountAdmin(admin.ModelAdmin): list_display = ['code', 'valid_from', 'valid_to', 'value', 'active'] - list_filter = ['valid_from', 'valid_to', 'active'] + list_filter = ['valid_from', 'valid_to', 'active'] search_field = ['code'] @@ -84,9 +83,10 @@ class BuyingAdmin(SafeModelAdmin): data_row.append(value) writer.writerow(data_row) return response + export_buyings_to_csv.short_description = _('экспортировать CSV') - def print_order_in_pdf(self,buyings): + def print_order_in_pdf(self, buyings): verb_price = pytils.numeral.in_words(round(buyings.total_price)) verb_cur = pytils.numeral.choose_plural(round(buyings.total_price), ("рубль", "рубля", "рублей")) html = render_to_string('bootstrap/pdf/buyings.html', { @@ -96,17 +96,17 @@ class BuyingAdmin(SafeModelAdmin): response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'filename=order_{}.pdf'.format(buyings.id) - weasyprint.HTML( string=rendered_html, base_url=self.request.build_absolute_uri() ).write_pdf( response, - stylesheets = [ + stylesheets=[ weasyprint.CSS(settings.STATIC_ROOT + '/css/bootstrap.min.css') ] ) return response + print_order_in_pdf.short_description = _('Распечатать заказ в pdf') def mark_buyings_as_paid(self, request, queryset): @@ -118,8 +118,8 @@ class BuyingAdmin(SafeModelAdmin): parent_profile.save() buying.status = BUYING_STATUS_PAID buying.save() - mark_buyings_as_paid.short_description = _('Отметить как оплаченные') + mark_buyings_as_paid.short_description = _('Отметить как оплаченные') inlines = () list_display = ('user', 'offer', 'status', 'amount', 'total_price') @@ -133,11 +133,11 @@ class BuyingAdmin(SafeModelAdmin): @admin.register(Order) class OrderAdmin(SafeModelAdmin): - list_display = ('order_code', 'customer_user', 'customer_name', 'customer_email','phone') + list_display = ('order_code', 'customer_user', 'customer_name', 'customer_email', 'phone') @admin.register(Client) class ClientAdmin(SafeModelAdmin): - list_display = ('name','image','status',) + list_display = ('name', 'image', 'status',) search_fields = ('name',) list_filter = ('status',) diff --git a/cart/context_processors.py b/cart/context_processors.py index a0a493e..2f99ab0 100644 --- a/cart/context_processors.py +++ b/cart/context_processors.py @@ -2,5 +2,4 @@ from cart.utils import Cart def cart_basket(request): - return {'cart': Cart(request) } - + return {'cart': Cart(request)} diff --git a/cart/forms.py b/cart/forms.py index 5ec7c23..4fea555 100644 --- a/cart/forms.py +++ b/cart/forms.py @@ -1,25 +1,22 @@ import uuid from crispy_forms.helper import FormHelper -from crispy_forms.layout import Layout, Field, Div, HTML, Hidden, Fieldset, Submit +from crispy_forms.layout import Layout, Field, Div, HTML, Submit from django import forms from django.conf import settings from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator -from django.forms import ALL_FIELDS, formset_factory from django.urls import reverse_lazy +from django.utils.translation import ugettext_lazy as _ from cart.models import ( - Buying, BUYING_STATUS_IN_CART, Offer, SupplyType, SupplyTarget, Discount, Order + Buying, Offer, SupplyType, SupplyTarget, Discount, Order ) from cart.tasks import send_user_order_notification, send_admin_order_notification from contact_us.mixins import RequestNotifiable from core.forms import QueryFormBase from core.models import City from core.utils import parse_path -from django.utils.translation import ugettext_lazy as _ - -from products.models import Product class CartAddInlineForm(forms.ModelForm): @@ -122,7 +119,7 @@ class CartCheckoutForm(RequestNotifiable, forms.ModelForm): form_action = {'viewname': 'cart:confirm', 'kwargs': {}} field_template = 'bootstrap/forms/cart_checkout.html' - city = forms.CharField(label=_('Город'),max_length=255) + city = forms.CharField(label=_('Город'), max_length=255) def __init__(self, *args, **kwargs): self.helper = FormHelper() diff --git a/cart/models.py b/cart/models.py index 3e0ee37..1e3bff5 100644 --- a/cart/models.py +++ b/cart/models.py @@ -1,24 +1,19 @@ import uuid - from decimal import Decimal -from autoslug import AutoSlugField +from autoslug import AutoSlugField +from django.contrib.auth import get_user_model from django.core.validators import MinValueValidator, MaxValueValidator, RegexValidator from django.db import models -from django.contrib.auth import get_user_model from django.db.models import Avg -from django.db.models.signals import post_save -from django.dispatch import receiver -from django.utils.translation import ugettext_lazy as _ from django.utils.timezone import now, timedelta - +from django.utils.translation import ugettext_lazy as _ # Create your models here. from core.models import ( AbstractStatusModel, AbstractDateTimeModel, ActiveOnlyManager, City, Currency) - from products.models import Product diff --git a/cart/tasks.py b/cart/tasks.py index d519653..2769581 100644 --- a/cart/tasks.py +++ b/cart/tasks.py @@ -1,14 +1,15 @@ -import celery -import weasyprint -import pytils from io import BytesIO +import celery +import pytils +import weasyprint from django.conf import settings -from django.template.loader import render_to_string, get_template from django.core.mail import EmailMessage, EmailMultiAlternatives +from django.template.loader import render_to_string, get_template from cart.models import Order + @celery.task() def send_user_order_notification(context): """ @@ -26,7 +27,7 @@ def send_user_order_notification(context): # html = render_to_string('orders:AdminOrderPDF', args=[order_id]) html = render_to_string('cart/order_invoice.html', {**settings.PAY_REQUISITES, 'order': order, - 'verb_cur': verb_cur, 'verb_price': verb_price}) + 'verb_cur': verb_cur, 'verb_price': verb_price}) rendered_html = html.encode(encoding="UTF-8") out = BytesIO() weasyprint.HTML(string=rendered_html).write_pdf(out, @@ -34,8 +35,8 @@ def send_user_order_notification(context): weasyprint.CSS(settings.STATIC_ROOT + 'css/build.css')]) order_invoice_name = 'Order_' + order.order_code weasyprint.HTML(string=rendered_html, base_url=context['site_url']).write_pdf(order_invoice_name, - stylesheets=[weasyprint.CSS( - settings.STATIC_ROOT + '/css/build.css')]) + stylesheets=[weasyprint.CSS( + settings.STATIC_ROOT + '/css/build.css')]) mail_send.attach('order_{}.pdf'.format(order.id), out.getvalue(), 'application/pdf') mail_send.send() return mail_send diff --git a/cart/templatetags/cart_tags.py b/cart/templatetags/cart_tags.py index b696cb5..eda8b76 100644 --- a/cart/templatetags/cart_tags.py +++ b/cart/templatetags/cart_tags.py @@ -1,12 +1,13 @@ from django import template -from django.template import loader, Node, Variable -from django.utils.encoding import smart_str, smart_bytes -from django.template.defaulttags import url +from django.template import Node, Variable from django.template import VariableDoesNotExist +from django.template.defaulttags import url +from django.utils.encoding import smart_bytes from mptt.templatetags.mptt_tags import recursetree register = template.Library() + @register.tag def breadcrumb(parser, token): """ @@ -40,7 +41,7 @@ def breadcrumb_url(parser, token): """ bits = token.split_contents() - if len(bits)==2: + if len(bits) == 2: return breadcrumb(parser, token) # Extract our extra title parameter @@ -51,21 +52,23 @@ def breadcrumb_url(parser, token): return UrlBreadcrumbNode(title, url_node) + @register.tag def breadcrumb_mptt_url(parser, token): return recursetree(parser, token) + class BreadcrumbNode(Node): def __init__(self, vars): """ First var is title, second var is url context variable """ - self.vars = map(Variable,vars) + self.vars = map(Variable, vars) def render(self, context): title = self.vars[0].var - if title.find("'")==-1 and title.find('"')==-1: + if title.find("'") == -1 and title.find('"') == -1: try: val = self.vars[0] title = val.resolve(context) @@ -73,12 +76,12 @@ class BreadcrumbNode(Node): title = '' else: - title=title.strip("'").strip('"') - title=smart_bytes(title) + title = title.strip("'").strip('"') + title = smart_bytes(title) url = None - if len(self.vars)>1: + if len(self.vars) > 1: val = self.vars[1] try: url = val.resolve(context) @@ -97,15 +100,15 @@ class UrlBreadcrumbNode(Node): def render(self, context): title = self.title.var - if title.find("'")==-1 and title.find('"')==-1: + if title.find("'") == -1 and title.find('"') == -1: try: val = self.title title = val.resolve(context) except: title = '' else: - title=title.strip("'").strip('"') - title=smart_bytes(title) + title = title.strip("'").strip('"') + title = smart_bytes(title) url = self.url_node.render(context) return create_crumb(title, url) diff --git a/contact_us/mixins.py b/contact_us/mixins.py index b571b50..612caee 100644 --- a/contact_us/mixins.py +++ b/contact_us/mixins.py @@ -1,11 +1,11 @@ import logging from django.core.mail import EmailMultiAlternatives -from django.template import Context from django.template.loader import get_template logger = logging.Logger(__name__) + class RequestNotifiable(object): MAIL_CATEGORY = 'Request' @@ -34,7 +34,7 @@ class RequestNotifiable(object): context['from_email'], context['recipients'] ) - email.attach_alternative(body.render(context['email']),'text/html') + email.attach_alternative(body.render(context['email']), 'text/html') try: email.send() except Exception as e: diff --git a/contact_us/models.py b/contact_us/models.py index 4cb0185..a673537 100644 --- a/contact_us/models.py +++ b/contact_us/models.py @@ -1,12 +1,8 @@ -import os -from django.conf import settings -from django.contrib.auth import get_user_model from django.core.validators import RegexValidator from django.db import models from django.utils.translation import ugettext_lazy as _ # Create your models here. -from core.models import AbstractStatusModel, STATUS_DELETED # --------------------- REQUEST STATUS LIST -------------------- diff --git a/contact_us/views.py b/contact_us/views.py index 157a1d9..74a9bb9 100644 --- a/contact_us/views.py +++ b/contact_us/views.py @@ -2,9 +2,9 @@ import logging from django.contrib import messages from django.contrib.messages.views import SuccessMessageMixin -from django.http import HttpResponseRedirect, HttpResponseBadRequest, Http404 -from django.views.generic import FormView +from django.http import HttpResponseRedirect, Http404 from django.utils.translation import ugettext_lazy as _ +from django.views.generic import FormView from .forms import ContactUsForm @@ -26,18 +26,18 @@ class ContactUsFormView(SuccessMessageMixin, FormView): form.send_email(self.request) except Exception as e: self.form_invalid(form=form) - messages.add_message(self.request,messages.SUCCESS,self.success_message,extra_tags='contact_us_form_message') + messages.add_message(self.request, messages.SUCCESS, self.success_message, extra_tags='contact_us_form_message') return HttpResponseRedirect(self.next) def form_invalid(self, form): context = self.get_context_data() if len(form.errors) > 0: context['form_show_errors'] = True - messages.add_message(self.request,messages.ERROR,self.error_message,extra_tags='contact_us_form_message') + messages.add_message(self.request, messages.ERROR, self.error_message, extra_tags='contact_us_form_message') return HttpResponseRedirect(self.next) def dispatch(self, request, *args, **kwargs): - if request.POST.get('next',None) is None: + if request.POST.get('next', None) is None: raise Http404() else: self.next = request.POST.get('next') diff --git a/flatpages_ext/admin.py b/flatpages_ext/admin.py index 58f9b47..4512bf6 100644 --- a/flatpages_ext/admin.py +++ b/flatpages_ext/admin.py @@ -44,7 +44,9 @@ class CKFlatPageAdmin(FlatPageAdmin): def formfield_for_dbfield(self, db_field, **kwargs): if 'content' in db_field.name: - kwargs['widget'] = CKEditorUploadingWidget(config_name='awesome_ckeditor',attrs={'class':'mt mt-field-content-%s' % db_field.name.replace('content', '')}) + kwargs['widget'] = CKEditorUploadingWidget(config_name='awesome_ckeditor', attrs={ + 'class': 'mt mt-field-content-%s' % db_field.name.replace('content', '')}) return super(CKFlatPageAdmin, self).formfield_for_dbfield(db_field, **kwargs) + admin.site.unregister(FlatPage) diff --git a/flatpages_ext/views.py b/flatpages_ext/views.py index e2c7bd4..a283ce7 100644 --- a/flatpages_ext/views.py +++ b/flatpages_ext/views.py @@ -1,8 +1,11 @@ -from django.shortcuts import render -from .forms import SubscriberForm from django.contrib import auth +from django.shortcuts import render + from products.models import * +from .forms import SubscriberForm + +# TODO What's going on here? def landing(request): form = SubscriberForm(request.POST or None) diff --git a/index/urls.py b/index/urls.py index 3cae42b..d8e3b00 100644 --- a/index/urls.py +++ b/index/urls.py @@ -1,6 +1,7 @@ -from django.urls import re_path +from django.urls import path + from . import views urlpatterns = [ - re_path(r'', views.IndexView.as_view(), name='index') + path('', views.IndexView.as_view(), name='index') ] diff --git a/products/admin.py b/products/admin.py index f2f78d7..c136f54 100644 --- a/products/admin.py +++ b/products/admin.py @@ -1,7 +1,4 @@ from django.contrib import admin -from django.forms import ALL_FIELDS -from django.utils.translation import ugettext_lazy as _ - from import_export import resources, fields, widgets from import_export.admin import ImportExportModelAdmin from jet.admin import CompactInline @@ -9,12 +6,12 @@ from rangefilter.filter import DateRangeFilter, DateTimeRangeFilter from cart.admin import ProductOfferInlineAdmin from core.admin import SafeModelAdmin - from .forms import ProductAdminForm from .models import ( Product, ProductCategory, ProductImage, Manufacturer ) + class CustomModelResource(resources.ModelResource): def before_import_row(self, row, **kwargs): """ @@ -103,7 +100,6 @@ class ProductResource(CustomModelResource): default={}, widget=widgets.CharWidget()) - class Meta: model = Product fields = ('id', 'name', 'description', 'producer', 'parent', 'is_active', 'attributes', 'discount_policy') diff --git a/products/context_processors.py b/products/context_processors.py index b032388..476547a 100644 --- a/products/context_processors.py +++ b/products/context_processors.py @@ -41,7 +41,7 @@ def product_fitler_formset(request): product_form_action = {'viewname': request.resolver_match.view_name, 'kwargs': request.resolver_match.kwargs} return { - 'left_product_filter_formset':{ + 'left_product_filter_formset': { 'manufacturer': ProductManufacturerFilterForm( product_form_action=product_form_action, query_params=request.GET diff --git a/products/middleware.py b/products/middleware.py deleted file mode 100644 index e69de29..0000000 diff --git a/products/models.py b/products/models.py index 7621e88..cf4ef44 100644 --- a/products/models.py +++ b/products/models.py @@ -1,20 +1,10 @@ +from autoslug import AutoSlugField from django.contrib.auth import get_user_model from django.db import models -from django.db.models import Q -from django.urls import reverse_lazy, reverse -from django.contrib.postgres.fields import HStoreField from django.utils.translation import ugettext_lazy as _ +from mptt.models import TreeForeignKey -from mptt import ( - models as mptt_models, - managers as mptt_managers, - register -) -from mptt.models import MPTTModel, TreeForeignKey -from autoslug import AutoSlugField - -from core.models import AbstractStatusModel, ActualOnlyManager, AbstractDateTimeModel, ActiveOnlyManager, \ - AbstractStatusMPTTModel +from core.models import AbstractStatusModel, AbstractDateTimeModel, AbstractStatusMPTTModel # ---------------------------------- COMMON PRODUCT STATUS ---------------------------------------# # Create your models here. diff --git a/products/urls.py b/products/urls.py index 35f0ff2..2f9e4e1 100644 --- a/products/urls.py +++ b/products/urls.py @@ -13,23 +13,23 @@ Including another URLconf 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ -from django.urls import re_path import mptt_urls +from django.urls import re_path + from . import views from .models import ProductCategory, Product urlpatterns = [ - re_path(r'^list/$', views.ProductListView.as_view(), name='product_list'), re_path( r'^list/(?P.*)', - mptt_urls.view(model=ProductCategory, view=views.ProductListView.as_view(),slug_field='slug'), + mptt_urls.view(model=ProductCategory, view=views.ProductListView.as_view(), slug_field='slug'), name='product_list' ), re_path( r'^item/(?P.*)', - mptt_urls.view(model=Product, view=views.ProductDetailView.as_view(),slug_field='slug'), + mptt_urls.view(model=Product, view=views.ProductDetailView.as_view(), slug_field='slug'), name='product_details' ), @@ -38,7 +38,6 @@ urlpatterns = [ # url(r'^autocomplete/$', autocomplete), # url(r'^find/$', FacetedSearchView.as_view(), name='haystack_search'), - # url(r'^products/(?P[-\w]+)/$', products, name='Product'), # url(r'^(?P[-\w]+)/(?P.*)', # mptt_urls.view(model=ProductCategory, view=categorieslist, slug_field='slug'), diff --git a/referral/admin.py b/referral/admin.py index 2773d13..8f3a62b 100644 --- a/referral/admin.py +++ b/referral/admin.py @@ -3,13 +3,12 @@ from django.contrib.admin import register from django.urls import reverse_lazy from django.utils.html import format_html from django.utils.translation import ugettext_lazy as _ - # Register your models here. from rangefilter.filter import DateRangeFilter, DateTimeRangeFilter from core.admin import SafeModelAdmin -from .models import Referral, ReferralStats from .forms import ReferralAdminForm, ReferralStatsAdminForm +from .models import Referral, ReferralStats class ReferralAdminInline(admin.TabularInline): @@ -23,6 +22,7 @@ class ReferralAdminInline(admin.TabularInline): def has_delete_permission(self, request, obj=None): return False + @register(Referral) class ReferralAdmin(SafeModelAdmin): def has_add_permission(self, request): diff --git a/referral/middleware.py b/referral/middleware.py index a13b63d..42c8739 100644 --- a/referral/middleware.py +++ b/referral/middleware.py @@ -1,7 +1,3 @@ -from django.http import HttpResponseRedirect -from django.urls import reverse - -from core.models import STATUS_ACTIVE from .models import Referral from .utils import set_cookie, pop_cookie, get_cookie @@ -12,18 +8,18 @@ class ReferralMiddleware: def __call__(self, request): response = None - if hasattr(self,'process_request'): + if hasattr(self, 'process_request'): response = self.process_request(request) if not response: response = self.get_response(request) - if hasattr(self,'process_response'): - response = self.process_response(request,response) + if hasattr(self, 'process_response'): + response = self.process_response(request, response) return response - def process_request(self,request): + def process_request(self, request): pass - def process_response(self,request,response): + def process_response(self, request, response): if not request.user.is_authenticated: code = request.GET.get('ref') cookie_code = get_cookie(request.COOKIES, 'referral') @@ -37,4 +33,3 @@ class ReferralMiddleware: elif request.user.is_authenticated: pop_cookie(response, 'referral') return response - diff --git a/referral/models.py b/referral/models.py index 832b01c..d1aa1ce 100644 --- a/referral/models.py +++ b/referral/models.py @@ -1,17 +1,14 @@ import logging -import string - import random +import string from django.conf import settings from django.contrib.auth import get_user_model -from django.contrib.sites.models import Site from django.db import models from django.db.models.signals import post_save from django.dispatch import receiver from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _ - # Create your models here. from registration.signals import user_activated diff --git a/referral/urls.py b/referral/urls.py index b422d57..69881bc 100644 --- a/referral/urls.py +++ b/referral/urls.py @@ -1,6 +1,3 @@ -from django.conf.urls import url -from django.urls import re_path - urlpatterns = [ # re_path() ] diff --git a/referral/utils.py b/referral/utils.py index 148ab19..87bf76e 100644 --- a/referral/utils.py +++ b/referral/utils.py @@ -1,13 +1,17 @@ import datetime -def set_cookie(response, key, value, day_expire = 1): + +def set_cookie(response, key, value, day_expire=1): max_age = day_expire * 24 * 60 * 60 - expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT") - response.set_cookie(key=key,value=value,max_age=max_age,expires=expires) # @TODO: Connect cookie to domain + expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age), + "%a, %d-%b-%Y %H:%M:%S GMT") + response.set_cookie(key=key, value=value, max_age=max_age, expires=expires) # @TODO: Connect cookie to domain + def get_cookie(cookies, key): return cookies.get(key) if cookies.get(key) else None + def pop_cookie(response, key): cookie = get_cookie(response.cookies, key) if cookie: