def mark_attempting(self): # Optimistic locking affected = Donation.objects.filter(id=self.id, version=self.version).update(charge_status=self.ChargeStatus.ATTEMPTING_PAYMENT, version=self.version+1) if not affected: msg = "Tried optimistic lock of donation row with version %d, but a higher version existed. This is probably BAD. Unless somebody did an ad hoc update, there may be more than 1 instance of bill_campaignd running." % self.version send_admins_error_email("DONATION ERROR", msg, sys.exc_info()) raise DonationProcessingFailed, msg
def donate(request, handle): initial_amount = int(request.GET.get("amount", 0)) initial_user = request.user if not request.user.is_anonymous() else None org = Org.objects.get(handle = handle) form = StandardDonationForm(initial_amount=initial_amount,initial_user=initial_user) if request.POST: form = StandardDonationForm(data=request.POST) if form.is_valid(): donation_data = form.to_donation_data(org) try: donation = Donation.create_and_process(**donation_data) try: #Post To Facebook if form.cleaned_data.get("post_to_facebook") and initial_user: fb_helpers.post_donation_to_wall(initial_user, org) #Post To Stream #if form.cleaned_data.get("list_name_publicly") and initial_user: #FeedStream.post_new_donation(actor=initial_user, target=org, donation_id=donation.id) except Exception, ex: logging.exception("FAILED TO SEND DONATE NOTIFICATION") send_admins_error_email("FAILED TO SEND DONATE NOTIFICATION", ex.message, sys.exc_info()) share_url = reverse('donate_share', args=[org.id]) return HttpResponseRedirect("%s?amount=%s" % (share_url, donation.amount)) #except NFGException, err: # logging.exception("NFG ERROR PROCESSING STANDARD DONATION") # if err.message.get("error_details"): # form.handle_nfg_errors(err.message["error_details"]) # else: # form.handle_unknown_error() except Exception, err: logging.exception("ERROR PROCESSING STANDARD DONATION") form.handle_unknown_error()