diff --git a/awx/api/serializers.py b/awx/api/serializers.py index fb4431adff..11635dc6d6 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -40,7 +40,7 @@ from polymorphic.models import PolymorphicModel # AWX from awx.main.constants import SCHEDULEABLE_PROVIDERS, ANSI_SGR_PATTERN from awx.main.models import * # noqa -from awx.main.models.unified_jobs import ACTIVE_STATES +from awx.main.constants import ACTIVE_STATES from awx.main.models.base import NEW_JOB_TYPE_CHOICES from awx.main.access import get_user_capabilities from awx.main.fields import ImplicitRoleField diff --git a/awx/api/views.py b/awx/api/views.py index 2318285796..029b7b480f 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -88,7 +88,7 @@ from awx.api.permissions import ( from awx.api.renderers import * # noqa from awx.api.serializers import * # noqa from awx.api.metadata import RoleMetadata, JobTypeMetadata -from awx.main.models.unified_jobs import ACTIVE_STATES +from awx.main.constants import ACTIVE_STATES from awx.main.scheduler.tasks import run_job_complete from awx.api.exceptions import ActiveJobConflict diff --git a/awx/main/constants.py b/awx/main/constants.py index c452e19640..447fed5ae6 100644 --- a/awx/main/constants.py +++ b/awx/main/constants.py @@ -5,9 +5,17 @@ import re from django.utils.translation import ugettext_lazy as _ +__all__ = [ + 'CLOUD_PROVIDERS', 'SCHEDULEABLE_PROVIDERS', 'PRIVILEGE_ESCALATION_METHODS', + 'ANSI_SGR_PATTERN', 'CAN_CANCEL', 'ACTIVE_STATES' +] + + CLOUD_PROVIDERS = ('azure_rm', 'ec2', 'gce', 'vmware', 'openstack', 'rhv', 'satellite6', 'cloudforms', 'tower') SCHEDULEABLE_PROVIDERS = CLOUD_PROVIDERS + ('custom', 'scm',) PRIVILEGE_ESCALATION_METHODS = [ ('sudo', _('Sudo')), ('su', _('Su')), ('pbrun', _('Pbrun')), ('pfexec', _('Pfexec')), ('dzdo', _('DZDO')), ('pmrun', _('Pmrun')), ('runas', _('Runas'))] ANSI_SGR_PATTERN = re.compile(r'\x1b\[[0-9;]*m') +CAN_CANCEL = ('new', 'pending', 'waiting', 'running') +ACTIVE_STATES = CAN_CANCEL diff --git a/awx/main/models/mixins.py b/awx/main/models/mixins.py index acd35ba017..7d563f1e36 100644 --- a/awx/main/models/mixins.py +++ b/awx/main/models/mixins.py @@ -24,6 +24,7 @@ from awx.main.utils import parse_yaml_or_json, get_custom_venv_choices from awx.main.utils.encryption import decrypt_value, get_encryption_key, is_encrypted from awx.main.utils.polymorphic import build_polymorphic_ctypes_map from awx.main.fields import JSONField, AskForField +from awx.main.constants import ACTIVE_STATES __all__ = ['ResourceMixin', 'SurveyJobTemplateMixin', 'SurveyJobMixin', @@ -461,7 +462,7 @@ class RelatedJobsMixin(object): return self.objects.none() def _get_active_jobs(self): - return self._get_related_jobs().filter(status__in=('new', 'pending', 'waiting', 'running')) + return self._get_related_jobs().filter(status__in=ACTIVE_STATES) ''' Returns [{'id': '1', 'type': 'job'}, {'id': 2, 'type': 'project_update'}, ...] diff --git a/awx/main/models/projects.py b/awx/main/models/projects.py index 981c3432b4..d302aa0973 100644 --- a/awx/main/models/projects.py +++ b/awx/main/models/projects.py @@ -28,7 +28,6 @@ from awx.main.models.notifications import ( from awx.main.models.unified_jobs import ( UnifiedJob, UnifiedJobTemplate, - ACTIVE_STATES, ) from awx.main.models.mixins import ( ResourceMixin, diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index fca04dc8b0..e50a686374 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -38,6 +38,7 @@ from awx.main.utils import ( copy_model_by_class, copy_m2m_relationships, get_type_for_model, parse_yaml_or_json ) +from awx.main.constants import ACTIVE_STATES, CAN_CANCEL from awx.main.redact import UriCleaner, REPLACE_STR from awx.main.consumers import emit_channel_notification from awx.main.fields import JSONField, AskForField @@ -46,8 +47,7 @@ __all__ = ['UnifiedJobTemplate', 'UnifiedJob', 'StdoutMaxBytesExceeded'] logger = logging.getLogger('awx.main.models.unified_jobs') -CAN_CANCEL = ('new', 'pending', 'waiting', 'running') -ACTIVE_STATES = CAN_CANCEL +# NOTE: ACTIVE_STATES moved to constants because it is used by parent modules class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique, NotificationFieldsModel): diff --git a/awx/main/tasks.py b/awx/main/tasks.py index fdf316b17b..fc73e4eb41 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -49,7 +49,7 @@ from crum import impersonate from awx import __version__ as awx_application_version from awx.main.constants import CLOUD_PROVIDERS, PRIVILEGE_ESCALATION_METHODS from awx.main.models import * # noqa -from awx.main.models.unified_jobs import ACTIVE_STATES +from awx.main.constants import ACTIVE_STATES from awx.main.exceptions import AwxTaskError from awx.main.queue import CallbackQueueDispatcher from awx.main.expect import run, isolated_manager diff --git a/awx/main/tests/functional/api/test_unified_jobs_view.py b/awx/main/tests/functional/api/test_unified_jobs_view.py index c537dd941f..d4dd4bd53a 100644 --- a/awx/main/tests/functional/api/test_unified_jobs_view.py +++ b/awx/main/tests/functional/api/test_unified_jobs_view.py @@ -3,7 +3,7 @@ import pytest from awx.api.versioning import reverse from awx.main.models import UnifiedJob, ProjectUpdate, InventoryUpdate from awx.main.tests.base import URI -from awx.main.models.unified_jobs import ACTIVE_STATES +from awx.main.constants import ACTIVE_STATES TEST_STATES = list(ACTIVE_STATES)