Skip to content

Commit

Permalink
Use python 3.5 and get rid of warnings
Browse files Browse the repository at this point in the history
  • Loading branch information
bogdal committed Nov 2, 2015
1 parent 054c8da commit 2d2bb2a
Show file tree
Hide file tree
Showing 12 changed files with 227 additions and 214 deletions.
19 changes: 16 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,28 @@ script:
- tox
env:
- TOXENV=py27-django18
- TOXENV=py27-django19
- TOXENV=py27-django_master
- TOXENV=py33-django18
- TOXENV=py33-django_master
- TOXENV=py34-django18
- TOXENV=py34-django19
- TOXENV=py34-django_master
- TOXENV=py35-django18
- TOXENV=py35-django19
- TOXENV=py35-django_master
matrix:
allow_failures:
- env: TOXENV=py27-django19
- env: TOXENV=py27-django_master
- env: TOXENV=py33-django_master
- env: TOXENV=py34-django19
- env: TOXENV=py34-django_master
- env: TOXENV=py35-django19
- env: TOXENV=py35-django_master
after_success:
- codecov
addons:
apt:
sources:
- deadsnakes
packages:
- python3.5
- python3.5-dev
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM python:3.4
FROM python:3.5
ENV PYTHONUNBUFFERED 1

RUN \
Expand Down
2 changes: 1 addition & 1 deletion runtime.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
python-3.4.2
python-3.5.0
2 changes: 1 addition & 1 deletion saleor/cart/test_cart.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from .forms import ReplaceCartLineForm, ReplaceCartLineFormSet
from ..cart.utils import (
contains_unavailable_products, remove_unavailable_products)
from ..checkout import Checkout
from ..checkout.core import Checkout
from ..checkout.views import details as checkout_details
from ..product.models import (ProductVariant, Product)

Expand Down
153 changes: 0 additions & 153 deletions saleor/checkout/__init__.py
Original file line number Diff line number Diff line change
@@ -1,153 +0,0 @@
from collections import defaultdict

from django.conf import settings
from prices import Price
from satchless.process import ProcessManager

from .steps import BillingAddressStep, ShippingStep, SummaryStep
from ..cart import Cart
from ..core import analytics
from ..order.models import Order
from ..userprofile.models import Address

STORAGE_SESSION_KEY = 'checkout_storage'


class CheckoutStorage(defaultdict):

modified = False

def __init__(self, *args, **kwargs):
super(CheckoutStorage, self).__init__(dict, *args, **kwargs)


class Checkout(ProcessManager):

items = None
groups = None
billing = None
steps = None

def __init__(self, request):
self.request = request
self.groups = []
self.steps = []
self.items = []
try:
self.storage = CheckoutStorage(
request.session[STORAGE_SESSION_KEY])
except KeyError:
self.storage = CheckoutStorage()
self.cart = Cart.for_session_cart(request.cart,
discounts=request.discounts)
self.generate_steps(self.cart)

def __iter__(self):
return iter(self.steps)

def generate_steps(self, cart):
self.cart = cart
self.billing = BillingAddressStep(
self.request, self.get_storage('billing'))
self.steps.append(self.billing)
if self.is_shipping_required():
self.shipping = ShippingStep(
self.request, self.get_storage('shipping'),
self.cart, billing_address=self.billing_address)
self.steps.append(self.shipping)
else:
self.shipping = None
summary_step = SummaryStep(
self.request, self.get_storage('summary'), checkout=self)
self.steps.append(summary_step)

@property
def anonymous_user_email(self):
storage = self.get_storage('billing')
return storage.get('anonymous_user_email')

@anonymous_user_email.setter
def anonymous_user_email(self, email):
storage = self.get_storage('billing')
storage['anonymous_user_email'] = email

@anonymous_user_email.deleter
def anonymous_user_email(self):
storage = self.get_storage('billing')
storage['anonymous_user_email'] = ''

@property
def billing_address(self):
storage = self.get_storage('billing')
address_data = storage.get('address', {})
return Address(**address_data)

@billing_address.setter
def billing_address(self, address):
storage = self.get_storage('billing')
storage['address'] = address.as_data()

@billing_address.deleter
def billing_address(self):
storage = self.get_storage('billing')
storage['address'] = None

@property
def shipping_address(self):
storage = self.get_storage('shipping')
address_data = storage.get('address', {})
return Address(**address_data)

@shipping_address.setter
def shipping_address(self, address):
storage = self.get_storage('shipping')
storage['address'] = address.as_data()

@shipping_address.deleter
def shipping_address(self):
storage = self.get_storage('shipping')
storage['address'] = None

def get_storage(self, name):
return self.storage[name]

def get_total(self, **kwargs):
zero = Price(0, currency=settings.DEFAULT_CURRENCY)
total = sum(
(total_with_delivery
for delivery, delivery_cost, total_with_delivery
in self.get_deliveries(**kwargs)),
zero)
return total

def save(self):
self.request.session[STORAGE_SESSION_KEY] = dict(self.storage)

def clear_storage(self):
del self.request.session[STORAGE_SESSION_KEY]
self.cart.clear()

def is_shipping_required(self):
return self.cart.is_shipping_required()

def get_deliveries(self, **kwargs):
for partition in self.cart.partition():
if self.shipping:
delivery_cost = self.shipping.delivery_method.get_delivery_total(
partition)
else:
delivery_cost = Price(0, currency=settings.DEFAULT_CURRENCY)
total_with_delivery = partition.get_total(**kwargs) + delivery_cost
yield partition, delivery_cost, total_with_delivery

def create_order(self):
order = Order()
if self.request.user.is_authenticated():
order.user = self.request.user
for step in self.steps:
step.add_to_order(order)
if self.request.user.is_authenticated():
order.anonymous_user_email = ''
order.tracking_client_id = analytics.get_client_id(self.request)
order.save()
return order
153 changes: 153 additions & 0 deletions saleor/checkout/core.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
from collections import defaultdict

from django.conf import settings
from prices import Price
from satchless.process import ProcessManager

from .steps import BillingAddressStep, ShippingStep, SummaryStep
from ..cart import Cart
from ..core import analytics
from ..order.models import Order
from ..userprofile.models import Address

STORAGE_SESSION_KEY = 'checkout_storage'


class CheckoutStorage(defaultdict):

modified = False

def __init__(self, *args, **kwargs):
super(CheckoutStorage, self).__init__(dict, *args, **kwargs)


class Checkout(ProcessManager):

items = None
groups = None
billing = None
steps = None

def __init__(self, request):
self.request = request
self.groups = []
self.steps = []
self.items = []
try:
self.storage = CheckoutStorage(
request.session[STORAGE_SESSION_KEY])
except KeyError:
self.storage = CheckoutStorage()
self.cart = Cart.for_session_cart(request.cart,
discounts=request.discounts)
self.generate_steps(self.cart)

def __iter__(self):
return iter(self.steps)

def generate_steps(self, cart):
self.cart = cart
self.billing = BillingAddressStep(
self.request, self.get_storage('billing'))
self.steps.append(self.billing)
if self.is_shipping_required():
self.shipping = ShippingStep(
self.request, self.get_storage('shipping'),
self.cart, billing_address=self.billing_address)
self.steps.append(self.shipping)
else:
self.shipping = None
summary_step = SummaryStep(
self.request, self.get_storage('summary'), checkout=self)
self.steps.append(summary_step)

@property
def anonymous_user_email(self):
storage = self.get_storage('billing')
return storage.get('anonymous_user_email')

@anonymous_user_email.setter
def anonymous_user_email(self, email):
storage = self.get_storage('billing')
storage['anonymous_user_email'] = email

@anonymous_user_email.deleter
def anonymous_user_email(self):
storage = self.get_storage('billing')
storage['anonymous_user_email'] = ''

@property
def billing_address(self):
storage = self.get_storage('billing')
address_data = storage.get('address', {})
return Address(**address_data)

@billing_address.setter
def billing_address(self, address):
storage = self.get_storage('billing')
storage['address'] = address.as_data()

@billing_address.deleter
def billing_address(self):
storage = self.get_storage('billing')
storage['address'] = None

@property
def shipping_address(self):
storage = self.get_storage('shipping')
address_data = storage.get('address', {})
return Address(**address_data)

@shipping_address.setter
def shipping_address(self, address):
storage = self.get_storage('shipping')
storage['address'] = address.as_data()

@shipping_address.deleter
def shipping_address(self):
storage = self.get_storage('shipping')
storage['address'] = None

def get_storage(self, name):
return self.storage[name]

def get_total(self, **kwargs):
zero = Price(0, currency=settings.DEFAULT_CURRENCY)
total = sum(
(total_with_delivery
for delivery, delivery_cost, total_with_delivery
in self.get_deliveries(**kwargs)),
zero)
return total

def save(self):
self.request.session[STORAGE_SESSION_KEY] = dict(self.storage)

def clear_storage(self):
del self.request.session[STORAGE_SESSION_KEY]
self.cart.clear()

def is_shipping_required(self):
return self.cart.is_shipping_required()

def get_deliveries(self, **kwargs):
for partition in self.cart.partition():
if self.shipping:
delivery_cost = self.shipping.delivery_method.get_delivery_total(
partition)
else:
delivery_cost = Price(0, currency=settings.DEFAULT_CURRENCY)
total_with_delivery = partition.get_total(**kwargs) + delivery_cost
yield partition, delivery_cost, total_with_delivery

def create_order(self):
order = Order()
if self.request.user.is_authenticated():
order.user = self.request.user
for step in self.steps:
step.add_to_order(order)
if self.request.user.is_authenticated():
order.anonymous_user_email = ''
order.tracking_client_id = analytics.get_client_id(self.request)
order.save()
return order
8 changes: 3 additions & 5 deletions saleor/checkout/test_checkout.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
from django.contrib.auth.models import AnonymousUser
from django.test import TestCase
from mock import MagicMock, patch
from mock import MagicMock

from . import BillingAddressStep, ShippingStep
from ..checkout import STORAGE_SESSION_KEY
from ..checkout.steps import BaseAddressStep
from ..checkout.core import STORAGE_SESSION_KEY
from ..checkout.steps import BaseAddressStep, BillingAddressStep, ShippingStep
from ..userprofile.models import Address

NEW_ADDRESS = {
Expand Down
2 changes: 1 addition & 1 deletion saleor/checkout/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.http.response import Http404
from django.shortcuts import redirect

from . import Checkout
from .core import Checkout
from ..cart import Cart
from ..cart.utils import contains_unavailable_products

Expand Down
Loading

0 comments on commit 2d2bb2a

Please sign in to comment.