From b3aac6bb9e85b574a0b449adbc0eebd24c3cc3cb Mon Sep 17 00:00:00 2001 From: Chris Church Date: Wed, 13 Aug 2014 00:11:57 -0400 Subject: [PATCH] Update status choices for projects, inventory sources and job templates to only return options applicable to the specific object type. --- awx/api/serializers.py | 6 +++++- awx/main/models/unified_jobs.py | 21 ++++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index ee34aaf3d9..7a75d80d04 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -615,6 +615,7 @@ class ProjectSerializer(UnifiedJobTemplateSerializer, ProjectOptionsSerializer): playbooks = serializers.Field(source='playbooks', help_text='Array of playbooks available within this project.') scm_delete_on_next_update = serializers.Field(source='scm_delete_on_next_update') + status = ChoiceField(source='status', choices=Project.PROJECT_STATUS_CHOICES, read_only=True, required=False) last_update_failed = serializers.Field(source='last_update_failed') last_updated = serializers.Field(source='last_updated') @@ -984,7 +985,8 @@ class InventorySourceOptionsSerializer(BaseSerializer): class InventorySourceSerializer(UnifiedJobTemplateSerializer, InventorySourceOptionsSerializer): - + + status = ChoiceField(source='status', choices=InventorySource.INVENTORY_SOURCE_STATUS_CHOICES, read_only=True, required=False) last_update_failed = serializers.Field(source='last_update_failed') last_updated = serializers.Field(source='last_updated') @@ -1218,6 +1220,8 @@ class JobOptionsSerializer(BaseSerializer): class JobTemplateSerializer(UnifiedJobTemplateSerializer, JobOptionsSerializer): + status = ChoiceField(source='status', choices=JobTemplate.JOB_TEMPLATE_STATUS_CHOICES, read_only=True, required=False) + class Meta: model = JobTemplate fields = ('*', 'host_config_key', 'ask_variables_on_launch') diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index c633618905..4da5ada343 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -20,6 +20,7 @@ from django.db import models from django.db import transaction from django.core.exceptions import ValidationError, NON_FIELD_ERRORS from django.contrib.contenttypes.models import ContentType +from django.utils.datastructures import SortedDict from django.utils.translation import ugettext_lazy as _ from django.utils.timezone import now @@ -47,21 +48,31 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): Concrete base class for unified job templates. ''' - STATUS_CHOICES = [ - # Common to all: + COMMON_STATUS_CHOICES = [ ('never updated', 'Never Updated'), # A job has never been run using this template. ('running', 'Running'), # A job is currently running (or pending/waiting) using this template. ('failed', 'Failed'), # The last completed job using this template failed (failed, error, canceled). ('successful', 'Successful'), # The last completed job using this template succeeded. - # For Project only: + ] + + PROJECT_STATUS_CHOICES = COMMON_STATUS_CHOICES + [ ('ok', 'OK'), # Project is not configured for SCM and path exists. ('missing', 'Missing'), # Project path does not exist. - # For Inventory Source only: + ] + + INVENTORY_SOURCE_STATUS_CHOICES = COMMON_STATUS_CHOICES + [ ('none', _('No External Source')), # Inventory source is not configured to update from an external source. + ] + + JOB_TEMPLATE_STATUS_CHOICES = COMMON_STATUS_CHOICES + + DEPRECATED_STATUS_CHOICES = [ # No longer used for Project / Inventory Source: ('updating', _('Updating')), # Same as running. ] + ALL_STATUS_CHOICES = SortedDict(PROJECT_STATUS_CHOICES + INVENTORY_SOURCE_STATUS_CHOICES + JOB_TEMPLATE_STATUS_CHOICES + DEPRECATED_STATUS_CHOICES).items() + class Meta: app_label = 'main' unique_together = [('polymorphic_ctype', 'name')] @@ -119,7 +130,7 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique): ) status = models.CharField( max_length=32, - choices=STATUS_CHOICES, + choices=ALL_STATUS_CHOICES, default='ok', editable=False, )