Apply new rules from black update (#16232)

This commit is contained in:
Alan Rominger
2026-01-19 12:58:07 -05:00
committed by GitHub
parent 43a3a620e3
commit dce5ac73c5
146 changed files with 67 additions and 227 deletions

View File

@@ -7,7 +7,6 @@ from rest_framework import serializers
# AWX # AWX
from awx.conf import fields, register, register_validate from awx.conf import fields, register, register_validate
register( register(
'SESSION_COOKIE_AGE', 'SESSION_COOKIE_AGE',
field_class=fields.IntegerField, field_class=fields.IntegerField,

View File

@@ -21,7 +21,7 @@ class NullFieldMixin(object):
""" """
def validate_empty_values(self, data): def validate_empty_values(self, data):
(is_empty_value, data) = super(NullFieldMixin, self).validate_empty_values(data) is_empty_value, data = super(NullFieldMixin, self).validate_empty_values(data)
if is_empty_value and data is None: if is_empty_value and data is None:
return (False, data) return (False, data)
return (is_empty_value, data) return (is_empty_value, data)

View File

@@ -764,7 +764,7 @@ class SubListCreateAttachDetachAPIView(SubListCreateAPIView):
return Response(status=status.HTTP_204_NO_CONTENT) return Response(status=status.HTTP_204_NO_CONTENT)
def unattach(self, request, *args, **kwargs): def unattach(self, request, *args, **kwargs):
(sub_id, res) = self.unattach_validate(request) sub_id, res = self.unattach_validate(request)
if res: if res:
return res return res
return self.unattach_by_id(request, sub_id) return self.unattach_by_id(request, sub_id)

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import MetricsView from awx.api.views import MetricsView
urls = [re_path(r'^$', MetricsView.as_view(), name='metrics_view')] urls = [re_path(r'^$', MetricsView.as_view(), name='metrics_view')]
__all__ = ['urls'] __all__ = ['urls']

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import ActivityStreamList, ActivityStreamDetail from awx.api.views import ActivityStreamList, ActivityStreamDetail
urls = [ urls = [
re_path(r'^$', ActivityStreamList.as_view(), name='activity_stream_list'), re_path(r'^$', ActivityStreamList.as_view(), name='activity_stream_list'),
re_path(r'^(?P<pk>[0-9]+)/$', ActivityStreamDetail.as_view(), name='activity_stream_detail'), re_path(r'^(?P<pk>[0-9]+)/$', ActivityStreamDetail.as_view(), name='activity_stream_detail'),

View File

@@ -14,7 +14,6 @@ from awx.api.views import (
AdHocCommandStdout, AdHocCommandStdout,
) )
urls = [ urls = [
re_path(r'^$', AdHocCommandList.as_view(), name='ad_hoc_command_list'), re_path(r'^$', AdHocCommandList.as_view(), name='ad_hoc_command_list'),
re_path(r'^(?P<pk>[0-9]+)/$', AdHocCommandDetail.as_view(), name='ad_hoc_command_detail'), re_path(r'^(?P<pk>[0-9]+)/$', AdHocCommandDetail.as_view(), name='ad_hoc_command_detail'),

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import AdHocCommandEventDetail from awx.api.views import AdHocCommandEventDetail
urls = [ urls = [
re_path(r'^(?P<pk>[0-9]+)/$', AdHocCommandEventDetail.as_view(), name='ad_hoc_command_event_detail'), re_path(r'^(?P<pk>[0-9]+)/$', AdHocCommandEventDetail.as_view(), name='ad_hoc_command_event_detail'),
] ]

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
import awx.api.views.analytics as analytics import awx.api.views.analytics as analytics
urls = [ urls = [
re_path(r'^$', analytics.AnalyticsRootView.as_view(), name='analytics_root_view'), re_path(r'^$', analytics.AnalyticsRootView.as_view(), name='analytics_root_view'),
re_path(r'^authorized/$', analytics.AnalyticsAuthorizedView.as_view(), name='analytics_authorized'), re_path(r'^authorized/$', analytics.AnalyticsAuthorizedView.as_view(), name='analytics_authorized'),

View File

@@ -16,7 +16,6 @@ from awx.api.views import (
CredentialExternalTest, CredentialExternalTest,
) )
urls = [ urls = [
re_path(r'^$', CredentialList.as_view(), name='credential_list'), re_path(r'^$', CredentialList.as_view(), name='credential_list'),
re_path(r'^(?P<pk>[0-9]+)/activity_stream/$', CredentialActivityStreamList.as_view(), name='credential_activity_stream_list'), re_path(r'^(?P<pk>[0-9]+)/activity_stream/$', CredentialActivityStreamList.as_view(), name='credential_activity_stream_list'),

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import CredentialInputSourceDetail, CredentialInputSourceList from awx.api.views import CredentialInputSourceDetail, CredentialInputSourceList
urls = [ urls = [
re_path(r'^$', CredentialInputSourceList.as_view(), name='credential_input_source_list'), re_path(r'^$', CredentialInputSourceList.as_view(), name='credential_input_source_list'),
re_path(r'^(?P<pk>[0-9]+)/$', CredentialInputSourceDetail.as_view(), name='credential_input_source_detail'), re_path(r'^(?P<pk>[0-9]+)/$', CredentialInputSourceDetail.as_view(), name='credential_input_source_detail'),

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import CredentialTypeList, CredentialTypeDetail, CredentialTypeCredentialList, CredentialTypeActivityStreamList, CredentialTypeExternalTest from awx.api.views import CredentialTypeList, CredentialTypeDetail, CredentialTypeCredentialList, CredentialTypeActivityStreamList, CredentialTypeExternalTest
urls = [ urls = [
re_path(r'^$', CredentialTypeList.as_view(), name='credential_type_list'), re_path(r'^$', CredentialTypeList.as_view(), name='credential_type_list'),
re_path(r'^(?P<pk>[0-9]+)/$', CredentialTypeDetail.as_view(), name='credential_type_detail'), re_path(r'^(?P<pk>[0-9]+)/$', CredentialTypeDetail.as_view(), name='credential_type_detail'),

View File

@@ -8,7 +8,6 @@ from awx.api.views import (
ExecutionEnvironmentActivityStreamList, ExecutionEnvironmentActivityStreamList,
) )
urls = [ urls = [
re_path(r'^$', ExecutionEnvironmentList.as_view(), name='execution_environment_list'), re_path(r'^$', ExecutionEnvironmentList.as_view(), name='execution_environment_list'),
re_path(r'^(?P<pk>[0-9]+)/$', ExecutionEnvironmentDetail.as_view(), name='execution_environment_detail'), re_path(r'^(?P<pk>[0-9]+)/$', ExecutionEnvironmentDetail.as_view(), name='execution_environment_detail'),

View File

@@ -18,7 +18,6 @@ from awx.api.views import (
GroupAdHocCommandsList, GroupAdHocCommandsList,
) )
urls = [ urls = [
re_path(r'^$', GroupList.as_view(), name='group_list'), re_path(r'^$', GroupList.as_view(), name='group_list'),
re_path(r'^(?P<pk>[0-9]+)/$', GroupDetail.as_view(), name='group_detail'), re_path(r'^(?P<pk>[0-9]+)/$', GroupDetail.as_view(), name='group_detail'),

View File

@@ -18,7 +18,6 @@ from awx.api.views import (
HostAdHocCommandEventsList, HostAdHocCommandEventsList,
) )
urls = [ urls = [
re_path(r'^$', HostList.as_view(), name='host_list'), re_path(r'^$', HostList.as_view(), name='host_list'),
re_path(r'^(?P<pk>[0-9]+)/$', HostDetail.as_view(), name='host_detail'), re_path(r'^(?P<pk>[0-9]+)/$', HostDetail.as_view(), name='host_detail'),

View File

@@ -14,7 +14,6 @@ from awx.api.views import (
) )
from awx.api.views.instance_install_bundle import InstanceInstallBundle from awx.api.views.instance_install_bundle import InstanceInstallBundle
urls = [ urls = [
re_path(r'^$', InstanceList.as_view(), name='instance_list'), re_path(r'^$', InstanceList.as_view(), name='instance_list'),
re_path(r'^(?P<pk>[0-9]+)/$', InstanceDetail.as_view(), name='instance_detail'), re_path(r'^(?P<pk>[0-9]+)/$', InstanceDetail.as_view(), name='instance_detail'),

View File

@@ -12,7 +12,6 @@ from awx.api.views import (
InstanceGroupObjectRolesList, InstanceGroupObjectRolesList,
) )
urls = [ urls = [
re_path(r'^$', InstanceGroupList.as_view(), name='instance_group_list'), re_path(r'^$', InstanceGroupList.as_view(), name='instance_group_list'),
re_path(r'^(?P<pk>[0-9]+)/$', InstanceGroupDetail.as_view(), name='instance_group_detail'), re_path(r'^(?P<pk>[0-9]+)/$', InstanceGroupDetail.as_view(), name='instance_group_detail'),

View File

@@ -29,7 +29,6 @@ from awx.api.views import (
InventoryVariableData, InventoryVariableData,
) )
urls = [ urls = [
re_path(r'^$', InventoryList.as_view(), name='inventory_list'), re_path(r'^$', InventoryList.as_view(), name='inventory_list'),
re_path(r'^(?P<pk>[0-9]+)/$', InventoryDetail.as_view(), name='inventory_detail'), re_path(r'^(?P<pk>[0-9]+)/$', InventoryDetail.as_view(), name='inventory_detail'),

View File

@@ -18,7 +18,6 @@ from awx.api.views import (
InventorySourceNotificationTemplatesSuccessList, InventorySourceNotificationTemplatesSuccessList,
) )
urls = [ urls = [
re_path(r'^$', InventorySourceList.as_view(), name='inventory_source_list'), re_path(r'^$', InventorySourceList.as_view(), name='inventory_source_list'),
re_path(r'^(?P<pk>[0-9]+)/$', InventorySourceDetail.as_view(), name='inventory_source_detail'), re_path(r'^(?P<pk>[0-9]+)/$', InventorySourceDetail.as_view(), name='inventory_source_detail'),

View File

@@ -15,7 +15,6 @@ from awx.api.views import (
InventoryUpdateCredentialsList, InventoryUpdateCredentialsList,
) )
urls = [ urls = [
re_path(r'^$', InventoryUpdateList.as_view(), name='inventory_update_list'), re_path(r'^$', InventoryUpdateList.as_view(), name='inventory_update_list'),
re_path(r'^(?P<pk>[0-9]+)/$', InventoryUpdateDetail.as_view(), name='inventory_update_detail'), re_path(r'^(?P<pk>[0-9]+)/$', InventoryUpdateDetail.as_view(), name='inventory_update_detail'),

View File

@@ -19,7 +19,6 @@ from awx.api.views import (
JobHostSummaryDetail, JobHostSummaryDetail,
) )
urls = [ urls = [
re_path(r'^$', JobList.as_view(), name='job_list'), re_path(r'^$', JobList.as_view(), name='job_list'),
re_path(r'^(?P<pk>[0-9]+)/$', JobDetail.as_view(), name='job_detail'), re_path(r'^(?P<pk>[0-9]+)/$', JobDetail.as_view(), name='job_detail'),

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import JobHostSummaryDetail from awx.api.views import JobHostSummaryDetail
urls = [re_path(r'^(?P<pk>[0-9]+)/$', JobHostSummaryDetail.as_view(), name='job_host_summary_detail')] urls = [re_path(r'^(?P<pk>[0-9]+)/$', JobHostSummaryDetail.as_view(), name='job_host_summary_detail')]
__all__ = ['urls'] __all__ = ['urls']

View File

@@ -23,7 +23,6 @@ from awx.api.views import (
JobTemplateCopy, JobTemplateCopy,
) )
urls = [ urls = [
re_path(r'^$', JobTemplateList.as_view(), name='job_template_list'), re_path(r'^$', JobTemplateList.as_view(), name='job_template_list'),
re_path(r'^(?P<pk>[0-9]+)/$', JobTemplateDetail.as_view(), name='job_template_detail'), re_path(r'^(?P<pk>[0-9]+)/$', JobTemplateDetail.as_view(), name='job_template_detail'),

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views.labels import LabelList, LabelDetail from awx.api.views.labels import LabelList, LabelDetail
urls = [re_path(r'^$', LabelList.as_view(), name='label_list'), re_path(r'^(?P<pk>[0-9]+)/$', LabelDetail.as_view(), name='label_detail')] urls = [re_path(r'^$', LabelList.as_view(), name='label_list'), re_path(r'^(?P<pk>[0-9]+)/$', LabelDetail.as_view(), name='label_detail')]
__all__ = ['urls'] __all__ = ['urls']

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import NotificationList, NotificationDetail from awx.api.views import NotificationList, NotificationDetail
urls = [ urls = [
re_path(r'^$', NotificationList.as_view(), name='notification_list'), re_path(r'^$', NotificationList.as_view(), name='notification_list'),
re_path(r'^(?P<pk>[0-9]+)/$', NotificationDetail.as_view(), name='notification_detail'), re_path(r'^(?P<pk>[0-9]+)/$', NotificationDetail.as_view(), name='notification_detail'),

View File

@@ -11,7 +11,6 @@ from awx.api.views import (
NotificationTemplateCopy, NotificationTemplateCopy,
) )
urls = [ urls = [
re_path(r'^$', NotificationTemplateList.as_view(), name='notification_template_list'), re_path(r'^$', NotificationTemplateList.as_view(), name='notification_template_list'),
re_path(r'^(?P<pk>[0-9]+)/$', NotificationTemplateDetail.as_view(), name='notification_template_detail'), re_path(r'^(?P<pk>[0-9]+)/$', NotificationTemplateDetail.as_view(), name='notification_template_detail'),

View File

@@ -27,7 +27,6 @@ from awx.api.views.organization import (
) )
from awx.api.views import OrganizationCredentialList from awx.api.views import OrganizationCredentialList
urls = [ urls = [
re_path(r'^$', OrganizationList.as_view(), name='organization_list'), re_path(r'^$', OrganizationList.as_view(), name='organization_list'),
re_path(r'^(?P<pk>[0-9]+)/$', OrganizationDetail.as_view(), name='organization_detail'), re_path(r'^(?P<pk>[0-9]+)/$', OrganizationDetail.as_view(), name='organization_detail'),

View File

@@ -22,7 +22,6 @@ from awx.api.views import (
ProjectCopy, ProjectCopy,
) )
urls = [ urls = [
re_path(r'^$', ProjectList.as_view(), name='project_list'), re_path(r'^$', ProjectList.as_view(), name='project_list'),
re_path(r'^(?P<pk>[0-9]+)/$', ProjectDetail.as_view(), name='project_detail'), re_path(r'^(?P<pk>[0-9]+)/$', ProjectDetail.as_view(), name='project_detail'),

View File

@@ -13,7 +13,6 @@ from awx.api.views import (
ProjectUpdateEventsList, ProjectUpdateEventsList,
) )
urls = [ urls = [
re_path(r'^$', ProjectUpdateList.as_view(), name='project_update_list'), re_path(r'^$', ProjectUpdateList.as_view(), name='project_update_list'),
re_path(r'^(?P<pk>[0-9]+)/$', ProjectUpdateDetail.as_view(), name='project_update_detail'), re_path(r'^(?P<pk>[0-9]+)/$', ProjectUpdateDetail.as_view(), name='project_update_detail'),

View File

@@ -8,7 +8,6 @@ from awx.api.views import (
ReceptorAddressDetail, ReceptorAddressDetail,
) )
urls = [ urls = [
re_path(r'^$', ReceptorAddressesList.as_view(), name='receptor_addresses_list'), re_path(r'^$', ReceptorAddressesList.as_view(), name='receptor_addresses_list'),
re_path(r'^(?P<pk>[0-9]+)/$', ReceptorAddressDetail.as_view(), name='receptor_address_detail'), re_path(r'^(?P<pk>[0-9]+)/$', ReceptorAddressDetail.as_view(), name='receptor_address_detail'),

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import RoleList, RoleDetail, RoleUsersList, RoleTeamsList from awx.api.views import RoleList, RoleDetail, RoleUsersList, RoleTeamsList
urls = [ urls = [
re_path(r'^$', RoleList.as_view(), name='role_list'), re_path(r'^$', RoleList.as_view(), name='role_list'),
re_path(r'^(?P<pk>[0-9]+)/$', RoleDetail.as_view(), name='role_detail'), re_path(r'^(?P<pk>[0-9]+)/$', RoleDetail.as_view(), name='role_detail'),

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import ScheduleList, ScheduleDetail, ScheduleUnifiedJobsList, ScheduleCredentialsList, ScheduleLabelsList, ScheduleInstanceGroupList from awx.api.views import ScheduleList, ScheduleDetail, ScheduleUnifiedJobsList, ScheduleCredentialsList, ScheduleLabelsList, ScheduleInstanceGroupList
urls = [ urls = [
re_path(r'^$', ScheduleList.as_view(), name='schedule_list'), re_path(r'^$', ScheduleList.as_view(), name='schedule_list'),
re_path(r'^(?P<pk>[0-9]+)/$', ScheduleDetail.as_view(), name='schedule_detail'), re_path(r'^(?P<pk>[0-9]+)/$', ScheduleDetail.as_view(), name='schedule_detail'),

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import SystemJobList, SystemJobDetail, SystemJobCancel, SystemJobNotificationsList, SystemJobEventsList from awx.api.views import SystemJobList, SystemJobDetail, SystemJobCancel, SystemJobNotificationsList, SystemJobEventsList
urls = [ urls = [
re_path(r'^$', SystemJobList.as_view(), name='system_job_list'), re_path(r'^$', SystemJobList.as_view(), name='system_job_list'),
re_path(r'^(?P<pk>[0-9]+)/$', SystemJobDetail.as_view(), name='system_job_detail'), re_path(r'^(?P<pk>[0-9]+)/$', SystemJobDetail.as_view(), name='system_job_detail'),

View File

@@ -14,7 +14,6 @@ from awx.api.views import (
SystemJobTemplateNotificationTemplatesSuccessList, SystemJobTemplateNotificationTemplatesSuccessList,
) )
urls = [ urls = [
re_path(r'^$', SystemJobTemplateList.as_view(), name='system_job_template_list'), re_path(r'^$', SystemJobTemplateList.as_view(), name='system_job_template_list'),
re_path(r'^(?P<pk>[0-9]+)/$', SystemJobTemplateDetail.as_view(), name='system_job_template_detail'), re_path(r'^(?P<pk>[0-9]+)/$', SystemJobTemplateDetail.as_view(), name='system_job_template_detail'),

View File

@@ -15,7 +15,6 @@ from awx.api.views import (
TeamAccessList, TeamAccessList,
) )
urls = [ urls = [
re_path(r'^$', TeamList.as_view(), name='team_list'), re_path(r'^$', TeamList.as_view(), name='team_list'),
re_path(r'^(?P<pk>[0-9]+)/$', TeamDetail.as_view(), name='team_detail'), re_path(r'^(?P<pk>[0-9]+)/$', TeamDetail.as_view(), name='team_detail'),

View File

@@ -2,7 +2,6 @@ from django.urls import re_path
from awx.api.views.webhooks import WebhookKeyView, GithubWebhookReceiver, GitlabWebhookReceiver, BitbucketDcWebhookReceiver from awx.api.views.webhooks import WebhookKeyView, GithubWebhookReceiver, GitlabWebhookReceiver, BitbucketDcWebhookReceiver
urlpatterns = [ urlpatterns = [
re_path(r'^webhook_key/$', WebhookKeyView.as_view(), name='webhook_key'), re_path(r'^webhook_key/$', WebhookKeyView.as_view(), name='webhook_key'),
re_path(r'^github/$', GithubWebhookReceiver.as_view(), name='webhook_receiver_github'), re_path(r'^github/$', GithubWebhookReceiver.as_view(), name='webhook_receiver_github'),

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import WorkflowApprovalList, WorkflowApprovalDetail, WorkflowApprovalApprove, WorkflowApprovalDeny from awx.api.views import WorkflowApprovalList, WorkflowApprovalDetail, WorkflowApprovalApprove, WorkflowApprovalDeny
urls = [ urls = [
re_path(r'^$', WorkflowApprovalList.as_view(), name='workflow_approval_list'), re_path(r'^$', WorkflowApprovalList.as_view(), name='workflow_approval_list'),
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalDetail.as_view(), name='workflow_approval_detail'), re_path(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalDetail.as_view(), name='workflow_approval_detail'),

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.api.views import WorkflowApprovalTemplateDetail, WorkflowApprovalTemplateJobsList from awx.api.views import WorkflowApprovalTemplateDetail, WorkflowApprovalTemplateJobsList
urls = [ urls = [
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalTemplateDetail.as_view(), name='workflow_approval_template_detail'), re_path(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalTemplateDetail.as_view(), name='workflow_approval_template_detail'),
re_path(r'^(?P<pk>[0-9]+)/approvals/$', WorkflowApprovalTemplateJobsList.as_view(), name='workflow_approval_template_jobs_list'), re_path(r'^(?P<pk>[0-9]+)/approvals/$', WorkflowApprovalTemplateJobsList.as_view(), name='workflow_approval_template_jobs_list'),

View File

@@ -14,7 +14,6 @@ from awx.api.views import (
WorkflowJobActivityStreamList, WorkflowJobActivityStreamList,
) )
urls = [ urls = [
re_path(r'^$', WorkflowJobList.as_view(), name='workflow_job_list'), re_path(r'^$', WorkflowJobList.as_view(), name='workflow_job_list'),
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobDetail.as_view(), name='workflow_job_detail'), re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobDetail.as_view(), name='workflow_job_detail'),

View File

@@ -14,7 +14,6 @@ from awx.api.views import (
WorkflowJobNodeInstanceGroupsList, WorkflowJobNodeInstanceGroupsList,
) )
urls = [ urls = [
re_path(r'^$', WorkflowJobNodeList.as_view(), name='workflow_job_node_list'), re_path(r'^$', WorkflowJobNodeList.as_view(), name='workflow_job_node_list'),
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobNodeDetail.as_view(), name='workflow_job_node_detail'), re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobNodeDetail.as_view(), name='workflow_job_node_detail'),

View File

@@ -22,7 +22,6 @@ from awx.api.views import (
WorkflowJobTemplateLabelList, WorkflowJobTemplateLabelList,
) )
urls = [ urls = [
re_path(r'^$', WorkflowJobTemplateList.as_view(), name='workflow_job_template_list'), re_path(r'^$', WorkflowJobTemplateList.as_view(), name='workflow_job_template_list'),
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobTemplateDetail.as_view(), name='workflow_job_template_detail'), re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobTemplateDetail.as_view(), name='workflow_job_template_detail'),

View File

@@ -15,7 +15,6 @@ from awx.api.views import (
WorkflowJobTemplateNodeInstanceGroupsList, WorkflowJobTemplateNodeInstanceGroupsList,
) )
urls = [ urls = [
re_path(r'^$', WorkflowJobTemplateNodeList.as_view(), name='workflow_job_template_node_list'), re_path(r'^$', WorkflowJobTemplateNodeList.as_view(), name='workflow_job_template_node_list'),
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobTemplateNodeDetail.as_view(), name='workflow_job_template_node_detail'), re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobTemplateNodeDetail.as_view(), name='workflow_job_template_node_detail'),

View File

@@ -45,7 +45,6 @@ from awx.api.views.mixin import RelatedJobsPreventDeleteMixin
from awx.api.pagination import UnifiedJobEventPagination from awx.api.pagination import UnifiedJobEventPagination
logger = logging.getLogger('awx.api.views.organization') logger = logging.getLogger('awx.api.views.organization')

View File

@@ -28,7 +28,7 @@ class LabelSubListCreateAttachDetachView(SubListCreateAttachDetachAPIView):
resource_purpose = 'labels of a resource' resource_purpose = 'labels of a resource'
def unattach(self, request, *args, **kwargs): def unattach(self, request, *args, **kwargs):
(sub_id, res) = super().unattach_validate(request) sub_id, res = super().unattach_validate(request)
if res: if res:
return res return res

View File

@@ -14,7 +14,6 @@ from rest_framework.permissions import AllowAny
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.exceptions import PermissionDenied from rest_framework.exceptions import PermissionDenied
# AWX # AWX
# from awx.main.analytics import collectors # from awx.main.analytics import collectors
import awx.main.analytics.subsystem_metrics as s_metrics import awx.main.analytics.subsystem_metrics as s_metrics
@@ -23,7 +22,6 @@ from awx.api import renderers
from awx.api.generics import APIView from awx.api.generics import APIView
logger = logging.getLogger('awx.analytics') logger = logging.getLogger('awx.analytics')

View File

@@ -5,7 +5,6 @@ from django.urls import re_path
from awx.conf.views import SettingCategoryList, SettingSingletonDetail, SettingLoggingTest from awx.conf.views import SettingCategoryList, SettingSingletonDetail, SettingLoggingTest
urlpatterns = [ urlpatterns = [
re_path(r'^$', SettingCategoryList.as_view(), name='setting_category_list'), re_path(r'^$', SettingCategoryList.as_view(), name='setting_category_list'),
re_path(r'^(?P<category_slug>[a-z0-9-]+)/$', SettingSingletonDetail.as_view(), name='setting_singleton_detail'), re_path(r'^(?P<category_slug>[a-z0-9-]+)/$', SettingSingletonDetail.as_view(), name='setting_singleton_detail'),

View File

@@ -32,7 +32,6 @@ from awx.conf.serializers import SettingCategorySerializer, SettingSingletonSeri
from awx.conf import settings_registry from awx.conf import settings_registry
from awx.main.utils.external_logging import reconfigure_rsyslog from awx.main.utils.external_logging import reconfigure_rsyslog
SettingCategory = collections.namedtuple('SettingCategory', ('url', 'slug', 'name')) SettingCategory = collections.namedtuple('SettingCategory', ('url', 'slug', 'name'))

View File

@@ -15,7 +15,6 @@ from prometheus_client import (
from django.conf import settings from django.conf import settings
from awx.main.utils.redis import get_redis_client, get_redis_client_async from awx.main.utils.redis import get_redis_client, get_redis_client_async
BROADCAST_WEBSOCKET_REDIS_KEY_NAME = 'broadcast_websocket_stats' BROADCAST_WEBSOCKET_REDIS_KEY_NAME = 'broadcast_websocket_stats'

View File

@@ -487,9 +487,7 @@ def unified_jobs_table(since, full_path, until, **kwargs):
OR (main_unifiedjob.finished > '{0}' AND main_unifiedjob.finished <= '{1}')) OR (main_unifiedjob.finished > '{0}' AND main_unifiedjob.finished <= '{1}'))
AND main_unifiedjob.launch_type != 'sync' AND main_unifiedjob.launch_type != 'sync'
ORDER BY main_unifiedjob.id ASC) TO STDOUT WITH CSV HEADER ORDER BY main_unifiedjob.id ASC) TO STDOUT WITH CSV HEADER
'''.format( '''.format(since.isoformat(), until.isoformat())
since.isoformat(), until.isoformat()
)
return _copy_table(table='unified_jobs', query=unified_job_query, path=full_path) return _copy_table(table='unified_jobs', query=unified_job_query, path=full_path)
@@ -550,9 +548,7 @@ def workflow_job_node_table(since, full_path, until, **kwargs):
) always_nodes ON main_workflowjobnode.id = always_nodes.from_workflowjobnode_id ) always_nodes ON main_workflowjobnode.id = always_nodes.from_workflowjobnode_id
WHERE (main_workflowjobnode.modified > '{}' AND main_workflowjobnode.modified <= '{}') WHERE (main_workflowjobnode.modified > '{}' AND main_workflowjobnode.modified <= '{}')
ORDER BY main_workflowjobnode.id ASC) TO STDOUT WITH CSV HEADER ORDER BY main_workflowjobnode.id ASC) TO STDOUT WITH CSV HEADER
'''.format( '''.format(since.isoformat(), until.isoformat())
since.isoformat(), until.isoformat()
)
return _copy_table(table='workflow_job_node', query=workflow_job_node_query, path=full_path) return _copy_table(table='workflow_job_node', query=workflow_job_node_query, path=full_path)

View File

@@ -41,10 +41,10 @@ class WebsocketSecretAuthHelper:
@classmethod @classmethod
def verify_secret(cls, s, nonce_tolerance=300): def verify_secret(cls, s, nonce_tolerance=300):
try: try:
(prefix, payload) = s.split(' ') prefix, payload = s.split(' ')
if prefix != 'HMAC-SHA256': if prefix != 'HMAC-SHA256':
raise ValueError('Unsupported encryption algorithm') raise ValueError('Unsupported encryption algorithm')
(nonce_parsed, secret_parsed) = payload.split(':') nonce_parsed, secret_parsed = payload.split(':')
except Exception: except Exception:
raise ValueError("Failed to parse secret") raise ValueError("Failed to parse secret")
@@ -106,7 +106,7 @@ class RelayConsumer(AsyncJsonWebsocketConsumer):
await self.send(event['text']) await self.send(event['text'])
async def receive_json(self, data): async def receive_json(self, data):
(group, message) = unwrap_broadcast_msg(data) group, message = unwrap_broadcast_msg(data)
if group == "metrics": if group == "metrics":
message = json.loads(message['text']) message = json.loads(message['text'])
await self._redis_conn.set( await self._redis_conn.set(

View File

@@ -10,7 +10,6 @@ from awx import prepare_env
from dispatcherd.utils import resolve_callable from dispatcherd.utils import resolve_callable
prepare_env() prepare_env()
django.setup() # noqa django.setup() # noqa
@@ -18,7 +17,6 @@ django.setup() # noqa
from django.conf import settings from django.conf import settings
# Preload all periodic tasks so their imports will be in shared memory # Preload all periodic tasks so their imports will be in shared memory
for name, options in settings.CELERYBEAT_SCHEDULE.items(): for name, options in settings.CELERYBEAT_SCHEDULE.items():
resolve_callable(options['task']) resolve_callable(options['task'])
@@ -31,6 +29,5 @@ from awx.main.scheduler.kubernetes import PodManager # noqa
from django.core.cache import cache as django_cache from django.core.cache import cache as django_cache
from django.db import connection from django.db import connection
connection.close() connection.close()
django_cache.close() django_cache.close()

View File

@@ -3,7 +3,6 @@ import time
import yaml import yaml
from datetime import datetime from datetime import datetime
logger = logging.getLogger('awx.main.dispatch.periodic') logger = logging.getLogger('awx.main.dispatch.periodic')

View File

@@ -40,7 +40,6 @@ from awx.main.validators import validate_ssh_private_key
from awx.main.constants import ENV_BLOCKLIST from awx.main.constants import ENV_BLOCKLIST
from awx.main import utils from awx.main import utils
__all__ = [ __all__ = [
'JSONBlob', 'JSONBlob',
'AutoOneToOneField', 'AutoOneToOneField',

View File

@@ -23,8 +23,7 @@ class Command(BaseCommand):
print('## ' + JobTemplate.objects.get(pk=jt).name + f' (last {history} runs)\n') print('## ' + JobTemplate.objects.get(pk=jt).name + f' (last {history} runs)\n')
with connection.cursor() as cursor: with connection.cursor() as cursor:
cursor.execute( cursor.execute(f'''
f'''
SELECT SELECT
b.id, b.job_id, b.host_name, b.created - a.created delta, b.id, b.job_id, b.host_name, b.created - a.created delta,
b.task task, b.task task,
@@ -44,8 +43,7 @@ class Command(BaseCommand):
LIMIT {history} LIMIT {history}
) )
ORDER BY delta DESC; ORDER BY delta DESC;
''' ''')
)
slowest_events = cursor.fetchall() slowest_events = cursor.fetchall()
def format_td(x): def format_td(x):

View File

@@ -5,7 +5,6 @@
import datetime import datetime
import logging import logging
# Django # Django
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.utils.timezone import now from django.utils.timezone import now

View File

@@ -6,7 +6,6 @@ import datetime
import logging import logging
import re import re
# Django # Django
from django.apps import apps from django.apps import apps
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError

View File

@@ -35,7 +35,7 @@ class Command(BaseCommand):
from awx.main.management.commands.register_queue import RegisterQueue from awx.main.management.commands.register_queue import RegisterQueue
(changed, instance) = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', node_uuid=settings.SYSTEM_UUID) changed, instance = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', node_uuid=settings.SYSTEM_UUID)
RegisterQueue(settings.DEFAULT_CONTROL_PLANE_QUEUE_NAME, 100, 0, [], is_container_group=False).register() RegisterQueue(settings.DEFAULT_CONTROL_PLANE_QUEUE_NAME, 100, 0, [], is_container_group=False).register()
RegisterQueue( RegisterQueue(
settings.DEFAULT_EXECUTION_QUEUE_NAME, settings.DEFAULT_EXECUTION_QUEUE_NAME,
@@ -48,7 +48,7 @@ class Command(BaseCommand):
max_concurrent_jobs=settings.DEFAULT_EXECUTION_QUEUE_MAX_CONCURRENT_JOBS, max_concurrent_jobs=settings.DEFAULT_EXECUTION_QUEUE_MAX_CONCURRENT_JOBS,
).register() ).register()
else: else:
(changed, instance) = Instance.objects.register(hostname=hostname, node_type=node_type, node_uuid=uuid) changed, instance = Instance.objects.register(hostname=hostname, node_type=node_type, node_uuid=uuid)
if changed: if changed:
print("Successfully registered instance {}".format(hostname)) print("Successfully registered instance {}".format(hostname))
else: else:

View File

@@ -34,7 +34,7 @@ class RegisterQueue:
def get_create_update_instance_group(self): def get_create_update_instance_group(self):
created = False created = False
changed = False changed = False
(ig, created) = InstanceGroup.objects.get_or_create(name=self.queuename) ig, created = InstanceGroup.objects.get_or_create(name=self.queuename)
if ig.policy_instance_percentage != self.instance_percent: if ig.policy_instance_percentage != self.instance_percent:
ig.policy_instance_percentage = self.instance_percent ig.policy_instance_percentage = self.instance_percent
changed = True changed = True
@@ -91,14 +91,14 @@ class RegisterQueue:
with advisory_lock('cluster_policy_lock'): with advisory_lock('cluster_policy_lock'):
with transaction.atomic(): with transaction.atomic():
changed2 = False changed2 = False
(ig, created, changed1) = self.get_create_update_instance_group() ig, created, changed1 = self.get_create_update_instance_group()
if created: if created:
print("Creating instance group {}".format(ig.name)) print("Creating instance group {}".format(ig.name))
elif not created: elif not created:
print("Instance Group already registered {}".format(ig.name)) print("Instance Group already registered {}".format(ig.name))
try: try:
(instances, changed2) = self.add_instances_to_group(ig) instances, changed2 = self.add_instances_to_group(ig)
for i in instances: for i in instances:
print("Added instance {} to {}".format(i.hostname, ig.name)) print("Added instance {} to {}".format(i.hostname, ig.name))
except InstanceNotFound as e: except InstanceNotFound as e:

View File

@@ -19,7 +19,6 @@ from awx.main.analytics.broadcast_websocket import (
from awx.main.analytics.subsystem_metrics import WebsocketsMetricsServer from awx.main.analytics.subsystem_metrics import WebsocketsMetricsServer
from awx.main.wsrelay import WebSocketRelayManager from awx.main.wsrelay import WebSocketRelayManager
logger = logging.getLogger('awx.main.wsrelay') logger = logging.getLogger('awx.main.wsrelay')

View File

@@ -22,7 +22,6 @@ from awx.main.utils.common import memoize
from awx.urls import get_urlpatterns from awx.urls import get_urlpatterns
from awx.main.utils.named_url_graph import reset_counters from awx.main.utils.named_url_graph import reset_counters
logger = logging.getLogger('awx.main.middleware') logger = logging.getLogger('awx.main.middleware')
perf_logger = logging.getLogger('awx.analytics.performance') perf_logger = logging.getLogger('awx.analytics.performance')

View File

@@ -8,7 +8,6 @@ from django.db import migrations
from awx.main.migrations._inventory_source import set_new_instance_id, back_out_new_instance_id from awx.main.migrations._inventory_source import set_new_instance_id, back_out_new_instance_id
logger = logging.getLogger('awx.main.migrations') logger = logging.getLogger('awx.main.migrations')

View File

@@ -4,7 +4,6 @@ from django.db import migrations, models
import uuid import uuid
import logging import logging
logger = logging.getLogger('awx.main.migrations') logger = logging.getLogger('awx.main.migrations')

View File

@@ -9,7 +9,6 @@ from awx.main.models.base import VarsDictProperty
from ._inventory_source_vars import FrozenInjectors from ._inventory_source_vars import FrozenInjectors
logger = logging.getLogger('awx.main.migrations') logger = logging.getLogger('awx.main.migrations')

View File

@@ -5,7 +5,6 @@ from django.db import migrations, models
from awx.main.models.credential import ManagedCredentialType, CredentialType as ModernCredentialType from awx.main.models.credential import ManagedCredentialType, CredentialType as ModernCredentialType
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -6,7 +6,6 @@ from django.db import migrations, models
from awx.main.migrations._db_constraints import _rename_duplicates from awx.main.migrations._db_constraints import _rename_duplicates
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -1,6 +1,5 @@
import logging import logging
logger = logging.getLogger('awx.main.migrations') logger = logging.getLogger('awx.main.migrations')

View File

@@ -13,7 +13,6 @@ from awx.main.constants import role_name_to_perm_mapping
from ansible_base.rbac.permission_registry import permission_registry from ansible_base.rbac.permission_registry import permission_registry
logger = logging.getLogger('awx.main.migrations._dab_rbac') logger = logging.getLogger('awx.main.migrations._dab_rbac')

View File

@@ -2,7 +2,6 @@ import logging
from django.db.models import Count from django.db.models import Count
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -5,7 +5,6 @@ import logging
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.utils.encoding import iri_to_uri from django.utils.encoding import iri_to_uri
FrozenInjectors = dict() FrozenInjectors = dict()
logger = logging.getLogger('awx.main.migrations') logger = logging.getLogger('awx.main.migrations')

View File

@@ -1,6 +1,5 @@
import logging import logging
logger = logging.getLogger('awx.main.migrations') logger = logging.getLogger('awx.main.migrations')

View File

@@ -1,6 +1,5 @@
import logging import logging
logger = logging.getLogger('awx.main.migrations') logger = logging.getLogger('awx.main.migrations')

View File

@@ -95,12 +95,10 @@ from awx.main.models.workflow import ( # noqa
WorkflowApprovalTemplate, WorkflowApprovalTemplate,
) )
# Add custom methods to User model for permissions checks. # Add custom methods to User model for permissions checks.
from django.contrib.auth.models import User # noqa from django.contrib.auth.models import User # noqa
from awx.main.access import get_user_queryset, check_user_access, check_user_access_with_errors # noqa from awx.main.access import get_user_queryset, check_user_access, check_user_access_with_errors # noqa
User.add_to_class('get_queryset', get_user_queryset) User.add_to_class('get_queryset', get_user_queryset)
User.add_to_class('can_access', check_user_access) User.add_to_class('can_access', check_user_access)
User.add_to_class('can_access_with_errors', check_user_access_with_errors) User.add_to_class('can_access_with_errors', check_user_access_with_errors)

View File

@@ -9,7 +9,6 @@ from importlib.metadata import entry_points
import re import re
from types import SimpleNamespace from types import SimpleNamespace
# Django # Django
from django.apps.config import AppConfig from django.apps.config import AppConfig
from django.apps.registry import Apps from django.apps.registry import Apps
@@ -22,7 +21,6 @@ from django.utils.functional import cached_property
from django.utils.timezone import now from django.utils.timezone import now
from django.contrib.auth.models import User from django.contrib.auth.models import User
# DRF # DRF
from rest_framework.serializers import ValidationError as DRFValidationError from rest_framework.serializers import ValidationError as DRFValidationError
@@ -50,12 +48,10 @@ from awx.main.models import Team, Organization
from awx.main.utils import encrypt_field from awx.main.utils import encrypt_field
from awx_plugins.interfaces._temporary_private_licensing_api import detect_server_product_name from awx_plugins.interfaces._temporary_private_licensing_api import detect_server_product_name
# DAB # DAB
from ansible_base.resource_registry.tasks.sync import get_resource_server_client from ansible_base.resource_registry.tasks.sync import get_resource_server_client
from ansible_base.resource_registry.utils.settings import resource_server_defined from ansible_base.resource_registry.utils.settings import resource_server_defined
__all__ = ['Credential', 'CredentialType', 'CredentialInputSource', 'build_safe_env'] __all__ = ['Credential', 'CredentialType', 'CredentialInputSource', 'build_safe_env']
logger = logging.getLogger('awx.main.models.credential') logger = logging.getLogger('awx.main.models.credential')

View File

@@ -7,7 +7,6 @@ from awx.api.versioning import reverse
from awx.main.models.base import CommonModel from awx.main.models.base import CommonModel
from awx.main.validators import validate_container_image_name from awx.main.validators import validate_container_image_name
__all__ = ['ExecutionEnvironment'] __all__ = ['ExecutionEnvironment']

View File

@@ -53,7 +53,6 @@ from awx.main.utils import _inventory_updates
from awx.main.utils.safe_yaml import sanitize_jinja from awx.main.utils.safe_yaml import sanitize_jinja
from awx.main.utils.execution_environments import get_control_plane_execution_environment from awx.main.utils.execution_environments import get_control_plane_execution_environment
__all__ = ['Inventory', 'Host', 'Group', 'InventorySource', 'InventoryUpdate', 'SmartInventoryMembership', 'HostMetric', 'HostMetricSummaryMonthly'] __all__ = ['Inventory', 'Host', 'Group', 'InventorySource', 'InventoryUpdate', 'SmartInventoryMembership', 'HostMetric', 'HostMetricSummaryMonthly']
logger = logging.getLogger('awx.main.models.inventory') logger = logging.getLogger('awx.main.models.inventory')

View File

@@ -6,7 +6,6 @@ import logging
import time import time
from urllib.parse import urljoin from urllib.parse import urljoin
# Django # Django
from django.conf import settings from django.conf import settings
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
@@ -55,7 +54,6 @@ from awx.main.models.mixins import (
) )
from awx.main.constants import JOB_VARIABLE_PREFIXES from awx.main.constants import JOB_VARIABLE_PREFIXES
logger = logging.getLogger('awx.main.models.jobs') logger = logging.getLogger('awx.main.models.jobs')
__all__ = ['JobTemplate', 'JobLaunchConfig', 'Job', 'JobHostSummary', 'SystemJobTemplate', 'SystemJob'] __all__ = ['JobTemplate', 'JobLaunchConfig', 'Job', 'JobHostSummary', 'SystemJobTemplate', 'SystemJob']

View File

@@ -28,7 +28,6 @@ from awx.main.utils.polymorphic import build_polymorphic_ctypes_map
from awx.main.fields import AskForField from awx.main.fields import AskForField
from awx.main.constants import ACTIVE_STATES, org_role_to_permission from awx.main.constants import ACTIVE_STATES, org_role_to_permission
logger = logging.getLogger('awx.main.models.mixins') logger = logging.getLogger('awx.main.models.mixins')

View File

@@ -33,7 +33,6 @@ from awx.main.notifications.rocketchat_backend import RocketChatBackend
from awx.main.notifications.irc_backend import IrcBackend from awx.main.notifications.irc_backend import IrcBackend
from awx.main.notifications.awssns_backend import AWSSNSBackend from awx.main.notifications.awssns_backend import AWSSNSBackend
logger = logging.getLogger('awx.main.models.notifications') logger = logging.getLogger('awx.main.models.notifications')
__all__ = ['NotificationTemplate', 'Notification'] __all__ = ['NotificationTemplate', 'Notification']
@@ -528,7 +527,7 @@ class JobNotificationMixin(object):
return return
for nt in set(notification_templates.get(self.STATUS_TO_TEMPLATE_TYPE[status], [])): for nt in set(notification_templates.get(self.STATUS_TO_TEMPLATE_TYPE[status], [])):
(msg, body) = self.build_notification_message(nt, status) msg, body = self.build_notification_message(nt, status)
# Use kwargs to force late-binding # Use kwargs to force late-binding
# https://stackoverflow.com/a/3431699/10669572 # https://stackoverflow.com/a/3431699/10669572

View File

@@ -17,7 +17,6 @@ from django.utils.text import slugify
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.utils.timezone import now, make_aware, get_default_timezone from django.utils.timezone import now, make_aware, get_default_timezone
# AWX # AWX
from awx.api.versioning import reverse from awx.api.versioning import reverse
from awx.main.models.base import PROJECT_UPDATE_JOB_TYPE_CHOICES, PERM_INVENTORY_DEPLOY from awx.main.models.base import PROJECT_UPDATE_JOB_TYPE_CHOICES, PERM_INVENTORY_DEPLOY

View File

@@ -365,8 +365,7 @@ class Role(models.Model):
if len(removals) > 0: if len(removals) > 0:
for ids in split_ids_for_sqlite(removals): for ids in split_ids_for_sqlite(removals):
sql_params['ids'] = ','.join(str(x) for x in ids) sql_params['ids'] = ','.join(str(x) for x in ids)
cursor.execute( cursor.execute('''
'''
DELETE FROM %(ancestors_table)s DELETE FROM %(ancestors_table)s
WHERE descendent_id IN (%(ids)s) WHERE descendent_id IN (%(ids)s)
AND descendent_id != ancestor_id AND descendent_id != ancestor_id
@@ -378,9 +377,7 @@ class Role(models.Model):
WHERE parents.from_role_id = %(ancestors_table)s.descendent_id WHERE parents.from_role_id = %(ancestors_table)s.descendent_id
AND %(ancestors_table)s.ancestor_id = inner_ancestors.ancestor_id AND %(ancestors_table)s.ancestor_id = inner_ancestors.ancestor_id
) )
''' ''' % sql_params)
% sql_params
)
delete_ct += cursor.rowcount delete_ct += cursor.rowcount
@@ -388,8 +385,7 @@ class Role(models.Model):
if len(additions) > 0: if len(additions) > 0:
for ids in split_ids_for_sqlite(additions): for ids in split_ids_for_sqlite(additions):
sql_params['ids'] = ','.join(str(x) for x in ids) sql_params['ids'] = ','.join(str(x) for x in ids)
cursor.execute( cursor.execute('''
'''
INSERT INTO %(ancestors_table)s (descendent_id, ancestor_id, role_field, content_type_id, object_id) INSERT INTO %(ancestors_table)s (descendent_id, ancestor_id, role_field, content_type_id, object_id)
SELECT from_id, to_id, new_ancestry_list.role_field, new_ancestry_list.content_type_id, new_ancestry_list.object_id FROM ( SELECT from_id, to_id, new_ancestry_list.role_field, new_ancestry_list.content_type_id, new_ancestry_list.object_id FROM (
SELECT roles.id from_id, SELECT roles.id from_id,
@@ -419,9 +415,7 @@ class Role(models.Model):
AND %(ancestors_table)s.ancestor_id = new_ancestry_list.to_id AND %(ancestors_table)s.ancestor_id = new_ancestry_list.to_id
) )
''' ''' % sql_params)
% sql_params
)
insert_ct += cursor.rowcount insert_ct += cursor.rowcount
if insert_ct == 0 and delete_ct == 0: if insert_ct == 0 and delete_ct == 0:

View File

@@ -24,7 +24,6 @@ from awx.main.models.jobs import LaunchTimeConfig
from awx.main.utils import ignore_inventory_computed_fields from awx.main.utils import ignore_inventory_computed_fields
from awx.main.consumers import emit_channel_notification from awx.main.consumers import emit_channel_notification
logger = logging.getLogger('awx.main.models.schedule') logger = logging.getLogger('awx.main.models.schedule')
__all__ = ['Schedule'] __all__ = ['Schedule']

View File

@@ -45,7 +45,6 @@ from awx.main.models.credential import Credential
from awx.main.redact import REPLACE_STR from awx.main.redact import REPLACE_STR
from awx.main.utils import ScheduleWorkflowManager from awx.main.utils import ScheduleWorkflowManager
__all__ = [ __all__ = [
'WorkflowJobTemplate', 'WorkflowJobTemplate',
'WorkflowJob', 'WorkflowJob',
@@ -939,7 +938,7 @@ class WorkflowApproval(UnifiedJob, JobNotificationMixin):
return return
for nt in self.workflow_job_template.notification_templates["approvals"]: for nt in self.workflow_job_template.notification_templates["approvals"]:
try: try:
(notification_subject, notification_body) = self.build_approval_notification_message(nt, approval_status) notification_subject, notification_body = self.build_approval_notification_message(nt, approval_status)
except Exception: except Exception:
raise NotImplementedError("build_approval_notification_message() does not exist") raise NotImplementedError("build_approval_notification_message() does not exist")

View File

@@ -25,7 +25,7 @@ class UriCleaner(object):
if o.netloc and ":" in o.netloc: if o.netloc and ":" in o.netloc:
# Handle the special case url http://username:password that can appear in SCM url # Handle the special case url http://username:password that can appear in SCM url
# on account of a bug? in ansible redaction # on account of a bug? in ansible redaction
(username, password) = o.netloc.split(':') username, password = o.netloc.split(':')
else: else:
text_index += len(match.group(1)) text_index += len(match.group(1))
continue continue

View File

@@ -11,7 +11,6 @@ from ansible_base.lib.channels.middleware import DrfAuthMiddlewareStack
from awx.main.utils.redis import get_redis_client from awx.main.utils.redis import get_redis_client
from . import consumers from . import consumers
logger = logging.getLogger('awx.main.routing') logger = logging.getLogger('awx.main.routing')
_application = None _application = None

View File

@@ -9,7 +9,6 @@ from awx.main.models import (
import logging import logging
logger = logging.getLogger('awx.main.scheduler.dependency_graph') logger = logging.getLogger('awx.main.scheduler.dependency_graph')

View File

@@ -55,7 +55,6 @@ from awx.main.tasks.jobs import dispatch_waiting_jobs
import awx.main.analytics.subsystem_metrics as s_metrics import awx.main.analytics.subsystem_metrics as s_metrics
from awx.main.utils import decrypt_field from awx.main.utils import decrypt_field
logger = logging.getLogger('awx.main.scheduler') logger = logging.getLogger('awx.main.scheduler')
@@ -498,7 +497,7 @@ class TaskManager(TaskBase):
task.status = 'waiting' task.status = 'waiting'
(start_status, opts) = task.pre_start() start_status, opts = task.pre_start()
if not start_status: if not start_status:
task.status = 'failed' task.status = 'failed'
if task.job_explanation: if task.job_explanation:

View File

@@ -27,7 +27,6 @@ from django.utils import timezone
from crum import get_current_request, get_current_user from crum import get_current_request, get_current_user
from crum.signals import current_user_getter from crum.signals import current_user_getter
# AWX # AWX
from awx.main.models import ( from awx.main.models import (
ActivityStream, ActivityStream,

View File

@@ -16,7 +16,6 @@ from ansible_base.lib.logging.runtime import log_excess_runtime
from awx.main.utils.db import bulk_update_sorted_by_id from awx.main.utils.db import bulk_update_sorted_by_id
from awx.main.models import Host from awx.main.models import Host
logger = logging.getLogger('awx.main.tasks.facts') logger = logging.getLogger('awx.main.tasks.facts')
system_tracking_logger = logging.getLogger('awx.analytics.system_tracking') system_tracking_logger = logging.getLogger('awx.analytics.system_tracking')

View File

@@ -14,7 +14,6 @@ from awx.conf.license import get_license
from ansible_base.lib.utils.db import advisory_lock from ansible_base.lib.utils.db import advisory_lock
from awx.main.utils.db import bulk_update_sorted_by_id from awx.main.utils.db import bulk_update_sorted_by_id
logger = logging.getLogger('awx.main.tasks.host_metrics') logger = logging.getLogger('awx.main.tasks.host_metrics')

View File

@@ -17,7 +17,6 @@ from rest_framework import fields
from awx.main import models from awx.main import models
from awx.main.exceptions import PolicyEvaluationError from awx.main.exceptions import PolicyEvaluationError
# Monkey patching opa_client.base.BaseClient to fix retries and timeout settings # Monkey patching opa_client.base.BaseClient to fix retries and timeout settings
_original_opa_base_client_init = BaseClient.__init__ _original_opa_base_client_init = BaseClient.__init__

View File

@@ -2,7 +2,6 @@ import signal
import functools import functools
import logging import logging
logger = logging.getLogger('awx.main.tasks.signals') logger = logging.getLogger('awx.main.tasks.signals')

View File

@@ -776,7 +776,7 @@ def _heartbeat_instance_management():
logger.warning(f'Heartbeat skew - interval={(nowtime - last_last_seen).total_seconds():.4f}, expected={settings.CLUSTER_NODE_HEARTBEAT_PERIOD}') logger.warning(f'Heartbeat skew - interval={(nowtime - last_last_seen).total_seconds():.4f}, expected={settings.CLUSTER_NODE_HEARTBEAT_PERIOD}')
else: else:
if settings.AWX_AUTO_DEPROVISION_INSTANCES: if settings.AWX_AUTO_DEPROVISION_INSTANCES:
(changed, this_inst) = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', node_uuid=settings.SYSTEM_UUID) changed, this_inst = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', node_uuid=settings.SYSTEM_UUID)
if changed: if changed:
logger.warning(f'Recreated instance record {this_inst.hostname} after unexpected removal') logger.warning(f'Recreated instance record {this_inst.hostname} after unexpected removal')
this_inst.local_health_check() this_inst.local_health_check()
@@ -958,10 +958,8 @@ def awx_periodic_scheduler():
continue continue
if not can_start: if not can_start:
new_unified_job.status = 'failed' new_unified_job.status = 'failed'
new_unified_job.job_explanation = gettext_noop( new_unified_job.job_explanation = gettext_noop("Scheduled job could not start because it \
"Scheduled job could not start because it \ was not in the right state or required manual credentials")
was not in the right state or required manual credentials"
)
new_unified_job.save(update_fields=['status', 'job_explanation']) new_unified_job.save(update_fields=['status', 'job_explanation'])
new_unified_job.websocket_emit_status("failed") new_unified_job.websocket_emit_status("failed")
emit_channel_notification('schedules-changed', dict(id=schedule.id, group_name="schedules")) emit_channel_notification('schedules-changed', dict(id=schedule.id, group_name="schedules"))

View File

@@ -10,7 +10,6 @@ from awx.main.dispatch.publish import task as old_task
from ansible_base.lib.utils.db import advisory_lock from ansible_base.lib.utils.db import advisory_lock
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -59,8 +59,7 @@ def app_post_migration(sender, app_config, **kwargs):
elif tblname == 'main_systemjobevent': elif tblname == 'main_systemjobevent':
unique_columns = "system_job_id integer NOT NULL" unique_columns = "system_job_id integer NOT NULL"
cur.execute( cur.execute(f"""CREATE TABLE _unpartitioned_{tblname} (
f"""CREATE TABLE _unpartitioned_{tblname} (
id bigint NOT NULL, id bigint NOT NULL,
created timestamp with time zone NOT NULL, created timestamp with time zone NOT NULL,
modified timestamp with time zone NOT NULL, modified timestamp with time zone NOT NULL,
@@ -72,8 +71,7 @@ def app_post_migration(sender, app_config, **kwargs):
uuid character varying(1024) NOT NULL, uuid character varying(1024) NOT NULL,
verbosity integer NOT NULL, verbosity integer NOT NULL,
{unique_columns}); {unique_columns});
""" """)
)
if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3': if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3':

View File

@@ -66,7 +66,7 @@ def test_database_counts(organization_factory, job_template_factory, workflow_jo
@pytest.mark.django_db @pytest.mark.django_db
def test_inventory_counts(organization_factory, inventory_factory): def test_inventory_counts(organization_factory, inventory_factory):
(inv1, inv2, inv3) = [inventory_factory(f"inv-{i}") for i in range(3)] inv1, inv2, inv3 = [inventory_factory(f"inv-{i}") for i in range(3)]
s1 = inv1.inventory_sources.create(name="src1", source="ec2") s1 = inv1.inventory_sources.create(name="src1", source="ec2")
s2 = inv1.inventory_sources.create(name="src2", source="file") s2 = inv1.inventory_sources.create(name="src2", source="file")

View File

@@ -3,7 +3,6 @@ import pytest
from awx.api.versioning import reverse from awx.api.versioning import reverse
""" """
def run_test_ad_hoc_command(self, **kwargs): def run_test_ad_hoc_command(self, **kwargs):
# Post to list to start a new ad hoc command. # Post to list to start a new ad hoc command.

View File

@@ -11,7 +11,6 @@ from django.http import HttpResponse
from rest_framework import status from rest_framework import status
INSTANCE_KWARGS = dict(hostname='example-host', cpu=6, node_type='execution', memory=36000000000, cpu_capacity=6, mem_capacity=42) INSTANCE_KWARGS = dict(hostname='example-host', cpu=6, node_type='execution', memory=36000000000, cpu_capacity=6, mem_capacity=42)

View File

@@ -8,7 +8,6 @@ from awx.api.versioning import reverse
from awx.main.models import JobTemplate, Schedule from awx.main.models import JobTemplate, Schedule
from awx.main.utils.encryption import decrypt_value, get_encryption_key from awx.main.utils.encryption import decrypt_value, get_encryption_key
RRULE_EXAMPLE = 'DTSTART:20151117T050000Z RRULE:FREQ=DAILY;INTERVAL=1;COUNT=1' RRULE_EXAMPLE = 'DTSTART:20151117T050000Z RRULE:FREQ=DAILY;INTERVAL=1;COUNT=1'

View File

@@ -7,7 +7,6 @@ from awx.main.models import UnifiedJob, ProjectUpdate, InventoryUpdate
from awx.main.tests.URI import URI from awx.main.tests.URI import URI
from awx.main.constants import ACTIVE_STATES from awx.main.constants import ACTIVE_STATES
TEST_STATES = list(ACTIVE_STATES) TEST_STATES = list(ACTIVE_STATES)
TEST_STATES.remove('new') TEST_STATES.remove('new')

View File

@@ -9,7 +9,6 @@ from django.test.utils import override_settings
from awx.main.models import User from awx.main.models import User
from awx.api.versioning import reverse from awx.api.versioning import reverse
# #
# user creation # user creation
# #

View File

@@ -18,7 +18,6 @@ from awx.main.management.commands import inventory_import
from awx.main.models import Inventory, Host, Group, InventorySource from awx.main.models import Inventory, Host, Group, InventorySource
from awx.main.utils.mem_inventory import MemGroup from awx.main.utils.mem_inventory import MemGroup
TEST_INVENTORY_CONTENT = { TEST_INVENTORY_CONTENT = {
"_meta": {"hostvars": {}}, "_meta": {"hostvars": {}},
"all": {"children": ["others", "servers", "ungrouped"], "vars": {"vara": "A"}}, "all": {"children": ["others", "servers", "ungrouped"], "vars": {"vara": "A"}},

Some files were not shown because too many files have changed in this diff Show More