def obj_update(self, bundle, pk='', **kwargs): is_offline_booking = bool(bundle.data.pop("is_offline_booking", False)) require_keys(["state"], bundle.data) new_state = bundle.data["state"].lower() booking = Booking.objects.get(pk=pk) def error(error_str): raise ImmediateHttpResponse(response=HttpResponseBadRequest( content_type='application/json', content=json.dumps({"error": error_str}))) def assert_current_state_is(from_state): if type(from_state) is list: wrong_status = booking.state not in from_state else: wrong_status = booking.state != from_state if wrong_status: raise ImmediateHttpResponse(response=error( "Need to be in state %s to switch to state %s" % (from_state, booking.state))) if booking.owner != bundle.request.user: error("Can't modify booking : Wrong user") if new_state == 'pending': if booking.product.payment_type == PAYMENT_TYPE.PAYPAL: is_valid = booking.owner.is_valid is_confirmed = booking.owner.is_confirmed if not booking.owner.has_paypal(): return error("The owner doesn't have paypal account") elif not is_verified: return error("The owner's paypal account is invalid") elif not is_confirmed: return error("The owner's paypal email is not confirmed") assert_current_state_is("authorized") booking.send_acceptation_email() GoalRecord.record('rent_object_accepted', WebUser(bundle.request)) elif new_state == 'rejected': assert_current_state_is("authorized") booking.send_rejection_email() GoalRecord.record('rent_object_rejected', WebUser(bundle.request)) elif new_state == 'closed': assert_current_state_is(["closing", "ongoing"]) if not is_offline_booking: booking.init_payment_processor() booking.close() return super(BookingResource, self).obj_update(bundle, request=bundle.request, pk=pk, **kwargs)
def web_user(self, user): session = get_session(None) request = self.mox.CreateMock(HttpRequest) request.user = user request.session = session experiment_user = WebUser(request) experiment_user.get_or_create_anonymous_visitor() yield experiment_user
def confirm_human(request): experiment_user = WebUser(request) experiment_user.confirm_human() return HttpResponse(status=204)
def record_experiment_goal(request, goal_name): try: GoalRecord.record(goal_name, WebUser(request)) except Exception, e: l.warn("unknown goal type '%s': %s" % (goal_name, e))
def event(self, name, properties, request=None): if request: self._submit(name, properties, experiment_user=WebUser(request))