def project_btm_view(request, id): try: job = Job.objects.get(id=id) except Job.DoesNotExist: request.session['error'] = 'The project does not exist.' return redirect('index') if (job.account != request.user.get_profile() and not request.user.is_superuser): request.session['error'] = 'The project does not exist.' return redirect('index') context = {'project': job} if job.is_btm_active() or job.is_btm_pending() or job.is_btm_finished(): context['pending_samples'] = job.get_btm_pending_samples() return render(request, 'main/project/btm_view.html', RequestContext(request, context)) else: context['stripe_key'] = settings.STRIPE_PUBLISHABLE context['form'] = BTMForm() if request.method == 'POST': form = BTMForm(request.POST) stripe_token = request.POST.get('stripeToken', None) if form.is_valid() and stripe_token: cost = Job.btm_estimate_cost( form.cleaned_data['no_of_urls'], form.cleaned_data['points_to_cash']) if cost < 0.5: context['btm_warn'] = 'Cost has to be at least 50 cents.' return render(request, 'main/project/btm.html', RequestContext(request, context)) description = "Customer {0} for btm job {1}: {2}".format( request.user.id, job.id, form.cleaned_data['topic']) job.start_btm(form.cleaned_data['topic'], form.cleaned_data['topic_desc'], form.cleaned_data['no_of_urls'], form.cleaned_data['points_to_cash']) charge = JobCharge.objects.btm_from_token( stripe_token, description) charge.job = job charge.save() charge.charge(cost) return redirect('project_btm_view', id=id) context['form'] = form return render(request, 'main/project/btm.html', RequestContext(request, context))
def testTrainingSet(self): job = Job() self.assertEqual(TrainingSet.objects.newest_for_job(job), None) u = User.objects.create_user(username='******', password='******') job = Job.objects.create_active( account=u.get_profile(), gold_samples=[{'url': '10clouds.com', 'label': LABEL_YES}]) ts = TrainingSet(job=job) ts.save() self.assertEqual(TrainingSet.objects.newest_for_job(job).job.id, job.id)
def project_btm_view(request, id): try: job = Job.objects.get(id=id) except Job.DoesNotExist: request.session['error'] = 'The project does not exist.' return redirect('index') if (job.account != request.user.get_profile() and not request.user.is_superuser): request.session['error'] = 'The project does not exist.' return redirect('index') context = {'project': job} if job.is_btm_active() or job.is_btm_pending() or job.is_btm_finished(): context['pending_samples'] = job.get_btm_pending_samples() return render(request, 'main/project/btm_view.html', RequestContext(request, context)) else: context['stripe_key'] = settings.STRIPE_PUBLISHABLE context['form'] = BTMForm() if request.method == 'POST': form = BTMForm(request.POST) stripe_token = request.POST.get('stripeToken', None) if form.is_valid() and stripe_token: cost = Job.btm_estimate_cost(form.cleaned_data['no_of_urls'], form.cleaned_data['points_to_cash']) if cost < 0.5: context['btm_warn'] = 'Cost has to be at least 50 cents.' return render(request, 'main/project/btm.html', RequestContext(request, context)) description = "Customer {0} for btm job {1}: {2}".format( request.user.id, job.id, form.cleaned_data['topic']) job.start_btm(form.cleaned_data['topic'], form.cleaned_data['topic_desc'], form.cleaned_data['no_of_urls'], form.cleaned_data['points_to_cash']) charge = JobCharge.objects.btm_from_token(stripe_token, description) charge.job = job charge.save() charge.charge(cost) return redirect('project_btm_view', id=id) context['form'] = form return render(request, 'main/project/btm.html', RequestContext(request, context))
def testBasic(self): # No odesk association - display alert resp = self.c.get(reverse('project_wizard'), follow=True) with open('test_golds.csv', 'wb') as f: f.write('"http://google.com",No\n') f.write('"http://google.com/1",No\n') f.write('"http://google.com/2",No\n') f.write('"http://google.com/5",No\n') f.write('"http://google.com/3",Yes\n') f.write('"http://google.com/4",No\n') f.flush() with open('test_golds.csv', 'rb') as f: # Full values provided for source, name in JOB_DATA_SOURCE_CHOICES: for submit in ['draft', 'active']: no_of_urls = 1 data = { 'topic': 'Test', 'topic_desc': 'Test desc', 'data_source': source, 'no_of_urls': no_of_urls, 'file_gold_urls': f, 'same_domain': '1', 'stripeToken': 'abc', 'submit': submit } resp = self.c.post(reverse('project_wizard'), data, follow=True) f.seek(0) if Job.estimate_cost(source, no_of_urls) > 0: # We need to provide correct stripe token. self.assertTemplateUsed( resp, 'main/project/wizard-form-error.html') else: # For free project we don't need payment self.assertTemplateUsed(resp, 'main/project/overview.html') # Check project topic and description data = { 'topic_desc': 'Test desc', 'data_source': '1', 'no_of_urls': '1', 'file_gold_urls': f, 'same_domain': '1', 'stripeToken': 'abc', 'submit': 'draft' } resp = self.c.post(reverse('project_wizard'), data, follow=True) f.seek(0) self.assertFormError(resp, 'topic_form', 'topic', 'Please input project topic.') data = { 'topic': 'Test', 'data_source': '1', 'no_of_urls': '1', 'file_gold_urls': f, 'same_domain': '1', 'stripeToken': 'abc', 'submit': 'draft' } resp = self.c.post(reverse('project_wizard'), data, follow=True) f.seek(0) self.assertFormError(resp, 'topic_form', 'topic_desc', 'Please input project topic description.') data = { 'topic': 'Test', 'data_source': '1', 'no_of_urls': '1', 'file_gold_urls': f, 'same_domain': '1', 'stripeToken': '', 'submit': 'draft' } resp = self.c.post(reverse('project_wizard'), data, follow=True) f.seek(0) self.assertFormError(resp, 'topic_form', 'topic_desc', 'Please input project topic description.') data = { 'topic': 'Test', 'topic_desc': 'a', 'data_source': '1', 'no_of_urls': '1', 'file_gold_urls': f, 'same_domain': '1', 'stripeToken': 'abc', 'submit': 'active' } resp = self.c.post(reverse('project_wizard'), data, follow=True) f.seek(0) self.assertEqual(resp.status_code, 200) os.unlink('test_golds.csv')
if classify_file: try: urls = csv.reader(classify_file) classify_urls = [line[0] for line in urls] params['classify_urls'] = json.dumps(classify_urls) except csv.Error, e: request.session['error'] = e return redirect('index') except: request.session['error'] =\ 'Classify urls file has incorrect format.' return render(request, 'main/project/wizard.html', RequestContext(request, context)) job_charge = None job_cost = Job.estimate_cost(int(params['data_source']), params['no_of_urls']) if job_cost >= 0.5: if not stripe_token: context['wizard_error'] = 'No Stripe payment' return render(request, 'main/project/wizard.html', RequestContext(request, context)) description = "Customer for User %s in job: %s " % ( request.user.id, params['title']) try: job_charge = JobCharge.objects.base_from_token( stripe_token, description) except JobChargeException, e: context['wizard_error'] = e.message return render(request, 'main/project/wizard.html', RequestContext(request, context)) elif Job.is_paid_source(int(params['data_source'])):
def testBasic(self): # No odesk association - display alert resp = self.c.get(reverse('project_wizard'), follow=True) with open('test_golds.csv', 'wb') as f: f.write('"http://google.com",No\n') f.write('"http://google.com/1",No\n') f.write('"http://google.com/2",No\n') f.write('"http://google.com/5",No\n') f.write('"http://google.com/3",Yes\n') f.write('"http://google.com/4",No\n') f.flush() with open('test_golds.csv', 'rb') as f: # Full values provided for source, name in JOB_DATA_SOURCE_CHOICES: for submit in ['draft', 'active']: no_of_urls = 1 data = {'topic': 'Test', 'topic_desc': 'Test desc', 'data_source': source, 'no_of_urls': no_of_urls, 'file_gold_urls': f, 'same_domain': '1', 'stripeToken': 'abc', 'submit': submit} resp = self.c.post(reverse('project_wizard'), data, follow=True) f.seek(0) if Job.estimate_cost(source, no_of_urls) > 0: # We need to provide correct stripe token. self.assertTemplateUsed(resp, 'main/project/wizard-form-error.html') else: # For free project we don't need payment self.assertTemplateUsed(resp, 'main/project/overview.html') # Check project topic and description data = {'topic_desc': 'Test desc', 'data_source': '1', 'no_of_urls': '1', 'file_gold_urls': f, 'same_domain': '1', 'stripeToken': 'abc', 'submit': 'draft'} resp = self.c.post(reverse('project_wizard'), data, follow=True) f.seek(0) self.assertFormError(resp, 'topic_form', 'topic', 'Please input project topic.') data = {'topic': 'Test', 'data_source': '1', 'no_of_urls': '1', 'file_gold_urls': f, 'same_domain': '1', 'stripeToken': 'abc', 'submit': 'draft'} resp = self.c.post(reverse('project_wizard'), data, follow=True) f.seek(0) self.assertFormError(resp, 'topic_form', 'topic_desc', 'Please input project topic description.') data = {'topic': 'Test', 'data_source': '1', 'no_of_urls': '1', 'file_gold_urls': f, 'same_domain': '1', 'stripeToken': '', 'submit': 'draft'} resp = self.c.post(reverse('project_wizard'), data, follow=True) f.seek(0) self.assertFormError(resp, 'topic_form', 'topic_desc', 'Please input project topic description.') data = {'topic': 'Test', 'topic_desc': 'a', 'data_source': '1', 'no_of_urls': '1', 'file_gold_urls': f, 'same_domain': '1', 'stripeToken': 'abc', 'submit': 'active'} resp = self.c.post(reverse('project_wizard'), data, follow=True) f.seek(0) self.assertEqual(resp.status_code, 200) os.unlink('test_golds.csv')