def wrapper(self, *args, **kwargs): # Looking for request object for element in args: if isinstance(element, Request): # Found it request = element break # Getting session/user information for metacart retrieval session_key = request.session.session_key user = request.user # Getting metacart metacart = None if user.is_anonymous() and session_key is not None: # If not logged in, get metacart by session id metacart = MetaCart.objects.filter( session__session_key=session_key) if len(metacart) > 0: # Metacart retrieved metacart = metacart[0] else: # No metacart set for this session, create one and associate it to session metacart = MetaCart(session=Session.objects.get( session_key=session_key)) metacart.save() elif not user.is_anonymous(): # User is authenticated, retrieve metacart metacart = MetaCart.objects.get(user=user) # Setting cart cart_controller = DallizCartController(osm=metacart.current_osm, metacart=metacart) request.cart_controller = cart_controller # Default osm osm = { 'name': metacart.current_osm, 'type': 'shipping', 'location': None, } if request.method in ['GET', 'POST']: parameters = getattr(request, request.method) if 'osm_name' in parameters: osm['name'] = parameters['osm_name'] if 'osm_type' in parameters: osm['type'] = parameters['osm_type'] if 'osm_location' in parameters: osm['location'] = parameters['osm_location'] kwargs.update(dict([('osm_%s' % k, v) for k, v in osm.iteritems()])) data = function(self, *args, **kwargs) if not isinstance(data, Response): return Response(data) return data
def __init__(self, osm='monoprix', metacart=None): if osm is None: raise ErrorNoOSMSet(osm) elif osm in DallizCartController.AVAILABLE_OSMS.keys(): self.osm = osm else: raise ErrorNoOSMSet(osm) if metacart is not None: self.metacart = metacart else: self.metacart = MetaCart(current_osm=self.osm) self.metacart.save() self.carts = {} for osm, value in DallizCartController.AVAILABLE_OSMS.iteritems(): current_cart = getattr(self.metacart, osm + '_cart') cart_controller = value['class'](cart=current_cart) self.carts[osm] = cart_controller if current_cart is None: setattr(self.metacart, osm + '_cart', cart_controller.cart) self.metacart.save()
def post(self, request): if 'username' in request.POST and 'password' in request.POST: # login user username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) if user is not None: login(request, user) data = UserSerializer(user).data # Now checking if user is associated with meta cart metacart = MetaCart.objects.filter(user=user) if metacart.count() > 0: # Metacart retrieved, ok nothing to do pass else: # No metacart set for this user, check if the current session is associated with metacart metacart = MetaCart.objects.filter(session=request.session) if metacart.count() > 0: # Metacart retrieved, associate it with user metacart = metacart[0] metacart.user = user metacart.save() else: # No cart was found, create one and associate it with user metacart = MetaCart(user=user) metacart.save() else: raise AuthenticationFailed return Response(data) else: # logout user logout(request) return Response({})