1
0
mirror of https://github.com/ansible/awx.git synced 2024-11-02 01:21:21 +03:00

Integrate main schedules resource

Integrated scheduled jobs list
Implement updating ancillary details on dependent models
Further cleanup
This commit is contained in:
Matthew Jones 2014-03-28 12:49:57 -04:00
parent 7237d313d2
commit 799e8d30ba
5 changed files with 33 additions and 11 deletions

View File

@ -1310,10 +1310,12 @@ class ScheduleSerializer(BaseSerializer):
def get_related(self, obj):
res = super(ScheduleSerializer, self).get_related(obj)
res.update(dict(
#unified_jobs = reverse('api:schedule_unified_jobs_list', args=(obj.pk,)),
unified_jobs = reverse('api:schedule_unified_jobs_list', args=(obj.pk,)),
))
if obj.unified_job_template and obj.unified_job_template.active:
res['unified_job_template'] = obj.unified_job_template.get_absolute_url()
#TODO: Figure out why we have to do this
ujt = UnifiedJobTemplate.objects.get(id=obj.unified_job_template.id)
res['unified_job_template'] = ujt.get_absolute_url() #obj.unified_job_template.get_absolute_url()
return res
def validate_rrule(self, attrs, source):

View File

@ -158,6 +158,7 @@ job_event_urls = patterns('awx.api.views',
schedule_urls = patterns('awx.api.views',
url(r'^$', 'schedule_list'),
url(r'^(?P<pk>[0-9]+)/$', 'schedule_detail'),
url(r'^(?P<pk>[0-9]+)/jobs/$', 'schedule_unified_jobs_list'),
)
activity_stream_urls = patterns('awx.api.views',
@ -171,7 +172,7 @@ v1_urls = patterns('awx.api.views',
url(r'^authtoken/$', 'auth_token_view'),
url(r'^me/$', 'user_me_list'),
url(r'^dashboard/$', 'dashboard_view'),
url(r'^schedules/$', include(schedule_urls)),
url(r'^schedules/', include(schedule_urls)),
url(r'^organizations/', include(organization_urls)),
url(r'^users/', include(user_urls)),
url(r'^projects/', include(project_urls)),

View File

@ -238,7 +238,7 @@ class DashboardView(APIView):
'total': job_template_list.count()}
return Response(data)
class ScheduleList(ListCreateAPIView):
class ScheduleList(ListAPIView):
view_name = "Schedules"
model = Schedule
@ -251,6 +251,14 @@ class ScheduleDetail(RetrieveUpdateDestroyAPIView):
serializer_class = ScheduleSerializer
new_in_148 = True
class ScheduleUnifiedJobsList(SubListAPIView):
model = UnifiedJob
serializer_class = UnifiedJobSerializer
parent_model = Schedule
relationship = ''
view_name = 'Schedule Jobs List'
class AuthTokenView(APIView):
authentication_classes = []

View File

@ -23,6 +23,7 @@ class Schedule(CommonModel):
class Meta:
app_label = 'main'
ordering = ['-next_run']
objects = ScheduleManager()
@ -53,21 +54,24 @@ class Schedule(CommonModel):
editable=False,
)
def get_absolute_url(self):
return reverse('api:schedule_list')
#return reverse('api:schedule_detail', args=(self.pk,))
def __unicode__(self):
return u'%s_t%s_%s_%s' % (self.name, self.unified_job_template.id, self.id, self.next_run)
def update_dt_elements(self):
def get_absolute_url(self):
return reverse('api:schedule_detail', args=(self.pk,))
def update_computed_fields(self):
future_rs = dateutil.rrule.rrulestr(self.rrule, forceset=True)
next_run_actual = future_rs.after(now())
self.next_run = next_run_actual
if self.dtstart is None:
self.dtstart = self.next_run
if "until" in self.rrule.lower() or 'count' in self.rrule.lower():
if self.dtend is None and "until" in self.rrule.lower() or 'count' in self.rrule.lower():
self.dtend = future_rs[-1]
self.unified_job_template.update_computed_fields()
def save(self, *args, **kwargs):
self.update_dt_elements()
# Check if new rrule, if so set dtstart and dtend to null
self.update_computed_fields()
super(Schedule, self).save(*args, **kwargs)
# update template next run details

View File

@ -135,6 +135,13 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique):
def last_updated(self):
return self.last_job_run
def update_computed_fields(self):
related_schedules = Schedule.objects.get(enabled=True, unified_job_template=self, next_run__isnull=False).order_by('-next_run')
if related_schedules.exists():
self.next_schedule = related_schedules[0]
self.next_job_run = related_schedules[0].next_run
self.save(update_fields=['next_schedule', 'next_job_run'])
def save(self, *args, **kwargs):
# If update_fields has been specified, add our field names to it,
# if it hasn't been specified, then we're just doing a normal save.