Commit 730ea62f authored by Vasyl Bodnaruk's avatar Vasyl Bodnaruk

added functional for creating task

parent daca3d40
...@@ -56,13 +56,15 @@ class Job(models.Model): ...@@ -56,13 +56,15 @@ class Job(models.Model):
(RUNNING, 'running'), (RUNNING, 'running'),
(PENDING, 'pending') (PENDING, 'pending')
) )
DAY = 'DAY', DAY = 'DAY'
WEEK = 'WEEK', WEEK = 'WEEK'
MONTH = 'MONTH' MONTH = 'MONTH'
NON = 'NON'
INTERVAL = ( INTERVAL = (
(DAY, 'day'), (DAY, 'day'),
(WEEK, 'week'), (WEEK, 'week'),
(MONTH, 'month') (MONTH, 'month'),
(NON, 'nonstop')
) )
name = models.CharField(max_length=50, default=None, null=True) name = models.CharField(max_length=50, default=None, null=True)
...@@ -74,9 +76,9 @@ class Job(models.Model): ...@@ -74,9 +76,9 @@ class Job(models.Model):
query = models.CharField(max_length=255, default=None, null=True, blank=True) query = models.CharField(max_length=255, default=None, null=True, blank=True)
spider = models.ForeignKey(Spider, default=None, null=True) spider = models.ForeignKey(Spider, default=None, null=True)
schedule_job = models.OneToOneField(PeriodicTask, blank=True, null=True, default=None) schedule_job = models.OneToOneField(PeriodicTask, on_delete=models.SET_NULL, blank=True, null=True, default=None)
interval = models.CharField(max_length=5, choices=INTERVAL, default=None, null=True, blank=True) interval = models.CharField(max_length=5, choices=INTERVAL, default=None, null=True, blank=True)
count = models.IntegerField(default=None, blank=None, null=True) count = models.IntegerField(default=None, blank=True, null=True)
objects = JobManager() objects = JobManager()
......
...@@ -3,11 +3,11 @@ from django_celery_beat.models import PeriodicTask, CrontabSchedule ...@@ -3,11 +3,11 @@ from django_celery_beat.models import PeriodicTask, CrontabSchedule
def make_data(data): def make_data(data):
every = lambda x: '*/{}'.format(x) every = (lambda x: '*/{}'.format(x))
result = { result = {
'minute': data.get('minute', 0), 'minute': data.get('minute', 0),
'hour': data.get('hour', 0), 'hour': data.get('hour', 0),
'day_of_week': data.get('day_of_week', '*'), 'day_of_week': '*',
'day_of_month': data.get('day_of_month', '*'), 'day_of_month': data.get('day_of_month', '*'),
'month_of_year': data.get('month_of_year', '*') 'month_of_year': data.get('month_of_year', '*')
} }
...@@ -18,9 +18,10 @@ def make_data(data): ...@@ -18,9 +18,10 @@ def make_data(data):
def make_periodic_task(job_id, data): def make_periodic_task(job_id, data):
schedule, _ = CrontabSchedule.objects.get_or_create(**data) schedule, _ = CrontabSchedule.objects.get_or_create(**data)
PeriodicTask.objects.create( task = PeriodicTask.objects.create(
crontab=schedule, crontab=schedule,
name='Importing contacts', name='Task for job {}'.format(job_id),
task='scraper.tasks.run_job', task='scraper.tasks.run_job',
args=[job_id] args=[job_id]
) )
return task
...@@ -2,12 +2,13 @@ from datetime import datetime, time ...@@ -2,12 +2,13 @@ from datetime import datetime, time
from django.shortcuts import render, HttpResponseRedirect, reverse, HttpResponse from django.shortcuts import render, HttpResponseRedirect, reverse, HttpResponse
from django.http import JsonResponse from django.http import JsonResponse
from django.views.generic import ListView, CreateView, UpdateView from django.views.generic import ListView, CreateView, UpdateView
from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from .models import Spider, Job from .models import Spider, Job
from .service import Service from .service import Service
from .forms import CreateJobForm from .forms import CreateJobForm
from .periodic_task_creator import make_periodic_task
@method_decorator(login_required, name='post') @method_decorator(login_required, name='post')
...@@ -70,20 +71,21 @@ class NewJobCreateView(CreateView): ...@@ -70,20 +71,21 @@ class NewJobCreateView(CreateView):
name = request.POST.get('name') name = request.POST.get('name')
spider = Spider.objects.get(pk=request.POST.get('spider')) spider = Spider.objects.get(pk=request.POST.get('spider'))
query = request.POST.get('query') query = request.POST.get('query')
job = Job.objects.create(name=name, spider=spider, query=query)
if request.POST.get('date'):
date = self._date_format(request.POST.get('date')) date = self._date_format(request.POST.get('date'))
interval = request.POST.get('interval') data = {
count = request.POST.get('count') 'minute': date.minute,
form = CreateJobForm(request.POST) 'hour': date.hour,
# if form.is_valid(): 'day_of_month': date.day,
# form.create_job() 'month_of_year': date.month
}
job.schedule_job = make_periodic_task(job.id, data)
job.save()
print(request.POST)
if query == 'j': if query == 'j':
query = '' query = ''
print(date)
# Job.objects.create(name=name, spider=spider, query=query)
if count:
pass
return HttpResponseRedirect(reverse('job_list')) return HttpResponseRedirect(reverse('job_list'))
def _date_format(self, date): def _date_format(self, date):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment