optimize imports and reformat code according to pep8

remotes/origin/ESHOP_refactor_products_app
FUNNYDMAN 7 years ago
parent 8d2d52ae45
commit de0ff868be
  1. 3
      accounts_ext/admin.py
  2. 10
      accounts_ext/forms.py
  3. 5
      accounts_ext/models.py
  4. 3
      accounts_ext/templatetags/accounts_ext_filters.py
  5. 5
      accounts_ext/urls.py
  6. 12
      accounts_ext/views.py
  7. 6
      blog_ext/admin.py
  8. 1
      blog_ext/forms.py
  9. 7
      blog_ext/models.py
  10. 2
      blog_ext/urls.py
  11. 1
      blog_ext/views.py
  12. 9
      cabinet/views.py
  13. 26
      cart/admin.py
  14. 3
      cart/context_processors.py
  15. 11
      cart/forms.py
  16. 11
      cart/models.py
  17. 15
      cart/tasks.py
  18. 27
      cart/templatetags/cart_tags.py
  19. 4
      contact_us/mixins.py
  20. 4
      contact_us/models.py
  21. 10
      contact_us/views.py
  22. 4
      flatpages_ext/admin.py
  23. 7
      flatpages_ext/views.py
  24. 5
      index/urls.py
  25. 6
      products/admin.py
  26. 2
      products/context_processors.py
  27. 0
      products/middleware.py
  28. 16
      products/models.py
  29. 9
      products/urls.py
  30. 4
      referral/admin.py
  31. 15
      referral/middleware.py
  32. 5
      referral/models.py
  33. 3
      referral/urls.py
  34. 10
      referral/utils.py

@ -1,7 +1,7 @@
from django.contrib import admin from django.contrib import admin
from django.contrib.auth import get_user_model 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.admin import UserAdmin as BaseUserAdmin, GroupAdmin
from django.contrib.auth.models import Group as GroupBase
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from import_export import resources from import_export import resources
@ -10,7 +10,6 @@ from rangefilter.filter import DateTimeRangeFilter
from core.admin import SafeModelAdmin from core.admin import SafeModelAdmin
from referral.admin import ReferralAdminInline from referral.admin import ReferralAdminInline
from .forms import UserChangeForm, UserCreationForm from .forms import UserChangeForm, UserCreationForm
from .models import Profile, Company, Group from .models import Profile, Company, Group

@ -1,13 +1,9 @@
import logging import logging
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field, Div, Submit, HTML from crispy_forms.layout import Layout, Field, Div, Submit, HTML
from django import forms from django import forms
from django.conf import settings
from django.contrib.auth import get_user_model, password_validation 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 ( from django.contrib.auth.forms import (
AuthenticationForm as AuthenticationFormBase, AuthenticationForm as AuthenticationFormBase,
PasswordResetForm as PasswordResetFormBase, PasswordResetForm as PasswordResetFormBase,
@ -16,6 +12,10 @@ from django.contrib.auth.forms import (
UserCreationForm as UserCreationFormBase UserCreationForm as UserCreationFormBase
) )
from django.contrib.auth.forms import UsernameField 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.fields import ReCaptchaField
from snowpenguin.django.recaptcha2.widgets import ReCaptchaWidget from snowpenguin.django.recaptcha2.widgets import ReCaptchaWidget

@ -6,9 +6,8 @@ from django.core.validators import RegexValidator
from django.db import models from django.db import models
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.dispatch import receiver 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.timezone import now as datetime_now
from django.utils.translation import ugettext_lazy as _
from registration.signals import user_activated from registration.signals import user_activated
from core.models import ( from core.models import (
@ -18,8 +17,6 @@ from core.models import (
) )
# Create your models here.
class UserManager(ActualOnlyManager, BaseUserManager): class UserManager(ActualOnlyManager, BaseUserManager):
def create_superuser(self, email, password): def create_superuser(self, email, password):
user = self.model( user = self.model(

@ -2,6 +2,7 @@ from django.template import Library
register = Library() register = Library()
@register.simple_tag(name='get') @register.simple_tag(name='get')
def get_by_key(dict, key): def get_by_key(dict, key):
return getattr(dict,key) return getattr(dict, key)

@ -1,6 +1,6 @@
from django.urls import re_path from django.urls import re_path
from . import views
from . import views
urlpatterns = [ urlpatterns = [
re_path(r'^login/$', views.LoginView.as_view(), name='login'), 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'^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/$', 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/done/$', views.ResetPasswordDoneView.as_view(), name='reset_password_done'),
re_path(r'^password/reset/change/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$', views.ResetPasswordConfirmView.as_view(), name='reset_password_change'), re_path(r'^password/reset/change/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$',
views.ResetPasswordConfirmView.as_view(), name='reset_password_change'),
re_path(r'^password/reset/complete/$', views.ResetPasswordCompleteView.as_view(), name='reset_password_complete') re_path(r'^password/reset/complete/$', views.ResetPasswordCompleteView.as_view(), name='reset_password_complete')
] ]

@ -1,6 +1,6 @@
import logging import logging
from django.conf import settings from django.conf import settings
from django.contrib.auth.forms import SetPasswordForm
from django.contrib.auth.views import ( from django.contrib.auth.views import (
LoginView as LoginViewBase, LoginView as LoginViewBase,
LogoutView, LogoutView,
@ -9,17 +9,15 @@ from django.contrib.auth.views import (
PasswordResetConfirmView as PasswordResetConfirmViewBase, PasswordResetConfirmView as PasswordResetConfirmViewBase,
PasswordResetCompleteView as PasswordResetCompleteViewBase, 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 django.views.generic import TemplateView
from registration.backends.default.views import ( from registration.backends.default.views import (
RegistrationView as RegistrationViewBase, RegistrationView as RegistrationViewBase,
ResendActivationView as ResendActivationViewBase 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 core.views import ProtectedTemplateView
from .forms import ( from .forms import (

@ -1,14 +1,11 @@
from ckeditor_uploader.widgets import CKEditorUploadingWidget
from django.contrib import admin from django.contrib import admin
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from ckeditor_uploader.widgets import CKEditorUploadingWidget
from pinax.blog.admin import ( from pinax.blog.admin import (
PostAdmin as BasePostAdmin, PostAdmin as BasePostAdmin,
SectionAdmin as BaseSectionAdmin, SectionAdmin as BaseSectionAdmin,
PostImageSet as BasePostImageSet PostImageSet as BasePostImageSet
) )
from pinax.blog.models import ( from pinax.blog.models import (
Post as PinaxPost, Post as PinaxPost,
Section as PinaxSection, Section as PinaxSection,
@ -60,7 +57,6 @@ class PostImageSet(ImageSet):
verbose_name_plural = _('Изображения') verbose_name_plural = _('Изображения')
admin.site.unregister(BasePostImageSet) admin.site.unregister(BasePostImageSet)
admin.site.register( admin.site.register(

@ -1,6 +1,5 @@
from django.forms import forms from django.forms import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from pinax.blog.forms import AdminPostForm as BaseAdminPostForm from pinax.blog.forms import AdminPostForm as BaseAdminPostForm
from blog_ext.models import Post from blog_ext.models import Post

@ -1,11 +1,8 @@
import uuid
import pytz import pytz
from django.conf import settings from django.conf import settings
from django.db import models from django.db import models
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
# Create your models here. # Create your models here.
from pinax.blog.models import ( from pinax.blog.models import (
Post as BasePost, Post as BasePost,
@ -14,9 +11,7 @@ from pinax.blog.models import (
Section as BaseSection Section as BaseSection
) )
from pinax.images.models import ( from pinax.images.models import (
ImageSet as BaseImageSet, ImageSet as BaseImageSet)
Image as BaseImage,
image_upload_to)
from core.models import AbstractStatusModel, AbstractDateTimeModel from core.models import AbstractStatusModel, AbstractDateTimeModel

@ -1,6 +1,6 @@
from django.urls import re_path from django.urls import re_path
from . import views
from . import views
urlpatterns = [ urlpatterns = [
re_path(r"^$", views.BlogIndexView.as_view(), name="blog"), re_path(r"^$", views.BlogIndexView.as_view(), name="blog"),

@ -5,6 +5,7 @@ from pinax.blog.views import (
SecretKeyPostDetailView as BaseSecretKeyPostDetailView, SecretKeyPostDetailView as BaseSecretKeyPostDetailView,
SlugUniquePostDetailView as BaseSlugUniquePostDetailView) SlugUniquePostDetailView as BaseSlugUniquePostDetailView)
class SlugUniquePostDetailView(BaseSlugUniquePostDetailView): class SlugUniquePostDetailView(BaseSlugUniquePostDetailView):
pass pass

@ -1,4 +1,3 @@
from django.conf import settings
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -11,13 +10,13 @@ class IndexTemplateView(ProtectedTemplateView):
template_name = 'cabinet/index.html' template_name = 'cabinet/index.html'
title = _('Личный кабинет') title = _('Личный кабинет')
def get_ref_link(self,user): def get_ref_link(self, user):
return "{path}?ref={ref_link}".format(**{ return "{path}?ref={ref_link}".format(**{
'path': user.referral.url, 'path': user.referral.url,
'ref_link': user.referral.code '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() bought_item_queryset = user.buying_set.filter(status=BUYING_STATUS_PAID).order_by('-create_at').all()
paginator = Paginator( paginator = Paginator(
object_list=bought_item_queryset, object_list=bought_item_queryset,
@ -26,14 +25,14 @@ class IndexTemplateView(ProtectedTemplateView):
the_page = 1 the_page = 1
return paginator.page(the_page) return paginator.page(the_page)
def get_full_name(self,user): def get_full_name(self, user):
return '{last_name} {first_name} {patronymic}'.format(**{ return '{last_name} {first_name} {patronymic}'.format(**{
'last_name': user.profile.last_name or "", 'last_name': user.profile.last_name or "",
'first_name': user.profile.first_name or "", 'first_name': user.profile.first_name or "",
'patronymic': user.profile.patronymic or "" 'patronymic': user.profile.patronymic or ""
}) })
def get_user_points(self,user): def get_user_points(self, user):
return user.referral.referralstats.points return user.referral.referralstats.points
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):

@ -1,25 +1,23 @@
import csv import csv
import datetime import datetime
import pytils
import weasyprint
from decimal import Decimal from decimal import Decimal
import pytils
import weasyprint
from django.conf import settings from django.conf import settings
from django.contrib import admin from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from django.http import HttpResponse from django.http import HttpResponse
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
from jet.admin import CompactInline from jet.admin import CompactInline
from jet.filters import DateRangeFilter from jet.filters import DateRangeFilter
from rangefilter.filter import DateTimeRangeFilter from rangefilter.filter import DateTimeRangeFilter
from core.admin import SafeModelAdmin from core.admin import SafeModelAdmin
from core.models import Certificate
from eshop_project.settings.base import PAY_REQUISITES from eshop_project.settings.base import PAY_REQUISITES
from .models import ( from .models import (
Offer, SupplyType, Offer, SupplyType,
Currency, Buying, Buying,
SupplyTarget, SupplyTarget,
Order, Discount, Order, Discount,
Client) Client)
@ -32,6 +30,7 @@ class ProductOfferInlineAdmin(CompactInline):
show_change_link = 1 show_change_link = 1
max_num = 1 max_num = 1
# Supply admins # Supply admins
@admin.register(SupplyType) @admin.register(SupplyType)
@ -49,7 +48,7 @@ class SupplyTargetAdmin(admin.ModelAdmin):
@admin.register(Discount) @admin.register(Discount)
class DiscountAdmin(admin.ModelAdmin): class DiscountAdmin(admin.ModelAdmin):
list_display = ['code', 'valid_from', 'valid_to', 'value', 'active'] 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'] search_field = ['code']
@ -84,9 +83,10 @@ class BuyingAdmin(SafeModelAdmin):
data_row.append(value) data_row.append(value)
writer.writerow(data_row) writer.writerow(data_row)
return response return response
export_buyings_to_csv.short_description = _('экспортировать CSV') 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_price = pytils.numeral.in_words(round(buyings.total_price))
verb_cur = pytils.numeral.choose_plural(round(buyings.total_price), ("рубль", "рубля", "рублей")) verb_cur = pytils.numeral.choose_plural(round(buyings.total_price), ("рубль", "рубля", "рублей"))
html = render_to_string('bootstrap/pdf/buyings.html', { html = render_to_string('bootstrap/pdf/buyings.html', {
@ -96,17 +96,17 @@ class BuyingAdmin(SafeModelAdmin):
response = HttpResponse(content_type='application/pdf') response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'filename=order_{}.pdf'.format(buyings.id) response['Content-Disposition'] = 'filename=order_{}.pdf'.format(buyings.id)
weasyprint.HTML( weasyprint.HTML(
string=rendered_html, string=rendered_html,
base_url=self.request.build_absolute_uri() base_url=self.request.build_absolute_uri()
).write_pdf( ).write_pdf(
response, response,
stylesheets = [ stylesheets=[
weasyprint.CSS(settings.STATIC_ROOT + '/css/bootstrap.min.css') weasyprint.CSS(settings.STATIC_ROOT + '/css/bootstrap.min.css')
] ]
) )
return response return response
print_order_in_pdf.short_description = _('Распечатать заказ в pdf') print_order_in_pdf.short_description = _('Распечатать заказ в pdf')
def mark_buyings_as_paid(self, request, queryset): def mark_buyings_as_paid(self, request, queryset):
@ -118,8 +118,8 @@ class BuyingAdmin(SafeModelAdmin):
parent_profile.save() parent_profile.save()
buying.status = BUYING_STATUS_PAID buying.status = BUYING_STATUS_PAID
buying.save() buying.save()
mark_buyings_as_paid.short_description = _('Отметить как оплаченные')
mark_buyings_as_paid.short_description = _('Отметить как оплаченные')
inlines = () inlines = ()
list_display = ('user', 'offer', 'status', 'amount', 'total_price') list_display = ('user', 'offer', 'status', 'amount', 'total_price')
@ -133,11 +133,11 @@ class BuyingAdmin(SafeModelAdmin):
@admin.register(Order) @admin.register(Order)
class OrderAdmin(SafeModelAdmin): 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) @admin.register(Client)
class ClientAdmin(SafeModelAdmin): class ClientAdmin(SafeModelAdmin):
list_display = ('name','image','status',) list_display = ('name', 'image', 'status',)
search_fields = ('name',) search_fields = ('name',)
list_filter = ('status',) list_filter = ('status',)

@ -2,5 +2,4 @@ from cart.utils import Cart
def cart_basket(request): def cart_basket(request):
return {'cart': Cart(request) } return {'cart': Cart(request)}

@ -1,25 +1,22 @@
import uuid import uuid
from crispy_forms.helper import FormHelper 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 import forms
from django.conf import settings from django.conf import settings
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.validators import MaxValueValidator, MinValueValidator from django.core.validators import MaxValueValidator, MinValueValidator
from django.forms import ALL_FIELDS, formset_factory
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.translation import ugettext_lazy as _
from cart.models import ( 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 cart.tasks import send_user_order_notification, send_admin_order_notification
from contact_us.mixins import RequestNotifiable from contact_us.mixins import RequestNotifiable
from core.forms import QueryFormBase from core.forms import QueryFormBase
from core.models import City from core.models import City
from core.utils import parse_path from core.utils import parse_path
from django.utils.translation import ugettext_lazy as _
from products.models import Product
class CartAddInlineForm(forms.ModelForm): class CartAddInlineForm(forms.ModelForm):
@ -122,7 +119,7 @@ class CartCheckoutForm(RequestNotifiable, forms.ModelForm):
form_action = {'viewname': 'cart:confirm', 'kwargs': {}} form_action = {'viewname': 'cart:confirm', 'kwargs': {}}
field_template = 'bootstrap/forms/cart_checkout.html' 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): def __init__(self, *args, **kwargs):
self.helper = FormHelper() self.helper = FormHelper()

@ -1,24 +1,19 @@
import uuid import uuid
from decimal import Decimal 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.core.validators import MinValueValidator, MaxValueValidator, RegexValidator
from django.db import models from django.db import models
from django.contrib.auth import get_user_model
from django.db.models import Avg 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.timezone import now, timedelta
from django.utils.translation import ugettext_lazy as _
# Create your models here. # Create your models here.
from core.models import ( from core.models import (
AbstractStatusModel, AbstractDateTimeModel, AbstractStatusModel, AbstractDateTimeModel,
ActiveOnlyManager, ActiveOnlyManager,
City, Currency) City, Currency)
from products.models import Product from products.models import Product

@ -1,14 +1,15 @@
import celery
import weasyprint
import pytils
from io import BytesIO from io import BytesIO
import celery
import pytils
import weasyprint
from django.conf import settings from django.conf import settings
from django.template.loader import render_to_string, get_template
from django.core.mail import EmailMessage, EmailMultiAlternatives from django.core.mail import EmailMessage, EmailMultiAlternatives
from django.template.loader import render_to_string, get_template
from cart.models import Order from cart.models import Order
@celery.task() @celery.task()
def send_user_order_notification(context): 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('orders:AdminOrderPDF', args=[order_id])
html = render_to_string('cart/order_invoice.html', {**settings.PAY_REQUISITES, 'order': order, 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") rendered_html = html.encode(encoding="UTF-8")
out = BytesIO() out = BytesIO()
weasyprint.HTML(string=rendered_html).write_pdf(out, 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')]) weasyprint.CSS(settings.STATIC_ROOT + 'css/build.css')])
order_invoice_name = 'Order_' + order.order_code order_invoice_name = 'Order_' + order.order_code
weasyprint.HTML(string=rendered_html, base_url=context['site_url']).write_pdf(order_invoice_name, weasyprint.HTML(string=rendered_html, base_url=context['site_url']).write_pdf(order_invoice_name,
stylesheets=[weasyprint.CSS( stylesheets=[weasyprint.CSS(
settings.STATIC_ROOT + '/css/build.css')]) settings.STATIC_ROOT + '/css/build.css')])
mail_send.attach('order_{}.pdf'.format(order.id), out.getvalue(), 'application/pdf') mail_send.attach('order_{}.pdf'.format(order.id), out.getvalue(), 'application/pdf')
mail_send.send() mail_send.send()
return mail_send return mail_send

@ -1,12 +1,13 @@
from django import template from django import template
from django.template import loader, Node, Variable from django.template import Node, Variable
from django.utils.encoding import smart_str, smart_bytes
from django.template.defaulttags import url
from django.template import VariableDoesNotExist 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 from mptt.templatetags.mptt_tags import recursetree
register = template.Library() register = template.Library()
@register.tag @register.tag
def breadcrumb(parser, token): def breadcrumb(parser, token):
""" """
@ -40,7 +41,7 @@ def breadcrumb_url(parser, token):
""" """
bits = token.split_contents() bits = token.split_contents()
if len(bits)==2: if len(bits) == 2:
return breadcrumb(parser, token) return breadcrumb(parser, token)
# Extract our extra title parameter # Extract our extra title parameter
@ -51,21 +52,23 @@ def breadcrumb_url(parser, token):
return UrlBreadcrumbNode(title, url_node) return UrlBreadcrumbNode(title, url_node)
@register.tag @register.tag
def breadcrumb_mptt_url(parser, token): def breadcrumb_mptt_url(parser, token):
return recursetree(parser, token) return recursetree(parser, token)
class BreadcrumbNode(Node): class BreadcrumbNode(Node):
def __init__(self, vars): def __init__(self, vars):
""" """
First var is title, second var is url context variable First var is title, second var is url context variable
""" """
self.vars = map(Variable,vars) self.vars = map(Variable, vars)
def render(self, context): def render(self, context):
title = self.vars[0].var title = self.vars[0].var
if title.find("'")==-1 and title.find('"')==-1: if title.find("'") == -1 and title.find('"') == -1:
try: try:
val = self.vars[0] val = self.vars[0]
title = val.resolve(context) title = val.resolve(context)
@ -73,12 +76,12 @@ class BreadcrumbNode(Node):
title = '' title = ''
else: else:
title=title.strip("'").strip('"') title = title.strip("'").strip('"')
title=smart_bytes(title) title = smart_bytes(title)
url = None url = None
if len(self.vars)>1: if len(self.vars) > 1:
val = self.vars[1] val = self.vars[1]
try: try:
url = val.resolve(context) url = val.resolve(context)
@ -97,15 +100,15 @@ class UrlBreadcrumbNode(Node):
def render(self, context): def render(self, context):
title = self.title.var title = self.title.var
if title.find("'")==-1 and title.find('"')==-1: if title.find("'") == -1 and title.find('"') == -1:
try: try:
val = self.title val = self.title
title = val.resolve(context) title = val.resolve(context)
except: except:
title = '' title = ''
else: else:
title=title.strip("'").strip('"') title = title.strip("'").strip('"')
title=smart_bytes(title) title = smart_bytes(title)
url = self.url_node.render(context) url = self.url_node.render(context)
return create_crumb(title, url) return create_crumb(title, url)

@ -1,11 +1,11 @@
import logging import logging
from django.core.mail import EmailMultiAlternatives from django.core.mail import EmailMultiAlternatives
from django.template import Context
from django.template.loader import get_template from django.template.loader import get_template
logger = logging.Logger(__name__) logger = logging.Logger(__name__)
class RequestNotifiable(object): class RequestNotifiable(object):
MAIL_CATEGORY = 'Request' MAIL_CATEGORY = 'Request'
@ -34,7 +34,7 @@ class RequestNotifiable(object):
context['from_email'], context['from_email'],
context['recipients'] context['recipients']
) )
email.attach_alternative(body.render(context['email']),'text/html') email.attach_alternative(body.render(context['email']), 'text/html')
try: try:
email.send() email.send()
except Exception as e: except Exception as e:

@ -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.core.validators import RegexValidator
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
# Create your models here. # Create your models here.
from core.models import AbstractStatusModel, STATUS_DELETED
# --------------------- REQUEST STATUS LIST -------------------- # --------------------- REQUEST STATUS LIST --------------------

@ -2,9 +2,9 @@ import logging
from django.contrib import messages from django.contrib import messages
from django.contrib.messages.views import SuccessMessageMixin from django.contrib.messages.views import SuccessMessageMixin
from django.http import HttpResponseRedirect, HttpResponseBadRequest, Http404 from django.http import HttpResponseRedirect, Http404
from django.views.generic import FormView
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import FormView
from .forms import ContactUsForm from .forms import ContactUsForm
@ -26,18 +26,18 @@ class ContactUsFormView(SuccessMessageMixin, FormView):
form.send_email(self.request) form.send_email(self.request)
except Exception as e: except Exception as e:
self.form_invalid(form=form) 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) return HttpResponseRedirect(self.next)
def form_invalid(self, form): def form_invalid(self, form):
context = self.get_context_data() context = self.get_context_data()
if len(form.errors) > 0: if len(form.errors) > 0:
context['form_show_errors'] = True 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) return HttpResponseRedirect(self.next)
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
if request.POST.get('next',None) is None: if request.POST.get('next', None) is None:
raise Http404() raise Http404()
else: else:
self.next = request.POST.get('next') self.next = request.POST.get('next')

@ -44,7 +44,9 @@ class CKFlatPageAdmin(FlatPageAdmin):
def formfield_for_dbfield(self, db_field, **kwargs): def formfield_for_dbfield(self, db_field, **kwargs):
if 'content' in db_field.name: 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) return super(CKFlatPageAdmin, self).formfield_for_dbfield(db_field, **kwargs)
admin.site.unregister(FlatPage) admin.site.unregister(FlatPage)

@ -1,8 +1,11 @@
from django.shortcuts import render
from .forms import SubscriberForm
from django.contrib import auth from django.contrib import auth
from django.shortcuts import render
from products.models import * from products.models import *
from .forms import SubscriberForm
# TODO What's going on here?
def landing(request): def landing(request):
form = SubscriberForm(request.POST or None) form = SubscriberForm(request.POST or None)

@ -1,6 +1,7 @@
from django.urls import re_path from django.urls import path
from . import views from . import views
urlpatterns = [ urlpatterns = [
re_path(r'', views.IndexView.as_view(), name='index') path('', views.IndexView.as_view(), name='index')
] ]

@ -1,7 +1,4 @@
from django.contrib import admin 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 import resources, fields, widgets
from import_export.admin import ImportExportModelAdmin from import_export.admin import ImportExportModelAdmin
from jet.admin import CompactInline from jet.admin import CompactInline
@ -9,12 +6,12 @@ from rangefilter.filter import DateRangeFilter, DateTimeRangeFilter
from cart.admin import ProductOfferInlineAdmin from cart.admin import ProductOfferInlineAdmin
from core.admin import SafeModelAdmin from core.admin import SafeModelAdmin
from .forms import ProductAdminForm from .forms import ProductAdminForm
from .models import ( from .models import (
Product, ProductCategory, ProductImage, Manufacturer Product, ProductCategory, ProductImage, Manufacturer
) )
class CustomModelResource(resources.ModelResource): class CustomModelResource(resources.ModelResource):
def before_import_row(self, row, **kwargs): def before_import_row(self, row, **kwargs):
""" """
@ -103,7 +100,6 @@ class ProductResource(CustomModelResource):
default={}, default={},
widget=widgets.CharWidget()) widget=widgets.CharWidget())
class Meta: class Meta:
model = Product model = Product
fields = ('id', 'name', 'description', 'producer', 'parent', 'is_active', 'attributes', 'discount_policy') fields = ('id', 'name', 'description', 'producer', 'parent', 'is_active', 'attributes', 'discount_policy')

@ -41,7 +41,7 @@ def product_fitler_formset(request):
product_form_action = {'viewname': request.resolver_match.view_name, 'kwargs': request.resolver_match.kwargs} product_form_action = {'viewname': request.resolver_match.view_name, 'kwargs': request.resolver_match.kwargs}
return { return {
'left_product_filter_formset':{ 'left_product_filter_formset': {
'manufacturer': ProductManufacturerFilterForm( 'manufacturer': ProductManufacturerFilterForm(
product_form_action=product_form_action, product_form_action=product_form_action,
query_params=request.GET query_params=request.GET

@ -1,20 +1,10 @@
from autoslug import AutoSlugField
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.db import models 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 django.utils.translation import ugettext_lazy as _
from mptt.models import TreeForeignKey
from mptt import ( from core.models import AbstractStatusModel, AbstractDateTimeModel, AbstractStatusMPTTModel
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
# ---------------------------------- COMMON PRODUCT STATUS ---------------------------------------# # ---------------------------------- COMMON PRODUCT STATUS ---------------------------------------#
# Create your models here. # Create your models here.

@ -13,23 +13,23 @@ Including another URLconf
1. Import the include() function: from django.conf.urls import url, include 1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
""" """
from django.urls import re_path
import mptt_urls import mptt_urls
from django.urls import re_path
from . import views from . import views
from .models import ProductCategory, Product from .models import ProductCategory, Product
urlpatterns = [ urlpatterns = [
re_path(r'^list/$', views.ProductListView.as_view(), name='product_list'), re_path(r'^list/$', views.ProductListView.as_view(), name='product_list'),
re_path( re_path(
r'^list/(?P<path>.*)', r'^list/(?P<path>.*)',
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' name='product_list'
), ),
re_path( re_path(
r'^item/(?P<path>.*)', r'^item/(?P<path>.*)',
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' name='product_details'
), ),
@ -38,7 +38,6 @@ urlpatterns = [
# url(r'^autocomplete/$', autocomplete), # url(r'^autocomplete/$', autocomplete),
# url(r'^find/$', FacetedSearchView.as_view(), name='haystack_search'), # url(r'^find/$', FacetedSearchView.as_view(), name='haystack_search'),
# url(r'^products/(?P<product_slug>[-\w]+)/$', products, name='Product'), # url(r'^products/(?P<product_slug>[-\w]+)/$', products, name='Product'),
# url(r'^(?P<producer_slug>[-\w]+)/(?P<path>.*)', # url(r'^(?P<producer_slug>[-\w]+)/(?P<path>.*)',
# mptt_urls.view(model=ProductCategory, view=categorieslist, slug_field='slug'), # mptt_urls.view(model=ProductCategory, view=categorieslist, slug_field='slug'),

@ -3,13 +3,12 @@ from django.contrib.admin import register
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.html import format_html from django.utils.html import format_html
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
# Register your models here. # Register your models here.
from rangefilter.filter import DateRangeFilter, DateTimeRangeFilter from rangefilter.filter import DateRangeFilter, DateTimeRangeFilter
from core.admin import SafeModelAdmin from core.admin import SafeModelAdmin
from .models import Referral, ReferralStats
from .forms import ReferralAdminForm, ReferralStatsAdminForm from .forms import ReferralAdminForm, ReferralStatsAdminForm
from .models import Referral, ReferralStats
class ReferralAdminInline(admin.TabularInline): class ReferralAdminInline(admin.TabularInline):
@ -23,6 +22,7 @@ class ReferralAdminInline(admin.TabularInline):
def has_delete_permission(self, request, obj=None): def has_delete_permission(self, request, obj=None):
return False return False
@register(Referral) @register(Referral)
class ReferralAdmin(SafeModelAdmin): class ReferralAdmin(SafeModelAdmin):
def has_add_permission(self, request): def has_add_permission(self, request):

@ -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 .models import Referral
from .utils import set_cookie, pop_cookie, get_cookie from .utils import set_cookie, pop_cookie, get_cookie
@ -12,18 +8,18 @@ class ReferralMiddleware:
def __call__(self, request): def __call__(self, request):
response = None response = None
if hasattr(self,'process_request'): if hasattr(self, 'process_request'):
response = self.process_request(request) response = self.process_request(request)
if not response: if not response:
response = self.get_response(request) response = self.get_response(request)
if hasattr(self,'process_response'): if hasattr(self, 'process_response'):
response = self.process_response(request,response) response = self.process_response(request, response)
return response return response
def process_request(self,request): def process_request(self, request):
pass pass
def process_response(self,request,response): def process_response(self, request, response):
if not request.user.is_authenticated: if not request.user.is_authenticated:
code = request.GET.get('ref') code = request.GET.get('ref')
cookie_code = get_cookie(request.COOKIES, 'referral') cookie_code = get_cookie(request.COOKIES, 'referral')
@ -37,4 +33,3 @@ class ReferralMiddleware:
elif request.user.is_authenticated: elif request.user.is_authenticated:
pop_cookie(response, 'referral') pop_cookie(response, 'referral')
return response return response

@ -1,17 +1,14 @@
import logging import logging
import string
import random import random
import string
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.sites.models import Site
from django.db import models from django.db import models
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.dispatch import receiver from django.dispatch import receiver
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
# Create your models here. # Create your models here.
from registration.signals import user_activated from registration.signals import user_activated

@ -1,6 +1,3 @@
from django.conf.urls import url
from django.urls import re_path
urlpatterns = [ urlpatterns = [
# re_path() # re_path()
] ]

@ -1,13 +1,17 @@
import datetime 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 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") expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age),
response.set_cookie(key=key,value=value,max_age=max_age,expires=expires) # @TODO: Connect cookie to domain "%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): def get_cookie(cookies, key):
return cookies.get(key) if cookies.get(key) else None return cookies.get(key) if cookies.get(key) else None
def pop_cookie(response, key): def pop_cookie(response, key):
cookie = get_cookie(response.cookies, key) cookie = get_cookie(response.cookies, key)
if cookie: if cookie:

Loading…
Cancel
Save