Example #1
0
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))
Example #2
0
    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)
Example #3
0
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))
Example #4
0
    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')
Example #5
0
            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'])):
Example #6
0
    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')
Example #7
0
            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'])):