From 2034eac620d87be298788af5b49f2004313a607d Mon Sep 17 00:00:00 2001 From: Philip Douglass Date: Thu, 1 Dec 2022 15:22:41 -0500 Subject: [PATCH 01/13] Add function to walk the extra_vars and render the results --- awx/main/models/credential/__init__.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/awx/main/models/credential/__init__.py b/awx/main/models/credential/__init__.py index cee657da01..72a49b7d1c 100644 --- a/awx/main/models/credential/__init__.py +++ b/awx/main/models/credential/__init__.py @@ -528,9 +528,13 @@ class CredentialType(CommonModelNameNotUnique): if 'INVENTORY_UPDATE_ID' not in env: # awx-manage inventory_update does not support extra_vars via -e - extra_vars = {} - for var_name, tmpl in self.injectors.get('extra_vars', {}).items(): - extra_vars[var_name] = sandbox_env.from_string(tmpl).render(**namespace) + def build_extra_vars(node): + if isinstance(node, dict): + return {k: build_extra_vars(v) for k, v in node.items()} + elif isinstance(node, list): + return [build_extra_vars(x) for x in node] + else: + return sandbox_env.from_string(node).render(**namespace) def build_extra_vars_file(vars, private_dir): handle, path = tempfile.mkstemp(dir=os.path.join(private_dir, 'env')) @@ -540,6 +544,7 @@ class CredentialType(CommonModelNameNotUnique): os.chmod(path, stat.S_IRUSR) return path + extra_vars = build_extra_vars(self.injectors.get('extra_vars', {})) if extra_vars: path = build_extra_vars_file(extra_vars, private_data_dir) container_path = to_container_path(path, private_data_dir) From d75f12c0010f64e382132a557ddf5bca64de71ea Mon Sep 17 00:00:00 2001 From: Philip Douglass Date: Thu, 1 Dec 2022 15:25:19 -0500 Subject: [PATCH 02/13] Render keys while walking extra_vars in addition to values --- awx/main/models/credential/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/main/models/credential/__init__.py b/awx/main/models/credential/__init__.py index 72a49b7d1c..d4c013ea63 100644 --- a/awx/main/models/credential/__init__.py +++ b/awx/main/models/credential/__init__.py @@ -530,7 +530,7 @@ class CredentialType(CommonModelNameNotUnique): # awx-manage inventory_update does not support extra_vars via -e def build_extra_vars(node): if isinstance(node, dict): - return {k: build_extra_vars(v) for k, v in node.items()} + return {build_extra_vars(k): build_extra_vars(v) for k, v in node.items()} elif isinstance(node, list): return [build_extra_vars(x) for x in node] else: From 128a130b841cce46557dcafe22eb07fac61199e6 Mon Sep 17 00:00:00 2001 From: Philip Douglass Date: Fri, 2 Dec 2022 14:23:28 -0500 Subject: [PATCH 03/13] Update documentation to include subkey injection --- docs/credentials/custom_credential_types.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/credentials/custom_credential_types.md b/docs/credentials/custom_credential_types.md index ed55847803..b1fba43372 100644 --- a/docs/credentials/custom_credential_types.md +++ b/docs/credentials/custom_credential_types.md @@ -172,7 +172,11 @@ of the [Jinja templating language](https://jinja.palletsprojects.com/en/2.10.x/) "THIRD_PARTY_CLOUD_API_TOKEN": "{{api_token}}" }, "extra_vars": { - "some_extra_var": "{{username}}:{{password}" + "some_extra_var": "{{username}}:{{password}}", + "auth": { + "username": "{{username}}", + "password": "{{password}}" + } } } From 27ea239c00cb52d6f17a417d81c3a3be803fc8fb Mon Sep 17 00:00:00 2001 From: Philip Douglass Date: Tue, 6 Dec 2022 10:47:42 -0500 Subject: [PATCH 04/13] Add two tests for nested and templated extra_vars keys --- awx/main/tests/unit/test_tasks.py | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/awx/main/tests/unit/test_tasks.py b/awx/main/tests/unit/test_tasks.py index 9a59e091d1..bfec59b616 100644 --- a/awx/main/tests/unit/test_tasks.py +++ b/awx/main/tests/unit/test_tasks.py @@ -1209,6 +1209,42 @@ class TestJobCredentials(TestJobExecution): assert extra_vars["turbo_button"] == "True" return ['successful', 0] + def test_custom_environment_injectors_with_nested_extra_vars(self, private_data_dir, job, mock_me): + task = jobs.RunJob() + some_cloud = CredentialType( + kind='cloud', + name='SomeCloud', + managed=False, + inputs={'fields': [{'id': 'host', 'label': 'Host', 'type': 'string'}]}, + injectors={'extra_vars': {'auth': {'host': '{{host}}'}}}, + ) + credential = Credential(pk=1, credential_type=some_cloud, inputs={'host': 'example.com'}) + job.credentials.add(credential) + + args = task.build_args(job, private_data_dir, {}) + credential.credential_type.inject_credential(credential, {}, {}, args, private_data_dir) + extra_vars = parse_extra_vars(args, private_data_dir) + + assert extra_vars["auth"]["host"] == "example.com" + + def test_custom_environment_injectors_with_templated_extra_vars_key(self, private_data_dir, job, mock_me): + task = jobs.RunJob() + some_cloud = CredentialType( + kind='cloud', + name='SomeCloud', + managed=False, + inputs={'fields': [{'id': 'environment', 'label': 'Environment', 'type': 'string'}, {'id': 'host', 'label': 'Host', 'type': 'string'}]}, + injectors={'extra_vars': {'{{environment}}_auth': {'host': '{{host}}'}}}, + ) + credential = Credential(pk=1, credential_type=some_cloud, inputs={'environment': 'test', 'host': 'example.com'}) + job.credentials.add(credential) + + args = task.build_args(job, private_data_dir, {}) + credential.credential_type.inject_credential(credential, {}, {}, args, private_data_dir) + extra_vars = parse_extra_vars(args, private_data_dir) + + assert extra_vars["test_auth"]["host"] == "example.com" + def test_custom_environment_injectors_with_complicated_boolean_template(self, job, private_data_dir, mock_me): task = jobs.RunJob() some_cloud = CredentialType( From fcf56950b391d413b8436550b8183bf9f4e193de Mon Sep 17 00:00:00 2001 From: Philip Douglass Date: Wed, 14 Dec 2022 16:28:50 -0500 Subject: [PATCH 05/13] Add recursive properties to injectors jsonschema for extra_vars --- awx/main/fields.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/awx/main/fields.py b/awx/main/fields.py index 3372627f91..d319b40b1f 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -790,13 +790,11 @@ class CredentialTypeInjectorField(JSONSchemaField): 'extra_vars': { 'type': 'object', 'patternProperties': { - # http://docs.ansible.com/ansible/playbooks_variables.html#what-makes-a-valid-variable-name - '^[a-zA-Z_]+[a-zA-Z0-9_]*$': {'type': 'string'}, + r'^(?:(?:{{[^{}]*?}})|(?:[a-zA-Z_]+[a-zA-Z0-9_]*)+)+$': {"anyOf": [{'type': 'string'}, {'$ref': '#/properties/extra_vars'}]} }, 'additionalProperties': False, }, }, - 'additionalProperties': False, } def validate_env_var_allowed(self, env_var): From ad4e257fdb8dafa0bb2b766bd46e3a0a6b037def Mon Sep 17 00:00:00 2001 From: Philip Douglass Date: Thu, 15 Dec 2022 09:46:42 -0500 Subject: [PATCH 06/13] Add functions to support recursive validation for extra_vars --- awx/main/fields.py | 48 ++++++++++++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/awx/main/fields.py b/awx/main/fields.py index d319b40b1f..10f184691f 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -856,27 +856,41 @@ class CredentialTypeInjectorField(JSONSchemaField): template_name = template_name.split('.')[1] setattr(valid_namespace['tower'].filename, template_name, 'EXAMPLE_FILENAME') + def validate_template_string(tmpl): + try: + sandbox.ImmutableSandboxedEnvironment(undefined=StrictUndefined).from_string(tmpl).render(valid_namespace) + except UndefinedError as e: + raise django_exceptions.ValidationError( + _('{sub_key} uses an undefined field ({error_msg})').format(sub_key=key, error_msg=e), + code='invalid', + params={'value': value}, + ) + except SecurityError as e: + raise django_exceptions.ValidationError(_('Encountered unsafe code execution: {}').format(e)) + except TemplateSyntaxError as e: + raise django_exceptions.ValidationError( + _('Syntax error rendering template for {sub_key} inside of {type} ({error_msg})').format(sub_key=key, type=type_, error_msg=e), + code='invalid', + params={'value': value}, + ) + + def validate_extra_vars(node): + if isinstance(node, dict): + return {validate_extra_vars(k): validate_extra_vars(v) for k, v in node.items()} + elif isinstance(node, list): + return [validate_extra_vars(x) for x in node] + else: + validate_template_string(node) + for type_, injector in value.items(): if type_ == 'env': for key in injector.keys(): self.validate_env_var_allowed(key) - for key, tmpl in injector.items(): - try: - sandbox.ImmutableSandboxedEnvironment(undefined=StrictUndefined).from_string(tmpl).render(valid_namespace) - except UndefinedError as e: - raise django_exceptions.ValidationError( - _('{sub_key} uses an undefined field ({error_msg})').format(sub_key=key, error_msg=e), - code='invalid', - params={'value': value}, - ) - except SecurityError as e: - raise django_exceptions.ValidationError(_('Encountered unsafe code execution: {}').format(e)) - except TemplateSyntaxError as e: - raise django_exceptions.ValidationError( - _('Syntax error rendering template for {sub_key} inside of {type} ({error_msg})').format(sub_key=key, type=type_, error_msg=e), - code='invalid', - params={'value': value}, - ) + if type_ == 'extra_vars': + validate_extra_vars(injector) + else: + for key, tmpl in injector.items(): + validate_template_string(tmpl) class AskForField(models.BooleanField): From 51e244e18360fd65988f1bb60811e75ca4450c72 Mon Sep 17 00:00:00 2001 From: Philip Douglass Date: Thu, 15 Dec 2022 11:44:14 -0500 Subject: [PATCH 07/13] Expand pattern to support use of Jinja2 block delimiters --- awx/main/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/main/fields.py b/awx/main/fields.py index 10f184691f..2bc1e9e3bd 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -790,7 +790,7 @@ class CredentialTypeInjectorField(JSONSchemaField): 'extra_vars': { 'type': 'object', 'patternProperties': { - r'^(?:(?:{{[^{}]*?}})|(?:[a-zA-Z_]+[a-zA-Z0-9_]*)+)+$': {"anyOf": [{'type': 'string'}, {'$ref': '#/properties/extra_vars'}]} + r'^(?:(?:{(?:{|%)[^{}]*?(?:%|})})|(?:[a-zA-Z_]+[a-zA-Z0-9_]*)+)+$': {"anyOf": [{'type': 'string'}, {'$ref': '#/properties/extra_vars'}]} }, 'additionalProperties': False, }, From ae92f8292fe30605131a317b2244a7d990fb27a8 Mon Sep 17 00:00:00 2001 From: Philip Douglass Date: Fri, 16 Dec 2022 11:08:26 -0500 Subject: [PATCH 08/13] Account for validation context --- awx/main/fields.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/awx/main/fields.py b/awx/main/fields.py index 2bc1e9e3bd..77cebb0203 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -856,7 +856,7 @@ class CredentialTypeInjectorField(JSONSchemaField): template_name = template_name.split('.')[1] setattr(valid_namespace['tower'].filename, template_name, 'EXAMPLE_FILENAME') - def validate_template_string(tmpl): + def validate_template_string(type_, key, tmpl): try: sandbox.ImmutableSandboxedEnvironment(undefined=StrictUndefined).from_string(tmpl).render(valid_namespace) except UndefinedError as e: @@ -874,23 +874,23 @@ class CredentialTypeInjectorField(JSONSchemaField): params={'value': value}, ) - def validate_extra_vars(node): + def validate_extra_vars(key, node): if isinstance(node, dict): - return {validate_extra_vars(k): validate_extra_vars(v) for k, v in node.items()} + return {validate_extra_vars(key, k): validate_extra_vars(k, v) for k, v in node.items()} elif isinstance(node, list): - return [validate_extra_vars(x) for x in node] + return [validate_extra_vars(key, x) for x in node] else: - validate_template_string(node) + validate_template_string("extra_vars", key, node) for type_, injector in value.items(): if type_ == 'env': for key in injector.keys(): self.validate_env_var_allowed(key) if type_ == 'extra_vars': - validate_extra_vars(injector) + validate_extra_vars(None, injector) else: for key, tmpl in injector.items(): - validate_template_string(tmpl) + validate_template_string(type_, key, tmpl) class AskForField(models.BooleanField): From 7f6f57bfeed44e09f9354fe27cedee48c6d6aa45 Mon Sep 17 00:00:00 2001 From: Philip Douglass Date: Mon, 9 Jan 2023 14:58:20 -0500 Subject: [PATCH 09/13] Maintain nested context for validation error messages --- awx/main/fields.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/awx/main/fields.py b/awx/main/fields.py index 77cebb0203..85fd560c10 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -790,7 +790,9 @@ class CredentialTypeInjectorField(JSONSchemaField): 'extra_vars': { 'type': 'object', 'patternProperties': { - r'^(?:(?:{(?:{|%)[^{}]*?(?:%|})})|(?:[a-zA-Z_]+[a-zA-Z0-9_]*)+)+$': {"anyOf": [{'type': 'string'}, {'$ref': '#/properties/extra_vars'}]} + r'^(?:(?:{(?:{|%)[^{}]*?(?:%|})})|(?:[a-zA-Z_]+[a-zA-Z0-9_]*)+)+$': { + "anyOf": [{'type': 'string'}, {'type': 'array'}, {'$ref': '#/properties/extra_vars'}] + } }, 'additionalProperties': False, }, @@ -876,9 +878,9 @@ class CredentialTypeInjectorField(JSONSchemaField): def validate_extra_vars(key, node): if isinstance(node, dict): - return {validate_extra_vars(key, k): validate_extra_vars(k, v) for k, v in node.items()} + return {validate_extra_vars(key, k): validate_extra_vars("{key}.{k}".format(key=key, k=k), v) for k, v in node.items()} elif isinstance(node, list): - return [validate_extra_vars(key, x) for x in node] + return [validate_extra_vars("{key}[{i}]".format(key=key, i=i), x) for i, x in enumerate(node)] else: validate_template_string("extra_vars", key, node) From 9777ce7fb87d30a62356ad6f56686f9a9eae309f Mon Sep 17 00:00:00 2001 From: Alan Rominger Date: Wed, 18 Jan 2023 15:56:09 -0500 Subject: [PATCH 10/13] Touchup of validation logic from testing --- awx/main/fields.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/awx/main/fields.py b/awx/main/fields.py index 85fd560c10..95d5436fc8 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -790,13 +790,14 @@ class CredentialTypeInjectorField(JSONSchemaField): 'extra_vars': { 'type': 'object', 'patternProperties': { - r'^(?:(?:{(?:{|%)[^{}]*?(?:%|})})|(?:[a-zA-Z_]+[a-zA-Z0-9_]*)+)+$': { - "anyOf": [{'type': 'string'}, {'type': 'array'}, {'$ref': '#/properties/extra_vars'}] - } + # http://docs.ansible.com/ansible/playbooks_variables.html#what-makes-a-valid-variable-name + # plus, add ability to template + r'^[a-zA-Z_\{\}]+[a-zA-Z0-9_\{\}]*$': {"anyOf": [{'type': 'string'}, {'type': 'array'}, {'$ref': '#/properties/extra_vars'}]} }, 'additionalProperties': False, }, }, + 'additionalProperties': False, } def validate_env_var_allowed(self, env_var): @@ -878,9 +879,12 @@ class CredentialTypeInjectorField(JSONSchemaField): def validate_extra_vars(key, node): if isinstance(node, dict): - return {validate_extra_vars(key, k): validate_extra_vars("{key}.{k}".format(key=key, k=k), v) for k, v in node.items()} + for k, v in node.items(): + validate_template_string("extra_vars", 'a key' if key is None else key, k) + validate_extra_vars(k if key is None else "{key}.{k}".format(key=key, k=k), v) elif isinstance(node, list): - return [validate_extra_vars("{key}[{i}]".format(key=key, i=i), x) for i, x in enumerate(node)] + for i, x in enumerate(node): + validate_extra_vars("{key}[{i}]".format(key=key, i=i), x) else: validate_template_string("extra_vars", key, node) From f5785976be4fa163ced829ba481ae01c5b21987f Mon Sep 17 00:00:00 2001 From: Alan Rominger Date: Wed, 1 Feb 2023 14:59:38 -0500 Subject: [PATCH 11/13] Update to comply with new black rules --- awx/__init__.py | 1 - awx/api/fields.py | 1 - awx/api/filters.py | 1 - awx/api/generics.py | 3 - awx/api/metadata.py | 4 +- awx/api/pagination.py | 1 - awx/api/renderers.py | 5 - awx/api/serializers.py | 37 --- awx/api/validators.py | 1 - awx/api/views/__init__.py | 264 ------------------ awx/api/views/instance_install_bundle.py | 2 +- awx/api/views/inventory.py | 10 - awx/api/views/labels.py | 2 - awx/api/views/mesh_visualizer.py | 2 - awx/api/views/metrics.py | 1 - awx/api/views/organization.py | 21 -- awx/api/views/root.py | 7 - awx/conf/apps.py | 2 - awx/conf/fields.py | 4 - awx/conf/migrations/0001_initial.py | 1 - .../0002_v310_copy_tower_settings.py | 1 - .../migrations/0003_v310_JSONField_changes.py | 1 - awx/conf/migrations/0004_v320_reencrypt.py | 1 - .../0005_v330_rename_two_session_settings.py | 1 - .../migrations/0006_v331_ldap_group_type.py | 1 - .../0007_v380_rename_more_settings.py | 1 - awx/conf/migrations/0008_subscriptions.py | 1 - .../migrations/0009_rename_proot_settings.py | 1 - awx/conf/migrations/_rename_setting.py | 1 - awx/conf/models.py | 1 - awx/conf/settings.py | 1 - awx/conf/tests/unit/test_fields.py | 3 - awx/conf/views.py | 3 - awx/main/access.py | 4 - awx/main/apps.py | 1 - awx/main/dispatch/control.py | 1 - awx/main/dispatch/pool.py | 1 - awx/main/dispatch/publish.py | 1 - awx/main/dispatch/worker/base.py | 1 - awx/main/fields.py | 3 - awx/main/management/commands/check_db.py | 1 - awx/main/management/commands/cleanup_jobs.py | 1 - .../commands/create_oauth2_token.py | 1 - .../commands/export_custom_scripts.py | 2 - awx/main/management/commands/host_metric.py | 1 - .../management/commands/inventory_import.py | 1 - .../management/commands/list_instances.py | 1 - .../management/commands/remove_from_queue.py | 1 - .../management/commands/replay_job_events.py | 2 - .../setup_managed_credential_types.py | 1 - .../management/commands/unregister_queue.py | 1 - awx/main/middleware.py | 1 - awx/main/migrations/0001_initial.py | 1 - .../migrations/0004_squashed_v310_release.py | 1 - .../0005_squashed_v310_v313_updates.py | 1 - awx/main/migrations/0006_v320_release.py | 1 - .../migrations/0007_v320_data_migrations.py | 1 - .../0008_v320_drop_v1_credential_fields.py | 1 - ...2_add_setting_field_for_activity_stream.py | 1 - .../0010_v322_add_ovirt4_tower_inventory.py | 1 - .../0011_v322_encrypt_survey_passwords.py | 1 - .../migrations/0012_v322_update_cred_types.py | 1 - .../migrations/0013_v330_multi_credential.py | 1 - .../0014_v330_saved_launchtime_configs.py | 1 - .../migrations/0015_v330_blank_start_args.py | 1 - .../0016_v330_non_blank_workflow.py | 1 - .../0017_v330_move_deprecated_stdout.py | 1 - .../0018_v330_add_additional_stdout_events.py | 1 - .../migrations/0019_v330_custom_virtualenv.py | 1 - .../0020_v330_instancegroup_policies.py | 1 - .../0021_v330_declare_new_rbac_roles.py | 1 - .../0022_v330_create_new_rbac_roles.py | 1 - .../0023_v330_inventory_multicred.py | 1 - ...024_v330_create_user_session_membership.py | 1 - ...330_add_oauth_activity_stream_registrar.py | 1 - .../migrations/0026_v330_delete_authtoken.py | 1 - .../migrations/0027_v330_emitted_events.py | 1 - .../migrations/0028_v330_add_tower_verify.py | 1 - .../0030_v330_modify_application.py | 1 - .../0031_v330_encrypt_oauth2_secret.py | 1 - .../0032_v330_polymorphic_delete.py | 1 - .../migrations/0033_v330_oauth_help_text.py | 1 - .../migrations/0034_v330_delete_user_role.py | 1 - .../0035_v330_more_oauth2_help_text.py | 1 - ...036_v330_credtype_remove_become_methods.py | 1 - .../0037_v330_remove_legacy_fact_cleanup.py | 1 - ...8_v330_add_deleted_activitystream_actor.py | 1 - .../0039_v330_custom_venv_help_text.py | 1 - .../0040_v330_unifiedjob_controller_node.py | 1 - .../0041_v330_update_oauth_refreshtoken.py | 1 - .../0042_v330_org_member_role_deparent.py | 1 - .../0043_v330_oauth2accesstoken_modified.py | 1 - ...044_v330_add_inventory_update_inventory.py | 1 - .../0045_v330_instance_managed_by_policy.py | 1 - ...46_v330_remove_client_credentials_grant.py | 1 - .../0047_v330_activitystream_instance.py | 1 - ...0_django_created_modified_by_model_name.py | 1 - ...0_validate_instance_capacity_adjustment.py | 1 - .../0050_v340_drop_celery_tables.py | 1 - awx/main/migrations/0051_v340_job_slicing.py | 1 - ...emove_project_scm_delete_on_next_update.py | 1 - .../0053_v340_workflow_inventory.py | 1 - .../0054_v340_workflow_convergence.py | 1 - .../0055_v340_add_grafana_notification.py | 1 - .../0056_v350_custom_venv_history.py | 1 - .../0057_v350_remove_become_method_type.py | 1 - .../0058_v350_remove_limit_limit.py | 1 - .../0059_v350_remove_adhoc_limit.py | 1 - ...0_update_schedule_uniqueness_constraint.py | 1 - ...v350_track_native_credentialtype_source.py | 1 - .../0062_v350_new_playbook_stats.py | 1 - .../migrations/0063_v350_org_host_limits.py | 1 - .../migrations/0064_v350_analytics_state.py | 1 - .../migrations/0065_v350_index_job_status.py | 1 - ..._v350_inventorysource_custom_virtualenv.py | 1 - .../0067_v350_credential_plugins.py | 1 - .../0068_v350_index_event_created.py | 1 - .../0069_v350_generate_unique_install_uuid.py | 1 - .../migrations/0070_v350_gce_instance_id.py | 1 - .../0071_v350_remove_system_tracking.py | 1 - .../migrations/0072_v350_deprecate_fields.py | 1 - .../0073_v360_create_instance_group_m2m.py | 1 - ...4_v360_migrate_instance_group_relations.py | 1 - ...360_remove_old_instance_group_relations.py | 1 - ...6_v360_add_new_instance_group_relations.py | 1 - .../0077_v360_add_default_orderings.py | 1 - .../0078_v360_clear_sessions_tokens_jt.py | 1 - .../0079_v360_rm_implicit_oauth2_apps.py | 1 - .../0080_v360_replace_job_origin.py | 1 - .../migrations/0081_v360_notify_on_start.py | 1 - .../0082_v360_webhook_http_method.py | 1 - .../0083_v360_job_branch_override.py | 1 - .../migrations/0084_v360_token_description.py | 1 - ..._v360_add_notificationtemplate_messages.py | 1 - .../migrations/0086_v360_workflow_approval.py | 1 - ...60_update_credential_injector_help_text.py | 1 - .../0088_v360_dashboard_optimizations.py | 1 - .../0089_v360_new_job_event_types.py | 1 - awx/main/migrations/0090_v360_WFJT_prompts.py | 1 - .../0091_v360_approval_node_notifications.py | 1 - .../migrations/0092_v360_webhook_mixin.py | 1 - .../0093_v360_personal_access_tokens.py | 1 - .../migrations/0094_v360_webhook_mixin2.py | 1 - ...5_v360_increase_instance_version_length.py | 1 - .../migrations/0096_v360_container_groups.py | 1 - ..._workflowapproval_approved_or_denied_by.py | 1 - ...360_rename_cyberark_aim_credential_type.py | 1 - .../migrations/0099_v361_license_cleanup.py | 1 - .../0100_v370_projectupdate_job_tags.py | 1 - ...1_v370_generate_new_uuids_for_iso_nodes.py | 1 - .../0102_v370_unifiedjob_canceled.py | 1 - .../0103_v370_remove_computed_fields.py | 1 - .../0104_v370_cleanup_old_scan_jts.py | 1 - ...5_v370_remove_jobevent_parent_and_hosts.py | 1 - ...e_inventory_groups_with_active_failures.py | 1 - ...07_v370_workflow_convergence_api_toggle.py | 1 - ..._v370_unifiedjob_dependencies_processed.py | 1 - ...09_v370_job_template_organization_field.py | 1 - .../0110_v370_instance_ip_address.py | 1 - .../0111_v370_delete_channelgroup.py | 1 - .../0112_v370_workflow_node_identifier.py | 1 - awx/main/migrations/0113_v370_event_bigint.py | 1 - ...ove_deprecated_manual_inventory_sources.py | 1 - .../migrations/0115_v370_schedule_set_null.py | 1 - .../0116_v400_remove_hipchat_notifications.py | 1 - .../0117_v400_remove_cloudforms_inventory.py | 1 - .../0118_add_remote_archive_scm_type.py | 1 - awx/main/migrations/0119_inventory_plugins.py | 2 - .../migrations/0120_galaxy_credentials.py | 1 - .../0121_delete_toweranalyticsstate.py | 1 - ...0122_really_remove_cloudforms_inventory.py | 1 - awx/main/migrations/0123_drop_hg_support.py | 1 - .../migrations/0124_execution_environments.py | 1 - .../0125_more_ee_modeling_changes.py | 1 - ..._executionenvironment_container_options.py | 1 - .../0127_reset_pod_spec_override.py | 1 - .../0128_organiaztion_read_roles_ee_admin.py | 1 - .../0129_unifiedjob_installed_collections.py | 1 - .../0130_ee_polymorphic_set_null.py | 1 - .../0131_undo_org_polymorphic_ee.py | 1 - .../0132_instancegroup_is_container_group.py | 1 - .../0133_centrify_vault_credtype.py | 1 - .../0134_unifiedjob_ansible_version.py | 1 - .../0135_schedule_sort_fallback_to_id.py | 1 - .../migrations/0136_scm_track_submodules.py | 1 - ...7_custom_inventory_scripts_removal_data.py | 1 - .../0138_custom_inventory_scripts_removal.py | 1 - awx/main/migrations/0140_rename.py | 1 - .../0141_remove_isolated_instances.py | 1 - .../0142_update_ee_image_field_description.py | 1 - awx/main/migrations/0143_hostmetric.py | 1 - awx/main/migrations/0144_event_partitions.py | 1 - .../0145_deregister_managed_ee_objs.py | 1 - .../migrations/0146_add_insights_inventory.py | 1 - .../0147_validate_ee_image_field.py | 1 - .../0148_unifiedjob_receptor_unit_id.py | 1 - ...49_remove_inventory_insights_credential.py | 1 - .../0151_rename_managed_by_tower.py | 1 - .../migrations/0152_instance_node_type.py | 1 - .../migrations/0153_instance_last_seen.py | 1 - awx/main/migrations/0154_set_default_uuid.py | 1 - .../migrations/0155_improved_health_check.py | 1 - .../migrations/0156_capture_mesh_topology.py | 1 - awx/main/migrations/0157_inventory_labels.py | 1 - .../0158_make_instance_cpu_decimal.py | 1 - ...9_deprecate_inventory_source_UoPU_field.py | 1 - .../migrations/0160_alter_schedule_rrule.py | 1 - .../0161_unifiedjob_host_status_counts.py | 1 - .../0162_alter_unifiedjob_dependent_jobs.py | 1 - .../0163_convert_job_tags_to_textfield.py | 1 - ...nventorysource_update_on_project_update.py | 1 - .../migrations/0165_task_manager_refactor.py | 1 - .../migrations/0166_alter_jobevent_host.py | 1 - ...project_signature_validation_credential.py | 1 - .../0168_inventoryupdate_scm_revision.py | 1 - .../0169_jt_prompt_everything_on_launch.py | 1 - .../migrations/0170_node_and_link_state.py | 1 - .../0171_add_health_check_started.py | 1 - .../0172_prevent_instance_fallback.py | 1 - .../0173_instancegroup_max_limits.py | 1 - .../0174_ensure_org_ee_admin_roles.py | 1 - awx/main/migrations/_create_system_jobs.py | 2 - awx/main/models/credential/__init__.py | 1 - awx/main/models/events.py | 4 - awx/main/models/ha.py | 8 - awx/main/models/inventory.py | 1 - awx/main/models/notifications.py | 1 - awx/main/models/organization.py | 1 - awx/main/models/projects.py | 1 - awx/main/models/schedules.py | 1 - awx/main/models/unified_jobs.py | 1 - awx/main/models/workflow.py | 3 - awx/main/notifications/email_backend.py | 1 - awx/main/notifications/grafana_backend.py | 1 - awx/main/notifications/irc_backend.py | 1 - awx/main/notifications/mattermost_backend.py | 1 - awx/main/notifications/pagerduty_backend.py | 1 - awx/main/notifications/rocketchat_backend.py | 1 - awx/main/notifications/slack_backend.py | 1 - awx/main/notifications/twilio_backend.py | 1 - awx/main/notifications/webhook_backend.py | 3 - awx/main/tasks/callback.py | 1 - awx/main/tasks/jobs.py | 3 - awx/main/tasks/receptor.py | 2 - awx/main/tests/factories/tower.py | 1 - .../api/test_organization_counts.py | 1 - .../tests/functional/models/test_inventory.py | 1 - .../tests/functional/models/test_schedule.py | 1 - awx/main/tests/functional/test_ldap.py | 1 - .../tests/functional/test_notifications.py | 1 - awx/main/tests/functional/test_rbac_job.py | 1 - .../functional/test_rbac_job_templates.py | 1 - awx/main/tests/functional/test_session.py | 1 - awx/main/tests/functional/test_tasks.py | 1 - awx/main/tests/unit/api/test_logger.py | 1 - .../unit/models/test_unified_job_unit.py | 1 - awx/main/tests/unit/test_capacity.py | 1 - awx/main/tests/unit/utils/test_common.py | 1 - awx/main/utils/common.py | 2 - awx/main/utils/filters.py | 2 - awx/main/utils/formatters.py | 1 - awx/main/utils/handlers.py | 1 - awx/main/views.py | 1 - awx/main/wsbroadcast.py | 1 - awx/sso/apps.py | 1 - awx/sso/backends.py | 1 - awx/sso/common.py | 2 +- awx/sso/fields.py | 28 -- awx/sso/migrations/0001_initial.py | 1 - .../0002_expand_provider_options.py | 1 - awx/sso/saml_pipeline.py | 2 +- awx/sso/views.py | 1 - awx/ui/apps.py | 1 - awx/ui/fields.py | 1 - awx/ui/urls.py | 2 - awxkit/awxkit/api/client.py | 1 - awxkit/awxkit/api/mixins/has_create.py | 1 - awxkit/awxkit/api/mixins/has_status.py | 1 - awxkit/awxkit/api/pages/access_list.py | 1 - awxkit/awxkit/api/pages/activity_stream.py | 2 - awxkit/awxkit/api/pages/ad_hoc_commands.py | 4 - awxkit/awxkit/api/pages/api.py | 2 - awxkit/awxkit/api/pages/applications.py | 2 - awxkit/awxkit/api/pages/authtoken.py | 1 - .../api/pages/credential_input_sources.py | 2 - awxkit/awxkit/api/pages/credentials.py | 5 - awxkit/awxkit/api/pages/dashboard.py | 1 - .../api/pages/execution_environments.py | 1 - awxkit/awxkit/api/pages/instance_groups.py | 1 - awxkit/awxkit/api/pages/instances.py | 2 - awxkit/awxkit/api/pages/inventory.py | 16 -- awxkit/awxkit/api/pages/job_templates.py | 5 - awxkit/awxkit/api/pages/jobs.py | 12 - awxkit/awxkit/api/pages/labels.py | 2 - awxkit/awxkit/api/pages/mesh_visualizer.py | 1 - .../api/pages/notification_templates.py | 6 +- awxkit/awxkit/api/pages/organizations.py | 2 - awxkit/awxkit/api/pages/page.py | 3 - awxkit/awxkit/api/pages/ping.py | 1 - awxkit/awxkit/api/pages/projects.py | 8 - awxkit/awxkit/api/pages/roles.py | 2 - awxkit/awxkit/api/pages/schedules.py | 1 - awxkit/awxkit/api/pages/settings.py | 1 - .../awxkit/api/pages/system_job_templates.py | 1 - awxkit/awxkit/api/pages/system_jobs.py | 3 - awxkit/awxkit/api/pages/teams.py | 2 - .../awxkit/api/pages/unified_job_templates.py | 1 - awxkit/awxkit/api/pages/unified_jobs.py | 1 - awxkit/awxkit/api/pages/users.py | 3 - .../api/pages/workflow_approval_templates.py | 2 - awxkit/awxkit/api/pages/workflow_approvals.py | 1 - awxkit/awxkit/api/pages/workflow_job_nodes.py | 1 - .../api/pages/workflow_job_template_nodes.py | 2 - .../api/pages/workflow_job_templates.py | 4 - awxkit/awxkit/api/pages/workflow_jobs.py | 1 - awxkit/awxkit/api/resources.py | 1 - awxkit/awxkit/cli/custom.py | 8 - awxkit/awxkit/cli/options.py | 1 - awxkit/awxkit/exceptions.py | 18 -- awxkit/awxkit/utils/__init__.py | 2 +- awxkit/awxkit/ws.py | 1 - awxkit/test/test_dependency_resolver.py | 17 -- awxkit/test/test_registry.py | 2 - 323 files changed, 7 insertions(+), 839 deletions(-) diff --git a/awx/__init__.py b/awx/__init__.py index 6e7a329b5c..2e2a943b6c 100644 --- a/awx/__init__.py +++ b/awx/__init__.py @@ -67,7 +67,6 @@ else: from django.db import connection if HAS_DJANGO is True: - # See upgrade blocker note in requirements/README.md try: names_digest('foo', 'bar', 'baz', length=8) diff --git a/awx/api/fields.py b/awx/api/fields.py index c84b6327f9..1fab90065e 100644 --- a/awx/api/fields.py +++ b/awx/api/fields.py @@ -80,7 +80,6 @@ class VerbatimField(serializers.Field): class OAuth2ProviderField(fields.DictField): - default_error_messages = {'invalid_key_names': _('Invalid key names: {invalid_key_names}')} valid_key_names = {'ACCESS_TOKEN_EXPIRE_SECONDS', 'AUTHORIZATION_CODE_EXPIRE_SECONDS', 'REFRESH_TOKEN_EXPIRE_SECONDS'} child = fields.IntegerField(min_value=1) diff --git a/awx/api/filters.py b/awx/api/filters.py index eaec6628ef..a40006d670 100644 --- a/awx/api/filters.py +++ b/awx/api/filters.py @@ -160,7 +160,6 @@ class FieldLookupBackend(BaseFilterBackend): NO_DUPLICATES_ALLOW_LIST = (CharField, IntegerField, BooleanField, TextField) def get_fields_from_lookup(self, model, lookup): - if '__' in lookup and lookup.rsplit('__', 1)[-1] in self.SUPPORTED_LOOKUPS: path, suffix = lookup.rsplit('__', 1) else: diff --git a/awx/api/generics.py b/awx/api/generics.py index f5178f7fb2..7d21d74ee6 100644 --- a/awx/api/generics.py +++ b/awx/api/generics.py @@ -135,7 +135,6 @@ def get_default_schema(): class APIView(views.APIView): - schema = get_default_schema() versioning_class = URLPathVersioning @@ -800,7 +799,6 @@ class RetrieveUpdateDestroyAPIView(RetrieveUpdateAPIView, DestroyAPIView): class ResourceAccessList(ParentMixin, ListAPIView): - serializer_class = ResourceAccessListElementSerializer ordering = ('username',) @@ -823,7 +821,6 @@ def trigger_delayed_deep_copy(*args, **kwargs): class CopyAPIView(GenericAPIView): - serializer_class = CopySerializer permission_classes = (AllowAny,) copy_return_serializer_class = None diff --git a/awx/api/metadata.py b/awx/api/metadata.py index b4c75d09cb..dc8d553e01 100644 --- a/awx/api/metadata.py +++ b/awx/api/metadata.py @@ -128,7 +128,7 @@ class Metadata(metadata.SimpleMetadata): # Special handling of notification configuration where the required properties # are conditional on the type selected. if field.field_name == 'notification_configuration': - for (notification_type_name, notification_tr_name, notification_type_class) in NotificationTemplate.NOTIFICATION_TYPES: + for notification_type_name, notification_tr_name, notification_type_class in NotificationTemplate.NOTIFICATION_TYPES: field_info[notification_type_name] = notification_type_class.init_parameters # Special handling of notification messages where the required properties @@ -138,7 +138,7 @@ class Metadata(metadata.SimpleMetadata): except (AttributeError, KeyError): view_model = None if view_model == NotificationTemplate and field.field_name == 'messages': - for (notification_type_name, notification_tr_name, notification_type_class) in NotificationTemplate.NOTIFICATION_TYPES: + for notification_type_name, notification_tr_name, notification_type_class in NotificationTemplate.NOTIFICATION_TYPES: field_info[notification_type_name] = notification_type_class.default_messages # Update type of fields returned... diff --git a/awx/api/pagination.py b/awx/api/pagination.py index 68db8cceab..ca00c1d8ca 100644 --- a/awx/api/pagination.py +++ b/awx/api/pagination.py @@ -24,7 +24,6 @@ class DisabledPaginator(DjangoPaginator): class Pagination(pagination.PageNumberPagination): - page_size_query_param = 'page_size' max_page_size = settings.MAX_PAGE_SIZE count_disabled = False diff --git a/awx/api/renderers.py b/awx/api/renderers.py index d19d6ee318..613d2c9fda 100644 --- a/awx/api/renderers.py +++ b/awx/api/renderers.py @@ -22,7 +22,6 @@ class SurrogateEncoder(encoders.JSONEncoder): class DefaultJSONRenderer(renderers.JSONRenderer): - encoder_class = SurrogateEncoder @@ -95,7 +94,6 @@ class BrowsableAPIRenderer(renderers.BrowsableAPIRenderer): class PlainTextRenderer(renderers.BaseRenderer): - media_type = 'text/plain' format = 'txt' @@ -106,18 +104,15 @@ class PlainTextRenderer(renderers.BaseRenderer): class DownloadTextRenderer(PlainTextRenderer): - format = "txt_download" class AnsiTextRenderer(PlainTextRenderer): - media_type = 'text/plain' format = 'ansi' class AnsiDownloadRenderer(PlainTextRenderer): - format = "ansi_download" diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 99676c668d..be87a50a82 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -200,7 +200,6 @@ def reverse_gfk(content_object, request): class CopySerializer(serializers.Serializer): - name = serializers.CharField() def validate(self, attrs): @@ -432,7 +431,6 @@ class BaseSerializer(serializers.ModelSerializer, metaclass=BaseSerializerMetacl continue summary_fields[fk] = OrderedDict() for field in related_fields: - fval = getattr(fkval, field, None) if fval is None and field == 'type': @@ -930,7 +928,6 @@ class UnifiedJobListSerializer(UnifiedJobSerializer): class UnifiedJobStdoutSerializer(UnifiedJobSerializer): - result_stdout = serializers.SerializerMethodField() class Meta: @@ -944,7 +941,6 @@ class UnifiedJobStdoutSerializer(UnifiedJobSerializer): class UserSerializer(BaseSerializer): - password = serializers.CharField(required=False, default='', write_only=True, help_text=_('Write-only field used to change the password.')) ldap_dn = serializers.CharField(source='profile.ldap_dn', read_only=True) external_account = serializers.SerializerMethodField(help_text=_('Set if the account is managed by an external service')) @@ -1104,7 +1100,6 @@ class UserActivityStreamSerializer(UserSerializer): class BaseOAuth2TokenSerializer(BaseSerializer): - refresh_token = serializers.SerializerMethodField() token = serializers.SerializerMethodField() ALLOWED_SCOPES = ['read', 'write'] @@ -1222,7 +1217,6 @@ class UserPersonalTokenSerializer(BaseOAuth2TokenSerializer): class OAuth2ApplicationSerializer(BaseSerializer): - show_capabilities = ['edit', 'delete'] class Meta: @@ -1457,7 +1451,6 @@ class ExecutionEnvironmentSerializer(BaseSerializer): class ProjectSerializer(UnifiedJobTemplateSerializer, ProjectOptionsSerializer): - status = serializers.ChoiceField(choices=Project.PROJECT_STATUS_CHOICES, read_only=True) last_update_failed = serializers.BooleanField(read_only=True) last_updated = serializers.DateTimeField(read_only=True) @@ -1548,7 +1541,6 @@ class ProjectSerializer(UnifiedJobTemplateSerializer, ProjectOptionsSerializer): class ProjectPlaybooksSerializer(ProjectSerializer): - playbooks = serializers.SerializerMethodField(help_text=_('Array of playbooks available within this project.')) class Meta: @@ -1566,7 +1558,6 @@ class ProjectPlaybooksSerializer(ProjectSerializer): class ProjectInventoriesSerializer(ProjectSerializer): - inventory_files = serializers.ReadOnlyField(help_text=_('Array of inventory files and directories available within this project, ' 'not comprehensive.')) class Meta: @@ -1581,7 +1572,6 @@ class ProjectInventoriesSerializer(ProjectSerializer): class ProjectUpdateViewSerializer(ProjectSerializer): - can_update = serializers.BooleanField(read_only=True) class Meta: @@ -1611,7 +1601,6 @@ class ProjectUpdateSerializer(UnifiedJobSerializer, ProjectOptionsSerializer): class ProjectUpdateDetailSerializer(ProjectUpdateSerializer): - playbook_counts = serializers.SerializerMethodField(help_text=_('A count of all plays and tasks for the job run.')) class Meta: @@ -1634,7 +1623,6 @@ class ProjectUpdateListSerializer(ProjectUpdateSerializer, UnifiedJobListSeriali class ProjectUpdateCancelSerializer(ProjectUpdateSerializer): - can_cancel = serializers.BooleanField(read_only=True) class Meta: @@ -1972,7 +1960,6 @@ class GroupSerializer(BaseSerializerWithVariables): class GroupTreeSerializer(GroupSerializer): - children = serializers.SerializerMethodField() class Meta: @@ -2070,7 +2057,6 @@ class InventorySourceOptionsSerializer(BaseSerializer): class InventorySourceSerializer(UnifiedJobTemplateSerializer, InventorySourceOptionsSerializer): - status = serializers.ChoiceField(choices=InventorySource.INVENTORY_SOURCE_STATUS_CHOICES, read_only=True) last_update_failed = serializers.BooleanField(read_only=True) last_updated = serializers.DateTimeField(read_only=True) @@ -2215,7 +2201,6 @@ class InventorySourceSerializer(UnifiedJobTemplateSerializer, InventorySourceOpt class InventorySourceUpdateSerializer(InventorySourceSerializer): - can_update = serializers.BooleanField(read_only=True) class Meta: @@ -2232,7 +2217,6 @@ class InventorySourceUpdateSerializer(InventorySourceSerializer): class InventoryUpdateSerializer(UnifiedJobSerializer, InventorySourceOptionsSerializer): - custom_virtualenv = serializers.ReadOnlyField() class Meta: @@ -2273,7 +2257,6 @@ class InventoryUpdateSerializer(UnifiedJobSerializer, InventorySourceOptionsSeri class InventoryUpdateDetailSerializer(InventoryUpdateSerializer): - source_project = serializers.SerializerMethodField(help_text=_('The project used for this job.'), method_name='get_source_project_id') class Meta: @@ -2324,7 +2307,6 @@ class InventoryUpdateListSerializer(InventoryUpdateSerializer, UnifiedJobListSer class InventoryUpdateCancelSerializer(InventoryUpdateSerializer): - can_cancel = serializers.BooleanField(read_only=True) class Meta: @@ -2682,7 +2664,6 @@ class CredentialSerializer(BaseSerializer): class CredentialSerializerCreate(CredentialSerializer): - user = serializers.PrimaryKeyRelatedField( queryset=User.objects.all(), required=False, @@ -3037,7 +3018,6 @@ class JobTemplateWithSpecSerializer(JobTemplateSerializer): class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer): - passwords_needed_to_start = serializers.ReadOnlyField() artifacts = serializers.SerializerMethodField() @@ -3120,7 +3100,6 @@ class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer): class JobDetailSerializer(JobSerializer): - playbook_counts = serializers.SerializerMethodField(help_text=_('A count of all plays and tasks for the job run.')) custom_virtualenv = serializers.ReadOnlyField() @@ -3138,7 +3117,6 @@ class JobDetailSerializer(JobSerializer): class JobCancelSerializer(BaseSerializer): - can_cancel = serializers.BooleanField(read_only=True) class Meta: @@ -3147,7 +3125,6 @@ class JobCancelSerializer(BaseSerializer): class JobRelaunchSerializer(BaseSerializer): - passwords_needed_to_start = serializers.SerializerMethodField() retry_counts = serializers.SerializerMethodField() hosts = serializers.ChoiceField( @@ -3207,7 +3184,6 @@ class JobRelaunchSerializer(BaseSerializer): class JobCreateScheduleSerializer(LabelsListMixin, BaseSerializer): - can_schedule = serializers.SerializerMethodField() prompts = serializers.SerializerMethodField() @@ -3333,7 +3309,6 @@ class AdHocCommandDetailSerializer(AdHocCommandSerializer): class AdHocCommandCancelSerializer(AdHocCommandSerializer): - can_cancel = serializers.BooleanField(read_only=True) class Meta: @@ -3372,7 +3347,6 @@ class SystemJobTemplateSerializer(UnifiedJobTemplateSerializer): class SystemJobSerializer(UnifiedJobSerializer): - result_stdout = serializers.SerializerMethodField() class Meta: @@ -3399,7 +3373,6 @@ class SystemJobSerializer(UnifiedJobSerializer): class SystemJobCancelSerializer(SystemJobSerializer): - can_cancel = serializers.BooleanField(read_only=True) class Meta: @@ -3564,7 +3537,6 @@ class WorkflowJobListSerializer(WorkflowJobSerializer, UnifiedJobListSerializer) class WorkflowJobCancelSerializer(WorkflowJobSerializer): - can_cancel = serializers.BooleanField(read_only=True) class Meta: @@ -3578,7 +3550,6 @@ class WorkflowApprovalViewSerializer(UnifiedJobSerializer): class WorkflowApprovalSerializer(UnifiedJobSerializer): - can_approve_or_deny = serializers.SerializerMethodField() approval_expiration = serializers.SerializerMethodField() timed_out = serializers.ReadOnlyField() @@ -3973,7 +3944,6 @@ class JobHostSummarySerializer(BaseSerializer): class JobEventSerializer(BaseSerializer): - event_display = serializers.CharField(source='get_event_display2', read_only=True) event_level = serializers.IntegerField(read_only=True) @@ -4069,7 +4039,6 @@ class ProjectUpdateEventSerializer(JobEventSerializer): class AdHocCommandEventSerializer(BaseSerializer): - event_display = serializers.CharField(source='get_event_display', read_only=True) class Meta: @@ -4351,7 +4320,6 @@ class JobLaunchSerializer(BaseSerializer): class WorkflowJobLaunchSerializer(BaseSerializer): - can_start_without_user_input = serializers.BooleanField(read_only=True) defaults = serializers.SerializerMethodField() variables_needed_to_start = serializers.ReadOnlyField() @@ -4408,7 +4376,6 @@ class WorkflowJobLaunchSerializer(BaseSerializer): return False def get_defaults(self, obj): - defaults_dict = {} for field_name in WorkflowJobTemplate.get_ask_mapping().keys(): if field_name == 'inventory': @@ -4425,7 +4392,6 @@ class WorkflowJobLaunchSerializer(BaseSerializer): return dict(name=obj.name, id=obj.id, description=obj.description) def validate(self, attrs): - template = self.instance accepted, rejected, errors = template._accept_or_ignore_job_kwargs(**attrs) @@ -4666,7 +4632,6 @@ class NotificationTemplateSerializer(BaseSerializer): class NotificationSerializer(BaseSerializer): - body = serializers.SerializerMethodField(help_text=_('Notification body')) class Meta: @@ -5038,7 +5003,6 @@ class InstanceHealthCheckSerializer(BaseSerializer): class InstanceGroupSerializer(BaseSerializer): - show_capabilities = ['edit', 'delete'] capacity = serializers.SerializerMethodField() consumed_capacity = serializers.SerializerMethodField() @@ -5225,7 +5189,6 @@ class InstanceGroupSerializer(BaseSerializer): class ActivityStreamSerializer(BaseSerializer): - changes = serializers.SerializerMethodField() object_association = serializers.SerializerMethodField(help_text=_("When present, shows the field name of the role or relationship that changed.")) object_type = serializers.SerializerMethodField(help_text=_("When present, shows the model on which the role or relationship was defined.")) diff --git a/awx/api/validators.py b/awx/api/validators.py index 7f7f6cd25f..d119e85292 100644 --- a/awx/api/validators.py +++ b/awx/api/validators.py @@ -33,7 +33,6 @@ class HostnameRegexValidator(RegexValidator): return f"regex={self.regex}, message={self.message}, code={self.code}, inverse_match={self.inverse_match}, flags={self.flags}" def __validate(self, value): - if ' ' in value: return False, ValidationError("whitespaces in hostnames are illegal") diff --git a/awx/api/views/__init__.py b/awx/api/views/__init__.py index 533f617993..e81a6ebbde 100644 --- a/awx/api/views/__init__.py +++ b/awx/api/views/__init__.py @@ -160,7 +160,6 @@ def api_exception_handler(exc, context): class DashboardView(APIView): - deprecated = True name = _("Dashboard") @@ -259,7 +258,6 @@ class DashboardView(APIView): class DashboardJobsGraphView(APIView): - name = _("Dashboard Jobs Graphs") swagger_topic = 'Jobs' @@ -330,7 +328,6 @@ class DashboardJobsGraphView(APIView): class InstanceList(ListCreateAPIView): - name = _("Instances") model = models.Instance serializer_class = serializers.InstanceSerializer @@ -339,7 +336,6 @@ class InstanceList(ListCreateAPIView): class InstanceDetail(RetrieveUpdateAPIView): - name = _("Instance Detail") model = models.Instance serializer_class = serializers.InstanceSerializer @@ -362,7 +358,6 @@ class InstanceDetail(RetrieveUpdateAPIView): class InstanceUnifiedJobsList(SubListAPIView): - name = _("Instance Jobs") model = models.UnifiedJob serializer_class = serializers.UnifiedJobListSerializer @@ -376,7 +371,6 @@ class InstanceUnifiedJobsList(SubListAPIView): class InstancePeersList(SubListAPIView): - name = _("Instance Peers") parent_model = models.Instance model = models.Instance @@ -387,7 +381,6 @@ class InstancePeersList(SubListAPIView): class InstanceInstanceGroupsList(InstanceGroupMembershipMixin, SubListCreateAttachDetachAPIView): - name = _("Instance's Instance Groups") model = models.InstanceGroup serializer_class = serializers.InstanceGroupSerializer @@ -411,7 +404,6 @@ class InstanceInstanceGroupsList(InstanceGroupMembershipMixin, SubListCreateAtta class InstanceHealthCheck(GenericAPIView): - name = _('Instance Health Check') model = models.Instance serializer_class = serializers.InstanceHealthCheckSerializer @@ -447,14 +439,12 @@ class InstanceHealthCheck(GenericAPIView): class InstanceGroupList(ListCreateAPIView): - name = _("Instance Groups") model = models.InstanceGroup serializer_class = serializers.InstanceGroupSerializer class InstanceGroupDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): - always_allow_superuser = False name = _("Instance Group Detail") model = models.InstanceGroup @@ -469,7 +459,6 @@ class InstanceGroupDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAP class InstanceGroupUnifiedJobsList(SubListAPIView): - name = _("Instance Group Running Jobs") model = models.UnifiedJob serializer_class = serializers.UnifiedJobListSerializer @@ -478,7 +467,6 @@ class InstanceGroupUnifiedJobsList(SubListAPIView): class InstanceGroupInstanceList(InstanceGroupMembershipMixin, SubListAttachDetachAPIView): - name = _("Instance Group's Instances") model = models.Instance serializer_class = serializers.InstanceSerializer @@ -503,7 +491,6 @@ class InstanceGroupInstanceList(InstanceGroupMembershipMixin, SubListAttachDetac class ScheduleList(ListCreateAPIView): - name = _("Schedules") model = models.Schedule serializer_class = serializers.ScheduleSerializer @@ -511,13 +498,11 @@ class ScheduleList(ListCreateAPIView): class ScheduleDetail(RetrieveUpdateDestroyAPIView): - model = models.Schedule serializer_class = serializers.ScheduleSerializer class SchedulePreview(GenericAPIView): - model = models.Schedule name = _('Schedule Recurrence Rule Preview') serializer_class = serializers.SchedulePreviewSerializer @@ -544,7 +529,6 @@ class SchedulePreview(GenericAPIView): class ScheduleZoneInfo(APIView): - swagger_topic = 'System Configuration' def get(self, request): @@ -552,7 +536,6 @@ class ScheduleZoneInfo(APIView): class LaunchConfigCredentialsBase(SubListAttachDetachAPIView): - model = models.Credential serializer_class = serializers.CredentialSerializer relationship = 'credentials' @@ -584,17 +567,14 @@ class LaunchConfigCredentialsBase(SubListAttachDetachAPIView): class ScheduleCredentialsList(LaunchConfigCredentialsBase): - parent_model = models.Schedule class ScheduleLabelsList(LabelSubListCreateAttachDetachView): - parent_model = models.Schedule class ScheduleInstanceGroupList(SubListAttachDetachAPIView): - model = models.InstanceGroup serializer_class = serializers.InstanceGroupSerializer parent_model = models.Schedule @@ -602,7 +582,6 @@ class ScheduleInstanceGroupList(SubListAttachDetachAPIView): class ScheduleUnifiedJobsList(SubListAPIView): - model = models.UnifiedJob serializer_class = serializers.UnifiedJobListSerializer parent_model = models.Schedule @@ -646,19 +625,16 @@ class AuthView(APIView): class TeamList(ListCreateAPIView): - model = models.Team serializer_class = serializers.TeamSerializer class TeamDetail(RetrieveUpdateDestroyAPIView): - model = models.Team serializer_class = serializers.TeamSerializer class TeamUsersList(BaseUsersList): - model = models.User serializer_class = serializers.UserSerializer parent_model = models.Team @@ -667,7 +643,6 @@ class TeamUsersList(BaseUsersList): class TeamRolesList(SubListAttachDetachAPIView): - model = models.Role serializer_class = serializers.RoleSerializerWithParentAccess metadata_class = RoleMetadata @@ -707,7 +682,6 @@ class TeamRolesList(SubListAttachDetachAPIView): class TeamObjectRolesList(SubListAPIView): - model = models.Role serializer_class = serializers.RoleSerializer parent_model = models.Team @@ -720,7 +694,6 @@ class TeamObjectRolesList(SubListAPIView): class TeamProjectsList(SubListAPIView): - model = models.Project serializer_class = serializers.ProjectSerializer parent_model = models.Team @@ -735,7 +708,6 @@ class TeamProjectsList(SubListAPIView): class TeamActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.Team @@ -755,13 +727,11 @@ class TeamActivityStreamList(SubListAPIView): class TeamAccessList(ResourceAccessList): - model = models.User # needs to be User for AccessLists's parent_model = models.Team class ExecutionEnvironmentList(ListCreateAPIView): - always_allow_superuser = False model = models.ExecutionEnvironment serializer_class = serializers.ExecutionEnvironmentSerializer @@ -769,7 +739,6 @@ class ExecutionEnvironmentList(ListCreateAPIView): class ExecutionEnvironmentDetail(RetrieveUpdateDestroyAPIView): - always_allow_superuser = False model = models.ExecutionEnvironment serializer_class = serializers.ExecutionEnvironmentSerializer @@ -792,7 +761,6 @@ class ExecutionEnvironmentDetail(RetrieveUpdateDestroyAPIView): class ExecutionEnvironmentJobTemplateList(SubListAPIView): - model = models.UnifiedJobTemplate serializer_class = serializers.UnifiedJobTemplateSerializer parent_model = models.ExecutionEnvironment @@ -800,13 +768,11 @@ class ExecutionEnvironmentJobTemplateList(SubListAPIView): class ExecutionEnvironmentCopy(CopyAPIView): - model = models.ExecutionEnvironment copy_return_serializer_class = serializers.ExecutionEnvironmentSerializer class ExecutionEnvironmentActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.ExecutionEnvironment @@ -822,31 +788,26 @@ class ExecutionEnvironmentActivityStreamList(SubListAPIView): class ProjectList(ListCreateAPIView): - model = models.Project serializer_class = serializers.ProjectSerializer class ProjectDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): - model = models.Project serializer_class = serializers.ProjectSerializer class ProjectPlaybooks(RetrieveAPIView): - model = models.Project serializer_class = serializers.ProjectPlaybooksSerializer class ProjectInventories(RetrieveAPIView): - model = models.Project serializer_class = serializers.ProjectInventoriesSerializer class ProjectTeamsList(ListAPIView): - model = models.Team serializer_class = serializers.TeamSerializer @@ -861,7 +822,6 @@ class ProjectTeamsList(ListAPIView): class ProjectSchedulesList(SubListCreateAPIView): - name = _("Project Schedules") model = models.Schedule @@ -872,7 +832,6 @@ class ProjectSchedulesList(SubListCreateAPIView): class ProjectScmInventorySources(SubListAPIView): - name = _("Project SCM Inventory Sources") model = models.InventorySource serializer_class = serializers.InventorySourceSerializer @@ -882,7 +841,6 @@ class ProjectScmInventorySources(SubListAPIView): class ProjectActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.Project @@ -901,29 +859,24 @@ class ProjectActivityStreamList(SubListAPIView): class ProjectNotificationTemplatesAnyList(SubListCreateAttachDetachAPIView): - model = models.NotificationTemplate serializer_class = serializers.NotificationTemplateSerializer parent_model = models.Project class ProjectNotificationTemplatesStartedList(ProjectNotificationTemplatesAnyList): - relationship = 'notification_templates_started' class ProjectNotificationTemplatesErrorList(ProjectNotificationTemplatesAnyList): - relationship = 'notification_templates_error' class ProjectNotificationTemplatesSuccessList(ProjectNotificationTemplatesAnyList): - relationship = 'notification_templates_success' class ProjectUpdatesList(SubListAPIView): - model = models.ProjectUpdate serializer_class = serializers.ProjectUpdateListSerializer parent_model = models.Project @@ -931,7 +884,6 @@ class ProjectUpdatesList(SubListAPIView): class ProjectUpdateView(RetrieveAPIView): - model = models.Project serializer_class = serializers.ProjectUpdateViewSerializer permission_classes = (ProjectUpdatePermission,) @@ -953,19 +905,16 @@ class ProjectUpdateView(RetrieveAPIView): class ProjectUpdateList(ListAPIView): - model = models.ProjectUpdate serializer_class = serializers.ProjectUpdateListSerializer class ProjectUpdateDetail(UnifiedJobDeletionMixin, RetrieveDestroyAPIView): - model = models.ProjectUpdate serializer_class = serializers.ProjectUpdateDetailSerializer class ProjectUpdateEventsList(SubListAPIView): - model = models.ProjectUpdateEvent serializer_class = serializers.ProjectUpdateEventSerializer parent_model = models.ProjectUpdate @@ -985,7 +934,6 @@ class ProjectUpdateEventsList(SubListAPIView): class SystemJobEventsList(SubListAPIView): - model = models.SystemJobEvent serializer_class = serializers.SystemJobEventSerializer parent_model = models.SystemJob @@ -1005,13 +953,11 @@ class SystemJobEventsList(SubListAPIView): class ProjectUpdateCancel(GenericCancelView): - model = models.ProjectUpdate serializer_class = serializers.ProjectUpdateCancelSerializer class ProjectUpdateNotificationsList(SubListAPIView): - model = models.Notification serializer_class = serializers.NotificationSerializer parent_model = models.ProjectUpdate @@ -1020,7 +966,6 @@ class ProjectUpdateNotificationsList(SubListAPIView): class ProjectUpdateScmInventoryUpdates(SubListAPIView): - name = _("Project Update SCM Inventory Updates") model = models.InventoryUpdate serializer_class = serializers.InventoryUpdateListSerializer @@ -1030,13 +975,11 @@ class ProjectUpdateScmInventoryUpdates(SubListAPIView): class ProjectAccessList(ResourceAccessList): - model = models.User # needs to be User for AccessLists's parent_model = models.Project class ProjectObjectRolesList(SubListAPIView): - model = models.Role serializer_class = serializers.RoleSerializer parent_model = models.Project @@ -1049,13 +992,11 @@ class ProjectObjectRolesList(SubListAPIView): class ProjectCopy(CopyAPIView): - model = models.Project copy_return_serializer_class = serializers.ProjectSerializer class UserList(ListCreateAPIView): - model = models.User serializer_class = serializers.UserSerializer permission_classes = (UserPermission,) @@ -1063,7 +1004,6 @@ class UserList(ListCreateAPIView): class UserMeList(ListAPIView): - model = models.User serializer_class = serializers.UserSerializer name = _('Me') @@ -1074,7 +1014,6 @@ class UserMeList(ListAPIView): class OAuth2ApplicationList(ListCreateAPIView): - name = _("OAuth 2 Applications") model = models.OAuth2Application @@ -1083,7 +1022,6 @@ class OAuth2ApplicationList(ListCreateAPIView): class OAuth2ApplicationDetail(RetrieveUpdateDestroyAPIView): - name = _("OAuth 2 Application Detail") model = models.OAuth2Application @@ -1096,7 +1034,6 @@ class OAuth2ApplicationDetail(RetrieveUpdateDestroyAPIView): class ApplicationOAuth2TokenList(SubListCreateAPIView): - name = _("OAuth 2 Application Tokens") model = models.OAuth2AccessToken @@ -1108,7 +1045,6 @@ class ApplicationOAuth2TokenList(SubListCreateAPIView): class OAuth2ApplicationActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.OAuth2Application @@ -1118,7 +1054,6 @@ class OAuth2ApplicationActivityStreamList(SubListAPIView): class OAuth2TokenList(ListCreateAPIView): - name = _("OAuth2 Tokens") model = models.OAuth2AccessToken @@ -1127,7 +1062,6 @@ class OAuth2TokenList(ListCreateAPIView): class OAuth2UserTokenList(SubListCreateAPIView): - name = _("OAuth2 User Tokens") model = models.OAuth2AccessToken @@ -1139,7 +1073,6 @@ class OAuth2UserTokenList(SubListCreateAPIView): class UserAuthorizedTokenList(SubListCreateAPIView): - name = _("OAuth2 User Authorized Access Tokens") model = models.OAuth2AccessToken @@ -1154,7 +1087,6 @@ class UserAuthorizedTokenList(SubListCreateAPIView): class OrganizationApplicationList(SubListCreateAPIView): - name = _("Organization OAuth2 Applications") model = models.OAuth2Application @@ -1166,7 +1098,6 @@ class OrganizationApplicationList(SubListCreateAPIView): class UserPersonalTokenList(SubListCreateAPIView): - name = _("OAuth2 Personal Access Tokens") model = models.OAuth2AccessToken @@ -1181,7 +1112,6 @@ class UserPersonalTokenList(SubListCreateAPIView): class OAuth2TokenDetail(RetrieveUpdateDestroyAPIView): - name = _("OAuth Token Detail") model = models.OAuth2AccessToken @@ -1190,7 +1120,6 @@ class OAuth2TokenDetail(RetrieveUpdateDestroyAPIView): class OAuth2TokenActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.OAuth2AccessToken @@ -1200,7 +1129,6 @@ class OAuth2TokenActivityStreamList(SubListAPIView): class UserTeamsList(SubListAPIView): - model = models.Team serializer_class = serializers.TeamSerializer parent_model = models.User @@ -1213,7 +1141,6 @@ class UserTeamsList(SubListAPIView): class UserRolesList(SubListAttachDetachAPIView): - model = models.Role serializer_class = serializers.RoleSerializerWithParentAccess metadata_class = RoleMetadata @@ -1256,7 +1183,6 @@ class UserRolesList(SubListAttachDetachAPIView): class UserProjectsList(SubListAPIView): - model = models.Project serializer_class = serializers.ProjectSerializer parent_model = models.User @@ -1270,7 +1196,6 @@ class UserProjectsList(SubListAPIView): class UserOrganizationsList(OrganizationCountsMixin, SubListAPIView): - model = models.Organization serializer_class = serializers.OrganizationSerializer parent_model = models.User @@ -1285,7 +1210,6 @@ class UserOrganizationsList(OrganizationCountsMixin, SubListAPIView): class UserAdminOfOrganizationsList(OrganizationCountsMixin, SubListAPIView): - model = models.Organization serializer_class = serializers.OrganizationSerializer parent_model = models.User @@ -1300,7 +1224,6 @@ class UserAdminOfOrganizationsList(OrganizationCountsMixin, SubListAPIView): class UserActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.User @@ -1315,7 +1238,6 @@ class UserActivityStreamList(SubListAPIView): class UserDetail(RetrieveUpdateDestroyAPIView): - model = models.User serializer_class = serializers.UserSerializer @@ -1353,19 +1275,16 @@ class UserDetail(RetrieveUpdateDestroyAPIView): class UserAccessList(ResourceAccessList): - model = models.User # needs to be User for AccessLists's parent_model = models.User class CredentialTypeList(ListCreateAPIView): - model = models.CredentialType serializer_class = serializers.CredentialTypeSerializer class CredentialTypeDetail(RetrieveUpdateDestroyAPIView): - model = models.CredentialType serializer_class = serializers.CredentialTypeSerializer @@ -1379,7 +1298,6 @@ class CredentialTypeDetail(RetrieveUpdateDestroyAPIView): class CredentialTypeCredentialList(SubListCreateAPIView): - model = models.Credential parent_model = models.CredentialType relationship = 'credentials' @@ -1387,7 +1305,6 @@ class CredentialTypeCredentialList(SubListCreateAPIView): class CredentialTypeActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.CredentialType @@ -1396,13 +1313,11 @@ class CredentialTypeActivityStreamList(SubListAPIView): class CredentialList(ListCreateAPIView): - model = models.Credential serializer_class = serializers.CredentialSerializerCreate class CredentialOwnerUsersList(SubListAPIView): - model = models.User serializer_class = serializers.UserSerializer parent_model = models.Credential @@ -1411,7 +1326,6 @@ class CredentialOwnerUsersList(SubListAPIView): class CredentialOwnerTeamsList(SubListAPIView): - model = models.Team serializer_class = serializers.TeamSerializer parent_model = models.Credential @@ -1428,7 +1342,6 @@ class CredentialOwnerTeamsList(SubListAPIView): class UserCredentialsList(SubListCreateAPIView): - model = models.Credential serializer_class = serializers.UserCredentialSerializerCreate parent_model = models.User @@ -1444,7 +1357,6 @@ class UserCredentialsList(SubListCreateAPIView): class TeamCredentialsList(SubListCreateAPIView): - model = models.Credential serializer_class = serializers.TeamCredentialSerializerCreate parent_model = models.Team @@ -1460,7 +1372,6 @@ class TeamCredentialsList(SubListCreateAPIView): class OrganizationCredentialList(SubListCreateAPIView): - model = models.Credential serializer_class = serializers.OrganizationCredentialSerializerCreate parent_model = models.Organization @@ -1480,7 +1391,6 @@ class OrganizationCredentialList(SubListCreateAPIView): class CredentialDetail(RetrieveUpdateDestroyAPIView): - model = models.Credential serializer_class = serializers.CredentialSerializer @@ -1492,7 +1402,6 @@ class CredentialDetail(RetrieveUpdateDestroyAPIView): class CredentialActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.Credential @@ -1501,13 +1410,11 @@ class CredentialActivityStreamList(SubListAPIView): class CredentialAccessList(ResourceAccessList): - model = models.User # needs to be User for AccessLists's parent_model = models.Credential class CredentialObjectRolesList(SubListAPIView): - model = models.Role serializer_class = serializers.RoleSerializer parent_model = models.Credential @@ -1520,7 +1427,6 @@ class CredentialObjectRolesList(SubListAPIView): class CredentialCopy(CopyAPIView): - model = models.Credential copy_return_serializer_class = serializers.CredentialSerializer @@ -1563,7 +1469,6 @@ class CredentialExternalTest(SubDetailAPIView): class CredentialInputSourceDetail(RetrieveUpdateDestroyAPIView): - name = _("Credential Input Source Detail") model = models.CredentialInputSource @@ -1571,7 +1476,6 @@ class CredentialInputSourceDetail(RetrieveUpdateDestroyAPIView): class CredentialInputSourceList(ListCreateAPIView): - name = _("Credential Input Sources") model = models.CredentialInputSource @@ -1579,7 +1483,6 @@ class CredentialInputSourceList(ListCreateAPIView): class CredentialInputSourceSubList(SubListCreateAPIView): - name = _("Credential Input Sources") model = models.CredentialInputSource @@ -1629,7 +1532,6 @@ class HostRelatedSearchMixin(object): class HostList(HostRelatedSearchMixin, ListCreateAPIView): - always_allow_superuser = False model = models.Host serializer_class = serializers.HostSerializer @@ -1650,7 +1552,6 @@ class HostList(HostRelatedSearchMixin, ListCreateAPIView): class HostDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): - always_allow_superuser = False model = models.Host serializer_class = serializers.HostSerializer @@ -1662,13 +1563,11 @@ class HostDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): class HostAnsibleFactsDetail(RetrieveAPIView): - model = models.Host serializer_class = serializers.AnsibleFactsSerializer class InventoryHostsList(HostRelatedSearchMixin, SubListCreateAttachDetachAPIView): - model = models.Host serializer_class = serializers.HostSerializer parent_model = models.Inventory @@ -1722,7 +1621,6 @@ class HostAllGroupsList(SubListAPIView): class HostInventorySourcesList(SubListAPIView): - model = models.InventorySource serializer_class = serializers.InventorySourceSerializer parent_model = models.Host @@ -1737,7 +1635,6 @@ class HostSmartInventoriesList(SubListAPIView): class HostActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.Host @@ -1764,7 +1661,6 @@ class GatewayTimeout(APIException): class GroupList(ListCreateAPIView): - model = models.Group serializer_class = serializers.GroupSerializer @@ -1800,7 +1696,6 @@ class EnforceParentRelationshipMixin(object): class GroupChildrenList(EnforceParentRelationshipMixin, SubListCreateAttachDetachAPIView): - model = models.Group serializer_class = serializers.GroupSerializer parent_model = models.Group @@ -1829,7 +1724,6 @@ class GroupChildrenList(EnforceParentRelationshipMixin, SubListCreateAttachDetac class GroupPotentialChildrenList(SubListAPIView): - model = models.Group serializer_class = serializers.GroupSerializer parent_model = models.Group @@ -1887,7 +1781,6 @@ class GroupAllHostsList(HostRelatedSearchMixin, SubListAPIView): class GroupInventorySourcesList(SubListAPIView): - model = models.InventorySource serializer_class = serializers.InventorySourceSerializer parent_model = models.Group @@ -1895,7 +1788,6 @@ class GroupInventorySourcesList(SubListAPIView): class GroupActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.Group @@ -1910,7 +1802,6 @@ class GroupActivityStreamList(SubListAPIView): class GroupDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): - model = models.Group serializer_class = serializers.GroupSerializer @@ -1923,7 +1814,6 @@ class GroupDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): class InventoryGroupsList(SubListCreateAttachDetachAPIView): - model = models.Group serializer_class = serializers.GroupSerializer parent_model = models.Inventory @@ -1932,7 +1822,6 @@ class InventoryGroupsList(SubListCreateAttachDetachAPIView): class InventoryRootGroupsList(SubListCreateAttachDetachAPIView): - model = models.Group serializer_class = serializers.GroupSerializer parent_model = models.Inventory @@ -1947,32 +1836,27 @@ class InventoryRootGroupsList(SubListCreateAttachDetachAPIView): class BaseVariableData(RetrieveUpdateAPIView): - parser_classes = api_settings.DEFAULT_PARSER_CLASSES + [YAMLParser] renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES + [YAMLRenderer] permission_classes = (VariableDataPermission,) class InventoryVariableData(BaseVariableData): - model = models.Inventory serializer_class = serializers.InventoryVariableDataSerializer class HostVariableData(BaseVariableData): - model = models.Host serializer_class = serializers.HostVariableDataSerializer class GroupVariableData(BaseVariableData): - model = models.Group serializer_class = serializers.GroupVariableDataSerializer class InventoryScriptView(RetrieveAPIView): - model = models.Inventory serializer_class = serializers.InventoryScriptSerializer permission_classes = (TaskPermission,) @@ -2004,7 +1888,6 @@ class InventoryScriptView(RetrieveAPIView): class InventoryTreeView(RetrieveAPIView): - model = models.Inventory serializer_class = serializers.GroupTreeSerializer filter_backends = () @@ -2034,7 +1917,6 @@ class InventoryTreeView(RetrieveAPIView): class InventoryInventorySourcesList(SubListCreateAPIView): - name = _('Inventory Source List') model = models.InventorySource @@ -2094,20 +1976,17 @@ class InventoryInventorySourcesUpdate(RetrieveAPIView): class InventorySourceList(ListCreateAPIView): - model = models.InventorySource serializer_class = serializers.InventorySourceSerializer always_allow_superuser = False class InventorySourceDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): - model = models.InventorySource serializer_class = serializers.InventorySourceSerializer class InventorySourceSchedulesList(SubListCreateAPIView): - name = _("Inventory Source Schedules") model = models.Schedule @@ -2118,7 +1997,6 @@ class InventorySourceSchedulesList(SubListCreateAPIView): class InventorySourceActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.InventorySource @@ -2127,7 +2005,6 @@ class InventorySourceActivityStreamList(SubListAPIView): class InventorySourceNotificationTemplatesAnyList(SubListCreateAttachDetachAPIView): - model = models.NotificationTemplate serializer_class = serializers.NotificationTemplateSerializer parent_model = models.InventorySource @@ -2143,22 +2020,18 @@ class InventorySourceNotificationTemplatesAnyList(SubListCreateAttachDetachAPIVi class InventorySourceNotificationTemplatesStartedList(InventorySourceNotificationTemplatesAnyList): - relationship = 'notification_templates_started' class InventorySourceNotificationTemplatesErrorList(InventorySourceNotificationTemplatesAnyList): - relationship = 'notification_templates_error' class InventorySourceNotificationTemplatesSuccessList(InventorySourceNotificationTemplatesAnyList): - relationship = 'notification_templates_success' class InventorySourceHostsList(HostRelatedSearchMixin, SubListDestroyAPIView): - model = models.Host serializer_class = serializers.HostSerializer parent_model = models.InventorySource @@ -2187,7 +2060,6 @@ class InventorySourceHostsList(HostRelatedSearchMixin, SubListDestroyAPIView): class InventorySourceGroupsList(SubListDestroyAPIView): - model = models.Group serializer_class = serializers.GroupSerializer parent_model = models.InventorySource @@ -2213,7 +2085,6 @@ class InventorySourceGroupsList(SubListDestroyAPIView): class InventorySourceUpdatesList(SubListAPIView): - model = models.InventoryUpdate serializer_class = serializers.InventoryUpdateListSerializer parent_model = models.InventorySource @@ -2221,7 +2092,6 @@ class InventorySourceUpdatesList(SubListAPIView): class InventorySourceCredentialsList(SubListAttachDetachAPIView): - parent_model = models.InventorySource model = models.Credential serializer_class = serializers.CredentialSerializer @@ -2240,7 +2110,6 @@ class InventorySourceCredentialsList(SubListAttachDetachAPIView): class InventorySourceUpdateView(RetrieveAPIView): - model = models.InventorySource obj_permission_type = 'start' serializer_class = serializers.InventorySourceUpdateSerializer @@ -2264,19 +2133,16 @@ class InventorySourceUpdateView(RetrieveAPIView): class InventoryUpdateList(ListAPIView): - model = models.InventoryUpdate serializer_class = serializers.InventoryUpdateListSerializer class InventoryUpdateDetail(UnifiedJobDeletionMixin, RetrieveDestroyAPIView): - model = models.InventoryUpdate serializer_class = serializers.InventoryUpdateDetailSerializer class InventoryUpdateCredentialsList(SubListAPIView): - parent_model = models.InventoryUpdate model = models.Credential serializer_class = serializers.CredentialSerializer @@ -2284,13 +2150,11 @@ class InventoryUpdateCredentialsList(SubListAPIView): class InventoryUpdateCancel(GenericCancelView): - model = models.InventoryUpdate serializer_class = serializers.InventoryUpdateCancelSerializer class InventoryUpdateNotificationsList(SubListAPIView): - model = models.Notification serializer_class = serializers.NotificationSerializer parent_model = models.InventoryUpdate @@ -2299,7 +2163,6 @@ class InventoryUpdateNotificationsList(SubListAPIView): class JobTemplateList(ListCreateAPIView): - model = models.JobTemplate serializer_class = serializers.JobTemplateSerializer always_allow_superuser = False @@ -2313,14 +2176,12 @@ class JobTemplateList(ListCreateAPIView): class JobTemplateDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): - model = models.JobTemplate serializer_class = serializers.JobTemplateSerializer always_allow_superuser = False class JobTemplateLaunch(RetrieveAPIView): - model = models.JobTemplate obj_permission_type = 'start' serializer_class = serializers.JobLaunchSerializer @@ -2438,7 +2299,6 @@ class JobTemplateLaunch(RetrieveAPIView): class JobTemplateSchedulesList(SubListCreateAPIView): - name = _("Job Template Schedules") model = models.Schedule @@ -2449,7 +2309,6 @@ class JobTemplateSchedulesList(SubListCreateAPIView): class JobTemplateSurveySpec(GenericAPIView): - model = models.JobTemplate obj_permission_type = 'admin' serializer_class = serializers.EmptySerializer @@ -2627,12 +2486,10 @@ class JobTemplateSurveySpec(GenericAPIView): class WorkflowJobTemplateSurveySpec(JobTemplateSurveySpec): - model = models.WorkflowJobTemplate class JobTemplateActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.JobTemplate @@ -2641,29 +2498,24 @@ class JobTemplateActivityStreamList(SubListAPIView): class JobTemplateNotificationTemplatesAnyList(SubListCreateAttachDetachAPIView): - model = models.NotificationTemplate serializer_class = serializers.NotificationTemplateSerializer parent_model = models.JobTemplate class JobTemplateNotificationTemplatesStartedList(JobTemplateNotificationTemplatesAnyList): - relationship = 'notification_templates_started' class JobTemplateNotificationTemplatesErrorList(JobTemplateNotificationTemplatesAnyList): - relationship = 'notification_templates_error' class JobTemplateNotificationTemplatesSuccessList(JobTemplateNotificationTemplatesAnyList): - relationship = 'notification_templates_success' class JobTemplateCredentialsList(SubListCreateAttachDetachAPIView): - model = models.Credential serializer_class = serializers.CredentialSerializer parent_model = models.JobTemplate @@ -2690,12 +2542,10 @@ class JobTemplateCredentialsList(SubListCreateAttachDetachAPIView): class JobTemplateLabelList(LabelSubListCreateAttachDetachView): - parent_model = models.JobTemplate class JobTemplateCallback(GenericAPIView): - model = models.JobTemplate permission_classes = (JobTemplateCallbackPermission,) serializer_class = serializers.EmptySerializer @@ -2846,7 +2696,6 @@ class JobTemplateCallback(GenericAPIView): class JobTemplateJobsList(SubListAPIView): - model = models.Job serializer_class = serializers.JobListSerializer parent_model = models.JobTemplate @@ -2855,7 +2704,6 @@ class JobTemplateJobsList(SubListAPIView): class JobTemplateSliceWorkflowJobsList(SubListCreateAPIView): - model = models.WorkflowJob serializer_class = serializers.WorkflowJobListSerializer parent_model = models.JobTemplate @@ -2864,7 +2712,6 @@ class JobTemplateSliceWorkflowJobsList(SubListCreateAPIView): class JobTemplateInstanceGroupsList(SubListAttachDetachAPIView): - model = models.InstanceGroup serializer_class = serializers.InstanceGroupSerializer parent_model = models.JobTemplate @@ -2872,13 +2719,11 @@ class JobTemplateInstanceGroupsList(SubListAttachDetachAPIView): class JobTemplateAccessList(ResourceAccessList): - model = models.User # needs to be User for AccessLists's parent_model = models.JobTemplate class JobTemplateObjectRolesList(SubListAPIView): - model = models.Role serializer_class = serializers.RoleSerializer parent_model = models.JobTemplate @@ -2891,26 +2736,22 @@ class JobTemplateObjectRolesList(SubListAPIView): class JobTemplateCopy(CopyAPIView): - model = models.JobTemplate copy_return_serializer_class = serializers.JobTemplateSerializer class WorkflowJobNodeList(ListAPIView): - model = models.WorkflowJobNode serializer_class = serializers.WorkflowJobNodeListSerializer search_fields = ('unified_job_template__name', 'unified_job_template__description') class WorkflowJobNodeDetail(RetrieveAPIView): - model = models.WorkflowJobNode serializer_class = serializers.WorkflowJobNodeDetailSerializer class WorkflowJobNodeCredentialsList(SubListAPIView): - model = models.Credential serializer_class = serializers.CredentialSerializer parent_model = models.WorkflowJobNode @@ -2918,7 +2759,6 @@ class WorkflowJobNodeCredentialsList(SubListAPIView): class WorkflowJobNodeLabelsList(SubListAPIView): - model = models.Label serializer_class = serializers.LabelSerializer parent_model = models.WorkflowJobNode @@ -2926,7 +2766,6 @@ class WorkflowJobNodeLabelsList(SubListAPIView): class WorkflowJobNodeInstanceGroupsList(SubListAttachDetachAPIView): - model = models.InstanceGroup serializer_class = serializers.InstanceGroupSerializer parent_model = models.WorkflowJobNode @@ -2934,30 +2773,25 @@ class WorkflowJobNodeInstanceGroupsList(SubListAttachDetachAPIView): class WorkflowJobTemplateNodeList(ListCreateAPIView): - model = models.WorkflowJobTemplateNode serializer_class = serializers.WorkflowJobTemplateNodeSerializer search_fields = ('unified_job_template__name', 'unified_job_template__description') class WorkflowJobTemplateNodeDetail(RetrieveUpdateDestroyAPIView): - model = models.WorkflowJobTemplateNode serializer_class = serializers.WorkflowJobTemplateNodeDetailSerializer class WorkflowJobTemplateNodeCredentialsList(LaunchConfigCredentialsBase): - parent_model = models.WorkflowJobTemplateNode class WorkflowJobTemplateNodeLabelsList(LabelSubListCreateAttachDetachView): - parent_model = models.WorkflowJobTemplateNode class WorkflowJobTemplateNodeInstanceGroupsList(SubListAttachDetachAPIView): - model = models.InstanceGroup serializer_class = serializers.InstanceGroupSerializer parent_model = models.WorkflowJobTemplateNode @@ -2965,7 +2799,6 @@ class WorkflowJobTemplateNodeInstanceGroupsList(SubListAttachDetachAPIView): class WorkflowJobTemplateNodeChildrenBaseList(EnforceParentRelationshipMixin, SubListCreateAttachDetachAPIView): - model = models.WorkflowJobTemplateNode serializer_class = serializers.WorkflowJobTemplateNodeSerializer always_allow_superuser = True @@ -2985,7 +2818,6 @@ class WorkflowJobTemplateNodeChildrenBaseList(EnforceParentRelationshipMixin, Su return getattr(parent, self.relationship).all() def is_valid_relation(self, parent, sub, created=False): - if created: return None @@ -3015,7 +2847,6 @@ class WorkflowJobTemplateNodeChildrenBaseList(EnforceParentRelationshipMixin, Su class WorkflowJobTemplateNodeCreateApproval(RetrieveAPIView): - model = models.WorkflowJobTemplateNode serializer_class = serializers.WorkflowJobTemplateNodeCreateApprovalSerializer permission_classes = [] @@ -3054,7 +2885,6 @@ class WorkflowJobTemplateNodeAlwaysNodesList(WorkflowJobTemplateNodeChildrenBase class WorkflowJobNodeChildrenBaseList(SubListAPIView): - model = models.WorkflowJobNode serializer_class = serializers.WorkflowJobNodeListSerializer parent_model = models.WorkflowJobNode @@ -3083,21 +2913,18 @@ class WorkflowJobNodeAlwaysNodesList(WorkflowJobNodeChildrenBaseList): class WorkflowJobTemplateList(ListCreateAPIView): - model = models.WorkflowJobTemplate serializer_class = serializers.WorkflowJobTemplateSerializer always_allow_superuser = False class WorkflowJobTemplateDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): - model = models.WorkflowJobTemplate serializer_class = serializers.WorkflowJobTemplateSerializer always_allow_superuser = False class WorkflowJobTemplateCopy(CopyAPIView): - model = models.WorkflowJobTemplate copy_return_serializer_class = serializers.WorkflowJobTemplateSerializer @@ -3156,7 +2983,6 @@ class WorkflowJobTemplateLabelList(JobTemplateLabelList): class WorkflowJobTemplateLaunch(RetrieveAPIView): - model = models.WorkflowJobTemplate obj_permission_type = 'start' serializer_class = serializers.WorkflowJobLaunchSerializer @@ -3213,7 +3039,6 @@ class WorkflowJobTemplateLaunch(RetrieveAPIView): class WorkflowJobRelaunch(GenericAPIView): - model = models.WorkflowJob obj_permission_type = 'start' serializer_class = serializers.EmptySerializer @@ -3245,7 +3070,6 @@ class WorkflowJobRelaunch(GenericAPIView): class WorkflowJobTemplateWorkflowNodesList(SubListCreateAPIView): - model = models.WorkflowJobTemplateNode serializer_class = serializers.WorkflowJobTemplateNodeSerializer parent_model = models.WorkflowJobTemplate @@ -3258,7 +3082,6 @@ class WorkflowJobTemplateWorkflowNodesList(SubListCreateAPIView): class WorkflowJobTemplateJobsList(SubListAPIView): - model = models.WorkflowJob serializer_class = serializers.WorkflowJobListSerializer parent_model = models.WorkflowJobTemplate @@ -3267,7 +3090,6 @@ class WorkflowJobTemplateJobsList(SubListAPIView): class WorkflowJobTemplateSchedulesList(SubListCreateAPIView): - name = _("Workflow Job Template Schedules") model = models.Schedule @@ -3278,40 +3100,33 @@ class WorkflowJobTemplateSchedulesList(SubListCreateAPIView): class WorkflowJobTemplateNotificationTemplatesAnyList(SubListCreateAttachDetachAPIView): - model = models.NotificationTemplate serializer_class = serializers.NotificationTemplateSerializer parent_model = models.WorkflowJobTemplate class WorkflowJobTemplateNotificationTemplatesStartedList(WorkflowJobTemplateNotificationTemplatesAnyList): - relationship = 'notification_templates_started' class WorkflowJobTemplateNotificationTemplatesErrorList(WorkflowJobTemplateNotificationTemplatesAnyList): - relationship = 'notification_templates_error' class WorkflowJobTemplateNotificationTemplatesSuccessList(WorkflowJobTemplateNotificationTemplatesAnyList): - relationship = 'notification_templates_success' class WorkflowJobTemplateNotificationTemplatesApprovalList(WorkflowJobTemplateNotificationTemplatesAnyList): - relationship = 'notification_templates_approvals' class WorkflowJobTemplateAccessList(ResourceAccessList): - model = models.User # needs to be User for AccessLists's parent_model = models.WorkflowJobTemplate class WorkflowJobTemplateObjectRolesList(SubListAPIView): - model = models.Role serializer_class = serializers.RoleSerializer parent_model = models.WorkflowJobTemplate @@ -3324,7 +3139,6 @@ class WorkflowJobTemplateObjectRolesList(SubListAPIView): class WorkflowJobTemplateActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.WorkflowJobTemplate @@ -3339,19 +3153,16 @@ class WorkflowJobTemplateActivityStreamList(SubListAPIView): class WorkflowJobList(ListAPIView): - model = models.WorkflowJob serializer_class = serializers.WorkflowJobListSerializer class WorkflowJobDetail(UnifiedJobDeletionMixin, RetrieveDestroyAPIView): - model = models.WorkflowJob serializer_class = serializers.WorkflowJobSerializer class WorkflowJobWorkflowNodesList(SubListAPIView): - model = models.WorkflowJobNode serializer_class = serializers.WorkflowJobNodeListSerializer always_allow_superuser = True @@ -3365,7 +3176,6 @@ class WorkflowJobWorkflowNodesList(SubListAPIView): class WorkflowJobCancel(GenericCancelView): - model = models.WorkflowJob serializer_class = serializers.WorkflowJobCancelSerializer @@ -3376,7 +3186,6 @@ class WorkflowJobCancel(GenericCancelView): class WorkflowJobNotificationsList(SubListAPIView): - model = models.Notification serializer_class = serializers.NotificationSerializer parent_model = models.WorkflowJob @@ -3391,7 +3200,6 @@ class WorkflowJobNotificationsList(SubListAPIView): class WorkflowJobActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.WorkflowJob @@ -3400,7 +3208,6 @@ class WorkflowJobActivityStreamList(SubListAPIView): class SystemJobTemplateList(ListAPIView): - model = models.SystemJobTemplate serializer_class = serializers.SystemJobTemplateSerializer @@ -3411,13 +3218,11 @@ class SystemJobTemplateList(ListAPIView): class SystemJobTemplateDetail(RetrieveAPIView): - model = models.SystemJobTemplate serializer_class = serializers.SystemJobTemplateSerializer class SystemJobTemplateLaunch(GenericAPIView): - model = models.SystemJobTemplate obj_permission_type = 'start' serializer_class = serializers.EmptySerializer @@ -3438,7 +3243,6 @@ class SystemJobTemplateLaunch(GenericAPIView): class SystemJobTemplateSchedulesList(SubListCreateAPIView): - name = _("System Job Template Schedules") model = models.Schedule @@ -3449,7 +3253,6 @@ class SystemJobTemplateSchedulesList(SubListCreateAPIView): class SystemJobTemplateJobsList(SubListAPIView): - model = models.SystemJob serializer_class = serializers.SystemJobListSerializer parent_model = models.SystemJobTemplate @@ -3458,35 +3261,29 @@ class SystemJobTemplateJobsList(SubListAPIView): class SystemJobTemplateNotificationTemplatesAnyList(SubListCreateAttachDetachAPIView): - model = models.NotificationTemplate serializer_class = serializers.NotificationTemplateSerializer parent_model = models.SystemJobTemplate class SystemJobTemplateNotificationTemplatesStartedList(SystemJobTemplateNotificationTemplatesAnyList): - relationship = 'notification_templates_started' class SystemJobTemplateNotificationTemplatesErrorList(SystemJobTemplateNotificationTemplatesAnyList): - relationship = 'notification_templates_error' class SystemJobTemplateNotificationTemplatesSuccessList(SystemJobTemplateNotificationTemplatesAnyList): - relationship = 'notification_templates_success' class JobList(ListAPIView): - model = models.Job serializer_class = serializers.JobListSerializer class JobDetail(UnifiedJobDeletionMixin, RetrieveDestroyAPIView): - model = models.Job serializer_class = serializers.JobDetailSerializer @@ -3499,7 +3296,6 @@ class JobDetail(UnifiedJobDeletionMixin, RetrieveDestroyAPIView): class JobCredentialsList(SubListAPIView): - model = models.Credential serializer_class = serializers.CredentialSerializer parent_model = models.Job @@ -3507,7 +3303,6 @@ class JobCredentialsList(SubListAPIView): class JobLabelList(SubListAPIView): - model = models.Label serializer_class = serializers.LabelSerializer parent_model = models.Job @@ -3520,7 +3315,6 @@ class WorkflowJobLabelList(JobLabelList): class JobActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.Job @@ -3529,13 +3323,11 @@ class JobActivityStreamList(SubListAPIView): class JobCancel(GenericCancelView): - model = models.Job serializer_class = serializers.JobCancelSerializer class JobRelaunch(RetrieveAPIView): - model = models.Job obj_permission_type = 'start' serializer_class = serializers.JobRelaunchSerializer @@ -3620,7 +3412,6 @@ class JobRelaunch(RetrieveAPIView): class JobCreateSchedule(RetrieveAPIView): - model = models.Job obj_permission_type = 'start' serializer_class = serializers.JobCreateScheduleSerializer @@ -3681,7 +3472,6 @@ class JobCreateSchedule(RetrieveAPIView): class JobNotificationsList(SubListAPIView): - model = models.Notification serializer_class = serializers.NotificationSerializer parent_model = models.Job @@ -3690,7 +3480,6 @@ class JobNotificationsList(SubListAPIView): class BaseJobHostSummariesList(SubListAPIView): - model = models.JobHostSummary serializer_class = serializers.JobHostSummarySerializer parent_model = None # Subclasses must define this attribute. @@ -3705,28 +3494,23 @@ class BaseJobHostSummariesList(SubListAPIView): class HostJobHostSummariesList(BaseJobHostSummariesList): - parent_model = models.Host class GroupJobHostSummariesList(BaseJobHostSummariesList): - parent_model = models.Group class JobJobHostSummariesList(BaseJobHostSummariesList): - parent_model = models.Job class JobHostSummaryDetail(RetrieveAPIView): - model = models.JobHostSummary serializer_class = serializers.JobHostSummarySerializer class JobEventDetail(RetrieveAPIView): - serializer_class = serializers.JobEventSerializer @property @@ -3748,7 +3532,6 @@ class JobEventDetail(RetrieveAPIView): class JobEventChildrenList(NoTruncateMixin, SubListAPIView): - serializer_class = serializers.JobEventSerializer relationship = 'children' name = _('Job Event Children List') @@ -3777,7 +3560,6 @@ class JobEventChildrenList(NoTruncateMixin, SubListAPIView): class BaseJobEventsList(NoTruncateMixin, SubListAPIView): - model = models.JobEvent serializer_class = serializers.JobEventSerializer parent_model = None # Subclasses must define this attribute. @@ -3791,7 +3573,6 @@ class BaseJobEventsList(NoTruncateMixin, SubListAPIView): class HostJobEventsList(BaseJobEventsList): - parent_model = models.Host def get_queryset(self): @@ -3802,12 +3583,10 @@ class HostJobEventsList(BaseJobEventsList): class GroupJobEventsList(BaseJobEventsList): - parent_model = models.Group class JobJobEventsList(BaseJobEventsList): - parent_model = models.Job pagination_class = UnifiedJobEventPagination @@ -3818,7 +3597,6 @@ class JobJobEventsList(BaseJobEventsList): class JobJobEventsChildrenSummary(APIView): - renderer_classes = [JSONRenderer] meta_events = ('debug', 'verbose', 'warning', 'error', 'system_warning', 'deprecated') @@ -3924,7 +3702,6 @@ class JobJobEventsChildrenSummary(APIView): class AdHocCommandList(ListCreateAPIView): - model = models.AdHocCommand serializer_class = serializers.AdHocCommandListSerializer always_allow_superuser = False @@ -3979,38 +3756,32 @@ class AdHocCommandList(ListCreateAPIView): class InventoryAdHocCommandsList(AdHocCommandList, SubListCreateAPIView): - parent_model = models.Inventory relationship = 'ad_hoc_commands' parent_key = 'inventory' class GroupAdHocCommandsList(AdHocCommandList, SubListCreateAPIView): - parent_model = models.Group relationship = 'ad_hoc_commands' class HostAdHocCommandsList(AdHocCommandList, SubListCreateAPIView): - parent_model = models.Host relationship = 'ad_hoc_commands' class AdHocCommandDetail(UnifiedJobDeletionMixin, RetrieveDestroyAPIView): - model = models.AdHocCommand serializer_class = serializers.AdHocCommandDetailSerializer class AdHocCommandCancel(GenericCancelView): - model = models.AdHocCommand serializer_class = serializers.AdHocCommandCancelSerializer class AdHocCommandRelaunch(GenericAPIView): - model = models.AdHocCommand obj_permission_type = 'start' serializer_class = serializers.AdHocCommandRelaunchSerializer @@ -4064,7 +3835,6 @@ class AdHocCommandRelaunch(GenericAPIView): class AdHocCommandEventDetail(RetrieveAPIView): - model = models.AdHocCommandEvent serializer_class = serializers.AdHocCommandEventSerializer @@ -4075,7 +3845,6 @@ class AdHocCommandEventDetail(RetrieveAPIView): class BaseAdHocCommandEventsList(NoTruncateMixin, SubListAPIView): - model = models.AdHocCommandEvent serializer_class = serializers.AdHocCommandEventSerializer parent_model = None # Subclasses must define this attribute. @@ -4091,7 +3860,6 @@ class BaseAdHocCommandEventsList(NoTruncateMixin, SubListAPIView): class HostAdHocCommandEventsList(BaseAdHocCommandEventsList): - parent_model = models.Host def get_queryset(self): @@ -4103,12 +3871,10 @@ class HostAdHocCommandEventsList(BaseAdHocCommandEventsList): class AdHocCommandAdHocCommandEventsList(BaseAdHocCommandEventsList): - parent_model = models.AdHocCommand class AdHocCommandActivityStreamList(SubListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer parent_model = models.AdHocCommand @@ -4117,7 +3883,6 @@ class AdHocCommandActivityStreamList(SubListAPIView): class AdHocCommandNotificationsList(SubListAPIView): - model = models.Notification serializer_class = serializers.NotificationSerializer parent_model = models.AdHocCommand @@ -4126,7 +3891,6 @@ class AdHocCommandNotificationsList(SubListAPIView): class SystemJobList(ListAPIView): - model = models.SystemJob serializer_class = serializers.SystemJobListSerializer @@ -4137,19 +3901,16 @@ class SystemJobList(ListAPIView): class SystemJobDetail(UnifiedJobDeletionMixin, RetrieveDestroyAPIView): - model = models.SystemJob serializer_class = serializers.SystemJobSerializer class SystemJobCancel(GenericCancelView): - model = models.SystemJob serializer_class = serializers.SystemJobCancelSerializer class SystemJobNotificationsList(SubListAPIView): - model = models.Notification serializer_class = serializers.NotificationSerializer parent_model = models.SystemJob @@ -4158,14 +3919,12 @@ class SystemJobNotificationsList(SubListAPIView): class UnifiedJobTemplateList(ListAPIView): - model = models.UnifiedJobTemplate serializer_class = serializers.UnifiedJobTemplateSerializer search_fields = ('description', 'name', 'jobtemplate__playbook') class UnifiedJobList(ListAPIView): - model = models.UnifiedJob serializer_class = serializers.UnifiedJobListSerializer search_fields = ('description', 'name', 'job__playbook') @@ -4211,7 +3970,6 @@ class StdoutFilter(object): class UnifiedJobStdout(RetrieveAPIView): - authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES serializer_class = serializers.UnifiedJobStdoutSerializer renderer_classes = [ @@ -4285,33 +4043,27 @@ class UnifiedJobStdout(RetrieveAPIView): class ProjectUpdateStdout(UnifiedJobStdout): - model = models.ProjectUpdate class InventoryUpdateStdout(UnifiedJobStdout): - model = models.InventoryUpdate class JobStdout(UnifiedJobStdout): - model = models.Job class AdHocCommandStdout(UnifiedJobStdout): - model = models.AdHocCommand class NotificationTemplateList(ListCreateAPIView): - model = models.NotificationTemplate serializer_class = serializers.NotificationTemplateSerializer class NotificationTemplateDetail(RetrieveUpdateDestroyAPIView): - model = models.NotificationTemplate serializer_class = serializers.NotificationTemplateSerializer @@ -4357,7 +4109,6 @@ class NotificationTemplateTest(GenericAPIView): class NotificationTemplateNotificationList(SubListAPIView): - model = models.Notification serializer_class = serializers.NotificationSerializer parent_model = models.NotificationTemplate @@ -4367,39 +4118,33 @@ class NotificationTemplateNotificationList(SubListAPIView): class NotificationTemplateCopy(CopyAPIView): - model = models.NotificationTemplate copy_return_serializer_class = serializers.NotificationTemplateSerializer class NotificationList(ListAPIView): - model = models.Notification serializer_class = serializers.NotificationSerializer search_fields = ('subject', 'notification_type', 'body') class NotificationDetail(RetrieveAPIView): - model = models.Notification serializer_class = serializers.NotificationSerializer class ActivityStreamList(SimpleListAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer search_fields = ('changes',) class ActivityStreamDetail(RetrieveAPIView): - model = models.ActivityStream serializer_class = serializers.ActivityStreamSerializer class RoleList(ListAPIView): - model = models.Role serializer_class = serializers.RoleSerializer permission_classes = (IsAuthenticated,) @@ -4407,13 +4152,11 @@ class RoleList(ListAPIView): class RoleDetail(RetrieveAPIView): - model = models.Role serializer_class = serializers.RoleSerializer class RoleUsersList(SubListAttachDetachAPIView): - model = models.User serializer_class = serializers.UserSerializer parent_model = models.Role @@ -4448,7 +4191,6 @@ class RoleUsersList(SubListAttachDetachAPIView): class RoleTeamsList(SubListAttachDetachAPIView): - model = models.Team serializer_class = serializers.TeamSerializer parent_model = models.Role @@ -4497,7 +4239,6 @@ class RoleTeamsList(SubListAttachDetachAPIView): class RoleParentsList(SubListAPIView): - model = models.Role serializer_class = serializers.RoleSerializer parent_model = models.Role @@ -4511,7 +4252,6 @@ class RoleParentsList(SubListAPIView): class RoleChildrenList(SubListAPIView): - model = models.Role serializer_class = serializers.RoleSerializer parent_model = models.Role @@ -4536,13 +4276,11 @@ for attr, value in list(locals().items()): class WorkflowApprovalTemplateDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): - model = models.WorkflowApprovalTemplate serializer_class = serializers.WorkflowApprovalTemplateSerializer class WorkflowApprovalTemplateJobsList(SubListAPIView): - model = models.WorkflowApproval serializer_class = serializers.WorkflowApprovalListSerializer parent_model = models.WorkflowApprovalTemplate @@ -4551,7 +4289,6 @@ class WorkflowApprovalTemplateJobsList(SubListAPIView): class WorkflowApprovalList(ListCreateAPIView): - model = models.WorkflowApproval serializer_class = serializers.WorkflowApprovalListSerializer @@ -4560,7 +4297,6 @@ class WorkflowApprovalList(ListCreateAPIView): class WorkflowApprovalDetail(UnifiedJobDeletionMixin, RetrieveDestroyAPIView): - model = models.WorkflowApproval serializer_class = serializers.WorkflowApprovalSerializer diff --git a/awx/api/views/instance_install_bundle.py b/awx/api/views/instance_install_bundle.py index 9b2ac0563c..3f65abfc6d 100644 --- a/awx/api/views/instance_install_bundle.py +++ b/awx/api/views/instance_install_bundle.py @@ -25,6 +25,7 @@ from rest_framework import status # Red Hat has an OID namespace (RHANANA). Receptor has its own designation under that. RECEPTOR_OID = "1.3.6.1.4.1.2312.19.1" + # generate install bundle for the instance # install bundle directory structure # ├── install_receptor.yml (playbook) @@ -40,7 +41,6 @@ RECEPTOR_OID = "1.3.6.1.4.1.2312.19.1" # │ └── work-public-key.pem # └── requirements.yml class InstanceInstallBundle(GenericAPIView): - name = _('Install Bundle') model = models.Instance serializer_class = serializers.InstanceSerializer diff --git a/awx/api/views/inventory.py b/awx/api/views/inventory.py index 31b9cf23ae..72b04d7d8b 100644 --- a/awx/api/views/inventory.py +++ b/awx/api/views/inventory.py @@ -46,7 +46,6 @@ logger = logging.getLogger('awx.api.views.organization') class InventoryUpdateEventsList(SubListAPIView): - model = InventoryUpdateEvent serializer_class = InventoryUpdateEventSerializer parent_model = InventoryUpdate @@ -66,13 +65,11 @@ class InventoryUpdateEventsList(SubListAPIView): class InventoryList(ListCreateAPIView): - model = Inventory serializer_class = InventorySerializer class InventoryDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): - model = Inventory serializer_class = InventorySerializer @@ -98,7 +95,6 @@ class InventoryDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIVie class InventoryActivityStreamList(SubListAPIView): - model = ActivityStream serializer_class = ActivityStreamSerializer parent_model = Inventory @@ -113,7 +109,6 @@ class InventoryActivityStreamList(SubListAPIView): class InventoryInstanceGroupsList(SubListAttachDetachAPIView): - model = InstanceGroup serializer_class = InstanceGroupSerializer parent_model = Inventory @@ -121,13 +116,11 @@ class InventoryInstanceGroupsList(SubListAttachDetachAPIView): class InventoryAccessList(ResourceAccessList): - model = User # needs to be User for AccessLists's parent_model = Inventory class InventoryObjectRolesList(SubListAPIView): - model = Role serializer_class = RoleSerializer parent_model = Inventory @@ -140,7 +133,6 @@ class InventoryObjectRolesList(SubListAPIView): class InventoryJobTemplateList(SubListAPIView): - model = JobTemplate serializer_class = JobTemplateSerializer parent_model = Inventory @@ -154,11 +146,9 @@ class InventoryJobTemplateList(SubListAPIView): class InventoryLabelList(LabelSubListCreateAttachDetachView): - parent_model = Inventory class InventoryCopy(CopyAPIView): - model = Inventory copy_return_serializer_class = InventorySerializer diff --git a/awx/api/views/labels.py b/awx/api/views/labels.py index 95a7f42941..a1099143da 100644 --- a/awx/api/views/labels.py +++ b/awx/api/views/labels.py @@ -59,13 +59,11 @@ class LabelSubListCreateAttachDetachView(SubListCreateAttachDetachAPIView): class LabelDetail(RetrieveUpdateAPIView): - model = Label serializer_class = LabelSerializer class LabelList(ListCreateAPIView): - name = _("Labels") model = Label serializer_class = LabelSerializer diff --git a/awx/api/views/mesh_visualizer.py b/awx/api/views/mesh_visualizer.py index e790069700..d09dab0732 100644 --- a/awx/api/views/mesh_visualizer.py +++ b/awx/api/views/mesh_visualizer.py @@ -10,13 +10,11 @@ from awx.main.models import InstanceLink, Instance class MeshVisualizer(APIView): - name = _("Mesh Visualizer") permission_classes = (IsSystemAdminOrAuditor,) swagger_topic = "System Configuration" def get(self, request, format=None): - data = { 'nodes': InstanceNodeSerializer(Instance.objects.all(), many=True).data, 'links': InstanceLinkSerializer(InstanceLink.objects.select_related('target', 'source'), many=True).data, diff --git a/awx/api/views/metrics.py b/awx/api/views/metrics.py index 4c05819f13..a5a628f510 100644 --- a/awx/api/views/metrics.py +++ b/awx/api/views/metrics.py @@ -27,7 +27,6 @@ logger = logging.getLogger('awx.analytics') class MetricsView(APIView): - name = _('Metrics') swagger_topic = 'Metrics' diff --git a/awx/api/views/organization.py b/awx/api/views/organization.py index 099edcadb0..ece00c157b 100644 --- a/awx/api/views/organization.py +++ b/awx/api/views/organization.py @@ -58,7 +58,6 @@ logger = logging.getLogger('awx.api.views.organization') class OrganizationList(OrganizationCountsMixin, ListCreateAPIView): - model = Organization serializer_class = OrganizationSerializer @@ -70,7 +69,6 @@ class OrganizationList(OrganizationCountsMixin, ListCreateAPIView): class OrganizationDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPIView): - model = Organization serializer_class = OrganizationSerializer @@ -106,7 +104,6 @@ class OrganizationDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPI class OrganizationInventoriesList(SubListAPIView): - model = Inventory serializer_class = InventorySerializer parent_model = Organization @@ -114,7 +111,6 @@ class OrganizationInventoriesList(SubListAPIView): class OrganizationUsersList(BaseUsersList): - model = User serializer_class = UserSerializer parent_model = Organization @@ -123,7 +119,6 @@ class OrganizationUsersList(BaseUsersList): class OrganizationAdminsList(BaseUsersList): - model = User serializer_class = UserSerializer parent_model = Organization @@ -132,7 +127,6 @@ class OrganizationAdminsList(BaseUsersList): class OrganizationProjectsList(SubListCreateAPIView): - model = Project serializer_class = ProjectSerializer parent_model = Organization @@ -140,7 +134,6 @@ class OrganizationProjectsList(SubListCreateAPIView): class OrganizationExecutionEnvironmentsList(SubListCreateAttachDetachAPIView): - model = ExecutionEnvironment serializer_class = ExecutionEnvironmentSerializer parent_model = Organization @@ -150,7 +143,6 @@ class OrganizationExecutionEnvironmentsList(SubListCreateAttachDetachAPIView): class OrganizationJobTemplatesList(SubListCreateAPIView): - model = JobTemplate serializer_class = JobTemplateSerializer parent_model = Organization @@ -158,7 +150,6 @@ class OrganizationJobTemplatesList(SubListCreateAPIView): class OrganizationWorkflowJobTemplatesList(SubListCreateAPIView): - model = WorkflowJobTemplate serializer_class = WorkflowJobTemplateSerializer parent_model = Organization @@ -166,7 +157,6 @@ class OrganizationWorkflowJobTemplatesList(SubListCreateAPIView): class OrganizationTeamsList(SubListCreateAttachDetachAPIView): - model = Team serializer_class = TeamSerializer parent_model = Organization @@ -175,7 +165,6 @@ class OrganizationTeamsList(SubListCreateAttachDetachAPIView): class OrganizationActivityStreamList(SubListAPIView): - model = ActivityStream serializer_class = ActivityStreamSerializer parent_model = Organization @@ -184,7 +173,6 @@ class OrganizationActivityStreamList(SubListAPIView): class OrganizationNotificationTemplatesList(SubListCreateAttachDetachAPIView): - model = NotificationTemplate serializer_class = NotificationTemplateSerializer parent_model = Organization @@ -193,34 +181,28 @@ class OrganizationNotificationTemplatesList(SubListCreateAttachDetachAPIView): class OrganizationNotificationTemplatesAnyList(SubListCreateAttachDetachAPIView): - model = NotificationTemplate serializer_class = NotificationTemplateSerializer parent_model = Organization class OrganizationNotificationTemplatesStartedList(OrganizationNotificationTemplatesAnyList): - relationship = 'notification_templates_started' class OrganizationNotificationTemplatesErrorList(OrganizationNotificationTemplatesAnyList): - relationship = 'notification_templates_error' class OrganizationNotificationTemplatesSuccessList(OrganizationNotificationTemplatesAnyList): - relationship = 'notification_templates_success' class OrganizationNotificationTemplatesApprovalList(OrganizationNotificationTemplatesAnyList): - relationship = 'notification_templates_approvals' class OrganizationInstanceGroupsList(SubListAttachDetachAPIView): - model = InstanceGroup serializer_class = InstanceGroupSerializer parent_model = Organization @@ -228,7 +210,6 @@ class OrganizationInstanceGroupsList(SubListAttachDetachAPIView): class OrganizationGalaxyCredentialsList(SubListAttachDetachAPIView): - model = Credential serializer_class = CredentialSerializer parent_model = Organization @@ -240,13 +221,11 @@ class OrganizationGalaxyCredentialsList(SubListAttachDetachAPIView): class OrganizationAccessList(ResourceAccessList): - model = User # needs to be User for AccessLists's parent_model = Organization class OrganizationObjectRolesList(SubListAPIView): - model = Role serializer_class = RoleSerializer parent_model = Organization diff --git a/awx/api/views/root.py b/awx/api/views/root.py index d879e4537e..01a742bf74 100644 --- a/awx/api/views/root.py +++ b/awx/api/views/root.py @@ -36,7 +36,6 @@ logger = logging.getLogger('awx.api.views.root') class ApiRootView(APIView): - permission_classes = (AllowAny,) name = _('REST API') versioning_class = None @@ -59,7 +58,6 @@ class ApiRootView(APIView): class ApiOAuthAuthorizationRootView(APIView): - permission_classes = (AllowAny,) name = _("API OAuth 2 Authorization Root") versioning_class = None @@ -74,7 +72,6 @@ class ApiOAuthAuthorizationRootView(APIView): class ApiVersionRootView(APIView): - permission_classes = (AllowAny,) swagger_topic = 'Versioning' @@ -172,7 +169,6 @@ class ApiV2PingView(APIView): class ApiV2SubscriptionView(APIView): - permission_classes = (IsAuthenticated,) name = _('Subscriptions') swagger_topic = 'System Configuration' @@ -212,7 +208,6 @@ class ApiV2SubscriptionView(APIView): class ApiV2AttachView(APIView): - permission_classes = (IsAuthenticated,) name = _('Attach Subscription') swagger_topic = 'System Configuration' @@ -230,7 +225,6 @@ class ApiV2AttachView(APIView): user = getattr(settings, 'SUBSCRIPTIONS_USERNAME', None) pw = getattr(settings, 'SUBSCRIPTIONS_PASSWORD', None) if pool_id and user and pw: - data = request.data.copy() try: with set_environ(**settings.AWX_TASK_ENV): @@ -258,7 +252,6 @@ class ApiV2AttachView(APIView): class ApiV2ConfigView(APIView): - permission_classes = (IsAuthenticated,) name = _('Configuration') swagger_topic = 'System Configuration' diff --git a/awx/conf/apps.py b/awx/conf/apps.py index 811baba262..49993d6203 100644 --- a/awx/conf/apps.py +++ b/awx/conf/apps.py @@ -8,7 +8,6 @@ from django.utils.translation import gettext_lazy as _ class ConfConfig(AppConfig): - name = 'awx.conf' verbose_name = _('Configuration') @@ -16,7 +15,6 @@ class ConfConfig(AppConfig): self.module.autodiscover() if not set(sys.argv) & {'migrate', 'check_migrations'}: - from .settings import SettingsWrapper SettingsWrapper.initialize() diff --git a/awx/conf/fields.py b/awx/conf/fields.py index 7802b2a085..0073e473fd 100644 --- a/awx/conf/fields.py +++ b/awx/conf/fields.py @@ -47,7 +47,6 @@ class IntegerField(IntegerField): class StringListField(ListField): - child = CharField() def to_representation(self, value): @@ -57,7 +56,6 @@ class StringListField(ListField): class StringListBooleanField(ListField): - default_error_messages = {'type_error': _('Expected None, True, False, a string or list of strings but got {input_type} instead.')} child = CharField() @@ -96,7 +94,6 @@ class StringListBooleanField(ListField): class StringListPathField(StringListField): - default_error_messages = {'type_error': _('Expected list of strings but got {input_type} instead.'), 'path_error': _('{path} is not a valid path choice.')} def to_internal_value(self, paths): @@ -126,7 +123,6 @@ class StringListIsolatedPathField(StringListField): } def to_internal_value(self, paths): - if isinstance(paths, (list, tuple)): for p in paths: if not isinstance(p, str): diff --git a/awx/conf/migrations/0001_initial.py b/awx/conf/migrations/0001_initial.py index ffde1c4bd6..a473ef07f7 100644 --- a/awx/conf/migrations/0001_initial.py +++ b/awx/conf/migrations/0001_initial.py @@ -8,7 +8,6 @@ import awx.main.fields class Migration(migrations.Migration): - dependencies = [migrations.swappable_dependency(settings.AUTH_USER_MODEL)] operations = [ diff --git a/awx/conf/migrations/0002_v310_copy_tower_settings.py b/awx/conf/migrations/0002_v310_copy_tower_settings.py index be036b38a6..433ba77ae3 100644 --- a/awx/conf/migrations/0002_v310_copy_tower_settings.py +++ b/awx/conf/migrations/0002_v310_copy_tower_settings.py @@ -48,7 +48,6 @@ def revert_tower_settings(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [('conf', '0001_initial'), ('main', '0004_squashed_v310_release')] run_before = [('main', '0005_squashed_v310_v313_updates')] diff --git a/awx/conf/migrations/0003_v310_JSONField_changes.py b/awx/conf/migrations/0003_v310_JSONField_changes.py index 6c0b5cba98..f4ea1b0b34 100644 --- a/awx/conf/migrations/0003_v310_JSONField_changes.py +++ b/awx/conf/migrations/0003_v310_JSONField_changes.py @@ -7,7 +7,6 @@ import awx.main.fields class Migration(migrations.Migration): - dependencies = [('conf', '0002_v310_copy_tower_settings')] operations = [migrations.AlterField(model_name='setting', name='value', field=awx.main.fields.JSONBlob(null=True))] diff --git a/awx/conf/migrations/0004_v320_reencrypt.py b/awx/conf/migrations/0004_v320_reencrypt.py index de74493283..a73ea409fe 100644 --- a/awx/conf/migrations/0004_v320_reencrypt.py +++ b/awx/conf/migrations/0004_v320_reencrypt.py @@ -5,7 +5,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [('conf', '0003_v310_JSONField_changes')] operations = [ diff --git a/awx/conf/migrations/0005_v330_rename_two_session_settings.py b/awx/conf/migrations/0005_v330_rename_two_session_settings.py index f1034ee50a..b239a4cbe7 100644 --- a/awx/conf/migrations/0005_v330_rename_two_session_settings.py +++ b/awx/conf/migrations/0005_v330_rename_two_session_settings.py @@ -15,7 +15,6 @@ def reverse_copy_session_settings(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [('conf', '0004_v320_reencrypt')] operations = [migrations.RunPython(copy_session_settings, reverse_copy_session_settings)] diff --git a/awx/conf/migrations/0006_v331_ldap_group_type.py b/awx/conf/migrations/0006_v331_ldap_group_type.py index b53255f29e..9b7bf4e6ec 100644 --- a/awx/conf/migrations/0006_v331_ldap_group_type.py +++ b/awx/conf/migrations/0006_v331_ldap_group_type.py @@ -8,7 +8,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [('conf', '0005_v330_rename_two_session_settings')] operations = [migrations.RunPython(fill_ldap_group_type_params)] diff --git a/awx/conf/migrations/0007_v380_rename_more_settings.py b/awx/conf/migrations/0007_v380_rename_more_settings.py index 2a007d0f45..60548a8b73 100644 --- a/awx/conf/migrations/0007_v380_rename_more_settings.py +++ b/awx/conf/migrations/0007_v380_rename_more_settings.py @@ -9,7 +9,6 @@ def copy_allowed_ips(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [('conf', '0006_v331_ldap_group_type')] operations = [migrations.RunPython(copy_allowed_ips)] diff --git a/awx/conf/migrations/0008_subscriptions.py b/awx/conf/migrations/0008_subscriptions.py index 991e366264..82c0cfc30f 100644 --- a/awx/conf/migrations/0008_subscriptions.py +++ b/awx/conf/migrations/0008_subscriptions.py @@ -14,7 +14,6 @@ def _noop(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [('conf', '0007_v380_rename_more_settings')] operations = [migrations.RunPython(clear_old_license, _noop), migrations.RunPython(prefill_rh_credentials, _noop)] diff --git a/awx/conf/migrations/0009_rename_proot_settings.py b/awx/conf/migrations/0009_rename_proot_settings.py index 2b0e2175aa..d7d83c94c9 100644 --- a/awx/conf/migrations/0009_rename_proot_settings.py +++ b/awx/conf/migrations/0009_rename_proot_settings.py @@ -10,7 +10,6 @@ def rename_proot_settings(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [('conf', '0008_subscriptions')] operations = [migrations.RunPython(rename_proot_settings)] diff --git a/awx/conf/migrations/_rename_setting.py b/awx/conf/migrations/_rename_setting.py index b739b877d9..cd922c459f 100644 --- a/awx/conf/migrations/_rename_setting.py +++ b/awx/conf/migrations/_rename_setting.py @@ -10,7 +10,6 @@ __all__ = ['rename_setting'] def rename_setting(apps, schema_editor, old_key, new_key): - old_setting = None Setting = apps.get_model('conf', 'Setting') if Setting.objects.filter(key=new_key).exists() or hasattr(settings, new_key): diff --git a/awx/conf/models.py b/awx/conf/models.py index 79bc572d57..900db1e185 100644 --- a/awx/conf/models.py +++ b/awx/conf/models.py @@ -17,7 +17,6 @@ __all__ = ['Setting'] class Setting(CreatedModifiedModel): - key = models.CharField(max_length=255) value = JSONBlob(null=True) user = prevent_search(models.ForeignKey('auth.User', related_name='settings', default=None, null=True, editable=False, on_delete=models.CASCADE)) diff --git a/awx/conf/settings.py b/awx/conf/settings.py index 70e40fadcc..3f364dc058 100644 --- a/awx/conf/settings.py +++ b/awx/conf/settings.py @@ -104,7 +104,6 @@ def filter_sensitive(registry, key, value): class TransientSetting(object): - __slots__ = ('pk', 'value') def __init__(self, pk, value): diff --git a/awx/conf/tests/unit/test_fields.py b/awx/conf/tests/unit/test_fields.py index 7eb4b450fd..7d7b3dff9c 100644 --- a/awx/conf/tests/unit/test_fields.py +++ b/awx/conf/tests/unit/test_fields.py @@ -5,7 +5,6 @@ from awx.conf.fields import StringListBooleanField, StringListPathField, ListTup class TestStringListBooleanField: - FIELD_VALUES = [ ("hello", "hello"), (("a", "b"), ["a", "b"]), @@ -53,7 +52,6 @@ class TestStringListBooleanField: class TestListTuplesField: - FIELD_VALUES = [([('a', 'b'), ('abc', '123')], [("a", "b"), ("abc", "123")])] FIELD_VALUES_INVALID = [("abc", type("abc")), ([('a', 'b', 'c'), ('abc', '123', '456')], type(('a',))), (['a', 'b'], type('a')), (123, type(123))] @@ -73,7 +71,6 @@ class TestListTuplesField: class TestStringListPathField: - FIELD_VALUES = [ ((".", "..", "/"), [".", "..", "/"]), (("/home",), ["/home"]), diff --git a/awx/conf/views.py b/awx/conf/views.py index b2b312d834..f7190737fa 100644 --- a/awx/conf/views.py +++ b/awx/conf/views.py @@ -36,7 +36,6 @@ SettingCategory = collections.namedtuple('SettingCategory', ('url', 'slug', 'nam class SettingCategoryList(ListAPIView): - model = Setting # Not exactly, but needed for the view. serializer_class = SettingCategorySerializer filter_backends = [] @@ -58,7 +57,6 @@ class SettingCategoryList(ListAPIView): class SettingSingletonDetail(RetrieveUpdateDestroyAPIView): - model = Setting # Not exactly, but needed for the view. serializer_class = SettingSingletonSerializer filter_backends = [] @@ -146,7 +144,6 @@ class SettingSingletonDetail(RetrieveUpdateDestroyAPIView): class SettingLoggingTest(GenericAPIView): - name = _('Logging Connectivity Test') model = Setting serializer_class = SettingSingletonSerializer diff --git a/awx/main/access.py b/awx/main/access.py index 71e49d4623..5d0ab8464b 100644 --- a/awx/main/access.py +++ b/awx/main/access.py @@ -561,7 +561,6 @@ class NotificationAttachMixin(BaseAccess): class InstanceAccess(BaseAccess): - model = Instance prefetch_related = ('rampart_groups',) @@ -579,7 +578,6 @@ class InstanceAccess(BaseAccess): return super(InstanceAccess, self).can_unattach(obj, sub_obj, relationship, relationship, data=data) def can_add(self, data): - return self.user.is_superuser def can_change(self, obj, data): @@ -590,7 +588,6 @@ class InstanceAccess(BaseAccess): class InstanceGroupAccess(BaseAccess): - model = InstanceGroup prefetch_related = ('instances',) @@ -2352,7 +2349,6 @@ class JobEventAccess(BaseAccess): class UnpartitionedJobEventAccess(JobEventAccess): - model = UnpartitionedJobEvent diff --git a/awx/main/apps.py b/awx/main/apps.py index abd3332fd0..7db39ca088 100644 --- a/awx/main/apps.py +++ b/awx/main/apps.py @@ -3,6 +3,5 @@ from django.utils.translation import gettext_lazy as _ class MainConfig(AppConfig): - name = 'awx.main' verbose_name = _('Main') diff --git a/awx/main/dispatch/control.py b/awx/main/dispatch/control.py index 2807bdbe19..d62444149b 100644 --- a/awx/main/dispatch/control.py +++ b/awx/main/dispatch/control.py @@ -14,7 +14,6 @@ logger = logging.getLogger('awx.main.dispatch') class Control(object): - services = ('dispatcher', 'callback_receiver') result = None diff --git a/awx/main/dispatch/pool.py b/awx/main/dispatch/pool.py index 3310f06997..dd2fdffa2a 100644 --- a/awx/main/dispatch/pool.py +++ b/awx/main/dispatch/pool.py @@ -192,7 +192,6 @@ class PoolWorker(object): class StatefulPoolWorker(PoolWorker): - track_managed_tasks = True diff --git a/awx/main/dispatch/publish.py b/awx/main/dispatch/publish.py index 3cfc07af15..df5beb1bb4 100644 --- a/awx/main/dispatch/publish.py +++ b/awx/main/dispatch/publish.py @@ -66,7 +66,6 @@ class task: bind_kwargs = self.bind_kwargs class PublisherMixin(object): - queue = None @classmethod diff --git a/awx/main/dispatch/worker/base.py b/awx/main/dispatch/worker/base.py index 25664d9737..a7b0d83e95 100644 --- a/awx/main/dispatch/worker/base.py +++ b/awx/main/dispatch/worker/base.py @@ -40,7 +40,6 @@ class WorkerSignalHandler: class AWXConsumerBase(object): - last_stats = time.time() def __init__(self, name, worker, queues=[], pool=None): diff --git a/awx/main/fields.py b/awx/main/fields.py index 3372627f91..c5f5affb40 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -232,7 +232,6 @@ class ImplicitRoleField(models.ForeignKey): field_names = [field_names] for field_name in field_names: - if field_name.startswith('singleton:'): continue @@ -244,7 +243,6 @@ class ImplicitRoleField(models.ForeignKey): field = getattr(cls, field_name, None) if field and type(field) is ReverseManyToOneDescriptor or type(field) is ManyToManyDescriptor: - if '.' in field_attr: raise Exception('Referencing deep roles through ManyToMany fields is unsupported.') @@ -629,7 +627,6 @@ class CredentialInputField(JSONSchemaField): # `ssh_key_unlock` requirements are very specific and can't be # represented without complicated JSON schema if model_instance.credential_type.managed is True and 'ssh_key_unlock' in defined_fields: - # in order to properly test the necessity of `ssh_key_unlock`, we # need to know the real value of `ssh_key_data`; for a payload like: # { diff --git a/awx/main/management/commands/check_db.py b/awx/main/management/commands/check_db.py index e72b86873c..e490e7a0e1 100644 --- a/awx/main/management/commands/check_db.py +++ b/awx/main/management/commands/check_db.py @@ -9,7 +9,6 @@ class Command(BaseCommand): """Checks connection to the database, and prints out connection info if not connected""" def handle(self, *args, **options): - with connection.cursor() as cursor: cursor.execute("SELECT version()") version = str(cursor.fetchone()[0]) diff --git a/awx/main/management/commands/cleanup_jobs.py b/awx/main/management/commands/cleanup_jobs.py index cc344f6aed..2cea123bdb 100644 --- a/awx/main/management/commands/cleanup_jobs.py +++ b/awx/main/management/commands/cleanup_jobs.py @@ -82,7 +82,6 @@ class DeleteMeta: part_drop = {} for pk, status, created in self.jobs_qs: - part_key = partition_table_name(self.job_class, created) if status in ['pending', 'waiting', 'running']: part_drop[part_key] = False diff --git a/awx/main/management/commands/create_oauth2_token.py b/awx/main/management/commands/create_oauth2_token.py index 62d89db1df..7df9b49f9c 100644 --- a/awx/main/management/commands/create_oauth2_token.py +++ b/awx/main/management/commands/create_oauth2_token.py @@ -17,7 +17,6 @@ class Command(BaseCommand): def handle(self, *args, **options): if not options['user']: - raise CommandError('Username not supplied. Usage: awx-manage create_oauth2_token --user=username.') try: user = User.objects.get(username=options['user']) diff --git a/awx/main/management/commands/export_custom_scripts.py b/awx/main/management/commands/export_custom_scripts.py index 281fc886b3..c0cc46c5a7 100644 --- a/awx/main/management/commands/export_custom_scripts.py +++ b/awx/main/management/commands/export_custom_scripts.py @@ -10,7 +10,6 @@ from django.utils.text import slugify class Command(BaseCommand): - help = 'Export custom inventory scripts into a tarfile.' def add_arguments(self, parser): @@ -21,7 +20,6 @@ class Command(BaseCommand): with tempfile.TemporaryDirectory() as tmpdirname: with tarfile.open(tar_filename, "w") as tar: - for cis in CustomInventoryScript.objects.all(): # naming convention similar to project paths slug_name = slugify(str(cis.name)).replace(u'-', u'_') diff --git a/awx/main/management/commands/host_metric.py b/awx/main/management/commands/host_metric.py index 0dbcefedb2..c58cea2c1b 100644 --- a/awx/main/management/commands/host_metric.py +++ b/awx/main/management/commands/host_metric.py @@ -6,7 +6,6 @@ import json class Command(BaseCommand): - help = 'This is for offline licensing usage' def add_arguments(self, parser): diff --git a/awx/main/management/commands/inventory_import.py b/awx/main/management/commands/inventory_import.py index 4361be300a..13909433f6 100644 --- a/awx/main/management/commands/inventory_import.py +++ b/awx/main/management/commands/inventory_import.py @@ -934,7 +934,6 @@ class Command(BaseCommand): # (even though inventory_import.Command.handle -- which calls # perform_update -- has its own lock, inventory_ID_import) with advisory_lock('inventory_{}_perform_update'.format(self.inventory.id)): - try: self.check_license() except PermissionDenied as e: diff --git a/awx/main/management/commands/list_instances.py b/awx/main/management/commands/list_instances.py index 578280d5c2..7d93f5baa9 100644 --- a/awx/main/management/commands/list_instances.py +++ b/awx/main/management/commands/list_instances.py @@ -6,7 +6,6 @@ from django.core.management.base import BaseCommand class Ungrouped(object): - name = 'ungrouped' policy_instance_percentage = None policy_instance_minimum = None diff --git a/awx/main/management/commands/remove_from_queue.py b/awx/main/management/commands/remove_from_queue.py index 35c83fe298..f95a64b537 100644 --- a/awx/main/management/commands/remove_from_queue.py +++ b/awx/main/management/commands/remove_from_queue.py @@ -7,7 +7,6 @@ from django.core.management.base import BaseCommand, CommandError class Command(BaseCommand): - help = ( "Remove an instance (specified by --hostname) from the specified queue (instance group).\n" "In order remove the queue, use the `unregister_queue` command." diff --git a/awx/main/management/commands/replay_job_events.py b/awx/main/management/commands/replay_job_events.py index d8817681ea..090ba755fc 100644 --- a/awx/main/management/commands/replay_job_events.py +++ b/awx/main/management/commands/replay_job_events.py @@ -28,7 +28,6 @@ class JobStatusLifeCycle: class ReplayJobEvents(JobStatusLifeCycle): - recording_start = None replay_start = None @@ -190,7 +189,6 @@ class ReplayJobEvents(JobStatusLifeCycle): class Command(BaseCommand): - help = 'Replay job events over websockets ordered by created on date.' def _parse_slice_range(self, slice_arg): diff --git a/awx/main/management/commands/setup_managed_credential_types.py b/awx/main/management/commands/setup_managed_credential_types.py index 04e170528d..c0e566c300 100644 --- a/awx/main/management/commands/setup_managed_credential_types.py +++ b/awx/main/management/commands/setup_managed_credential_types.py @@ -7,7 +7,6 @@ from awx.main.models import CredentialType class Command(BaseCommand): - help = 'Load default managed credential types.' def handle(self, *args, **options): diff --git a/awx/main/management/commands/unregister_queue.py b/awx/main/management/commands/unregister_queue.py index 5cf4ee3ff9..729c309788 100644 --- a/awx/main/management/commands/unregister_queue.py +++ b/awx/main/management/commands/unregister_queue.py @@ -10,7 +10,6 @@ from django.core.management.base import BaseCommand, CommandError class Command(BaseCommand): - help = ( "Remove specified queue (instance group) from database.\n" "Instances inside of queue will continue to exist, \n" diff --git a/awx/main/middleware.py b/awx/main/middleware.py index 64e8110fc6..a48f556538 100644 --- a/awx/main/middleware.py +++ b/awx/main/middleware.py @@ -38,7 +38,6 @@ class SettingsCacheMiddleware(MiddlewareMixin): class TimingMiddleware(threading.local, MiddlewareMixin): - dest = '/var/log/tower/profile' def __init__(self, *args, **kwargs): diff --git a/awx/main/migrations/0001_initial.py b/awx/main/migrations/0001_initial.py index aa78bdca16..cb9de8ec87 100644 --- a/awx/main/migrations/0001_initial.py +++ b/awx/main/migrations/0001_initial.py @@ -14,7 +14,6 @@ import awx.main.fields class Migration(migrations.Migration): - dependencies = [ ('taggit', '0002_auto_20150616_2121'), ('contenttypes', '0002_remove_content_type_name'), diff --git a/awx/main/migrations/0004_squashed_v310_release.py b/awx/main/migrations/0004_squashed_v310_release.py index b1d45d10d6..2905cf7d2c 100644 --- a/awx/main/migrations/0004_squashed_v310_release.py +++ b/awx/main/migrations/0004_squashed_v310_release.py @@ -12,7 +12,6 @@ from ._squashed_30 import SQUASHED_30 class Migration(migrations.Migration): - dependencies = [ ('main', '0003_squashed_v300_v303_updates'), ] diff --git a/awx/main/migrations/0005_squashed_v310_v313_updates.py b/awx/main/migrations/0005_squashed_v310_v313_updates.py index 771d80fc6f..c6a6889d28 100644 --- a/awx/main/migrations/0005_squashed_v310_v313_updates.py +++ b/awx/main/migrations/0005_squashed_v310_v313_updates.py @@ -7,7 +7,6 @@ from ._squashed_31 import SQUASHED_31 class Migration(migrations.Migration): - dependencies = [ ('main', '0004_squashed_v310_release'), ] diff --git a/awx/main/migrations/0006_v320_release.py b/awx/main/migrations/0006_v320_release.py index 0f88577baa..d60d331192 100644 --- a/awx/main/migrations/0006_v320_release.py +++ b/awx/main/migrations/0006_v320_release.py @@ -26,7 +26,6 @@ def replaces(): class Migration(migrations.Migration): - dependencies = [ ('main', '0005_squashed_v310_v313_updates'), ] diff --git a/awx/main/migrations/0007_v320_data_migrations.py b/awx/main/migrations/0007_v320_data_migrations.py index d05e01c6f6..d55b02472a 100644 --- a/awx/main/migrations/0007_v320_data_migrations.py +++ b/awx/main/migrations/0007_v320_data_migrations.py @@ -7,7 +7,6 @@ from awx.main.migrations import ActivityStreamDisabledMigration class Migration(ActivityStreamDisabledMigration): - dependencies = [ ('main', '0006_v320_release'), ] diff --git a/awx/main/migrations/0008_v320_drop_v1_credential_fields.py b/awx/main/migrations/0008_v320_drop_v1_credential_fields.py index 8103e0327c..43b3490816 100644 --- a/awx/main/migrations/0008_v320_drop_v1_credential_fields.py +++ b/awx/main/migrations/0008_v320_drop_v1_credential_fields.py @@ -11,7 +11,6 @@ import awx.main.fields class Migration(migrations.Migration): - dependencies = [ ('main', '0007_v320_data_migrations'), ] diff --git a/awx/main/migrations/0009_v322_add_setting_field_for_activity_stream.py b/awx/main/migrations/0009_v322_add_setting_field_for_activity_stream.py index f90e5a966b..947eff02f2 100644 --- a/awx/main/migrations/0009_v322_add_setting_field_for_activity_stream.py +++ b/awx/main/migrations/0009_v322_add_setting_field_for_activity_stream.py @@ -7,7 +7,6 @@ import awx.main.fields class Migration(migrations.Migration): - dependencies = [ ('main', '0008_v320_drop_v1_credential_fields'), ] diff --git a/awx/main/migrations/0010_v322_add_ovirt4_tower_inventory.py b/awx/main/migrations/0010_v322_add_ovirt4_tower_inventory.py index 5d5fea624e..503f5104a8 100644 --- a/awx/main/migrations/0010_v322_add_ovirt4_tower_inventory.py +++ b/awx/main/migrations/0010_v322_add_ovirt4_tower_inventory.py @@ -5,7 +5,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0009_v322_add_setting_field_for_activity_stream'), ] diff --git a/awx/main/migrations/0011_v322_encrypt_survey_passwords.py b/awx/main/migrations/0011_v322_encrypt_survey_passwords.py index 70bab5a720..ccfcfcfbd1 100644 --- a/awx/main/migrations/0011_v322_encrypt_survey_passwords.py +++ b/awx/main/migrations/0011_v322_encrypt_survey_passwords.py @@ -5,7 +5,6 @@ from awx.main.migrations import ActivityStreamDisabledMigration class Migration(ActivityStreamDisabledMigration): - dependencies = [ ('main', '0010_v322_add_ovirt4_tower_inventory'), ] diff --git a/awx/main/migrations/0012_v322_update_cred_types.py b/awx/main/migrations/0012_v322_update_cred_types.py index 1b3a5ce4a6..b01a65ee2e 100644 --- a/awx/main/migrations/0012_v322_update_cred_types.py +++ b/awx/main/migrations/0012_v322_update_cred_types.py @@ -5,7 +5,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0011_v322_encrypt_survey_passwords'), ] diff --git a/awx/main/migrations/0013_v330_multi_credential.py b/awx/main/migrations/0013_v330_multi_credential.py index 1ab940ff31..0dd5625239 100644 --- a/awx/main/migrations/0013_v330_multi_credential.py +++ b/awx/main/migrations/0013_v330_multi_credential.py @@ -9,7 +9,6 @@ from awx.main.migrations._multi_cred import migrate_to_multi_cred, migrate_back_ class Migration(migrations.Migration): - dependencies = [ ('main', '0012_v322_update_cred_types'), ] diff --git a/awx/main/migrations/0014_v330_saved_launchtime_configs.py b/awx/main/migrations/0014_v330_saved_launchtime_configs.py index fdefdcaed8..cd1f8458ae 100644 --- a/awx/main/migrations/0014_v330_saved_launchtime_configs.py +++ b/awx/main/migrations/0014_v330_saved_launchtime_configs.py @@ -11,7 +11,6 @@ from awx.main.migrations._scan_jobs import remove_scan_type_nodes class Migration(migrations.Migration): - dependencies = [ ('main', '0013_v330_multi_credential'), ] diff --git a/awx/main/migrations/0015_v330_blank_start_args.py b/awx/main/migrations/0015_v330_blank_start_args.py index 5feb52a0d8..702c9d26e1 100644 --- a/awx/main/migrations/0015_v330_blank_start_args.py +++ b/awx/main/migrations/0015_v330_blank_start_args.py @@ -7,7 +7,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0014_v330_saved_launchtime_configs'), ] diff --git a/awx/main/migrations/0016_v330_non_blank_workflow.py b/awx/main/migrations/0016_v330_non_blank_workflow.py index 4e581e0af3..8bc3384c8b 100644 --- a/awx/main/migrations/0016_v330_non_blank_workflow.py +++ b/awx/main/migrations/0016_v330_non_blank_workflow.py @@ -7,7 +7,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0015_v330_blank_start_args'), ] diff --git a/awx/main/migrations/0017_v330_move_deprecated_stdout.py b/awx/main/migrations/0017_v330_move_deprecated_stdout.py index e7c3250aa2..c2626f4147 100644 --- a/awx/main/migrations/0017_v330_move_deprecated_stdout.py +++ b/awx/main/migrations/0017_v330_move_deprecated_stdout.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0016_v330_non_blank_workflow'), ] diff --git a/awx/main/migrations/0018_v330_add_additional_stdout_events.py b/awx/main/migrations/0018_v330_add_additional_stdout_events.py index ad399e72bb..fcc03b95cb 100644 --- a/awx/main/migrations/0018_v330_add_additional_stdout_events.py +++ b/awx/main/migrations/0018_v330_add_additional_stdout_events.py @@ -9,7 +9,6 @@ import awx.main.fields class Migration(migrations.Migration): - dependencies = [ ('main', '0017_v330_move_deprecated_stdout'), ] diff --git a/awx/main/migrations/0019_v330_custom_virtualenv.py b/awx/main/migrations/0019_v330_custom_virtualenv.py index ba6aeb0167..48a1ffbbb0 100644 --- a/awx/main/migrations/0019_v330_custom_virtualenv.py +++ b/awx/main/migrations/0019_v330_custom_virtualenv.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0018_v330_add_additional_stdout_events'), ] diff --git a/awx/main/migrations/0020_v330_instancegroup_policies.py b/awx/main/migrations/0020_v330_instancegroup_policies.py index a6275d4820..1922b18aa1 100644 --- a/awx/main/migrations/0020_v330_instancegroup_policies.py +++ b/awx/main/migrations/0020_v330_instancegroup_policies.py @@ -8,7 +8,6 @@ import awx.main.fields class Migration(migrations.Migration): - dependencies = [ ('main', '0019_v330_custom_virtualenv'), ] diff --git a/awx/main/migrations/0021_v330_declare_new_rbac_roles.py b/awx/main/migrations/0021_v330_declare_new_rbac_roles.py index e847a62c14..5f8e7788fe 100644 --- a/awx/main/migrations/0021_v330_declare_new_rbac_roles.py +++ b/awx/main/migrations/0021_v330_declare_new_rbac_roles.py @@ -8,7 +8,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0020_v330_instancegroup_policies'), ] diff --git a/awx/main/migrations/0022_v330_create_new_rbac_roles.py b/awx/main/migrations/0022_v330_create_new_rbac_roles.py index 578be8645c..f218fafaaf 100644 --- a/awx/main/migrations/0022_v330_create_new_rbac_roles.py +++ b/awx/main/migrations/0022_v330_create_new_rbac_roles.py @@ -8,7 +8,6 @@ from awx.main.migrations import _migration_utils as migration_utils class Migration(ActivityStreamDisabledMigration): - dependencies = [ ('main', '0021_v330_declare_new_rbac_roles'), ] diff --git a/awx/main/migrations/0023_v330_inventory_multicred.py b/awx/main/migrations/0023_v330_inventory_multicred.py index 06f35bacd9..2a39e67111 100644 --- a/awx/main/migrations/0023_v330_inventory_multicred.py +++ b/awx/main/migrations/0023_v330_inventory_multicred.py @@ -9,7 +9,6 @@ from awx.main.migrations._multi_cred import migrate_inventory_source_cred, migra class Migration(migrations.Migration): - dependencies = [ ('main', '0022_v330_create_new_rbac_roles'), ] diff --git a/awx/main/migrations/0024_v330_create_user_session_membership.py b/awx/main/migrations/0024_v330_create_user_session_membership.py index aa1d04a050..66257200ec 100644 --- a/awx/main/migrations/0024_v330_create_user_session_membership.py +++ b/awx/main/migrations/0024_v330_create_user_session_membership.py @@ -8,7 +8,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('sessions', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), diff --git a/awx/main/migrations/0025_v330_add_oauth_activity_stream_registrar.py b/awx/main/migrations/0025_v330_add_oauth_activity_stream_registrar.py index e26571f1b9..88afcd7dff 100644 --- a/awx/main/migrations/0025_v330_add_oauth_activity_stream_registrar.py +++ b/awx/main/migrations/0025_v330_add_oauth_activity_stream_registrar.py @@ -10,7 +10,6 @@ import re class Migration(migrations.Migration): - dependencies = [ ('main', '0024_v330_create_user_session_membership'), ] diff --git a/awx/main/migrations/0026_v330_delete_authtoken.py b/awx/main/migrations/0026_v330_delete_authtoken.py index 758a3efdb0..7175d4ae5a 100644 --- a/awx/main/migrations/0026_v330_delete_authtoken.py +++ b/awx/main/migrations/0026_v330_delete_authtoken.py @@ -8,7 +8,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0025_v330_add_oauth_activity_stream_registrar'), ] diff --git a/awx/main/migrations/0027_v330_emitted_events.py b/awx/main/migrations/0027_v330_emitted_events.py index 5c87239cd3..dc7d5cf525 100644 --- a/awx/main/migrations/0027_v330_emitted_events.py +++ b/awx/main/migrations/0027_v330_emitted_events.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0026_v330_delete_authtoken'), ] diff --git a/awx/main/migrations/0028_v330_add_tower_verify.py b/awx/main/migrations/0028_v330_add_tower_verify.py index e995afc3de..e6c15973c1 100644 --- a/awx/main/migrations/0028_v330_add_tower_verify.py +++ b/awx/main/migrations/0028_v330_add_tower_verify.py @@ -8,7 +8,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0027_v330_emitted_events'), ] diff --git a/awx/main/migrations/0030_v330_modify_application.py b/awx/main/migrations/0030_v330_modify_application.py index 02f47c3957..3a27799e60 100644 --- a/awx/main/migrations/0030_v330_modify_application.py +++ b/awx/main/migrations/0030_v330_modify_application.py @@ -7,7 +7,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0028_v330_add_tower_verify'), ] diff --git a/awx/main/migrations/0031_v330_encrypt_oauth2_secret.py b/awx/main/migrations/0031_v330_encrypt_oauth2_secret.py index d1f2288d4e..96d9067058 100644 --- a/awx/main/migrations/0031_v330_encrypt_oauth2_secret.py +++ b/awx/main/migrations/0031_v330_encrypt_oauth2_secret.py @@ -8,7 +8,6 @@ import oauth2_provider.generators class Migration(migrations.Migration): - dependencies = [ ('main', '0030_v330_modify_application'), ] diff --git a/awx/main/migrations/0032_v330_polymorphic_delete.py b/awx/main/migrations/0032_v330_polymorphic_delete.py index 97539ed3fd..ac13ecc6a1 100644 --- a/awx/main/migrations/0032_v330_polymorphic_delete.py +++ b/awx/main/migrations/0032_v330_polymorphic_delete.py @@ -7,7 +7,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0031_v330_encrypt_oauth2_secret'), ] diff --git a/awx/main/migrations/0033_v330_oauth_help_text.py b/awx/main/migrations/0033_v330_oauth_help_text.py index 606fd8ffd9..ec5867b2f5 100644 --- a/awx/main/migrations/0033_v330_oauth_help_text.py +++ b/awx/main/migrations/0033_v330_oauth_help_text.py @@ -12,7 +12,6 @@ import oauth2_provider.generators class Migration(migrations.Migration): - dependencies = [ ('main', '0032_v330_polymorphic_delete'), ] diff --git a/awx/main/migrations/0034_v330_delete_user_role.py b/awx/main/migrations/0034_v330_delete_user_role.py index 6719e307ca..d872b2e47d 100644 --- a/awx/main/migrations/0034_v330_delete_user_role.py +++ b/awx/main/migrations/0034_v330_delete_user_role.py @@ -10,7 +10,6 @@ from awx.main.migrations import _migration_utils as migration_utils class Migration(ActivityStreamDisabledMigration): - dependencies = [ ('main', '0033_v330_oauth_help_text'), ] diff --git a/awx/main/migrations/0035_v330_more_oauth2_help_text.py b/awx/main/migrations/0035_v330_more_oauth2_help_text.py index f8802319e0..78d39505a4 100644 --- a/awx/main/migrations/0035_v330_more_oauth2_help_text.py +++ b/awx/main/migrations/0035_v330_more_oauth2_help_text.py @@ -8,7 +8,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0034_v330_delete_user_role'), ] diff --git a/awx/main/migrations/0036_v330_credtype_remove_become_methods.py b/awx/main/migrations/0036_v330_credtype_remove_become_methods.py index 73541e79c4..3741720a0d 100644 --- a/awx/main/migrations/0036_v330_credtype_remove_become_methods.py +++ b/awx/main/migrations/0036_v330_credtype_remove_become_methods.py @@ -8,7 +8,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0035_v330_more_oauth2_help_text'), ] diff --git a/awx/main/migrations/0037_v330_remove_legacy_fact_cleanup.py b/awx/main/migrations/0037_v330_remove_legacy_fact_cleanup.py index da2423bdcf..9f570a164c 100644 --- a/awx/main/migrations/0037_v330_remove_legacy_fact_cleanup.py +++ b/awx/main/migrations/0037_v330_remove_legacy_fact_cleanup.py @@ -8,7 +8,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0036_v330_credtype_remove_become_methods'), ] diff --git a/awx/main/migrations/0038_v330_add_deleted_activitystream_actor.py b/awx/main/migrations/0038_v330_add_deleted_activitystream_actor.py index 6e921a9b40..6592c8d903 100644 --- a/awx/main/migrations/0038_v330_add_deleted_activitystream_actor.py +++ b/awx/main/migrations/0038_v330_add_deleted_activitystream_actor.py @@ -8,7 +8,6 @@ import awx.main.fields class Migration(migrations.Migration): - dependencies = [ ('main', '0037_v330_remove_legacy_fact_cleanup'), ] diff --git a/awx/main/migrations/0039_v330_custom_venv_help_text.py b/awx/main/migrations/0039_v330_custom_venv_help_text.py index 7c4ee1042c..a86b3597c0 100644 --- a/awx/main/migrations/0039_v330_custom_venv_help_text.py +++ b/awx/main/migrations/0039_v330_custom_venv_help_text.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0038_v330_add_deleted_activitystream_actor'), ] diff --git a/awx/main/migrations/0040_v330_unifiedjob_controller_node.py b/awx/main/migrations/0040_v330_unifiedjob_controller_node.py index fae3e641c4..1afffcee17 100644 --- a/awx/main/migrations/0040_v330_unifiedjob_controller_node.py +++ b/awx/main/migrations/0040_v330_unifiedjob_controller_node.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0039_v330_custom_venv_help_text'), ] diff --git a/awx/main/migrations/0041_v330_update_oauth_refreshtoken.py b/awx/main/migrations/0041_v330_update_oauth_refreshtoken.py index 8ad0a32a4c..7ff23582a7 100644 --- a/awx/main/migrations/0041_v330_update_oauth_refreshtoken.py +++ b/awx/main/migrations/0041_v330_update_oauth_refreshtoken.py @@ -8,7 +8,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ migrations.swappable_dependency(settings.OAUTH2_PROVIDER_REFRESH_TOKEN_MODEL), ('main', '0040_v330_unifiedjob_controller_node'), diff --git a/awx/main/migrations/0042_v330_org_member_role_deparent.py b/awx/main/migrations/0042_v330_org_member_role_deparent.py index c5be5146b4..f08bdca5e2 100644 --- a/awx/main/migrations/0042_v330_org_member_role_deparent.py +++ b/awx/main/migrations/0042_v330_org_member_role_deparent.py @@ -9,7 +9,6 @@ from awx.main.migrations._rbac import rebuild_role_hierarchy class Migration(migrations.Migration): - dependencies = [ ('main', '0041_v330_update_oauth_refreshtoken'), ] diff --git a/awx/main/migrations/0043_v330_oauth2accesstoken_modified.py b/awx/main/migrations/0043_v330_oauth2accesstoken_modified.py index b997f0d570..f2a8a05c17 100644 --- a/awx/main/migrations/0043_v330_oauth2accesstoken_modified.py +++ b/awx/main/migrations/0043_v330_oauth2accesstoken_modified.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0042_v330_org_member_role_deparent'), ] diff --git a/awx/main/migrations/0044_v330_add_inventory_update_inventory.py b/awx/main/migrations/0044_v330_add_inventory_update_inventory.py index 30799955bf..44a84a9ef1 100644 --- a/awx/main/migrations/0044_v330_add_inventory_update_inventory.py +++ b/awx/main/migrations/0044_v330_add_inventory_update_inventory.py @@ -7,7 +7,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0043_v330_oauth2accesstoken_modified'), ] diff --git a/awx/main/migrations/0045_v330_instance_managed_by_policy.py b/awx/main/migrations/0045_v330_instance_managed_by_policy.py index a3f87fb3ae..fef89aedcc 100644 --- a/awx/main/migrations/0045_v330_instance_managed_by_policy.py +++ b/awx/main/migrations/0045_v330_instance_managed_by_policy.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0044_v330_add_inventory_update_inventory'), ] diff --git a/awx/main/migrations/0046_v330_remove_client_credentials_grant.py b/awx/main/migrations/0046_v330_remove_client_credentials_grant.py index a02a248c3c..7bd59f3c5d 100644 --- a/awx/main/migrations/0046_v330_remove_client_credentials_grant.py +++ b/awx/main/migrations/0046_v330_remove_client_credentials_grant.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0045_v330_instance_managed_by_policy'), ] diff --git a/awx/main/migrations/0047_v330_activitystream_instance.py b/awx/main/migrations/0047_v330_activitystream_instance.py index 0bc6b3c0bc..d957c0f186 100644 --- a/awx/main/migrations/0047_v330_activitystream_instance.py +++ b/awx/main/migrations/0047_v330_activitystream_instance.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0046_v330_remove_client_credentials_grant'), ] diff --git a/awx/main/migrations/0048_v330_django_created_modified_by_model_name.py b/awx/main/migrations/0048_v330_django_created_modified_by_model_name.py index d0e135cdb4..08a10d5609 100644 --- a/awx/main/migrations/0048_v330_django_created_modified_by_model_name.py +++ b/awx/main/migrations/0048_v330_django_created_modified_by_model_name.py @@ -8,7 +8,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0047_v330_activitystream_instance'), ] diff --git a/awx/main/migrations/0049_v330_validate_instance_capacity_adjustment.py b/awx/main/migrations/0049_v330_validate_instance_capacity_adjustment.py index 1a12419e64..90e31a6c4f 100644 --- a/awx/main/migrations/0049_v330_validate_instance_capacity_adjustment.py +++ b/awx/main/migrations/0049_v330_validate_instance_capacity_adjustment.py @@ -8,7 +8,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0048_v330_django_created_modified_by_model_name'), ] diff --git a/awx/main/migrations/0050_v340_drop_celery_tables.py b/awx/main/migrations/0050_v340_drop_celery_tables.py index 4ea93da0c1..5c98d7bc7c 100644 --- a/awx/main/migrations/0050_v340_drop_celery_tables.py +++ b/awx/main/migrations/0050_v340_drop_celery_tables.py @@ -5,7 +5,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0049_v330_validate_instance_capacity_adjustment'), ] diff --git a/awx/main/migrations/0051_v340_job_slicing.py b/awx/main/migrations/0051_v340_job_slicing.py index 28a6ec7aee..0e47a7090c 100644 --- a/awx/main/migrations/0051_v340_job_slicing.py +++ b/awx/main/migrations/0051_v340_job_slicing.py @@ -8,7 +8,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0050_v340_drop_celery_tables'), ] diff --git a/awx/main/migrations/0052_v340_remove_project_scm_delete_on_next_update.py b/awx/main/migrations/0052_v340_remove_project_scm_delete_on_next_update.py index 2179c21a3b..363ba23128 100644 --- a/awx/main/migrations/0052_v340_remove_project_scm_delete_on_next_update.py +++ b/awx/main/migrations/0052_v340_remove_project_scm_delete_on_next_update.py @@ -6,7 +6,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0051_v340_job_slicing'), ] diff --git a/awx/main/migrations/0053_v340_workflow_inventory.py b/awx/main/migrations/0053_v340_workflow_inventory.py index 7e4b7590ec..ea7719b8a0 100644 --- a/awx/main/migrations/0053_v340_workflow_inventory.py +++ b/awx/main/migrations/0053_v340_workflow_inventory.py @@ -9,7 +9,6 @@ import awx.main.fields class Migration(migrations.Migration): - dependencies = [ ('main', '0052_v340_remove_project_scm_delete_on_next_update'), ] diff --git a/awx/main/migrations/0054_v340_workflow_convergence.py b/awx/main/migrations/0054_v340_workflow_convergence.py index 4a37e4cde1..7689fd101e 100644 --- a/awx/main/migrations/0054_v340_workflow_convergence.py +++ b/awx/main/migrations/0054_v340_workflow_convergence.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0053_v340_workflow_inventory'), ] diff --git a/awx/main/migrations/0055_v340_add_grafana_notification.py b/awx/main/migrations/0055_v340_add_grafana_notification.py index de29544231..2e76595ce7 100644 --- a/awx/main/migrations/0055_v340_add_grafana_notification.py +++ b/awx/main/migrations/0055_v340_add_grafana_notification.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0054_v340_workflow_convergence'), ] diff --git a/awx/main/migrations/0056_v350_custom_venv_history.py b/awx/main/migrations/0056_v350_custom_venv_history.py index 484c31a9eb..ac977b00a7 100644 --- a/awx/main/migrations/0056_v350_custom_venv_history.py +++ b/awx/main/migrations/0056_v350_custom_venv_history.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0055_v340_add_grafana_notification'), ] diff --git a/awx/main/migrations/0057_v350_remove_become_method_type.py b/awx/main/migrations/0057_v350_remove_become_method_type.py index cd5f76cdec..356d62e8bc 100644 --- a/awx/main/migrations/0057_v350_remove_become_method_type.py +++ b/awx/main/migrations/0057_v350_remove_become_method_type.py @@ -9,7 +9,6 @@ from awx.main.migrations import _credentialtypes as credentialtypes class Migration(migrations.Migration): - dependencies = [ ('main', '0056_v350_custom_venv_history'), ] diff --git a/awx/main/migrations/0058_v350_remove_limit_limit.py b/awx/main/migrations/0058_v350_remove_limit_limit.py index 24ab66f9f6..f6a4e8234e 100644 --- a/awx/main/migrations/0058_v350_remove_limit_limit.py +++ b/awx/main/migrations/0058_v350_remove_limit_limit.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0057_v350_remove_become_method_type'), ] diff --git a/awx/main/migrations/0059_v350_remove_adhoc_limit.py b/awx/main/migrations/0059_v350_remove_adhoc_limit.py index 5248d76d58..483c6871ca 100644 --- a/awx/main/migrations/0059_v350_remove_adhoc_limit.py +++ b/awx/main/migrations/0059_v350_remove_adhoc_limit.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0058_v350_remove_limit_limit'), ] diff --git a/awx/main/migrations/0060_v350_update_schedule_uniqueness_constraint.py b/awx/main/migrations/0060_v350_update_schedule_uniqueness_constraint.py index 991fc6f56c..8a14fb218c 100644 --- a/awx/main/migrations/0060_v350_update_schedule_uniqueness_constraint.py +++ b/awx/main/migrations/0060_v350_update_schedule_uniqueness_constraint.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0059_v350_remove_adhoc_limit'), ] diff --git a/awx/main/migrations/0061_v350_track_native_credentialtype_source.py b/awx/main/migrations/0061_v350_track_native_credentialtype_source.py index fb76e79ade..ba2c8730b2 100644 --- a/awx/main/migrations/0061_v350_track_native_credentialtype_source.py +++ b/awx/main/migrations/0061_v350_track_native_credentialtype_source.py @@ -14,7 +14,6 @@ def migrate_to_static_inputs(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0060_v350_update_schedule_uniqueness_constraint'), ] diff --git a/awx/main/migrations/0062_v350_new_playbook_stats.py b/awx/main/migrations/0062_v350_new_playbook_stats.py index 29ab8e7017..bcb1965f78 100644 --- a/awx/main/migrations/0062_v350_new_playbook_stats.py +++ b/awx/main/migrations/0062_v350_new_playbook_stats.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0061_v350_track_native_credentialtype_source'), ] diff --git a/awx/main/migrations/0063_v350_org_host_limits.py b/awx/main/migrations/0063_v350_org_host_limits.py index bc410e757a..c0bc239599 100644 --- a/awx/main/migrations/0063_v350_org_host_limits.py +++ b/awx/main/migrations/0063_v350_org_host_limits.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0062_v350_new_playbook_stats'), ] diff --git a/awx/main/migrations/0064_v350_analytics_state.py b/awx/main/migrations/0064_v350_analytics_state.py index e01768694a..daf1687bb1 100644 --- a/awx/main/migrations/0064_v350_analytics_state.py +++ b/awx/main/migrations/0064_v350_analytics_state.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0063_v350_org_host_limits'), ] diff --git a/awx/main/migrations/0065_v350_index_job_status.py b/awx/main/migrations/0065_v350_index_job_status.py index d14e1b63cc..0637a9b316 100644 --- a/awx/main/migrations/0065_v350_index_job_status.py +++ b/awx/main/migrations/0065_v350_index_job_status.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0064_v350_analytics_state'), ] diff --git a/awx/main/migrations/0066_v350_inventorysource_custom_virtualenv.py b/awx/main/migrations/0066_v350_inventorysource_custom_virtualenv.py index e1196b10da..5738397e40 100644 --- a/awx/main/migrations/0066_v350_inventorysource_custom_virtualenv.py +++ b/awx/main/migrations/0066_v350_inventorysource_custom_virtualenv.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0065_v350_index_job_status'), ] diff --git a/awx/main/migrations/0067_v350_credential_plugins.py b/awx/main/migrations/0067_v350_credential_plugins.py index 7eacb18f78..482b4ce220 100644 --- a/awx/main/migrations/0067_v350_credential_plugins.py +++ b/awx/main/migrations/0067_v350_credential_plugins.py @@ -18,7 +18,6 @@ def setup_tower_managed_defaults(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('taggit', '0002_auto_20150616_2121'), diff --git a/awx/main/migrations/0068_v350_index_event_created.py b/awx/main/migrations/0068_v350_index_event_created.py index 59e629cc3a..a4177956dd 100644 --- a/awx/main/migrations/0068_v350_index_event_created.py +++ b/awx/main/migrations/0068_v350_index_event_created.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0067_v350_credential_plugins'), ] diff --git a/awx/main/migrations/0069_v350_generate_unique_install_uuid.py b/awx/main/migrations/0069_v350_generate_unique_install_uuid.py index be64b69fb7..3fa4d971b6 100644 --- a/awx/main/migrations/0069_v350_generate_unique_install_uuid.py +++ b/awx/main/migrations/0069_v350_generate_unique_install_uuid.py @@ -18,7 +18,6 @@ def _gen_install_uuid(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0068_v350_index_event_created'), ] diff --git a/awx/main/migrations/0070_v350_gce_instance_id.py b/awx/main/migrations/0070_v350_gce_instance_id.py index ac0a94b5c0..4a7933e5d4 100644 --- a/awx/main/migrations/0070_v350_gce_instance_id.py +++ b/awx/main/migrations/0070_v350_gce_instance_id.py @@ -25,7 +25,6 @@ def gce_id_backward(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0069_v350_generate_unique_install_uuid'), ] diff --git a/awx/main/migrations/0071_v350_remove_system_tracking.py b/awx/main/migrations/0071_v350_remove_system_tracking.py index fd193f48a4..a505d5a933 100644 --- a/awx/main/migrations/0071_v350_remove_system_tracking.py +++ b/awx/main/migrations/0071_v350_remove_system_tracking.py @@ -6,7 +6,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0070_v350_gce_instance_id'), ] diff --git a/awx/main/migrations/0072_v350_deprecate_fields.py b/awx/main/migrations/0072_v350_deprecate_fields.py index 0d87f0bffd..a03650b349 100644 --- a/awx/main/migrations/0072_v350_deprecate_fields.py +++ b/awx/main/migrations/0072_v350_deprecate_fields.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0071_v350_remove_system_tracking'), ] diff --git a/awx/main/migrations/0073_v360_create_instance_group_m2m.py b/awx/main/migrations/0073_v360_create_instance_group_m2m.py index 93283634a8..6d7dfdea19 100644 --- a/awx/main/migrations/0073_v360_create_instance_group_m2m.py +++ b/awx/main/migrations/0073_v360_create_instance_group_m2m.py @@ -7,7 +7,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0072_v350_deprecate_fields'), ] diff --git a/awx/main/migrations/0074_v360_migrate_instance_group_relations.py b/awx/main/migrations/0074_v360_migrate_instance_group_relations.py index 234d3ef3f2..dbdabd6b36 100644 --- a/awx/main/migrations/0074_v360_migrate_instance_group_relations.py +++ b/awx/main/migrations/0074_v360_migrate_instance_group_relations.py @@ -28,7 +28,6 @@ def create_through_relations(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0073_v360_create_instance_group_m2m'), ] diff --git a/awx/main/migrations/0075_v360_remove_old_instance_group_relations.py b/awx/main/migrations/0075_v360_remove_old_instance_group_relations.py index f684df3d8a..3fced1c6e2 100644 --- a/awx/main/migrations/0075_v360_remove_old_instance_group_relations.py +++ b/awx/main/migrations/0075_v360_remove_old_instance_group_relations.py @@ -6,7 +6,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0074_v360_migrate_instance_group_relations'), ] diff --git a/awx/main/migrations/0076_v360_add_new_instance_group_relations.py b/awx/main/migrations/0076_v360_add_new_instance_group_relations.py index 1c7545b1c8..e6d3b4cc78 100644 --- a/awx/main/migrations/0076_v360_add_new_instance_group_relations.py +++ b/awx/main/migrations/0076_v360_add_new_instance_group_relations.py @@ -7,7 +7,6 @@ from awx.main.fields import OrderedManyToManyField class Migration(migrations.Migration): - dependencies = [ ('main', '0075_v360_remove_old_instance_group_relations'), ] diff --git a/awx/main/migrations/0077_v360_add_default_orderings.py b/awx/main/migrations/0077_v360_add_default_orderings.py index b7be0f19fc..119504ef81 100644 --- a/awx/main/migrations/0077_v360_add_default_orderings.py +++ b/awx/main/migrations/0077_v360_add_default_orderings.py @@ -6,7 +6,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0076_v360_add_new_instance_group_relations'), ] diff --git a/awx/main/migrations/0078_v360_clear_sessions_tokens_jt.py b/awx/main/migrations/0078_v360_clear_sessions_tokens_jt.py index 57d9cca1de..630a4b38ef 100644 --- a/awx/main/migrations/0078_v360_clear_sessions_tokens_jt.py +++ b/awx/main/migrations/0078_v360_clear_sessions_tokens_jt.py @@ -7,7 +7,6 @@ from awx.main.migrations._create_system_jobs import create_clearsessions_jt, cre class Migration(migrations.Migration): - dependencies = [ ('main', '0077_v360_add_default_orderings'), ] diff --git a/awx/main/migrations/0079_v360_rm_implicit_oauth2_apps.py b/awx/main/migrations/0079_v360_rm_implicit_oauth2_apps.py index c273054da5..35679f085f 100644 --- a/awx/main/migrations/0079_v360_rm_implicit_oauth2_apps.py +++ b/awx/main/migrations/0079_v360_rm_implicit_oauth2_apps.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0078_v360_clear_sessions_tokens_jt'), ] diff --git a/awx/main/migrations/0080_v360_replace_job_origin.py b/awx/main/migrations/0080_v360_replace_job_origin.py index 2df958f2f6..8e9c4fc41f 100644 --- a/awx/main/migrations/0080_v360_replace_job_origin.py +++ b/awx/main/migrations/0080_v360_replace_job_origin.py @@ -8,7 +8,6 @@ from awx.main.utils.common import set_current_apps class Migration(migrations.Migration): - dependencies = [ ('main', '0079_v360_rm_implicit_oauth2_apps'), ] diff --git a/awx/main/migrations/0081_v360_notify_on_start.py b/awx/main/migrations/0081_v360_notify_on_start.py index 8ac29e53bc..8bdaadd4ff 100644 --- a/awx/main/migrations/0081_v360_notify_on_start.py +++ b/awx/main/migrations/0081_v360_notify_on_start.py @@ -22,7 +22,6 @@ def forwards_split_organization_any(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0080_v360_replace_job_origin'), ] diff --git a/awx/main/migrations/0082_v360_webhook_http_method.py b/awx/main/migrations/0082_v360_webhook_http_method.py index 3dc93ff970..4ad559a1d9 100644 --- a/awx/main/migrations/0082_v360_webhook_http_method.py +++ b/awx/main/migrations/0082_v360_webhook_http_method.py @@ -15,7 +15,6 @@ def add_webhook_notification_template_fields(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0081_v360_notify_on_start'), ] diff --git a/awx/main/migrations/0083_v360_job_branch_override.py b/awx/main/migrations/0083_v360_job_branch_override.py index 4ba9e7c219..ed8d3f07bf 100644 --- a/awx/main/migrations/0083_v360_job_branch_override.py +++ b/awx/main/migrations/0083_v360_job_branch_override.py @@ -7,7 +7,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0082_v360_webhook_http_method'), ] diff --git a/awx/main/migrations/0084_v360_token_description.py b/awx/main/migrations/0084_v360_token_description.py index b360b3e0f8..f5ccc84ddf 100644 --- a/awx/main/migrations/0084_v360_token_description.py +++ b/awx/main/migrations/0084_v360_token_description.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0083_v360_job_branch_override'), ] diff --git a/awx/main/migrations/0085_v360_add_notificationtemplate_messages.py b/awx/main/migrations/0085_v360_add_notificationtemplate_messages.py index 7e34b87ffe..4df7535f73 100644 --- a/awx/main/migrations/0085_v360_add_notificationtemplate_messages.py +++ b/awx/main/migrations/0085_v360_add_notificationtemplate_messages.py @@ -9,7 +9,6 @@ import awx.main.models.notifications class Migration(migrations.Migration): - dependencies = [ ('main', '0084_v360_token_description'), ] diff --git a/awx/main/migrations/0086_v360_workflow_approval.py b/awx/main/migrations/0086_v360_workflow_approval.py index d141e8c955..999cba8ec1 100644 --- a/awx/main/migrations/0086_v360_workflow_approval.py +++ b/awx/main/migrations/0086_v360_workflow_approval.py @@ -6,7 +6,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0085_v360_add_notificationtemplate_messages'), ] diff --git a/awx/main/migrations/0087_v360_update_credential_injector_help_text.py b/awx/main/migrations/0087_v360_update_credential_injector_help_text.py index 78549cd84e..a7e5641b27 100644 --- a/awx/main/migrations/0087_v360_update_credential_injector_help_text.py +++ b/awx/main/migrations/0087_v360_update_credential_injector_help_text.py @@ -5,7 +5,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0086_v360_workflow_approval'), ] diff --git a/awx/main/migrations/0088_v360_dashboard_optimizations.py b/awx/main/migrations/0088_v360_dashboard_optimizations.py index 8935bde894..452dfc0dce 100644 --- a/awx/main/migrations/0088_v360_dashboard_optimizations.py +++ b/awx/main/migrations/0088_v360_dashboard_optimizations.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0087_v360_update_credential_injector_help_text'), ] diff --git a/awx/main/migrations/0089_v360_new_job_event_types.py b/awx/main/migrations/0089_v360_new_job_event_types.py index b4d53e9083..600f0c8a2f 100644 --- a/awx/main/migrations/0089_v360_new_job_event_types.py +++ b/awx/main/migrations/0089_v360_new_job_event_types.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0088_v360_dashboard_optimizations'), ] diff --git a/awx/main/migrations/0090_v360_WFJT_prompts.py b/awx/main/migrations/0090_v360_WFJT_prompts.py index d8b4a06073..75f4ebf93a 100644 --- a/awx/main/migrations/0090_v360_WFJT_prompts.py +++ b/awx/main/migrations/0090_v360_WFJT_prompts.py @@ -5,7 +5,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0089_v360_new_job_event_types'), ] diff --git a/awx/main/migrations/0091_v360_approval_node_notifications.py b/awx/main/migrations/0091_v360_approval_node_notifications.py index 26be885cf0..a9713b9d47 100644 --- a/awx/main/migrations/0091_v360_approval_node_notifications.py +++ b/awx/main/migrations/0091_v360_approval_node_notifications.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0090_v360_WFJT_prompts'), ] diff --git a/awx/main/migrations/0092_v360_webhook_mixin.py b/awx/main/migrations/0092_v360_webhook_mixin.py index 39adb22cdf..90f585e6f8 100644 --- a/awx/main/migrations/0092_v360_webhook_mixin.py +++ b/awx/main/migrations/0092_v360_webhook_mixin.py @@ -5,7 +5,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0091_v360_approval_node_notifications'), ] diff --git a/awx/main/migrations/0093_v360_personal_access_tokens.py b/awx/main/migrations/0093_v360_personal_access_tokens.py index 3ba5b15e70..072771b5f4 100644 --- a/awx/main/migrations/0093_v360_personal_access_tokens.py +++ b/awx/main/migrations/0093_v360_personal_access_tokens.py @@ -12,7 +12,6 @@ def setup_tower_managed_defaults(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0092_v360_webhook_mixin'), ] diff --git a/awx/main/migrations/0094_v360_webhook_mixin2.py b/awx/main/migrations/0094_v360_webhook_mixin2.py index 03e81c30b6..b7de48fc33 100644 --- a/awx/main/migrations/0094_v360_webhook_mixin2.py +++ b/awx/main/migrations/0094_v360_webhook_mixin2.py @@ -5,7 +5,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0093_v360_personal_access_tokens'), ] diff --git a/awx/main/migrations/0095_v360_increase_instance_version_length.py b/awx/main/migrations/0095_v360_increase_instance_version_length.py index b2bd9a7c8d..94fe2557be 100644 --- a/awx/main/migrations/0095_v360_increase_instance_version_length.py +++ b/awx/main/migrations/0095_v360_increase_instance_version_length.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0094_v360_webhook_mixin2'), ] diff --git a/awx/main/migrations/0096_v360_container_groups.py b/awx/main/migrations/0096_v360_container_groups.py index 9fe4bad2d0..1ee9b92bfa 100644 --- a/awx/main/migrations/0096_v360_container_groups.py +++ b/awx/main/migrations/0096_v360_container_groups.py @@ -13,7 +13,6 @@ def create_new_credential_types(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0095_v360_increase_instance_version_length'), ] diff --git a/awx/main/migrations/0097_v360_workflowapproval_approved_or_denied_by.py b/awx/main/migrations/0097_v360_workflowapproval_approved_or_denied_by.py index b48c23fde1..961570a65b 100644 --- a/awx/main/migrations/0097_v360_workflowapproval_approved_or_denied_by.py +++ b/awx/main/migrations/0097_v360_workflowapproval_approved_or_denied_by.py @@ -6,7 +6,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('main', '0096_v360_container_groups'), diff --git a/awx/main/migrations/0098_v360_rename_cyberark_aim_credential_type.py b/awx/main/migrations/0098_v360_rename_cyberark_aim_credential_type.py index 02d46227a3..8e4470d96f 100644 --- a/awx/main/migrations/0098_v360_rename_cyberark_aim_credential_type.py +++ b/awx/main/migrations/0098_v360_rename_cyberark_aim_credential_type.py @@ -15,7 +15,6 @@ def update_cyberark_aim_name(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0097_v360_workflowapproval_approved_or_denied_by'), ] diff --git a/awx/main/migrations/0099_v361_license_cleanup.py b/awx/main/migrations/0099_v361_license_cleanup.py index f3e1b4e6ed..f02d194eb6 100644 --- a/awx/main/migrations/0099_v361_license_cleanup.py +++ b/awx/main/migrations/0099_v361_license_cleanup.py @@ -13,7 +13,6 @@ def _cleanup_license_setting(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0098_v360_rename_cyberark_aim_credential_type'), ] diff --git a/awx/main/migrations/0100_v370_projectupdate_job_tags.py b/awx/main/migrations/0100_v370_projectupdate_job_tags.py index db7ce691ce..5112e72b27 100644 --- a/awx/main/migrations/0100_v370_projectupdate_job_tags.py +++ b/awx/main/migrations/0100_v370_projectupdate_job_tags.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0099_v361_license_cleanup'), ] diff --git a/awx/main/migrations/0101_v370_generate_new_uuids_for_iso_nodes.py b/awx/main/migrations/0101_v370_generate_new_uuids_for_iso_nodes.py index a14399d30e..113a85f856 100644 --- a/awx/main/migrations/0101_v370_generate_new_uuids_for_iso_nodes.py +++ b/awx/main/migrations/0101_v370_generate_new_uuids_for_iso_nodes.py @@ -16,7 +16,6 @@ def _generate_new_uuid_for_iso_nodes(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0100_v370_projectupdate_job_tags'), ] diff --git a/awx/main/migrations/0102_v370_unifiedjob_canceled.py b/awx/main/migrations/0102_v370_unifiedjob_canceled.py index b5909dd9bc..862602e0fc 100644 --- a/awx/main/migrations/0102_v370_unifiedjob_canceled.py +++ b/awx/main/migrations/0102_v370_unifiedjob_canceled.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0101_v370_generate_new_uuids_for_iso_nodes'), ] diff --git a/awx/main/migrations/0103_v370_remove_computed_fields.py b/awx/main/migrations/0103_v370_remove_computed_fields.py index ca81402df9..a9c5096837 100644 --- a/awx/main/migrations/0103_v370_remove_computed_fields.py +++ b/awx/main/migrations/0103_v370_remove_computed_fields.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0102_v370_unifiedjob_canceled'), ] diff --git a/awx/main/migrations/0104_v370_cleanup_old_scan_jts.py b/awx/main/migrations/0104_v370_cleanup_old_scan_jts.py index f698498ac3..a98f64d8d5 100644 --- a/awx/main/migrations/0104_v370_cleanup_old_scan_jts.py +++ b/awx/main/migrations/0104_v370_cleanup_old_scan_jts.py @@ -9,7 +9,6 @@ def cleanup_scan_jts(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0103_v370_remove_computed_fields'), ] diff --git a/awx/main/migrations/0105_v370_remove_jobevent_parent_and_hosts.py b/awx/main/migrations/0105_v370_remove_jobevent_parent_and_hosts.py index a327667ba7..57ee532a48 100644 --- a/awx/main/migrations/0105_v370_remove_jobevent_parent_and_hosts.py +++ b/awx/main/migrations/0105_v370_remove_jobevent_parent_and_hosts.py @@ -4,7 +4,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0104_v370_cleanup_old_scan_jts'), ] diff --git a/awx/main/migrations/0106_v370_remove_inventory_groups_with_active_failures.py b/awx/main/migrations/0106_v370_remove_inventory_groups_with_active_failures.py index bc210e9fd3..a9ae525385 100644 --- a/awx/main/migrations/0106_v370_remove_inventory_groups_with_active_failures.py +++ b/awx/main/migrations/0106_v370_remove_inventory_groups_with_active_failures.py @@ -4,7 +4,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0105_v370_remove_jobevent_parent_and_hosts'), ] diff --git a/awx/main/migrations/0107_v370_workflow_convergence_api_toggle.py b/awx/main/migrations/0107_v370_workflow_convergence_api_toggle.py index 964f6e3e80..56e1ee2ffc 100644 --- a/awx/main/migrations/0107_v370_workflow_convergence_api_toggle.py +++ b/awx/main/migrations/0107_v370_workflow_convergence_api_toggle.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0106_v370_remove_inventory_groups_with_active_failures'), ] diff --git a/awx/main/migrations/0108_v370_unifiedjob_dependencies_processed.py b/awx/main/migrations/0108_v370_unifiedjob_dependencies_processed.py index 7a58d77be1..90d95ffadc 100644 --- a/awx/main/migrations/0108_v370_unifiedjob_dependencies_processed.py +++ b/awx/main/migrations/0108_v370_unifiedjob_dependencies_processed.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0107_v370_workflow_convergence_api_toggle'), ] diff --git a/awx/main/migrations/0109_v370_job_template_organization_field.py b/awx/main/migrations/0109_v370_job_template_organization_field.py index 37f8bf97c0..38c1867480 100644 --- a/awx/main/migrations/0109_v370_job_template_organization_field.py +++ b/awx/main/migrations/0109_v370_job_template_organization_field.py @@ -19,7 +19,6 @@ def rebuild_jt_parents(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0108_v370_unifiedjob_dependencies_processed'), ] diff --git a/awx/main/migrations/0110_v370_instance_ip_address.py b/awx/main/migrations/0110_v370_instance_ip_address.py index 914be02c52..de9786f862 100644 --- a/awx/main/migrations/0110_v370_instance_ip_address.py +++ b/awx/main/migrations/0110_v370_instance_ip_address.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0109_v370_job_template_organization_field'), ] diff --git a/awx/main/migrations/0111_v370_delete_channelgroup.py b/awx/main/migrations/0111_v370_delete_channelgroup.py index d17270fb90..7e87b0e09d 100644 --- a/awx/main/migrations/0111_v370_delete_channelgroup.py +++ b/awx/main/migrations/0111_v370_delete_channelgroup.py @@ -4,7 +4,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0110_v370_instance_ip_address'), ] diff --git a/awx/main/migrations/0112_v370_workflow_node_identifier.py b/awx/main/migrations/0112_v370_workflow_node_identifier.py index c10791898a..95775798e5 100644 --- a/awx/main/migrations/0112_v370_workflow_node_identifier.py +++ b/awx/main/migrations/0112_v370_workflow_node_identifier.py @@ -20,7 +20,6 @@ def create_uuid(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0111_v370_delete_channelgroup'), ] diff --git a/awx/main/migrations/0113_v370_event_bigint.py b/awx/main/migrations/0113_v370_event_bigint.py index 421b062ec1..fc85ac1708 100644 --- a/awx/main/migrations/0113_v370_event_bigint.py +++ b/awx/main/migrations/0113_v370_event_bigint.py @@ -37,7 +37,6 @@ class FakeAlterField(migrations.AlterField): class Migration(migrations.Migration): - dependencies = [ ('main', '0112_v370_workflow_node_identifier'), ] diff --git a/awx/main/migrations/0114_v370_remove_deprecated_manual_inventory_sources.py b/awx/main/migrations/0114_v370_remove_deprecated_manual_inventory_sources.py index 501b2d190d..47f37e9720 100644 --- a/awx/main/migrations/0114_v370_remove_deprecated_manual_inventory_sources.py +++ b/awx/main/migrations/0114_v370_remove_deprecated_manual_inventory_sources.py @@ -15,7 +15,6 @@ def remove_manual_inventory_sources(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0113_v370_event_bigint'), ] diff --git a/awx/main/migrations/0115_v370_schedule_set_null.py b/awx/main/migrations/0115_v370_schedule_set_null.py index 2bb681e3a1..e8297b81c9 100644 --- a/awx/main/migrations/0115_v370_schedule_set_null.py +++ b/awx/main/migrations/0115_v370_schedule_set_null.py @@ -5,7 +5,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0114_v370_remove_deprecated_manual_inventory_sources'), ] diff --git a/awx/main/migrations/0116_v400_remove_hipchat_notifications.py b/awx/main/migrations/0116_v400_remove_hipchat_notifications.py index 91444fcd41..c2676de21e 100644 --- a/awx/main/migrations/0116_v400_remove_hipchat_notifications.py +++ b/awx/main/migrations/0116_v400_remove_hipchat_notifications.py @@ -14,7 +14,6 @@ def remove_hipchat_notifications(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0115_v370_schedule_set_null'), ] diff --git a/awx/main/migrations/0117_v400_remove_cloudforms_inventory.py b/awx/main/migrations/0117_v400_remove_cloudforms_inventory.py index 58fa9d574e..c3a7efce59 100644 --- a/awx/main/migrations/0117_v400_remove_cloudforms_inventory.py +++ b/awx/main/migrations/0117_v400_remove_cloudforms_inventory.py @@ -5,7 +5,6 @@ from awx.main.migrations._inventory_source import delete_cloudforms_inv_source class Migration(migrations.Migration): - dependencies = [ ('main', '0116_v400_remove_hipchat_notifications'), ] diff --git a/awx/main/migrations/0118_add_remote_archive_scm_type.py b/awx/main/migrations/0118_add_remote_archive_scm_type.py index ab2a913733..ffe959f3a3 100644 --- a/awx/main/migrations/0118_add_remote_archive_scm_type.py +++ b/awx/main/migrations/0118_add_remote_archive_scm_type.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0117_v400_remove_cloudforms_inventory'), ] diff --git a/awx/main/migrations/0119_inventory_plugins.py b/awx/main/migrations/0119_inventory_plugins.py index 392bab15b8..d9e490bda1 100644 --- a/awx/main/migrations/0119_inventory_plugins.py +++ b/awx/main/migrations/0119_inventory_plugins.py @@ -29,7 +29,6 @@ def inventory_source_vars_forward(apps, schema_editor): source_vars_backup = dict() for inv_source_obj in _get_inventory_sources(InventorySource): - if inv_source_obj.source in FrozenInjectors: source_vars_backup[inv_source_obj.id] = dict(inv_source_obj.source_vars_dict) @@ -40,7 +39,6 @@ def inventory_source_vars_forward(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0118_add_remote_archive_scm_type'), ] diff --git a/awx/main/migrations/0120_galaxy_credentials.py b/awx/main/migrations/0120_galaxy_credentials.py index fdd6c84d51..da0dca4511 100644 --- a/awx/main/migrations/0120_galaxy_credentials.py +++ b/awx/main/migrations/0120_galaxy_credentials.py @@ -13,7 +13,6 @@ logger = logging.getLogger('awx.main.migrations') class Migration(migrations.Migration): - dependencies = [ ('main', '0119_inventory_plugins'), ] diff --git a/awx/main/migrations/0121_delete_toweranalyticsstate.py b/awx/main/migrations/0121_delete_toweranalyticsstate.py index d1e1ceb37c..31228a501f 100644 --- a/awx/main/migrations/0121_delete_toweranalyticsstate.py +++ b/awx/main/migrations/0121_delete_toweranalyticsstate.py @@ -4,7 +4,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0120_galaxy_credentials'), ] diff --git a/awx/main/migrations/0122_really_remove_cloudforms_inventory.py b/awx/main/migrations/0122_really_remove_cloudforms_inventory.py index ee44573304..7cf8440133 100644 --- a/awx/main/migrations/0122_really_remove_cloudforms_inventory.py +++ b/awx/main/migrations/0122_really_remove_cloudforms_inventory.py @@ -3,7 +3,6 @@ from awx.main.migrations._inventory_source import delete_cloudforms_inv_source class Migration(migrations.Migration): - dependencies = [ ('main', '0121_delete_toweranalyticsstate'), ] diff --git a/awx/main/migrations/0123_drop_hg_support.py b/awx/main/migrations/0123_drop_hg_support.py index 2d4860dac9..270dbdf963 100644 --- a/awx/main/migrations/0123_drop_hg_support.py +++ b/awx/main/migrations/0123_drop_hg_support.py @@ -3,7 +3,6 @@ from awx.main.migrations._hg_removal import delete_hg_scm class Migration(migrations.Migration): - dependencies = [ ('main', '0122_really_remove_cloudforms_inventory'), ] diff --git a/awx/main/migrations/0124_execution_environments.py b/awx/main/migrations/0124_execution_environments.py index 6679b59f0e..67a6e31464 100644 --- a/awx/main/migrations/0124_execution_environments.py +++ b/awx/main/migrations/0124_execution_environments.py @@ -8,7 +8,6 @@ import taggit.managers class Migration(migrations.Migration): - dependencies = [ ('taggit', '0003_taggeditem_add_unique_index'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), diff --git a/awx/main/migrations/0125_more_ee_modeling_changes.py b/awx/main/migrations/0125_more_ee_modeling_changes.py index 629813a55f..e1e0a86e14 100644 --- a/awx/main/migrations/0125_more_ee_modeling_changes.py +++ b/awx/main/migrations/0125_more_ee_modeling_changes.py @@ -7,7 +7,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0124_execution_environments'), ] diff --git a/awx/main/migrations/0126_executionenvironment_container_options.py b/awx/main/migrations/0126_executionenvironment_container_options.py index 8c3da310fe..122952da2c 100644 --- a/awx/main/migrations/0126_executionenvironment_container_options.py +++ b/awx/main/migrations/0126_executionenvironment_container_options.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0125_more_ee_modeling_changes'), ] diff --git a/awx/main/migrations/0127_reset_pod_spec_override.py b/awx/main/migrations/0127_reset_pod_spec_override.py index 82364579f4..88d361a4a8 100644 --- a/awx/main/migrations/0127_reset_pod_spec_override.py +++ b/awx/main/migrations/0127_reset_pod_spec_override.py @@ -9,7 +9,6 @@ def reset_pod_specs(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0126_executionenvironment_container_options'), ] diff --git a/awx/main/migrations/0128_organiaztion_read_roles_ee_admin.py b/awx/main/migrations/0128_organiaztion_read_roles_ee_admin.py index 571bc30bb9..482f4509a5 100644 --- a/awx/main/migrations/0128_organiaztion_read_roles_ee_admin.py +++ b/awx/main/migrations/0128_organiaztion_read_roles_ee_admin.py @@ -6,7 +6,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0127_reset_pod_spec_override'), ] diff --git a/awx/main/migrations/0129_unifiedjob_installed_collections.py b/awx/main/migrations/0129_unifiedjob_installed_collections.py index 644bff4132..c70134f823 100644 --- a/awx/main/migrations/0129_unifiedjob_installed_collections.py +++ b/awx/main/migrations/0129_unifiedjob_installed_collections.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0128_organiaztion_read_roles_ee_admin'), ] diff --git a/awx/main/migrations/0130_ee_polymorphic_set_null.py b/awx/main/migrations/0130_ee_polymorphic_set_null.py index a33e22a017..f3f58bcccb 100644 --- a/awx/main/migrations/0130_ee_polymorphic_set_null.py +++ b/awx/main/migrations/0130_ee_polymorphic_set_null.py @@ -5,7 +5,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0129_unifiedjob_installed_collections'), ] diff --git a/awx/main/migrations/0131_undo_org_polymorphic_ee.py b/awx/main/migrations/0131_undo_org_polymorphic_ee.py index 2a3a805bc1..4ff9b30f13 100644 --- a/awx/main/migrations/0131_undo_org_polymorphic_ee.py +++ b/awx/main/migrations/0131_undo_org_polymorphic_ee.py @@ -5,7 +5,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0130_ee_polymorphic_set_null'), ] diff --git a/awx/main/migrations/0132_instancegroup_is_container_group.py b/awx/main/migrations/0132_instancegroup_is_container_group.py index faffdc1af5..331be4bc5d 100644 --- a/awx/main/migrations/0132_instancegroup_is_container_group.py +++ b/awx/main/migrations/0132_instancegroup_is_container_group.py @@ -12,7 +12,6 @@ def migrate_existing_container_groups(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0131_undo_org_polymorphic_ee'), ] diff --git a/awx/main/migrations/0133_centrify_vault_credtype.py b/awx/main/migrations/0133_centrify_vault_credtype.py index e4416e3680..b061c10303 100644 --- a/awx/main/migrations/0133_centrify_vault_credtype.py +++ b/awx/main/migrations/0133_centrify_vault_credtype.py @@ -10,7 +10,6 @@ def setup_tower_managed_defaults(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0132_instancegroup_is_container_group'), ] diff --git a/awx/main/migrations/0134_unifiedjob_ansible_version.py b/awx/main/migrations/0134_unifiedjob_ansible_version.py index 6d92dc526b..2a0b4a2cee 100644 --- a/awx/main/migrations/0134_unifiedjob_ansible_version.py +++ b/awx/main/migrations/0134_unifiedjob_ansible_version.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0133_centrify_vault_credtype'), ] diff --git a/awx/main/migrations/0135_schedule_sort_fallback_to_id.py b/awx/main/migrations/0135_schedule_sort_fallback_to_id.py index 69969fafb4..950124e1c5 100644 --- a/awx/main/migrations/0135_schedule_sort_fallback_to_id.py +++ b/awx/main/migrations/0135_schedule_sort_fallback_to_id.py @@ -5,7 +5,6 @@ import django.db.models.expressions class Migration(migrations.Migration): - dependencies = [ ('main', '0134_unifiedjob_ansible_version'), ] diff --git a/awx/main/migrations/0136_scm_track_submodules.py b/awx/main/migrations/0136_scm_track_submodules.py index b2977906ea..3e48dea02a 100644 --- a/awx/main/migrations/0136_scm_track_submodules.py +++ b/awx/main/migrations/0136_scm_track_submodules.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0135_schedule_sort_fallback_to_id'), ] diff --git a/awx/main/migrations/0137_custom_inventory_scripts_removal_data.py b/awx/main/migrations/0137_custom_inventory_scripts_removal_data.py index 46490d2517..9a5c85cd27 100644 --- a/awx/main/migrations/0137_custom_inventory_scripts_removal_data.py +++ b/awx/main/migrations/0137_custom_inventory_scripts_removal_data.py @@ -7,7 +7,6 @@ from awx.main.migrations._inventory_source import delete_custom_inv_source class Migration(migrations.Migration): - dependencies = [ ('main', '0136_scm_track_submodules'), ] diff --git a/awx/main/migrations/0138_custom_inventory_scripts_removal.py b/awx/main/migrations/0138_custom_inventory_scripts_removal.py index 8dddf46667..b9d20f9b58 100644 --- a/awx/main/migrations/0138_custom_inventory_scripts_removal.py +++ b/awx/main/migrations/0138_custom_inventory_scripts_removal.py @@ -6,7 +6,6 @@ from awx.main.migrations._rbac import delete_all_custom_script_roles class Migration(migrations.Migration): - dependencies = [ ('main', '0137_custom_inventory_scripts_removal_data'), ] diff --git a/awx/main/migrations/0140_rename.py b/awx/main/migrations/0140_rename.py index 16ab7be7ac..c4cc186e56 100644 --- a/awx/main/migrations/0140_rename.py +++ b/awx/main/migrations/0140_rename.py @@ -6,7 +6,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0139_isolated_removal'), ] diff --git a/awx/main/migrations/0141_remove_isolated_instances.py b/awx/main/migrations/0141_remove_isolated_instances.py index 14f43cbd59..042eb6daac 100644 --- a/awx/main/migrations/0141_remove_isolated_instances.py +++ b/awx/main/migrations/0141_remove_isolated_instances.py @@ -9,7 +9,6 @@ def forwards(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0140_rename'), ] diff --git a/awx/main/migrations/0142_update_ee_image_field_description.py b/awx/main/migrations/0142_update_ee_image_field_description.py index 20830abc2b..6f9380236a 100644 --- a/awx/main/migrations/0142_update_ee_image_field_description.py +++ b/awx/main/migrations/0142_update_ee_image_field_description.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0141_remove_isolated_instances'), ] diff --git a/awx/main/migrations/0143_hostmetric.py b/awx/main/migrations/0143_hostmetric.py index 06a89fd777..a5df21ff3c 100644 --- a/awx/main/migrations/0143_hostmetric.py +++ b/awx/main/migrations/0143_hostmetric.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0142_update_ee_image_field_description'), ] diff --git a/awx/main/migrations/0144_event_partitions.py b/awx/main/migrations/0144_event_partitions.py index 59aa1e5253..065eead468 100644 --- a/awx/main/migrations/0144_event_partitions.py +++ b/awx/main/migrations/0144_event_partitions.py @@ -67,7 +67,6 @@ class FakeAddField(migrations.AddField): class Migration(migrations.Migration): - dependencies = [ ('main', '0143_hostmetric'), ] diff --git a/awx/main/migrations/0145_deregister_managed_ee_objs.py b/awx/main/migrations/0145_deregister_managed_ee_objs.py index f9906b072b..bab77d7691 100644 --- a/awx/main/migrations/0145_deregister_managed_ee_objs.py +++ b/awx/main/migrations/0145_deregister_managed_ee_objs.py @@ -11,7 +11,6 @@ def forwards(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0144_event_partitions'), ] diff --git a/awx/main/migrations/0146_add_insights_inventory.py b/awx/main/migrations/0146_add_insights_inventory.py index d4d9df3c32..c37be30941 100644 --- a/awx/main/migrations/0146_add_insights_inventory.py +++ b/awx/main/migrations/0146_add_insights_inventory.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0145_deregister_managed_ee_objs'), ] diff --git a/awx/main/migrations/0147_validate_ee_image_field.py b/awx/main/migrations/0147_validate_ee_image_field.py index 84e0500986..c75ee385ab 100644 --- a/awx/main/migrations/0147_validate_ee_image_field.py +++ b/awx/main/migrations/0147_validate_ee_image_field.py @@ -5,7 +5,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0146_add_insights_inventory'), ] diff --git a/awx/main/migrations/0148_unifiedjob_receptor_unit_id.py b/awx/main/migrations/0148_unifiedjob_receptor_unit_id.py index 9938daa691..50e3e22cbf 100644 --- a/awx/main/migrations/0148_unifiedjob_receptor_unit_id.py +++ b/awx/main/migrations/0148_unifiedjob_receptor_unit_id.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0147_validate_ee_image_field'), ] diff --git a/awx/main/migrations/0149_remove_inventory_insights_credential.py b/awx/main/migrations/0149_remove_inventory_insights_credential.py index 0aeee723fd..28af0a1e68 100644 --- a/awx/main/migrations/0149_remove_inventory_insights_credential.py +++ b/awx/main/migrations/0149_remove_inventory_insights_credential.py @@ -4,7 +4,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0148_unifiedjob_receptor_unit_id'), ] diff --git a/awx/main/migrations/0151_rename_managed_by_tower.py b/awx/main/migrations/0151_rename_managed_by_tower.py index 2b993f0037..8c0224444a 100644 --- a/awx/main/migrations/0151_rename_managed_by_tower.py +++ b/awx/main/migrations/0151_rename_managed_by_tower.py @@ -4,7 +4,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('main', '0150_rename_inv_sources_inv_updates'), ] diff --git a/awx/main/migrations/0152_instance_node_type.py b/awx/main/migrations/0152_instance_node_type.py index 1adcb16c9f..1aa024f0ac 100644 --- a/awx/main/migrations/0152_instance_node_type.py +++ b/awx/main/migrations/0152_instance_node_type.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0151_rename_managed_by_tower'), ] diff --git a/awx/main/migrations/0153_instance_last_seen.py b/awx/main/migrations/0153_instance_last_seen.py index 408146cda8..8878f6bed3 100644 --- a/awx/main/migrations/0153_instance_last_seen.py +++ b/awx/main/migrations/0153_instance_last_seen.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0152_instance_node_type'), ] diff --git a/awx/main/migrations/0154_set_default_uuid.py b/awx/main/migrations/0154_set_default_uuid.py index 013addb61a..f260c2aa53 100644 --- a/awx/main/migrations/0154_set_default_uuid.py +++ b/awx/main/migrations/0154_set_default_uuid.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0153_instance_last_seen'), ] diff --git a/awx/main/migrations/0155_improved_health_check.py b/awx/main/migrations/0155_improved_health_check.py index a82fa152b5..026ebb930e 100644 --- a/awx/main/migrations/0155_improved_health_check.py +++ b/awx/main/migrations/0155_improved_health_check.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0154_set_default_uuid'), ] diff --git a/awx/main/migrations/0156_capture_mesh_topology.py b/awx/main/migrations/0156_capture_mesh_topology.py index 90f5a5e0a2..afc796f873 100644 --- a/awx/main/migrations/0156_capture_mesh_topology.py +++ b/awx/main/migrations/0156_capture_mesh_topology.py @@ -5,7 +5,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0155_improved_health_check'), ] diff --git a/awx/main/migrations/0157_inventory_labels.py b/awx/main/migrations/0157_inventory_labels.py index f121ba6b2c..b42991785a 100644 --- a/awx/main/migrations/0157_inventory_labels.py +++ b/awx/main/migrations/0157_inventory_labels.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0156_capture_mesh_topology'), ] diff --git a/awx/main/migrations/0158_make_instance_cpu_decimal.py b/awx/main/migrations/0158_make_instance_cpu_decimal.py index b78ff1b754..cd0dd3407a 100644 --- a/awx/main/migrations/0158_make_instance_cpu_decimal.py +++ b/awx/main/migrations/0158_make_instance_cpu_decimal.py @@ -5,7 +5,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0157_inventory_labels'), ] diff --git a/awx/main/migrations/0159_deprecate_inventory_source_UoPU_field.py b/awx/main/migrations/0159_deprecate_inventory_source_UoPU_field.py index b586878fee..d441c32bcd 100644 --- a/awx/main/migrations/0159_deprecate_inventory_source_UoPU_field.py +++ b/awx/main/migrations/0159_deprecate_inventory_source_UoPU_field.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0158_make_instance_cpu_decimal'), ] diff --git a/awx/main/migrations/0160_alter_schedule_rrule.py b/awx/main/migrations/0160_alter_schedule_rrule.py index 5443b6bd26..1c114f8810 100644 --- a/awx/main/migrations/0160_alter_schedule_rrule.py +++ b/awx/main/migrations/0160_alter_schedule_rrule.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0159_deprecate_inventory_source_UoPU_field'), ] diff --git a/awx/main/migrations/0161_unifiedjob_host_status_counts.py b/awx/main/migrations/0161_unifiedjob_host_status_counts.py index 23871cb045..5bf9f4f593 100644 --- a/awx/main/migrations/0161_unifiedjob_host_status_counts.py +++ b/awx/main/migrations/0161_unifiedjob_host_status_counts.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0160_alter_schedule_rrule'), ] diff --git a/awx/main/migrations/0162_alter_unifiedjob_dependent_jobs.py b/awx/main/migrations/0162_alter_unifiedjob_dependent_jobs.py index e8f7c3c4c5..94e91be43f 100644 --- a/awx/main/migrations/0162_alter_unifiedjob_dependent_jobs.py +++ b/awx/main/migrations/0162_alter_unifiedjob_dependent_jobs.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0161_unifiedjob_host_status_counts'), ] diff --git a/awx/main/migrations/0163_convert_job_tags_to_textfield.py b/awx/main/migrations/0163_convert_job_tags_to_textfield.py index 219a80b149..7f505ac04f 100644 --- a/awx/main/migrations/0163_convert_job_tags_to_textfield.py +++ b/awx/main/migrations/0163_convert_job_tags_to_textfield.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0162_alter_unifiedjob_dependent_jobs'), ] diff --git a/awx/main/migrations/0164_remove_inventorysource_update_on_project_update.py b/awx/main/migrations/0164_remove_inventorysource_update_on_project_update.py index 9ccc5156e0..7ce28c0b64 100644 --- a/awx/main/migrations/0164_remove_inventorysource_update_on_project_update.py +++ b/awx/main/migrations/0164_remove_inventorysource_update_on_project_update.py @@ -12,7 +12,6 @@ def forwards(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0163_convert_job_tags_to_textfield'), ] diff --git a/awx/main/migrations/0165_task_manager_refactor.py b/awx/main/migrations/0165_task_manager_refactor.py index 2df6c6c2c2..9e5f2530b3 100644 --- a/awx/main/migrations/0165_task_manager_refactor.py +++ b/awx/main/migrations/0165_task_manager_refactor.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0164_remove_inventorysource_update_on_project_update'), ] diff --git a/awx/main/migrations/0166_alter_jobevent_host.py b/awx/main/migrations/0166_alter_jobevent_host.py index ec53e1c593..44b76f6ba9 100644 --- a/awx/main/migrations/0166_alter_jobevent_host.py +++ b/awx/main/migrations/0166_alter_jobevent_host.py @@ -5,7 +5,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0165_task_manager_refactor'), ] diff --git a/awx/main/migrations/0167_project_signature_validation_credential.py b/awx/main/migrations/0167_project_signature_validation_credential.py index d88cc55609..d404ee5b14 100644 --- a/awx/main/migrations/0167_project_signature_validation_credential.py +++ b/awx/main/migrations/0167_project_signature_validation_credential.py @@ -13,7 +13,6 @@ def setup_tower_managed_defaults(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0166_alter_jobevent_host'), ] diff --git a/awx/main/migrations/0168_inventoryupdate_scm_revision.py b/awx/main/migrations/0168_inventoryupdate_scm_revision.py index e0fe9d28fc..ddd9df230f 100644 --- a/awx/main/migrations/0168_inventoryupdate_scm_revision.py +++ b/awx/main/migrations/0168_inventoryupdate_scm_revision.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0167_project_signature_validation_credential'), ] diff --git a/awx/main/migrations/0169_jt_prompt_everything_on_launch.py b/awx/main/migrations/0169_jt_prompt_everything_on_launch.py index b31f66e139..e4c1a1fee2 100644 --- a/awx/main/migrations/0169_jt_prompt_everything_on_launch.py +++ b/awx/main/migrations/0169_jt_prompt_everything_on_launch.py @@ -7,7 +7,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('main', '0168_inventoryupdate_scm_revision'), ] diff --git a/awx/main/migrations/0170_node_and_link_state.py b/awx/main/migrations/0170_node_and_link_state.py index 6fbc3dd12b..705fe87266 100644 --- a/awx/main/migrations/0170_node_and_link_state.py +++ b/awx/main/migrations/0170_node_and_link_state.py @@ -16,7 +16,6 @@ def forwards(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('main', '0169_jt_prompt_everything_on_launch'), ] diff --git a/awx/main/migrations/0171_add_health_check_started.py b/awx/main/migrations/0171_add_health_check_started.py index 65f285b5b1..2af24d77ae 100644 --- a/awx/main/migrations/0171_add_health_check_started.py +++ b/awx/main/migrations/0171_add_health_check_started.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0170_node_and_link_state'), ] diff --git a/awx/main/migrations/0172_prevent_instance_fallback.py b/awx/main/migrations/0172_prevent_instance_fallback.py index aeb3ad3ebb..9b60d1e257 100644 --- a/awx/main/migrations/0172_prevent_instance_fallback.py +++ b/awx/main/migrations/0172_prevent_instance_fallback.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0171_add_health_check_started'), ] diff --git a/awx/main/migrations/0173_instancegroup_max_limits.py b/awx/main/migrations/0173_instancegroup_max_limits.py index 57ba95992e..e53902101a 100644 --- a/awx/main/migrations/0173_instancegroup_max_limits.py +++ b/awx/main/migrations/0173_instancegroup_max_limits.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('main', '0172_prevent_instance_fallback'), ] diff --git a/awx/main/migrations/0174_ensure_org_ee_admin_roles.py b/awx/main/migrations/0174_ensure_org_ee_admin_roles.py index 6792b10cc1..a4d979bb08 100644 --- a/awx/main/migrations/0174_ensure_org_ee_admin_roles.py +++ b/awx/main/migrations/0174_ensure_org_ee_admin_roles.py @@ -7,7 +7,6 @@ from awx.main.migrations import _migration_utils as migration_utils class Migration(migrations.Migration): - dependencies = [ ('main', '0173_instancegroup_max_limits'), ] diff --git a/awx/main/migrations/_create_system_jobs.py b/awx/main/migrations/_create_system_jobs.py index 1154e6adce..14879c8aef 100644 --- a/awx/main/migrations/_create_system_jobs.py +++ b/awx/main/migrations/_create_system_jobs.py @@ -15,7 +15,6 @@ only if new system job templates were created (i.e. new database). def create_clearsessions_jt(apps, schema_editor): - SystemJobTemplate = apps.get_model('main', 'SystemJobTemplate') Schedule = apps.get_model('main', 'Schedule') ContentType = apps.get_model('contenttypes', 'ContentType') @@ -48,7 +47,6 @@ def create_clearsessions_jt(apps, schema_editor): def create_cleartokens_jt(apps, schema_editor): - SystemJobTemplate = apps.get_model('main', 'SystemJobTemplate') Schedule = apps.get_model('main', 'Schedule') ContentType = apps.get_model('contenttypes', 'ContentType') diff --git a/awx/main/models/credential/__init__.py b/awx/main/models/credential/__init__.py index cee657da01..871016789b 100644 --- a/awx/main/models/credential/__init__.py +++ b/awx/main/models/credential/__init__.py @@ -547,7 +547,6 @@ class CredentialType(CommonModelNameNotUnique): class ManagedCredentialType(SimpleNamespace): - registry = {} def __init__(self, namespace, **kwargs): diff --git a/awx/main/models/events.py b/awx/main/models/events.py index e8bc865e00..1827802812 100644 --- a/awx/main/models/events.py +++ b/awx/main/models/events.py @@ -596,7 +596,6 @@ UnpartitionedJobEvent._meta.db_table = '_unpartitioned_' + JobEvent._meta.db_tab class ProjectUpdateEvent(BasePlaybookEvent): - VALID_KEYS = BasePlaybookEvent.VALID_KEYS + ['project_update_id', 'workflow_job_id', 'job_created'] JOB_REFERENCE = 'project_update_id' @@ -734,7 +733,6 @@ class BaseCommandEvent(CreatedModifiedModel): class AdHocCommandEvent(BaseCommandEvent): - VALID_KEYS = BaseCommandEvent.VALID_KEYS + ['ad_hoc_command_id', 'event', 'host_name', 'host_id', 'workflow_job_id', 'job_created'] WRAPUP_EVENT = 'playbook_on_stats' # exception to BaseCommandEvent JOB_REFERENCE = 'ad_hoc_command_id' @@ -841,7 +839,6 @@ UnpartitionedAdHocCommandEvent._meta.db_table = '_unpartitioned_' + AdHocCommand class InventoryUpdateEvent(BaseCommandEvent): - VALID_KEYS = BaseCommandEvent.VALID_KEYS + ['inventory_update_id', 'workflow_job_id', 'job_created'] JOB_REFERENCE = 'inventory_update_id' @@ -887,7 +884,6 @@ UnpartitionedInventoryUpdateEvent._meta.db_table = '_unpartitioned_' + Inventory class SystemJobEvent(BaseCommandEvent): - VALID_KEYS = BaseCommandEvent.VALID_KEYS + ['system_job_id', 'job_created'] JOB_REFERENCE = 'system_job_id' diff --git a/awx/main/models/ha.py b/awx/main/models/ha.py index 268f0f6996..a706063630 100644 --- a/awx/main/models/ha.py +++ b/awx/main/models/ha.py @@ -473,7 +473,6 @@ def on_instance_deleted(sender, instance, using, **kwargs): class UnifiedJobTemplateInstanceGroupMembership(models.Model): - unifiedjobtemplate = models.ForeignKey('UnifiedJobTemplate', on_delete=models.CASCADE) instancegroup = models.ForeignKey('InstanceGroup', on_delete=models.CASCADE) position = models.PositiveIntegerField( @@ -484,7 +483,6 @@ class UnifiedJobTemplateInstanceGroupMembership(models.Model): class OrganizationInstanceGroupMembership(models.Model): - organization = models.ForeignKey('Organization', on_delete=models.CASCADE) instancegroup = models.ForeignKey('InstanceGroup', on_delete=models.CASCADE) position = models.PositiveIntegerField( @@ -495,7 +493,6 @@ class OrganizationInstanceGroupMembership(models.Model): class InventoryInstanceGroupMembership(models.Model): - inventory = models.ForeignKey('Inventory', on_delete=models.CASCADE) instancegroup = models.ForeignKey('InstanceGroup', on_delete=models.CASCADE) position = models.PositiveIntegerField( @@ -506,7 +503,6 @@ class InventoryInstanceGroupMembership(models.Model): class JobLaunchConfigInstanceGroupMembership(models.Model): - joblaunchconfig = models.ForeignKey('JobLaunchConfig', on_delete=models.CASCADE) instancegroup = models.ForeignKey('InstanceGroup', on_delete=models.CASCADE) position = models.PositiveIntegerField( @@ -517,7 +513,6 @@ class JobLaunchConfigInstanceGroupMembership(models.Model): class ScheduleInstanceGroupMembership(models.Model): - schedule = models.ForeignKey('Schedule', on_delete=models.CASCADE) instancegroup = models.ForeignKey('InstanceGroup', on_delete=models.CASCADE) position = models.PositiveIntegerField( @@ -528,7 +523,6 @@ class ScheduleInstanceGroupMembership(models.Model): class WorkflowJobTemplateNodeBaseInstanceGroupMembership(models.Model): - workflowjobtemplatenode = models.ForeignKey('WorkflowJobTemplateNode', on_delete=models.CASCADE) instancegroup = models.ForeignKey('InstanceGroup', on_delete=models.CASCADE) position = models.PositiveIntegerField( @@ -539,7 +533,6 @@ class WorkflowJobTemplateNodeBaseInstanceGroupMembership(models.Model): class WorkflowJobNodeBaseInstanceGroupMembership(models.Model): - workflowjobnode = models.ForeignKey('WorkflowJobNode', on_delete=models.CASCADE) instancegroup = models.ForeignKey('InstanceGroup', on_delete=models.CASCADE) position = models.PositiveIntegerField( @@ -550,7 +543,6 @@ class WorkflowJobNodeBaseInstanceGroupMembership(models.Model): class WorkflowJobInstanceGroupMembership(models.Model): - workflowjobnode = models.ForeignKey('WorkflowJob', on_delete=models.CASCADE) instancegroup = models.ForeignKey('InstanceGroup', on_delete=models.CASCADE) position = models.PositiveIntegerField( diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index 81af2379a0..a0df4dfde4 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -988,7 +988,6 @@ class InventorySourceOptions(BaseModel): class InventorySource(UnifiedJobTemplate, InventorySourceOptions, CustomVirtualEnvMixin, RelatedJobsMixin): - SOFT_UNIQUE_TOGETHER = [('polymorphic_ctype', 'name', 'inventory')] class Meta: diff --git a/awx/main/models/notifications.py b/awx/main/models/notifications.py index 331586e76a..b51cd5195b 100644 --- a/awx/main/models/notifications.py +++ b/awx/main/models/notifications.py @@ -37,7 +37,6 @@ __all__ = ['NotificationTemplate', 'Notification'] class NotificationTemplate(CommonModelNameNotUnique): - NOTIFICATION_TYPES = [ ('email', _('Email'), CustomEmailBackend), ('slack', _('Slack'), SlackBackend), diff --git a/awx/main/models/organization.py b/awx/main/models/organization.py index 9a38bfe957..5e90c51ace 100644 --- a/awx/main/models/organization.py +++ b/awx/main/models/organization.py @@ -116,7 +116,6 @@ class Organization(CommonModel, NotificationFieldsModel, ResourceMixin, CustomVi class OrganizationGalaxyCredentialMembership(models.Model): - organization = models.ForeignKey('Organization', on_delete=models.CASCADE) credential = models.ForeignKey('Credential', on_delete=models.CASCADE) position = models.PositiveIntegerField( diff --git a/awx/main/models/projects.py b/awx/main/models/projects.py index 6577d24c40..ac6b6c27ad 100644 --- a/awx/main/models/projects.py +++ b/awx/main/models/projects.py @@ -43,7 +43,6 @@ __all__ = ['Project', 'ProjectUpdate'] class ProjectOptions(models.Model): - SCM_TYPE_CHOICES = [ ('', _('Manual')), ('git', _('Git')), diff --git a/awx/main/models/schedules.py b/awx/main/models/schedules.py index 1ec5ed7d2b..3993fdf183 100644 --- a/awx/main/models/schedules.py +++ b/awx/main/models/schedules.py @@ -54,7 +54,6 @@ class ScheduleQuerySet(ScheduleFilterMethods, QuerySet): class ScheduleManager(ScheduleFilterMethods, models.Manager): - use_for_related_objects = True def get_queryset(self): diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index 6e99978198..3f938f44ef 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -1129,7 +1129,6 @@ class UnifiedJob( # (`stdout`) directly to a file with connection.cursor() as cursor: - if enforce_max_bytes: # detect the length of all stdout for this UnifiedJob, and # if it exceeds settings.STDOUT_MAX_BYTES_DISPLAY bytes, diff --git a/awx/main/models/workflow.py b/awx/main/models/workflow.py index f97b4e93b8..56dcaf7d2d 100644 --- a/awx/main/models/workflow.py +++ b/awx/main/models/workflow.py @@ -450,7 +450,6 @@ class WorkflowJobOptions(LaunchTimeConfigBase): class WorkflowJobTemplate(UnifiedJobTemplate, WorkflowJobOptions, SurveyJobTemplateMixin, ResourceMixin, RelatedJobsMixin, WebhookTemplateMixin): - SOFT_UNIQUE_TOGETHER = [('polymorphic_ctype', 'name', 'organization')] FIELDS_TO_PRESERVE_AT_COPY = [ 'labels', @@ -568,7 +567,6 @@ class WorkflowJobTemplate(UnifiedJobTemplate, WorkflowJobOptions, SurveyJobTempl # Handle all the fields that have prompting rules # NOTE: If WFJTs prompt for other things, this logic can be combined with jobs for field_name, ask_field_name in self.get_ask_mapping().items(): - if field_name == 'extra_vars': accepted_vars, rejected_vars, vars_errors = self.accept_or_ignore_variables( kwargs.get('extra_vars', {}), _exclude_errors=exclude_errors, extra_passwords=kwargs.get('survey_passwords', {}) @@ -779,7 +777,6 @@ class WorkflowJob(UnifiedJob, WorkflowJobOptions, SurveyJobMixin, JobNotificatio class WorkflowApprovalTemplate(UnifiedJobTemplate, RelatedJobsMixin): - FIELDS_TO_PRESERVE_AT_COPY = [ 'description', 'timeout', diff --git a/awx/main/notifications/email_backend.py b/awx/main/notifications/email_backend.py index 5e37ac5f32..902a8b812e 100644 --- a/awx/main/notifications/email_backend.py +++ b/awx/main/notifications/email_backend.py @@ -22,7 +22,6 @@ DEFAULT_APPROVAL_DENIED_BODY = CustomNotificationBase.DEFAULT_APPROVAL_DENIED_BO class CustomEmailBackend(EmailBackend, CustomNotificationBase): - init_parameters = { "host": {"label": "Host", "type": "string"}, "port": {"label": "Port", "type": "int"}, diff --git a/awx/main/notifications/grafana_backend.py b/awx/main/notifications/grafana_backend.py index 0d7dff9e05..153b004a5e 100644 --- a/awx/main/notifications/grafana_backend.py +++ b/awx/main/notifications/grafana_backend.py @@ -31,7 +31,6 @@ logger = logging.getLogger('awx.main.notifications.grafana_backend') class GrafanaBackend(AWXBaseEmailBackend, CustomNotificationBase): - init_parameters = {"grafana_url": {"label": "Grafana URL", "type": "string"}, "grafana_key": {"label": "Grafana API Key", "type": "password"}} recipient_parameter = "grafana_url" sender_parameter = None diff --git a/awx/main/notifications/irc_backend.py b/awx/main/notifications/irc_backend.py index 20a5523b52..44693e0865 100644 --- a/awx/main/notifications/irc_backend.py +++ b/awx/main/notifications/irc_backend.py @@ -17,7 +17,6 @@ logger = logging.getLogger('awx.main.notifications.irc_backend') class IrcBackend(AWXBaseEmailBackend, CustomNotificationBase): - init_parameters = { "server": {"label": "IRC Server Address", "type": "string"}, "port": {"label": "IRC Server Port", "type": "int"}, diff --git a/awx/main/notifications/mattermost_backend.py b/awx/main/notifications/mattermost_backend.py index c96b3e9f54..ed8711220f 100644 --- a/awx/main/notifications/mattermost_backend.py +++ b/awx/main/notifications/mattermost_backend.py @@ -14,7 +14,6 @@ logger = logging.getLogger('awx.main.notifications.mattermost_backend') class MattermostBackend(AWXBaseEmailBackend, CustomNotificationBase): - init_parameters = {"mattermost_url": {"label": "Target URL", "type": "string"}, "mattermost_no_verify_ssl": {"label": "Verify SSL", "type": "bool"}} recipient_parameter = "mattermost_url" sender_parameter = None diff --git a/awx/main/notifications/pagerduty_backend.py b/awx/main/notifications/pagerduty_backend.py index cfc3073ed4..d8f37c07f6 100644 --- a/awx/main/notifications/pagerduty_backend.py +++ b/awx/main/notifications/pagerduty_backend.py @@ -29,7 +29,6 @@ logger = logging.getLogger('awx.main.notifications.pagerduty_backend') class PagerDutyBackend(AWXBaseEmailBackend, CustomNotificationBase): - init_parameters = { "subdomain": {"label": "Pagerduty subdomain", "type": "string"}, "token": {"label": "API Token", "type": "password"}, diff --git a/awx/main/notifications/rocketchat_backend.py b/awx/main/notifications/rocketchat_backend.py index 67155233c7..c741878172 100644 --- a/awx/main/notifications/rocketchat_backend.py +++ b/awx/main/notifications/rocketchat_backend.py @@ -16,7 +16,6 @@ logger = logging.getLogger('awx.main.notifications.rocketchat_backend') class RocketChatBackend(AWXBaseEmailBackend, CustomNotificationBase): - init_parameters = {"rocketchat_url": {"label": "Target URL", "type": "string"}, "rocketchat_no_verify_ssl": {"label": "Verify SSL", "type": "bool"}} recipient_parameter = "rocketchat_url" sender_parameter = None diff --git a/awx/main/notifications/slack_backend.py b/awx/main/notifications/slack_backend.py index d1016526aa..fc04dbb899 100644 --- a/awx/main/notifications/slack_backend.py +++ b/awx/main/notifications/slack_backend.py @@ -16,7 +16,6 @@ WEBSOCKET_TIMEOUT = 30 class SlackBackend(AWXBaseEmailBackend, CustomNotificationBase): - init_parameters = {"token": {"label": "Token", "type": "password"}, "channels": {"label": "Destination Channels", "type": "list"}} recipient_parameter = "channels" sender_parameter = None diff --git a/awx/main/notifications/twilio_backend.py b/awx/main/notifications/twilio_backend.py index 1f54d603ac..420c5ef74d 100644 --- a/awx/main/notifications/twilio_backend.py +++ b/awx/main/notifications/twilio_backend.py @@ -15,7 +15,6 @@ logger = logging.getLogger('awx.main.notifications.twilio_backend') class TwilioBackend(AWXBaseEmailBackend, CustomNotificationBase): - init_parameters = { "account_sid": {"label": "Account SID", "type": "string"}, "account_token": {"label": "Account Token", "type": "password"}, diff --git a/awx/main/notifications/webhook_backend.py b/awx/main/notifications/webhook_backend.py index 17ced60f9f..0b10596f2d 100644 --- a/awx/main/notifications/webhook_backend.py +++ b/awx/main/notifications/webhook_backend.py @@ -13,7 +13,6 @@ logger = logging.getLogger('awx.main.notifications.webhook_backend') class WebhookBackend(AWXBaseEmailBackend, CustomNotificationBase): - MAX_RETRIES = 5 init_parameters = { @@ -65,7 +64,6 @@ class WebhookBackend(AWXBaseEmailBackend, CustomNotificationBase): chosen_method = getattr(requests, self.http_method.lower(), None) for m in messages: - auth = None if self.username or self.password: auth = (self.username, self.password) @@ -82,7 +80,6 @@ class WebhookBackend(AWXBaseEmailBackend, CustomNotificationBase): err = None for retries in range(self.MAX_RETRIES): - # Sometimes we hit redirect URLs. We must account for this. We still extract the redirect URL from the response headers and try again. Max retires == 5 resp = chosen_method( url=url, diff --git a/awx/main/tasks/callback.py b/awx/main/tasks/callback.py index c99d9e3027..92bfc40368 100644 --- a/awx/main/tasks/callback.py +++ b/awx/main/tasks/callback.py @@ -244,5 +244,4 @@ class RunnerCallbackForAdHocCommand(RunnerCallback): class RunnerCallbackForSystemJob(RunnerCallback): - pass diff --git a/awx/main/tasks/jobs.py b/awx/main/tasks/jobs.py index a726a418c0..733475e0eb 100644 --- a/awx/main/tasks/jobs.py +++ b/awx/main/tasks/jobs.py @@ -1097,7 +1097,6 @@ class RunJob(SourceControlMixin, BaseTask): @task(queue=get_local_queuename) class RunProjectUpdate(BaseTask): - model = ProjectUpdate event_model = ProjectUpdateEvent callback_class = RunnerCallbackForProjectUpdate @@ -1420,7 +1419,6 @@ class RunProjectUpdate(BaseTask): @task(queue=get_local_queuename) class RunInventoryUpdate(SourceControlMixin, BaseTask): - model = InventoryUpdate event_model = InventoryUpdateEvent callback_class = RunnerCallbackForInventoryUpdate @@ -1815,7 +1813,6 @@ class RunAdHocCommand(BaseTask): @task(queue=get_local_queuename) class RunSystemJob(BaseTask): - model = SystemJob event_model = SystemJobEvent callback_class = RunnerCallbackForSystemJob diff --git a/awx/main/tasks/receptor.py b/awx/main/tasks/receptor.py index 94568ebd6c..006c805943 100644 --- a/awx/main/tasks/receptor.py +++ b/awx/main/tasks/receptor.py @@ -186,7 +186,6 @@ def run_until_complete(node, timing_data=None, **kwargs): stdout = '' try: - resultfile = receptor_ctl.get_work_results(unit_id) while run_timing < 20.0: @@ -206,7 +205,6 @@ def run_until_complete(node, timing_data=None, **kwargs): stdout = str(stdout, encoding='utf-8') finally: - if settings.RECEPTOR_RELEASE_WORK: res = receptor_ctl.simple_command(f"work release {unit_id}") if res != {'released': unit_id}: diff --git a/awx/main/tests/factories/tower.py b/awx/main/tests/factories/tower.py index 2688dbde19..894741a7e5 100644 --- a/awx/main/tests/factories/tower.py +++ b/awx/main/tests/factories/tower.py @@ -403,7 +403,6 @@ def create_notification_template(name, roles=None, persisted=True, **kwargs): def generate_workflow_job_template_nodes(workflow_job_template, persisted, **kwargs): - workflow_job_template_nodes = kwargs.get('workflow_job_template_nodes', []) if len(workflow_job_template_nodes) > 0 and not persisted: raise RuntimeError('workflow job template nodes cannot be used when persisted=False') diff --git a/awx/main/tests/functional/api/test_organization_counts.py b/awx/main/tests/functional/api/test_organization_counts.py index 096fc11350..d1790f413c 100644 --- a/awx/main/tests/functional/api/test_organization_counts.py +++ b/awx/main/tests/functional/api/test_organization_counts.py @@ -8,7 +8,6 @@ from awx.main.models import Project, Host @pytest.fixture def organization_resource_creator(organization, user): def rf(users, admins, job_templates, projects, inventories, teams): - # Associate one resource of every type with the organization for i in range(users): member_user = user('org-member %s' % i) diff --git a/awx/main/tests/functional/models/test_inventory.py b/awx/main/tests/functional/models/test_inventory.py index d246853c83..a1db473d3e 100644 --- a/awx/main/tests/functional/models/test_inventory.py +++ b/awx/main/tests/functional/models/test_inventory.py @@ -230,7 +230,6 @@ def setup_ec2_gce(organization): @pytest.fixture def setup_inventory_groups(inventory, group_factory): - groupA = group_factory('test_groupA') groupB = group_factory('test_groupB') diff --git a/awx/main/tests/functional/models/test_schedule.py b/awx/main/tests/functional/models/test_schedule.py index b41c390662..6ad7115373 100644 --- a/awx/main/tests/functional/models/test_schedule.py +++ b/awx/main/tests/functional/models/test_schedule.py @@ -20,7 +20,6 @@ def job_template(inventory, project): @pytest.mark.django_db class TestComputedFields: - # expired in 2015, so next_run should not be populated dead_rrule = "DTSTART;TZID=UTC:20140520T190000 RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=1;BYMONTHDAY=1;UNTIL=20150530T000000Z" continuing_rrule = "DTSTART;TZID=UTC:20140520T190000 RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=1;BYMONTHDAY=1" diff --git a/awx/main/tests/functional/test_ldap.py b/awx/main/tests/functional/test_ldap.py index d85e04c475..2467ff52e3 100644 --- a/awx/main/tests/functional/test_ldap.py +++ b/awx/main/tests/functional/test_ldap.py @@ -10,7 +10,6 @@ from awx.api.versioning import reverse @pytest.fixture def ldap_generator(): def fn(fname, host='localhost'): - fh = open(os.path.join(os.path.dirname(os.path.realpath(__file__)), fname), 'rb') ctrl = ldif.LDIFRecordList(fh) ctrl.parse() diff --git a/awx/main/tests/functional/test_notifications.py b/awx/main/tests/functional/test_notifications.py index 7396b77843..08036db97c 100644 --- a/awx/main/tests/functional/test_notifications.py +++ b/awx/main/tests/functional/test_notifications.py @@ -197,7 +197,6 @@ def mock_post(*args, **kwargs): @pytest.mark.django_db @mock.patch('requests.post', side_effect=mock_post) def test_webhook_notification_pointed_to_a_redirect_launch_endpoint(post, admin, organization): - n1 = NotificationTemplate.objects.create( name="test-webhook", description="test webhook", diff --git a/awx/main/tests/functional/test_rbac_job.py b/awx/main/tests/functional/test_rbac_job.py index 4f17aab45d..ff5c6c25a2 100644 --- a/awx/main/tests/functional/test_rbac_job.py +++ b/awx/main/tests/functional/test_rbac_job.py @@ -240,7 +240,6 @@ class TestJobRelaunchAccess: @pytest.mark.django_db class TestJobAndUpdateCancels: - # used in view: job_template_launch def test_jt_self_cancel(self, deploy_jobtemplate, jt_user): job = Job(job_template=deploy_jobtemplate, created_by=jt_user) diff --git a/awx/main/tests/functional/test_rbac_job_templates.py b/awx/main/tests/functional/test_rbac_job_templates.py index 7a9add0f37..bccec0a1c2 100644 --- a/awx/main/tests/functional/test_rbac_job_templates.py +++ b/awx/main/tests/functional/test_rbac_job_templates.py @@ -210,7 +210,6 @@ def test_associate_label(label, user, job_template): @pytest.mark.django_db class TestJobTemplateSchedules: - rrule = 'DTSTART:20151117T050000Z RRULE:FREQ=DAILY;INTERVAL=1;COUNT=1' rrule2 = 'DTSTART:20151117T050000Z RRULE:FREQ=WEEKLY;INTERVAL=1;COUNT=1' diff --git a/awx/main/tests/functional/test_session.py b/awx/main/tests/functional/test_session.py index 157000d1ab..b20adcefc0 100644 --- a/awx/main/tests/functional/test_session.py +++ b/awx/main/tests/functional/test_session.py @@ -9,7 +9,6 @@ from unittest import mock class AlwaysPassBackend(object): - user = None def authenticate(self, **credentials): diff --git a/awx/main/tests/functional/test_tasks.py b/awx/main/tests/functional/test_tasks.py index 8abe5579eb..c4d0dac4e3 100644 --- a/awx/main/tests/functional/test_tasks.py +++ b/awx/main/tests/functional/test_tasks.py @@ -52,7 +52,6 @@ def test_folder_cleanup_stale_file(mock_job_folder, mock_me): def test_folder_cleanup_running_job(mock_job_folder, mock_me): me_inst = Instance.objects.create(hostname='local_node', uuid='00000000-0000-0000-0000-000000000000') with mock.patch.object(Instance.objects, 'me', return_value=me_inst): - job = Job.objects.create(id=123, controller_node=me_inst.hostname, status='running') _cleanup_images_and_files(grace_period=0) assert os.path.exists(mock_job_folder) # running job should prevent folder from getting deleted diff --git a/awx/main/tests/unit/api/test_logger.py b/awx/main/tests/unit/api/test_logger.py index bdea633a07..b56da87da1 100644 --- a/awx/main/tests/unit/api/test_logger.py +++ b/awx/main/tests/unit/api/test_logger.py @@ -180,7 +180,6 @@ data_loggly = { ], ) def test_rsyslog_conf_template(enabled, log_type, host, port, protocol, errorfile, expected_config): - mock_settings, _ = _mock_logging_defaults() # Set test settings diff --git a/awx/main/tests/unit/models/test_unified_job_unit.py b/awx/main/tests/unit/models/test_unified_job_unit.py index 2fc89813d6..c7f62225c8 100644 --- a/awx/main/tests/unit/models/test_unified_job_unit.py +++ b/awx/main/tests/unit/models/test_unified_job_unit.py @@ -39,7 +39,6 @@ def unified_job(mocker): def test_cancel(unified_job): - with mock.patch('awx.main.models.unified_jobs.connection.on_commit', wraps=mock_on_commit): unified_job.cancel() diff --git a/awx/main/tests/unit/test_capacity.py b/awx/main/tests/unit/test_capacity.py index 7665c962b7..8132415c40 100644 --- a/awx/main/tests/unit/test_capacity.py +++ b/awx/main/tests/unit/test_capacity.py @@ -74,7 +74,6 @@ class Instance(FakeObject): @pytest.fixture def sample_cluster(): def stand_up_cluster(): - ig_small = InstanceGroup(name='ig_small') ig_large = InstanceGroup(name='ig_large') default = InstanceGroup(name='default') diff --git a/awx/main/tests/unit/utils/test_common.py b/awx/main/tests/unit/utils/test_common.py index 6e1d677363..cc8f65bf93 100644 --- a/awx/main/tests/unit/utils/test_common.py +++ b/awx/main/tests/unit/utils/test_common.py @@ -186,7 +186,6 @@ def test_memoize_delete(memoized_function, mock_cache): def test_memoize_parameter_error(): - with pytest.raises(common.IllegalArgumentError): @common.memoize(cache_key='foo', track_function=True) diff --git a/awx/main/utils/common.py b/awx/main/utils/common.py index af9cdc7a18..dedd02f995 100644 --- a/awx/main/utils/common.py +++ b/awx/main/utils/common.py @@ -361,7 +361,6 @@ def update_scm_url(scm_type, url, username=True, password=True, check_special_ca def get_allowed_fields(obj, serializer_mapping): - if serializer_mapping is not None and obj.__class__ in serializer_mapping: serializer_actual = serializer_mapping[obj.__class__]() allowed_fields = [x for x in serializer_actual.fields if not serializer_actual.fields[x].read_only] + ['id'] @@ -631,7 +630,6 @@ def prefetch_page_capabilities(model, page, prefetch_list, user): mapping[obj.id] = {} for prefetch_entry in prefetch_list: - display_method = None if type(prefetch_entry) is dict: display_method = list(prefetch_entry.keys())[0] diff --git a/awx/main/utils/filters.py b/awx/main/utils/filters.py index f0d29c0d10..7f9724329b 100644 --- a/awx/main/utils/filters.py +++ b/awx/main/utils/filters.py @@ -63,7 +63,6 @@ def record_is_blocked(record): class ExternalLoggerEnabled(Filter): - enabled_loggers = FieldFromSettings('LOG_AGGREGATOR_LOGGERS') enabled_flag = FieldFromSettings('LOG_AGGREGATOR_ENABLED') @@ -325,7 +324,6 @@ class SmartFilter(object): @classmethod def query_from_string(cls, filter_string): - """ TODO: * handle values with " via: a.b.c.d="hello\"world" diff --git a/awx/main/utils/formatters.py b/awx/main/utils/formatters.py index ebc873c657..783278bd9e 100644 --- a/awx/main/utils/formatters.py +++ b/awx/main/utils/formatters.py @@ -176,7 +176,6 @@ class LogstashFormatter(LogstashFormatterBase): if guid: data_for_log['guid'] = guid for field_object in job_event._meta.fields: - if not field_object.__class__ or not field_object.__class__.__name__: field_class_name = '' else: diff --git a/awx/main/utils/handlers.py b/awx/main/utils/handlers.py index 7f7116d78b..aa32c77e8c 100644 --- a/awx/main/utils/handlers.py +++ b/awx/main/utils/handlers.py @@ -17,7 +17,6 @@ from awx.main.exceptions import PostRunError class RSysLogHandler(logging.handlers.SysLogHandler): - append_nul = False def _connect_unixsocket(self, address): diff --git a/awx/main/views.py b/awx/main/views.py index 8ff612e8ba..c3732be740 100644 --- a/awx/main/views.py +++ b/awx/main/views.py @@ -21,7 +21,6 @@ def _force_raising_exception(view_obj, request, format=None): class ApiErrorView(views.APIView): - authentication_classes = [] permission_classes = (permissions.AllowAny,) metadata_class = None diff --git a/awx/main/wsbroadcast.py b/awx/main/wsbroadcast.py index c4ed0fc21b..2c1f228785 100644 --- a/awx/main/wsbroadcast.py +++ b/awx/main/wsbroadcast.py @@ -170,7 +170,6 @@ class BroadcastWebsocketManager(object): self.stats_mgr = BroadcastWebsocketStatsManager(self.event_loop, self.local_hostname) async def run_per_host_websocket(self): - while True: known_hosts = await get_broadcast_hosts() future_remote_hosts = known_hosts.keys() diff --git a/awx/sso/apps.py b/awx/sso/apps.py index 4d09b7acf6..6203ca6d6a 100644 --- a/awx/sso/apps.py +++ b/awx/sso/apps.py @@ -4,6 +4,5 @@ from django.utils.translation import gettext_lazy as _ class SSOConfig(AppConfig): - name = 'awx.sso' verbose_name = _('Single Sign-On') diff --git a/awx/sso/backends.py b/awx/sso/backends.py index 06f2a6c671..c55f24e7de 100644 --- a/awx/sso/backends.py +++ b/awx/sso/backends.py @@ -40,7 +40,6 @@ logger = logging.getLogger('awx.sso.backends') class LDAPSettings(BaseLDAPSettings): - defaults = dict(list(BaseLDAPSettings.defaults.items()) + list({'ORGANIZATION_MAP': {}, 'TEAM_MAP': {}, 'GROUP_TYPE_PARAMS': {}}.items())) def __init__(self, prefix='AUTH_LDAP_', defaults={}): diff --git a/awx/sso/common.py b/awx/sso/common.py index a80b519f13..4d601bb22e 100644 --- a/awx/sso/common.py +++ b/awx/sso/common.py @@ -12,7 +12,7 @@ logger = logging.getLogger('awx.sso.common') def get_orgs_by_ids(): existing_orgs = {} - for (org_id, org_name) in Organization.objects.all().values_list('id', 'name'): + for org_id, org_name in Organization.objects.all().values_list('id', 'name'): existing_orgs[org_name] = org_id return existing_orgs diff --git a/awx/sso/fields.py b/awx/sso/fields.py index 6eaef11cb8..25b7f2c304 100644 --- a/awx/sso/fields.py +++ b/awx/sso/fields.py @@ -135,7 +135,6 @@ class HybridDictField(fields.DictField): class AuthenticationBackendsField(fields.StringListField): - # Mapping of settings that must be set in order to enable each # authentication backend. REQUIRED_BACKEND_SETTINGS = collections.OrderedDict( @@ -244,7 +243,6 @@ class LDAPServerURIField(fields.URLField): class LDAPConnectionOptionsField(fields.DictField): - default_error_messages = {'invalid_options': _('Invalid connection option(s): {invalid_options}.')} def to_representation(self, value): @@ -336,7 +334,6 @@ class LDAPScopeField(fields.ChoiceField): class LDAPSearchField(fields.ListField): - default_error_messages = { 'invalid_length': _('Expected a list of three items but got {length} instead.'), 'type_error': _('Expected an instance of LDAPSearch but got {input_type} instead.'), @@ -366,12 +363,10 @@ class LDAPSearchField(fields.ListField): class LDAPSearchWithUserField(LDAPSearchField): - ldap_filter_field_class = LDAPFilterWithUserField class LDAPSearchUnionField(fields.ListField): - default_error_messages = {'type_error': _('Expected an instance of LDAPSearch or LDAPSearchUnion but got {input_type} instead.')} ldap_search_field_class = LDAPSearchWithUserField @@ -406,7 +401,6 @@ class LDAPSearchUnionField(fields.ListField): class LDAPUserAttrMapField(fields.DictField): - default_error_messages = {'invalid_attrs': _('Invalid user attribute(s): {invalid_attrs}.')} valid_user_attrs = {'first_name', 'last_name', 'email'} child = fields.CharField() @@ -422,7 +416,6 @@ class LDAPUserAttrMapField(fields.DictField): class LDAPGroupTypeField(fields.ChoiceField, DependsOnMixin): - default_error_messages = { 'type_error': _('Expected an instance of LDAPGroupType but got {input_type} instead.'), 'missing_parameters': _('Missing required parameters in {dependency}.'), @@ -498,7 +491,6 @@ class LDAPGroupTypeParamsField(fields.DictField, DependsOnMixin): class LDAPUserFlagsField(fields.DictField): - default_error_messages = {'invalid_flag': _('Invalid user flag: "{invalid_flag}".')} valid_user_flags = {'is_superuser', 'is_system_auditor'} child = LDAPDNListField() @@ -512,12 +504,10 @@ class LDAPUserFlagsField(fields.DictField): class LDAPDNMapField(fields.StringListBooleanField): - child = LDAPDNField() class LDAPSingleOrganizationMapField(HybridDictField): - admins = LDAPDNMapField(allow_null=True, required=False) users = LDAPDNMapField(allow_null=True, required=False) auditors = LDAPDNMapField(allow_null=True, required=False) @@ -529,12 +519,10 @@ class LDAPSingleOrganizationMapField(HybridDictField): class LDAPOrganizationMapField(fields.DictField): - child = LDAPSingleOrganizationMapField() class LDAPSingleTeamMapField(HybridDictField): - organization = fields.CharField() users = LDAPDNMapField(allow_null=True, required=False) remove = fields.BooleanField(required=False) @@ -543,7 +531,6 @@ class LDAPSingleTeamMapField(HybridDictField): class LDAPTeamMapField(fields.DictField): - child = LDAPSingleTeamMapField() @@ -577,7 +564,6 @@ class SocialMapStringRegexField(fields.CharField): class SocialMapField(fields.ListField): - default_error_messages = {'type_error': _('Expected None, True, False, a string or list of strings but got {input_type} instead.')} child = SocialMapStringRegexField() @@ -611,7 +597,6 @@ class SocialMapField(fields.ListField): class SocialSingleOrganizationMapField(HybridDictField): - admins = SocialMapField(allow_null=True, required=False) users = SocialMapField(allow_null=True, required=False) remove_admins = fields.BooleanField(required=False) @@ -622,12 +607,10 @@ class SocialSingleOrganizationMapField(HybridDictField): class SocialOrganizationMapField(fields.DictField): - child = SocialSingleOrganizationMapField() class SocialSingleTeamMapField(HybridDictField): - organization = fields.CharField() users = SocialMapField(allow_null=True, required=False) remove = fields.BooleanField(required=False) @@ -636,19 +619,16 @@ class SocialSingleTeamMapField(HybridDictField): class SocialTeamMapField(fields.DictField): - child = SocialSingleTeamMapField() class SAMLOrgInfoValueField(HybridDictField): - name = fields.CharField() displayname = fields.CharField() url = fields.URLField() class SAMLOrgInfoField(fields.DictField): - default_error_messages = {'invalid_lang_code': _('Invalid language code(s) for org info: {invalid_lang_codes}.')} child = SAMLOrgInfoValueField() @@ -666,13 +646,11 @@ class SAMLOrgInfoField(fields.DictField): class SAMLContactField(HybridDictField): - givenName = fields.CharField() emailAddress = fields.EmailField() class SAMLIdPField(HybridDictField): - entity_id = fields.CharField() url = fields.URLField() x509cert = fields.CharField(validators=[validate_certificate]) @@ -684,12 +662,10 @@ class SAMLIdPField(HybridDictField): class SAMLEnabledIdPsField(fields.DictField): - child = SAMLIdPField() class SAMLSecurityField(HybridDictField): - nameIdEncrypted = fields.BooleanField(required=False) authnRequestsSigned = fields.BooleanField(required=False) logoutRequestSigned = fields.BooleanField(required=False) @@ -710,7 +686,6 @@ class SAMLSecurityField(HybridDictField): class SAMLOrgAttrField(HybridDictField): - remove = fields.BooleanField(required=False) saml_attr = fields.CharField(required=False, allow_null=True) remove_admins = fields.BooleanField(required=False) @@ -722,7 +697,6 @@ class SAMLOrgAttrField(HybridDictField): class SAMLTeamAttrTeamOrgMapField(HybridDictField): - team = fields.CharField(required=True, allow_null=False) team_alias = fields.CharField(required=False, allow_null=True) organization = fields.CharField(required=True, allow_null=False) @@ -731,7 +705,6 @@ class SAMLTeamAttrTeamOrgMapField(HybridDictField): class SAMLTeamAttrField(HybridDictField): - team_org_map = fields.ListField(required=False, child=SAMLTeamAttrTeamOrgMapField(), allow_null=True) remove = fields.BooleanField(required=False) saml_attr = fields.CharField(required=False, allow_null=True) @@ -740,7 +713,6 @@ class SAMLTeamAttrField(HybridDictField): class SAMLUserFlagsAttrField(HybridDictField): - is_superuser_attr = fields.CharField(required=False, allow_null=True) is_superuser_value = fields.StringListField(required=False, allow_null=True) is_superuser_role = fields.StringListField(required=False, allow_null=True) diff --git a/awx/sso/migrations/0001_initial.py b/awx/sso/migrations/0001_initial.py index e1fc1ba189..d759e22437 100644 --- a/awx/sso/migrations/0001_initial.py +++ b/awx/sso/migrations/0001_initial.py @@ -6,7 +6,6 @@ from django.conf import settings class Migration(migrations.Migration): - dependencies = [migrations.swappable_dependency(settings.AUTH_USER_MODEL)] operations = [ diff --git a/awx/sso/migrations/0002_expand_provider_options.py b/awx/sso/migrations/0002_expand_provider_options.py index d7fd032c75..68f877717f 100644 --- a/awx/sso/migrations/0002_expand_provider_options.py +++ b/awx/sso/migrations/0002_expand_provider_options.py @@ -5,7 +5,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [('sso', '0001_initial')] operations = [ diff --git a/awx/sso/saml_pipeline.py b/awx/sso/saml_pipeline.py index a0060e13e8..e8c4f9ff6d 100644 --- a/awx/sso/saml_pipeline.py +++ b/awx/sso/saml_pipeline.py @@ -170,7 +170,7 @@ def _update_user_teams_by_saml_attr(desired_team_state, teams_to_create, **kwarg # Only get the all orgs once, and only if needed if all_teams is None: all_teams = Team.objects.all().values_list('name', 'organization__name') - for (team_name, organization_name) in all_teams: + for team_name, organization_name in all_teams: if organization_name not in desired_team_state: desired_team_state[organization_name] = {} desired_team_state[organization_name][team_name] = {role: False} diff --git a/awx/sso/views.py b/awx/sso/views.py index 4654b8f785..c4ecdc7632 100644 --- a/awx/sso/views.py +++ b/awx/sso/views.py @@ -17,7 +17,6 @@ logger = logging.getLogger('awx.sso.views') class BaseRedirectView(RedirectView): - permanent = True def get_redirect_url(self, *args, **kwargs): diff --git a/awx/ui/apps.py b/awx/ui/apps.py index d567e64b80..ed7d1e9817 100644 --- a/awx/ui/apps.py +++ b/awx/ui/apps.py @@ -4,6 +4,5 @@ from django.utils.translation import gettext_lazy as _ class UIConfig(AppConfig): - name = 'awx.ui' verbose_name = _('UI') diff --git a/awx/ui/fields.py b/awx/ui/fields.py index 37089c0265..5c5fa4997e 100644 --- a/awx/ui/fields.py +++ b/awx/ui/fields.py @@ -22,7 +22,6 @@ class PendoTrackingStateField(fields.ChoiceField): class CustomLogoField(fields.CharField): - CUSTOM_LOGO_RE = re.compile(r'^data:image/(?:png|jpeg|gif);base64,([A-Za-z0-9+/=]+?)$') default_error_messages = { diff --git a/awx/ui/urls.py b/awx/ui/urls.py index 6661fee280..6ced9950eb 100644 --- a/awx/ui/urls.py +++ b/awx/ui/urls.py @@ -6,12 +6,10 @@ from awx.main.utils.licensing import server_product_name class IndexView(TemplateView): - template_name = 'index.html' class MigrationsNotran(TemplateView): - template_name = 'installing.html' def get_context_data(self, **kwargs): diff --git a/awxkit/awxkit/api/client.py b/awxkit/awxkit/api/client.py index 04b399e079..95e990b792 100644 --- a/awxkit/awxkit/api/client.py +++ b/awxkit/awxkit/api/client.py @@ -10,7 +10,6 @@ log = logging.getLogger(__name__) class ConnectionException(exc.Common): - pass diff --git a/awxkit/awxkit/api/mixins/has_create.py b/awxkit/awxkit/api/mixins/has_create.py index 1e8b24db5a..21f37fe7a2 100644 --- a/awxkit/awxkit/api/mixins/has_create.py +++ b/awxkit/awxkit/api/mixins/has_create.py @@ -201,7 +201,6 @@ except ImportError: class HasCreate(object): - # For reference only. Use self.ds, or self._dependency_store if mutating. dependencies = [] optional_dependencies = [] diff --git a/awxkit/awxkit/api/mixins/has_status.py b/awxkit/awxkit/api/mixins/has_status.py index d4453d302a..0bb9992f69 100644 --- a/awxkit/awxkit/api/mixins/has_status.py +++ b/awxkit/awxkit/api/mixins/has_status.py @@ -13,7 +13,6 @@ def bytes_to_str(obj): class HasStatus(object): - completed_statuses = ['successful', 'failed', 'error', 'canceled'] started_statuses = ['pending', 'running'] + completed_statuses diff --git a/awxkit/awxkit/api/pages/access_list.py b/awxkit/awxkit/api/pages/access_list.py index f037fcfa72..c028bea087 100644 --- a/awxkit/awxkit/api/pages/access_list.py +++ b/awxkit/awxkit/api/pages/access_list.py @@ -4,7 +4,6 @@ from . import page class AccessList(page.PageList, users.User): - pass diff --git a/awxkit/awxkit/api/pages/activity_stream.py b/awxkit/awxkit/api/pages/activity_stream.py index 0be25e47c9..692136c1ce 100644 --- a/awxkit/awxkit/api/pages/activity_stream.py +++ b/awxkit/awxkit/api/pages/activity_stream.py @@ -4,7 +4,6 @@ from . import page class ActivityStream(base.Base): - pass @@ -12,7 +11,6 @@ page.register_page(resources.activity, ActivityStream) class ActivityStreams(page.PageList, ActivityStream): - pass diff --git a/awxkit/awxkit/api/pages/ad_hoc_commands.py b/awxkit/awxkit/api/pages/ad_hoc_commands.py index 39b11d8746..92dc34c523 100644 --- a/awxkit/awxkit/api/pages/ad_hoc_commands.py +++ b/awxkit/awxkit/api/pages/ad_hoc_commands.py @@ -9,7 +9,6 @@ from . import page class AdHocCommand(HasCreate, UnifiedJob): - dependencies = [Inventory, Credential] def relaunch(self, payload={}): @@ -30,7 +29,6 @@ class AdHocCommand(HasCreate, UnifiedJob): return update_payload(payload, optional_fields, kwargs) def create_payload(self, module_name='ping', module_args=np, job_type=np, limit=np, verbosity=np, inventory=Inventory, credential=Credential, **kwargs): - self.create_and_update_dependencies(inventory, credential) payload = self.payload( @@ -47,7 +45,6 @@ class AdHocCommand(HasCreate, UnifiedJob): return payload def create(self, module_name='ping', module_args=np, job_type=np, limit=np, verbosity=np, inventory=Inventory, credential=Credential, **kwargs): - payload = self.create_payload( module_name=module_name, module_args=module_args, @@ -65,7 +62,6 @@ page.register_page([resources.ad_hoc_command], AdHocCommand) class AdHocCommands(page.PageList, AdHocCommand): - pass diff --git a/awxkit/awxkit/api/pages/api.py b/awxkit/awxkit/api/pages/api.py index 21ea8afbb7..f1f9b6712a 100644 --- a/awxkit/awxkit/api/pages/api.py +++ b/awxkit/awxkit/api/pages/api.py @@ -63,7 +63,6 @@ DEPENDENT_NONEXPORT = [ class Api(base.Base): - pass @@ -71,7 +70,6 @@ page.register_page(resources.api, Api) class ApiV2(base.Base): - # Export methods def _export(self, _page, post_fields): diff --git a/awxkit/awxkit/api/pages/applications.py b/awxkit/awxkit/api/pages/applications.py index a3ea0d29bd..3c9e4a8d76 100644 --- a/awxkit/awxkit/api/pages/applications.py +++ b/awxkit/awxkit/api/pages/applications.py @@ -8,7 +8,6 @@ from . import base class OAuth2Application(HasCreate, base.Base): - dependencies = [Organization] NATURAL_KEY = ('organization', 'name') @@ -49,7 +48,6 @@ page.register_page(resources.applications, OAuth2Applications) class OAuth2AccessToken(HasCreate, base.Base): - optional_dependencies = [OAuth2Application] def payload(self, **kwargs): diff --git a/awxkit/awxkit/api/pages/authtoken.py b/awxkit/awxkit/api/pages/authtoken.py index fd5b2824ed..36ec0b9546 100644 --- a/awxkit/awxkit/api/pages/authtoken.py +++ b/awxkit/awxkit/api/pages/authtoken.py @@ -4,7 +4,6 @@ from . import page class AuthToken(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/credential_input_sources.py b/awxkit/awxkit/api/pages/credential_input_sources.py index c500cfca81..3b96fa72b6 100644 --- a/awxkit/awxkit/api/pages/credential_input_sources.py +++ b/awxkit/awxkit/api/pages/credential_input_sources.py @@ -4,7 +4,6 @@ from . import page class CredentialInputSource(base.Base): - pass @@ -12,7 +11,6 @@ page.register_page(resources.credential_input_source, CredentialInputSource) class CredentialInputSources(page.PageList, CredentialInputSource): - pass diff --git a/awxkit/awxkit/api/pages/credentials.py b/awxkit/awxkit/api/pages/credentials.py index ff108fe88a..2def3004ed 100644 --- a/awxkit/awxkit/api/pages/credentials.py +++ b/awxkit/awxkit/api/pages/credentials.py @@ -142,7 +142,6 @@ def get_payload_field_and_value_from_kwargs_or_config_cred(field, kind, kwargs, class CredentialType(HasCreate, base.Base): - NATURAL_KEY = ('name', 'kind') def silent_delete(self): @@ -182,7 +181,6 @@ page.register_page([resources.credential_type, (resources.credential_types, 'pos class CredentialTypes(page.PageList, CredentialType): - pass @@ -190,7 +188,6 @@ page.register_page(resources.credential_types, CredentialTypes) class Credential(HasCopy, HasCreate, base.Base): - dependencies = [CredentialType] optional_dependencies = [Organization, User, Team] NATURAL_KEY = ('organization', 'name', 'credential_type') @@ -296,7 +293,6 @@ page.register_page( class Credentials(page.PageList, Credential): - pass @@ -304,7 +300,6 @@ page.register_page([resources.credentials, resources.related_credentials, resour class CredentialCopy(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/dashboard.py b/awxkit/awxkit/api/pages/dashboard.py index 177a861f08..9524497af0 100644 --- a/awxkit/awxkit/api/pages/dashboard.py +++ b/awxkit/awxkit/api/pages/dashboard.py @@ -4,7 +4,6 @@ from . import page class Dashboard(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/execution_environments.py b/awxkit/awxkit/api/pages/execution_environments.py index f761fb6fdd..2f9b6d01e3 100644 --- a/awxkit/awxkit/api/pages/execution_environments.py +++ b/awxkit/awxkit/api/pages/execution_environments.py @@ -16,7 +16,6 @@ log = logging.getLogger(__name__) class ExecutionEnvironment(HasCreate, HasCopy, base.Base): - dependencies = [Organization, Credential] NATURAL_KEY = ('name',) diff --git a/awxkit/awxkit/api/pages/instance_groups.py b/awxkit/awxkit/api/pages/instance_groups.py index 40cc942927..4573ab63ca 100644 --- a/awxkit/awxkit/api/pages/instance_groups.py +++ b/awxkit/awxkit/api/pages/instance_groups.py @@ -39,7 +39,6 @@ page.register_page([resources.instance_group, (resources.instance_groups, 'post' class InstanceGroups(page.PageList, InstanceGroup): - pass diff --git a/awxkit/awxkit/api/pages/instances.py b/awxkit/awxkit/api/pages/instances.py index d30694ed6c..304cc5d382 100644 --- a/awxkit/awxkit/api/pages/instances.py +++ b/awxkit/awxkit/api/pages/instances.py @@ -4,7 +4,6 @@ from . import page class Instance(base.Base): - pass @@ -12,7 +11,6 @@ page.register_page(resources.instance, Instance) class Instances(page.PageList, Instance): - pass diff --git a/awxkit/awxkit/api/pages/inventory.py b/awxkit/awxkit/api/pages/inventory.py index 354fa2abbb..1ff9e02960 100644 --- a/awxkit/awxkit/api/pages/inventory.py +++ b/awxkit/awxkit/api/pages/inventory.py @@ -16,7 +16,6 @@ log = logging.getLogger(__name__) class Inventory(HasCopy, HasCreate, HasInstanceGroups, HasVariables, base.Base): - dependencies = [Organization] NATURAL_KEY = ('organization', 'name') @@ -130,7 +129,6 @@ page.register_page([resources.inventory, (resources.inventories, 'post'), (resou class Inventories(page.PageList, Inventory): - pass @@ -138,7 +136,6 @@ page.register_page([resources.inventories, resources.related_inventories], Inven class Group(HasCreate, HasVariables, base.Base): - dependencies = [Inventory] optional_dependencies = [Credential] NATURAL_KEY = ('name', 'inventory') @@ -213,7 +210,6 @@ page.register_page([resources.group, (resources.groups, 'post')], Group) class Groups(page.PageList, Group): - pass @@ -231,7 +227,6 @@ page.register_page( class Host(HasCreate, HasVariables, base.Base): - dependencies = [Inventory] NATURAL_KEY = ('name', 'inventory') @@ -273,7 +268,6 @@ page.register_page([resources.host, (resources.hosts, 'post')], Host) class Hosts(page.PageList, Host): - pass @@ -281,7 +275,6 @@ page.register_page([resources.hosts, resources.group_related_hosts, resources.in class FactVersion(base.Base): - pass @@ -298,7 +291,6 @@ page.register_page(resources.host_related_fact_versions, FactVersions) class FactView(base.Base): - pass @@ -306,7 +298,6 @@ page.register_page(resources.fact_view, FactView) class InventorySource(HasCreate, HasNotifications, UnifiedJobTemplate): - optional_schedule_fields = tuple() dependencies = [Inventory] optional_dependencies = [Credential, Project] @@ -403,7 +394,6 @@ page.register_page([resources.inventory_source, (resources.inventory_sources, 'p class InventorySources(page.PageList, InventorySource): - pass @@ -411,7 +401,6 @@ page.register_page([resources.inventory_sources, resources.related_inventory_sou class InventorySourceGroups(page.PageList, Group): - pass @@ -419,7 +408,6 @@ page.register_page(resources.inventory_sources_related_groups, InventorySourceGr class InventorySourceUpdate(base.Base): - pass @@ -427,7 +415,6 @@ page.register_page([resources.inventory_sources_related_update, resources.invent class InventoryUpdate(UnifiedJob): - pass @@ -435,7 +422,6 @@ page.register_page(resources.inventory_update, InventoryUpdate) class InventoryUpdates(page.PageList, InventoryUpdate): - pass @@ -443,7 +429,6 @@ page.register_page([resources.inventory_updates, resources.inventory_source_upda class InventoryUpdateCancel(base.Base): - pass @@ -451,7 +436,6 @@ page.register_page(resources.inventory_update_cancel, InventoryUpdateCancel) class InventoryCopy(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/job_templates.py b/awxkit/awxkit/api/pages/job_templates.py index 5378059843..151442094e 100644 --- a/awxkit/awxkit/api/pages/job_templates.py +++ b/awxkit/awxkit/api/pages/job_templates.py @@ -11,7 +11,6 @@ from . import page class JobTemplate(HasCopy, HasCreate, HasInstanceGroups, HasNotifications, HasSurvey, UnifiedJobTemplate): - optional_dependencies = [Inventory, Credential, Project] NATURAL_KEY = ('organization', 'name') @@ -153,7 +152,6 @@ page.register_page([resources.job_template, (resources.job_templates, 'post'), ( class JobTemplates(page.PageList, JobTemplate): - pass @@ -161,7 +159,6 @@ page.register_page([resources.job_templates, resources.related_job_templates], J class JobTemplateCallback(base.Base): - pass @@ -169,7 +166,6 @@ page.register_page(resources.job_template_callback, JobTemplateCallback) class JobTemplateLaunch(base.Base): - pass @@ -177,7 +173,6 @@ page.register_page(resources.job_template_launch, JobTemplateLaunch) class JobTemplateCopy(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/jobs.py b/awxkit/awxkit/api/pages/jobs.py index 358009e59b..6b65cbaa91 100644 --- a/awxkit/awxkit/api/pages/jobs.py +++ b/awxkit/awxkit/api/pages/jobs.py @@ -14,7 +14,6 @@ page.register_page(resources.job, Job) class Jobs(page.PageList, Job): - pass @@ -22,7 +21,6 @@ page.register_page([resources.jobs, resources.job_template_jobs, resources.syste class JobCancel(UnifiedJob): - pass @@ -30,7 +28,6 @@ page.register_page(resources.job_cancel, JobCancel) class JobEvent(base.Base): - pass @@ -38,7 +35,6 @@ page.register_page([resources.job_event, resources.job_job_event], JobEvent) class JobEvents(page.PageList, JobEvent): - pass @@ -46,7 +42,6 @@ page.register_page([resources.job_events, resources.job_job_events, resources.jo class JobPlay(base.Base): - pass @@ -54,7 +49,6 @@ page.register_page(resources.job_play, JobPlay) class JobPlays(page.PageList, JobPlay): - pass @@ -62,7 +56,6 @@ page.register_page(resources.job_plays, JobPlays) class JobTask(base.Base): - pass @@ -70,7 +63,6 @@ page.register_page(resources.job_task, JobTask) class JobTasks(page.PageList, JobTask): - pass @@ -78,7 +70,6 @@ page.register_page(resources.job_tasks, JobTasks) class JobHostSummary(base.Base): - pass @@ -86,7 +77,6 @@ page.register_page(resources.job_host_summary, JobHostSummary) class JobHostSummaries(page.PageList, JobHostSummary): - pass @@ -94,7 +84,6 @@ page.register_page([resources.job_host_summaries, resources.group_related_job_ho class JobRelaunch(base.Base): - pass @@ -102,7 +91,6 @@ page.register_page(resources.job_relaunch, JobRelaunch) class JobStdout(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/labels.py b/awxkit/awxkit/api/pages/labels.py index 4fb109364d..79f20b36a5 100644 --- a/awxkit/awxkit/api/pages/labels.py +++ b/awxkit/awxkit/api/pages/labels.py @@ -7,7 +7,6 @@ from . import page class Label(HasCreate, base.Base): - dependencies = [Organization] NATURAL_KEY = ('organization', 'name') @@ -40,7 +39,6 @@ page.register_page([resources.label, (resources.labels, 'post')], Label) class Labels(page.PageList, Label): - pass diff --git a/awxkit/awxkit/api/pages/mesh_visualizer.py b/awxkit/awxkit/api/pages/mesh_visualizer.py index c5dad782d1..2b490e5158 100644 --- a/awxkit/awxkit/api/pages/mesh_visualizer.py +++ b/awxkit/awxkit/api/pages/mesh_visualizer.py @@ -4,7 +4,6 @@ from . import page class MeshVisualizer(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/notification_templates.py b/awxkit/awxkit/api/pages/notification_templates.py index 927daaf775..3d33300ce8 100644 --- a/awxkit/awxkit/api/pages/notification_templates.py +++ b/awxkit/awxkit/api/pages/notification_templates.py @@ -15,7 +15,6 @@ notification_types = ('email', 'irc', 'pagerduty', 'slack', 'twilio', 'webhook', class NotificationTemplate(HasCopy, HasCreate, base.Base): - dependencies = [Organization] NATURAL_KEY = ('organization', 'name') @@ -40,7 +39,7 @@ class NotificationTemplate(HasCopy, HasCreate, base.Base): """ try: super(NotificationTemplate, self).silent_delete() - except (exc.MethodNotAllowed): + except exc.MethodNotAllowed: pass def payload(self, organization, notification_type='slack', messages=not_provided, **kwargs): @@ -156,7 +155,6 @@ page.register_page( class NotificationTemplates(page.PageList, NotificationTemplate): - pass @@ -175,7 +173,6 @@ page.register_page( class NotificationTemplateCopy(base.Base): - pass @@ -183,7 +180,6 @@ page.register_page(resources.notification_template_copy, NotificationTemplateCop class NotificationTemplateTest(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/organizations.py b/awxkit/awxkit/api/pages/organizations.py index 1635eec15b..c3f913a927 100644 --- a/awxkit/awxkit/api/pages/organizations.py +++ b/awxkit/awxkit/api/pages/organizations.py @@ -9,7 +9,6 @@ from . import page class Organization(HasCreate, HasInstanceGroups, HasNotifications, base.Base): - NATURAL_KEY = ('name',) def add_admin(self, user): @@ -68,7 +67,6 @@ page.register_page([resources.organization, (resources.organizations, 'post')], class Organizations(page.PageList, Organization): - pass diff --git a/awxkit/awxkit/api/pages/page.py b/awxkit/awxkit/api/pages/page.py index 65f3012587..4c26fd5314 100644 --- a/awxkit/awxkit/api/pages/page.py +++ b/awxkit/awxkit/api/pages/page.py @@ -89,7 +89,6 @@ def objectify_response_json(response): class Page(object): - endpoint = '' def __init__(self, connection=None, *a, **kw): @@ -199,7 +198,6 @@ class Page(object): raise exception(exc_str, data) if response.status_code in (http.OK, http.CREATED, http.ACCEPTED): - # Not all JSON responses include a URL. Grab it from the request # object, if needed. if 'url' in data: @@ -337,7 +335,6 @@ def exception_from_status_code(status_code): class PageList(object): - NATURAL_KEY = None @property diff --git a/awxkit/awxkit/api/pages/ping.py b/awxkit/awxkit/api/pages/ping.py index 7a5a42e514..e0b94b12ce 100644 --- a/awxkit/awxkit/api/pages/ping.py +++ b/awxkit/awxkit/api/pages/ping.py @@ -4,7 +4,6 @@ from . import page class Ping(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/projects.py b/awxkit/awxkit/api/pages/projects.py index ec0613b181..125f452637 100644 --- a/awxkit/awxkit/api/pages/projects.py +++ b/awxkit/awxkit/api/pages/projects.py @@ -11,7 +11,6 @@ from . import page class Project(HasCopy, HasCreate, HasNotifications, UnifiedJobTemplate): - optional_dependencies = [Credential, Organization] optional_schedule_fields = tuple() NATURAL_KEY = ('organization', 'name') @@ -131,7 +130,6 @@ page.register_page([resources.project, (resources.projects, 'post'), (resources. class Projects(page.PageList, Project): - pass @@ -139,7 +137,6 @@ page.register_page([resources.projects, resources.related_projects], Projects) class ProjectUpdate(UnifiedJob): - pass @@ -147,7 +144,6 @@ page.register_page(resources.project_update, ProjectUpdate) class ProjectUpdates(page.PageList, ProjectUpdate): - pass @@ -155,7 +151,6 @@ page.register_page([resources.project_updates, resources.project_project_updates class ProjectUpdateLaunch(base.Base): - pass @@ -163,7 +158,6 @@ page.register_page(resources.project_related_update, ProjectUpdateLaunch) class ProjectUpdateCancel(base.Base): - pass @@ -171,7 +165,6 @@ page.register_page(resources.project_update_cancel, ProjectUpdateCancel) class ProjectCopy(base.Base): - pass @@ -179,7 +172,6 @@ page.register_page(resources.project_copy, ProjectCopy) class Playbooks(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/roles.py b/awxkit/awxkit/api/pages/roles.py index 07f0790b60..949579160a 100644 --- a/awxkit/awxkit/api/pages/roles.py +++ b/awxkit/awxkit/api/pages/roles.py @@ -10,7 +10,6 @@ log = logging.getLogger(__name__) class Role(base.Base): - NATURAL_KEY = ('name',) def get_natural_key(self, cache=None): @@ -33,7 +32,6 @@ page.register_page(resources.role, Role) class Roles(page.PageList, Role): - pass diff --git a/awxkit/awxkit/api/pages/schedules.py b/awxkit/awxkit/api/pages/schedules.py index 1fa34c81e6..6043d257c1 100644 --- a/awxkit/awxkit/api/pages/schedules.py +++ b/awxkit/awxkit/api/pages/schedules.py @@ -61,7 +61,6 @@ page.register_page([resources.schedules, resources.related_schedules], Schedules class SchedulesPreview(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/settings.py b/awxkit/awxkit/api/pages/settings.py index 59168d40c5..12fa7e2910 100644 --- a/awxkit/awxkit/api/pages/settings.py +++ b/awxkit/awxkit/api/pages/settings.py @@ -4,7 +4,6 @@ from . import page class Setting(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/system_job_templates.py b/awxkit/awxkit/api/pages/system_job_templates.py index 985d15deb4..9362fbccb3 100644 --- a/awxkit/awxkit/api/pages/system_job_templates.py +++ b/awxkit/awxkit/api/pages/system_job_templates.py @@ -21,7 +21,6 @@ page.register_page(resources.system_job_template, SystemJobTemplate) class SystemJobTemplates(page.PageList, SystemJobTemplate): - pass diff --git a/awxkit/awxkit/api/pages/system_jobs.py b/awxkit/awxkit/api/pages/system_jobs.py index 231aa346c0..d2bf8f982f 100644 --- a/awxkit/awxkit/api/pages/system_jobs.py +++ b/awxkit/awxkit/api/pages/system_jobs.py @@ -4,7 +4,6 @@ from . import page class SystemJob(UnifiedJob): - pass @@ -12,7 +11,6 @@ page.register_page(resources.system_job, SystemJob) class SystemJobs(page.PageList, SystemJob): - pass @@ -20,7 +18,6 @@ page.register_page(resources.system_jobs, SystemJobs) class SystemJobCancel(UnifiedJob): - pass diff --git a/awxkit/awxkit/api/pages/teams.py b/awxkit/awxkit/api/pages/teams.py index 2ae928e88a..f5614a0c25 100644 --- a/awxkit/awxkit/api/pages/teams.py +++ b/awxkit/awxkit/api/pages/teams.py @@ -11,7 +11,6 @@ from . import page class Team(HasCreate, base.Base): - dependencies = [Organization] NATURAL_KEY = ('organization', 'name') @@ -44,7 +43,6 @@ page.register_page([resources.team, (resources.teams, 'post')], Team) class Teams(page.PageList, Team): - pass diff --git a/awxkit/awxkit/api/pages/unified_job_templates.py b/awxkit/awxkit/api/pages/unified_job_templates.py index e7499e23e6..c99e35f154 100644 --- a/awxkit/awxkit/api/pages/unified_job_templates.py +++ b/awxkit/awxkit/api/pages/unified_job_templates.py @@ -75,7 +75,6 @@ page.register_page(resources.unified_job_template, UnifiedJobTemplate) class UnifiedJobTemplates(page.PageList, UnifiedJobTemplate): - pass diff --git a/awxkit/awxkit/api/pages/unified_jobs.py b/awxkit/awxkit/api/pages/unified_jobs.py index 09dea1ebbb..2c46a2db84 100644 --- a/awxkit/awxkit/api/pages/unified_jobs.py +++ b/awxkit/awxkit/api/pages/unified_jobs.py @@ -152,7 +152,6 @@ class UnifiedJob(HasStatus, base.Base): class UnifiedJobs(page.PageList, UnifiedJob): - pass diff --git a/awxkit/awxkit/api/pages/users.py b/awxkit/awxkit/api/pages/users.py index f8a4d9cc17..bc9731e00a 100644 --- a/awxkit/awxkit/api/pages/users.py +++ b/awxkit/awxkit/api/pages/users.py @@ -8,7 +8,6 @@ from . import page class User(HasCreate, base.Base): - NATURAL_KEY = ('username',) def payload(self, **kwargs): @@ -44,7 +43,6 @@ page.register_page([resources.user, (resources.users, 'post')], User) class Users(page.PageList, User): - pass @@ -54,7 +52,6 @@ page.register_page( class Me(Users): - pass diff --git a/awxkit/awxkit/api/pages/workflow_approval_templates.py b/awxkit/awxkit/api/pages/workflow_approval_templates.py index 2796a81f25..1fc149f1a1 100644 --- a/awxkit/awxkit/api/pages/workflow_approval_templates.py +++ b/awxkit/awxkit/api/pages/workflow_approval_templates.py @@ -4,7 +4,6 @@ from . import page class WorkflowApprovalTemplate(UnifiedJobTemplate): - pass @@ -18,7 +17,6 @@ page.register_page( class WorkflowApprovalTemplates(page.PageList, WorkflowApprovalTemplate): - pass diff --git a/awxkit/awxkit/api/pages/workflow_approvals.py b/awxkit/awxkit/api/pages/workflow_approvals.py index bd26aae7e3..76bdbe9677 100644 --- a/awxkit/awxkit/api/pages/workflow_approvals.py +++ b/awxkit/awxkit/api/pages/workflow_approvals.py @@ -22,7 +22,6 @@ page.register_page(resources.workflow_approval, WorkflowApproval) class WorkflowApprovals(page.PageList, WorkflowApproval): - pass diff --git a/awxkit/awxkit/api/pages/workflow_job_nodes.py b/awxkit/awxkit/api/pages/workflow_job_nodes.py index 4eabaebe16..410e21ae4b 100644 --- a/awxkit/awxkit/api/pages/workflow_job_nodes.py +++ b/awxkit/awxkit/api/pages/workflow_job_nodes.py @@ -25,7 +25,6 @@ page.register_page(resources.workflow_job_node, WorkflowJobNode) class WorkflowJobNodes(page.PageList, WorkflowJobNode): - pass diff --git a/awxkit/awxkit/api/pages/workflow_job_template_nodes.py b/awxkit/awxkit/api/pages/workflow_job_template_nodes.py index 3177c24e50..769b7241ee 100644 --- a/awxkit/awxkit/api/pages/workflow_job_template_nodes.py +++ b/awxkit/awxkit/api/pages/workflow_job_template_nodes.py @@ -9,7 +9,6 @@ from . import page class WorkflowJobTemplateNode(HasCreate, base.Base): - dependencies = [WorkflowJobTemplate, UnifiedJobTemplate] NATURAL_KEY = ('workflow_job_template', 'identifier') @@ -113,7 +112,6 @@ page.register_page( class WorkflowJobTemplateNodes(page.PageList, WorkflowJobTemplateNode): - pass diff --git a/awxkit/awxkit/api/pages/workflow_job_templates.py b/awxkit/awxkit/api/pages/workflow_job_templates.py index 42a691d5ea..ef564d66a8 100644 --- a/awxkit/awxkit/api/pages/workflow_job_templates.py +++ b/awxkit/awxkit/api/pages/workflow_job_templates.py @@ -12,7 +12,6 @@ from . import page class WorkflowJobTemplate(HasCopy, HasCreate, HasNotifications, HasSurvey, UnifiedJobTemplate): - optional_dependencies = [Organization] NATURAL_KEY = ('organization', 'name') @@ -100,7 +99,6 @@ page.register_page( class WorkflowJobTemplates(page.PageList, WorkflowJobTemplate): - pass @@ -108,7 +106,6 @@ page.register_page([resources.workflow_job_templates, resources.related_workflow class WorkflowJobTemplateLaunch(base.Base): - pass @@ -116,7 +113,6 @@ page.register_page(resources.workflow_job_template_launch, WorkflowJobTemplateLa class WorkflowJobTemplateCopy(base.Base): - pass diff --git a/awxkit/awxkit/api/pages/workflow_jobs.py b/awxkit/awxkit/api/pages/workflow_jobs.py index 200eb0ef30..f444ea4a83 100644 --- a/awxkit/awxkit/api/pages/workflow_jobs.py +++ b/awxkit/awxkit/api/pages/workflow_jobs.py @@ -51,7 +51,6 @@ page.register_page(resources.workflow_job, WorkflowJob) class WorkflowJobs(page.PageList, WorkflowJob): - pass diff --git a/awxkit/awxkit/api/resources.py b/awxkit/awxkit/api/resources.py index 982e7c2573..5874b3d0de 100644 --- a/awxkit/awxkit/api/resources.py +++ b/awxkit/awxkit/api/resources.py @@ -1,5 +1,4 @@ class Resources(object): - _activity = r'activity_stream/\d+/' _activity_stream = 'activity_stream/' _ad_hoc_command = r'ad_hoc_commands/\d+/' diff --git a/awxkit/awxkit/cli/custom.py b/awxkit/awxkit/cli/custom.py index b1bd6de93f..f1453562dd 100644 --- a/awxkit/awxkit/cli/custom.py +++ b/awxkit/awxkit/cli/custom.py @@ -148,7 +148,6 @@ class WorkflowLaunch(Launchable, CustomAction): class HasStdout(object): - action = 'stdout' def add_arguments(self, parser, resource_options_parser): @@ -180,7 +179,6 @@ class AdhocCommandStdout(HasStdout, CustomAction): class AssociationMixin(object): - action = 'associate' def add_arguments(self, parser, resource_options_parser): @@ -344,7 +342,6 @@ class SettingsList(CustomAction): class RoleMixin(object): - has_roles = [ ['organizations', 'organization'], ['projects', 'project'], @@ -427,25 +424,21 @@ class RoleMixin(object): class UserGrant(RoleMixin, CustomAction): - resource = 'users' action = 'grant' class UserRevoke(RoleMixin, CustomAction): - resource = 'users' action = 'revoke' class TeamGrant(RoleMixin, CustomAction): - resource = 'teams' action = 'grant' class TeamRevoke(RoleMixin, CustomAction): - resource = 'teams' action = 'revoke' @@ -476,7 +469,6 @@ class SettingsModify(CustomAction): class HasMonitor(object): - action = 'monitor' def add_arguments(self, parser, resource_options_parser): diff --git a/awxkit/awxkit/cli/options.py b/awxkit/awxkit/cli/options.py index fe200f71a1..6c85986633 100644 --- a/awxkit/awxkit/cli/options.py +++ b/awxkit/awxkit/cli/options.py @@ -74,7 +74,6 @@ class JsonDumpsAction(argparse.Action): class ResourceOptionsParser(object): - deprecated = False def __init__(self, v2, page, resource, parser): diff --git a/awxkit/awxkit/exceptions.py b/awxkit/awxkit/exceptions.py index 84c37d615e..5789fd9c48 100644 --- a/awxkit/awxkit/exceptions.py +++ b/awxkit/awxkit/exceptions.py @@ -17,90 +17,72 @@ class Common(Exception): class BadRequest(Common): - pass class Conflict(Common): - pass class Duplicate(Common): - pass class Forbidden(Common): - pass class InternalServerError(Common): - pass class BadGateway(Common): - pass class LicenseExceeded(Common): - pass class LicenseInvalid(Common): - pass class MethodNotAllowed(Common): - pass class NoContent(Common): - message = '' class NotFound(Common): - pass class PaymentRequired(Common): - pass class Unauthorized(Common): - pass class Unknown(Common): - pass class WaitUntilTimeout(Common): - pass class UnexpectedAWXState(Common): - pass class IsMigrating(Common): - pass class ImportExportError(Exception): - pass diff --git a/awxkit/awxkit/utils/__init__.py b/awxkit/awxkit/utils/__init__.py index cb54eb0ce5..8b47b4e5d9 100644 --- a/awxkit/awxkit/utils/__init__.py +++ b/awxkit/awxkit/utils/__init__.py @@ -117,7 +117,7 @@ class PseudoNamespace(dict): for key in iterable: self[key] = iterable[key] else: - for (k, v) in iterable: + for k, v in iterable: self[k] = v for k in kw: self[k] = kw[k] diff --git a/awxkit/awxkit/ws.py b/awxkit/awxkit/ws.py index b2b51fefba..8e8eea4a16 100644 --- a/awxkit/awxkit/ws.py +++ b/awxkit/awxkit/ws.py @@ -15,7 +15,6 @@ log = logging.getLogger(__name__) class WSClientException(Exception): - pass diff --git a/awxkit/test/test_dependency_resolver.py b/awxkit/test/test_dependency_resolver.py index 83312b8bf9..3c7469896f 100644 --- a/awxkit/test/test_dependency_resolver.py +++ b/awxkit/test/test_dependency_resolver.py @@ -6,7 +6,6 @@ from awxkit.api.mixins import has_create class MockHasCreate(has_create.HasCreate): - connection = None def __str__(self): @@ -26,7 +25,6 @@ class A(MockHasCreate): class B(MockHasCreate): - optional_dependencies = [A] def create(self, a=None, **kw): @@ -35,7 +33,6 @@ class B(MockHasCreate): class C(MockHasCreate): - dependencies = [A, B] def create(self, a=A, b=B, **kw): @@ -44,7 +41,6 @@ class C(MockHasCreate): class D(MockHasCreate): - dependencies = [A] optional_dependencies = [B] @@ -54,7 +50,6 @@ class D(MockHasCreate): class E(MockHasCreate): - dependencies = [D, C] def create(self, c=C, d=D, **kw): @@ -63,7 +58,6 @@ class E(MockHasCreate): class F(MockHasCreate): - dependencies = [B] optional_dependencies = [E] @@ -73,7 +67,6 @@ class F(MockHasCreate): class G(MockHasCreate): - dependencies = [D] optional_dependencies = [F, E] @@ -83,7 +76,6 @@ class G(MockHasCreate): class H(MockHasCreate): - optional_dependencies = [E, A] def create(self, a=None, e=None, **kw): @@ -97,7 +89,6 @@ class MultipleWordClassName(MockHasCreate): class AnotherMultipleWordClassName(MockHasCreate): - optional_dependencies = [MultipleWordClassName] def create(self, multiple_word_class_name=None, **kw): @@ -466,7 +457,6 @@ class OneWithArgs(MockHasCreate): class TwoWithArgs(MockHasCreate): - dependencies = [OneWithArgs] def create(self, one_with_args=OneWithArgs, **kw): @@ -478,7 +468,6 @@ class TwoWithArgs(MockHasCreate): class ThreeWithArgs(MockHasCreate): - dependencies = [OneWithArgs] optional_dependencies = [TwoWithArgs] @@ -489,7 +478,6 @@ class ThreeWithArgs(MockHasCreate): class FourWithArgs(MockHasCreate): - dependencies = [TwoWithArgs, ThreeWithArgs] def create(self, two_with_args=TwoWithArgs, three_with_args=ThreeWithArgs, **kw): @@ -558,7 +546,6 @@ def test_tuples_for_class_arg_cause_unshared_dependencies_when_downstream(): class NotHasCreate(object): - pass @@ -583,7 +570,6 @@ class MixinUserD(MixinUserC): class NotHasCreateDependencyHolder(MockHasCreate): - dependencies = [NotHasCreate] def create(self, not_has_create=MixinUserA): @@ -608,7 +594,6 @@ def test_not_has_create_passed_dependency(): class HasCreateParentDependencyHolder(MockHasCreate): - dependencies = [MixinUserB] def create(self, mixin_user_b=MixinUserC): @@ -626,7 +611,6 @@ def test_has_create_stored_as_parent_dependency(): class DynamicallyDeclaresNotHasCreateDependency(MockHasCreate): - dependencies = [NotHasCreate] def create(self, not_has_create=MixinUserA): @@ -645,7 +629,6 @@ def test_subclass_or_parent_dynamic_not_has_create_dependency_declaration(depend class DynamicallyDeclaresHasCreateDependency(MockHasCreate): - dependencies = [MixinUserB] def create(self, mixin_user_b=MixinUserB): diff --git a/awxkit/test/test_registry.py b/awxkit/test/test_registry.py index b0f0f2527f..c17afcac91 100644 --- a/awxkit/test/test_registry.py +++ b/awxkit/test/test_registry.py @@ -4,12 +4,10 @@ from awxkit.api.registry import URLRegistry class One(object): - pass class Two(object): - pass From 6997876da6c39e746e78e79ff04e4cf89eebdc85 Mon Sep 17 00:00:00 2001 From: Alan Rominger Date: Wed, 1 Feb 2023 12:07:53 -0500 Subject: [PATCH 12/13] Fix OPTIONS permissions bug in groups list --- awx/main/access.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/awx/main/access.py b/awx/main/access.py index 5d0ab8464b..4d6bdf2c55 100644 --- a/awx/main/access.py +++ b/awx/main/access.py @@ -1027,7 +1027,9 @@ class GroupAccess(BaseAccess): return Group.objects.filter(inventory__in=Inventory.accessible_pk_qs(self.user, 'read_role')) def can_add(self, data): - if not data or 'inventory' not in data: + if not data: # So the browseable API will work + return Inventory.accessible_objects(self.user, 'admin_role').exists() + if 'inventory' not in data: return False # Checks for admin or change permission on inventory. return self.check_related('inventory', Inventory, data) From 0815f935ca359537c023efadf286671e31dc3374 Mon Sep 17 00:00:00 2001 From: Rick Elrod Date: Wed, 1 Feb 2023 15:37:08 -0600 Subject: [PATCH 13/13] [collection] remove module defaults where API defaults are the same (#13037) Providing defaults for API parameters where the API already provides defaults leads to some confusing scenarios, because we end up always sending those collection-defaulted fields in the request even if the field isn't provided by the user. For example, we previously set the `scm_type` default to 'manual' and someone using the collection to update a project who does not explicitly include the `scm_type` every time they call the module, would inadvertently change the `scm_type` of the project back to 'manual' which is surprising behavior. This change removes the collection defaults for API parameters, unless they differed from the API default. We let the API handle the defaults or otherwise ignore fields not given by the user so that the user does not end up changing unexpected fields when they use a module. Signed-off-by: Rick Elrod --- .../plugins/modules/ad_hoc_command.py | 2 +- .../plugins/modules/execution_environment.py | 1 + awx_collection/plugins/modules/host.py | 3 +- .../plugins/modules/instance_group.py | 17 ++---- awx_collection/plugins/modules/inventory.py | 3 +- .../modules/inventory_source_update.py | 2 +- awx_collection/plugins/modules/job_launch.py | 6 +- .../plugins/modules/job_template.py | 11 ++-- .../plugins/modules/organization.py | 3 +- awx_collection/plugins/modules/project.py | 58 ++++++++----------- .../plugins/modules/project_update.py | 2 +- .../plugins/modules/subscriptions.py | 2 +- awx_collection/plugins/modules/token.py | 3 +- awx_collection/plugins/modules/user.py | 6 +- .../plugins/modules/workflow_launch.py | 2 +- .../plugins/modules/workflow_node_wait.py | 4 +- awx_collection/test/awx/test_project.py | 2 +- 17 files changed, 53 insertions(+), 74 deletions(-) diff --git a/awx_collection/plugins/modules/ad_hoc_command.py b/awx_collection/plugins/modules/ad_hoc_command.py index d2446e5804..bfe22eb890 100644 --- a/awx_collection/plugins/modules/ad_hoc_command.py +++ b/awx_collection/plugins/modules/ad_hoc_command.py @@ -129,7 +129,7 @@ def main(): diff_mode=dict(type='bool'), wait=dict(default=False, type='bool'), interval=dict(default=2.0, type='float'), - timeout=dict(default=None, type='int'), + timeout=dict(type='int'), execution_environment=dict(), ) diff --git a/awx_collection/plugins/modules/execution_environment.py b/awx_collection/plugins/modules/execution_environment.py index 8401944693..552c805720 100644 --- a/awx_collection/plugins/modules/execution_environment.py +++ b/awx_collection/plugins/modules/execution_environment.py @@ -84,6 +84,7 @@ def main(): organization=dict(), credential=dict(), state=dict(choices=['present', 'absent'], default='present'), + # NOTE: Default for pull differs from API (which is blank by default) pull=dict(choices=['always', 'missing', 'never'], default='missing'), ) diff --git a/awx_collection/plugins/modules/host.py b/awx_collection/plugins/modules/host.py index 8e1490f423..21d063f39e 100644 --- a/awx_collection/plugins/modules/host.py +++ b/awx_collection/plugins/modules/host.py @@ -43,7 +43,6 @@ options: description: - If the host should be enabled. type: bool - default: 'yes' variables: description: - Variables to use for the host. @@ -82,7 +81,7 @@ def main(): new_name=dict(), description=dict(), inventory=dict(required=True), - enabled=dict(type='bool', default=True), + enabled=dict(type='bool'), variables=dict(type='dict'), state=dict(choices=['present', 'absent'], default='present'), ) diff --git a/awx_collection/plugins/modules/instance_group.py b/awx_collection/plugins/modules/instance_group.py index a3debed8ea..dc993f8b5b 100644 --- a/awx_collection/plugins/modules/instance_group.py +++ b/awx_collection/plugins/modules/instance_group.py @@ -41,31 +41,26 @@ options: - Signifies that this InstanceGroup should act as a ContainerGroup. If no credential is specified, the underlying Pod's ServiceAccount will be used. required: False type: bool - default: False policy_instance_percentage: description: - Minimum percentage of all instances that will be automatically assigned to this group when new instances come online. required: False type: int - default: '0' policy_instance_minimum: description: - Static minimum number of Instances that will be automatically assign to this group when new instances come online. required: False type: int - default: '0' max_concurrent_jobs: description: - Maximum number of concurrent jobs to run on this group. Zero means no limit. required: False type: int - default: '0' max_forks: description: - Max forks to execute on this group. Zero means no limit. required: False type: int - default: '0' policy_instance_list: description: - List of exact-match Instances that will be assigned to this group @@ -104,14 +99,14 @@ def main(): name=dict(required=True), new_name=dict(), credential=dict(), - is_container_group=dict(type='bool', default=False), - policy_instance_percentage=dict(type='int', default='0'), - policy_instance_minimum=dict(type='int', default='0'), - max_concurrent_jobs=dict(type='int', default='0'), - max_forks=dict(type='int', default='0'), + is_container_group=dict(type='bool'), + policy_instance_percentage=dict(type='int'), + policy_instance_minimum=dict(type='int'), + max_concurrent_jobs=dict(type='int'), + max_forks=dict(type='int'), policy_instance_list=dict(type='list', elements='str'), pod_spec_override=dict(), - instances=dict(required=False, type="list", elements='str', default=None), + instances=dict(required=False, type="list", elements='str'), state=dict(choices=['present', 'absent'], default='present'), ) diff --git a/awx_collection/plugins/modules/inventory.py b/awx_collection/plugins/modules/inventory.py index b4784f5260..8e739b2211 100644 --- a/awx_collection/plugins/modules/inventory.py +++ b/awx_collection/plugins/modules/inventory.py @@ -54,7 +54,6 @@ options: kind: description: - The kind field. Cannot be modified after created. - default: "" choices: ["", "smart"] type: str host_filter: @@ -112,7 +111,7 @@ def main(): description=dict(), organization=dict(required=True), variables=dict(type='dict'), - kind=dict(choices=['', 'smart'], default=''), + kind=dict(choices=['', 'smart']), host_filter=dict(), instance_groups=dict(type="list", elements='str'), prevent_instance_group_fallback=dict(type='bool'), diff --git a/awx_collection/plugins/modules/inventory_source_update.py b/awx_collection/plugins/modules/inventory_source_update.py index 4767d6ea3b..5bd6cdfefc 100644 --- a/awx_collection/plugins/modules/inventory_source_update.py +++ b/awx_collection/plugins/modules/inventory_source_update.py @@ -94,7 +94,7 @@ def main(): organization=dict(), wait=dict(default=False, type='bool'), interval=dict(default=2.0, type='float'), - timeout=dict(default=None, type='int'), + timeout=dict(type='int'), ) # Create a module for ourselves diff --git a/awx_collection/plugins/modules/job_launch.py b/awx_collection/plugins/modules/job_launch.py index fc60aea995..9a76f3a8b7 100644 --- a/awx_collection/plugins/modules/job_launch.py +++ b/awx_collection/plugins/modules/job_launch.py @@ -180,10 +180,10 @@ def main(): argument_spec = dict( name=dict(required=True, aliases=['job_template']), job_type=dict(choices=['run', 'check']), - inventory=dict(default=None), + inventory=dict(), organization=dict(), # Credentials will be a str instead of a list for backwards compatability - credentials=dict(type='list', default=None, aliases=['credential'], elements='str'), + credentials=dict(type='list', aliases=['credential'], elements='str'), limit=dict(), tags=dict(type='list', elements='str'), extra_vars=dict(type='dict'), @@ -200,7 +200,7 @@ def main(): job_timeout=dict(type='int'), wait=dict(default=False, type='bool'), interval=dict(default=2.0, type='float'), - timeout=dict(default=None, type='int'), + timeout=dict(type='int'), ) # Create a module for ourselves diff --git a/awx_collection/plugins/modules/job_template.py b/awx_collection/plugins/modules/job_template.py index 98c35f52f2..4508bc18d5 100644 --- a/awx_collection/plugins/modules/job_template.py +++ b/awx_collection/plugins/modules/job_template.py @@ -109,7 +109,6 @@ options: description: - Control the output level Ansible produces as the playbook runs. 0 - Normal, 1 - Verbose, 2 - More Verbose, 3 - Debug, 4 - Connection Debug. choices: [0, 1, 2, 3, 4] - default: 0 type: int extra_vars: description: @@ -123,7 +122,6 @@ options: description: - Enable forcing playbook handlers to run even if a task fails. type: bool - default: 'no' aliases: - force_handlers_enabled skip_tags: @@ -271,7 +269,6 @@ options: description: - The number of jobs to slice into at runtime. Will cause the Job Template to launch a workflow if value is greater than 1. type: int - default: '1' webhook_service: description: - Service that webhook requests will be accepted from @@ -407,13 +404,13 @@ def main(): instance_groups=dict(type="list", elements='str'), forks=dict(type='int'), limit=dict(), - verbosity=dict(type='int', choices=[0, 1, 2, 3, 4], default=0), + verbosity=dict(type='int', choices=[0, 1, 2, 3, 4]), extra_vars=dict(type='dict'), job_tags=dict(), - force_handlers=dict(type='bool', default=False, aliases=['force_handlers_enabled']), + force_handlers=dict(type='bool', aliases=['force_handlers_enabled']), skip_tags=dict(), start_at_task=dict(), - timeout=dict(type='int', default=0), + timeout=dict(type='int'), use_fact_cache=dict(type='bool', aliases=['fact_caching_enabled']), host_config_key=dict(no_log=False), ask_diff_mode_on_launch=dict(type='bool', aliases=['ask_diff_mode']), @@ -438,7 +435,7 @@ def main(): allow_simultaneous=dict(type='bool', aliases=['concurrent_jobs_enabled']), scm_branch=dict(), ask_scm_branch_on_launch=dict(type='bool'), - job_slice_count=dict(type='int', default='1'), + job_slice_count=dict(type='int'), webhook_service=dict(choices=['github', 'gitlab', '']), webhook_credential=dict(), labels=dict(type="list", elements='str'), diff --git a/awx_collection/plugins/modules/organization.py b/awx_collection/plugins/modules/organization.py index 99bff3d472..de78eb228b 100644 --- a/awx_collection/plugins/modules/organization.py +++ b/awx_collection/plugins/modules/organization.py @@ -47,7 +47,6 @@ options: max_hosts: description: - The max hosts allowed in this organizations - default: "0" type: int state: description: @@ -124,7 +123,7 @@ def main(): description=dict(), default_environment=dict(), custom_virtualenv=dict(), - max_hosts=dict(type='int', default="0"), + max_hosts=dict(type='int'), instance_groups=dict(type="list", elements='str'), notification_templates_started=dict(type="list", elements='str'), notification_templates_success=dict(type="list", elements='str'), diff --git a/awx_collection/plugins/modules/project.py b/awx_collection/plugins/modules/project.py index c224f309f0..f67d774aef 100644 --- a/awx_collection/plugins/modules/project.py +++ b/awx_collection/plugins/modules/project.py @@ -46,7 +46,6 @@ options: description: - Type of SCM resource. choices: ["manual", "git", "svn", "insights", "archive"] - default: "manual" type: str scm_url: description: @@ -74,28 +73,23 @@ options: description: - Remove local modifications before updating. type: bool - default: 'no' scm_delete_on_update: description: - Remove the repository completely before updating. type: bool - default: 'no' scm_track_submodules: description: - Track submodules latest commit on specified branch. type: bool - default: 'no' scm_update_on_launch: description: - Before an update to the local repository before launching a job with this project. type: bool - default: 'no' scm_update_cache_timeout: description: - Cache Timeout to cache prior project syncs for a certain number of seconds. Only valid if scm_update_on_launch is to True, otherwise ignored. type: int - default: 0 allow_override: description: - Allow changing the SCM branch or revision in a job template that uses this project. @@ -107,7 +101,6 @@ options: - The amount of time (in seconds) to run before the SCM Update is canceled. A value of 0 means no timeout. - If waiting for the project to update this will abort after this amount of seconds - default: 0 type: int aliases: - job_timeout @@ -260,19 +253,19 @@ def main(): new_name=dict(), copy_from=dict(), description=dict(), - scm_type=dict(choices=['manual', 'git', 'svn', 'insights', 'archive'], default='manual'), + scm_type=dict(choices=['manual', 'git', 'svn', 'insights', 'archive']), scm_url=dict(), local_path=dict(), scm_branch=dict(), scm_refspec=dict(), credential=dict(aliases=['scm_credential']), - scm_clean=dict(type='bool', default=False), - scm_delete_on_update=dict(type='bool', default=False), - scm_track_submodules=dict(type='bool', default=False), - scm_update_on_launch=dict(type='bool', default=False), - scm_update_cache_timeout=dict(type='int', default=0), + scm_clean=dict(type='bool'), + scm_delete_on_update=dict(type='bool'), + scm_track_submodules=dict(type='bool'), + scm_update_on_launch=dict(type='bool'), + scm_update_cache_timeout=dict(type='int'), allow_override=dict(type='bool', aliases=['scm_allow_override']), - timeout=dict(type='int', default=0, aliases=['job_timeout']), + timeout=dict(type='int', aliases=['job_timeout']), default_environment=dict(), custom_virtualenv=dict(), organization=dict(), @@ -336,12 +329,6 @@ def main(): # If the state was absent we can let the module delete it if needed, the module will handle exiting from this module.delete_if_needed(project) - if credential is not None: - credential = module.resolve_name_to_id('credentials', credential) - - if signature_validation_credential is not None: - signature_validation_credential = module.resolve_name_to_id('credentials', signature_validation_credential) - # Attempt to look up associated field items the user specified. association_fields = {} @@ -366,20 +353,18 @@ def main(): # Create the data that gets sent for create and update project_fields = { 'name': new_name if new_name else (module.get_item_name(project) if project else name), - 'scm_type': scm_type, - 'organization': org_id, - 'scm_update_on_launch': scm_update_on_launch, - 'scm_update_cache_timeout': scm_update_cache_timeout, - 'signature_validation_credential': signature_validation_credential, } for field_name in ( + 'scm_type', 'scm_url', 'scm_branch', 'scm_refspec', 'scm_clean', 'scm_delete_on_update', - "scm_track_submodules", + 'scm_track_submodules', + 'scm_update_on_launch', + 'scm_update_cache_timeout', 'timeout', 'scm_update_cache_timeout', 'custom_virtualenv', @@ -390,15 +375,22 @@ def main(): if field_val is not None: project_fields[field_name] = field_val - if credential is not None: - project_fields['credential'] = credential - if default_ee is not None: - project_fields['default_environment'] = module.resolve_name_to_id('execution_environments', default_ee) - if scm_type == '': - if local_path is not None: + for variable, field, endpoint in ( + (default_ee, 'default_environment', 'execution_environments'), + (credential, 'credential', 'credentials'), + (signature_validation_credential, 'signature_validation_credential', 'credentials'), + ): + if variable is not None: + project_fields[field] = module.resolve_name_to_id(endpoint, variable) + + if org_id is not None: + # this is resolved earlier, so save an API call and don't do it again in the loop above + project_fields['organization'] = org_id + + if scm_type == '' and local_path is not None: project_fields['local_path'] = local_path - if scm_update_cache_timeout != 0 and scm_update_on_launch is not True: + if scm_update_cache_timeout not in (0, None) and scm_update_on_launch is not True: module.warn('scm_update_cache_timeout will be ignored since scm_update_on_launch was not set to true') # If we are doing a not manual project, register our on_change method diff --git a/awx_collection/plugins/modules/project_update.py b/awx_collection/plugins/modules/project_update.py index 38b55c8e3c..6cbcd39b6d 100644 --- a/awx_collection/plugins/modules/project_update.py +++ b/awx_collection/plugins/modules/project_update.py @@ -87,7 +87,7 @@ def main(): organization=dict(), wait=dict(default=True, type='bool'), interval=dict(default=2.0, type='float'), - timeout=dict(default=None, type='int'), + timeout=dict(type='int'), ) # Create a module for ourselves diff --git a/awx_collection/plugins/modules/subscriptions.py b/awx_collection/plugins/modules/subscriptions.py index 146ef7c451..0f89e71ded 100644 --- a/awx_collection/plugins/modules/subscriptions.py +++ b/awx_collection/plugins/modules/subscriptions.py @@ -17,7 +17,7 @@ module: subscriptions author: "John Westcott IV (@john-westcott-iv)" short_description: Get subscription list description: - - Get subscriptions available to Automation Platform Controller. See + - Get subscriptions available to Automation Platform Controller. See U(https://www.ansible.com/tower) for an overview. options: username: diff --git a/awx_collection/plugins/modules/token.py b/awx_collection/plugins/modules/token.py index c0089240f4..c9ed84f67e 100644 --- a/awx_collection/plugins/modules/token.py +++ b/awx_collection/plugins/modules/token.py @@ -45,7 +45,6 @@ options: - Allowed scopes, further restricts user's permissions. Must be a simple space-separated string with allowed scopes ['read', 'write']. required: False type: str - default: 'write' choices: ["read", "write"] existing_token: description: The data structure produced from token in create mode to be used with state absent. @@ -135,7 +134,7 @@ def main(): argument_spec = dict( description=dict(), application=dict(), - scope=dict(choices=['read', 'write'], default='write'), + scope=dict(choices=['read', 'write']), existing_token=dict(type='dict', no_log=False), existing_token_id=dict(), state=dict(choices=['present', 'absent'], default='present'), diff --git a/awx_collection/plugins/modules/user.py b/awx_collection/plugins/modules/user.py index 3d5f76bb02..49a6f216a6 100644 --- a/awx_collection/plugins/modules/user.py +++ b/awx_collection/plugins/modules/user.py @@ -50,13 +50,11 @@ options: description: - Designates that this user has all permissions without explicitly assigning them. type: bool - default: False aliases: ['superuser'] is_system_auditor: description: - User is a system wide auditor. type: bool - default: False aliases: ['auditor'] password: description: @@ -134,8 +132,8 @@ def main(): first_name=dict(), last_name=dict(), email=dict(), - is_superuser=dict(type='bool', default=False, aliases=['superuser']), - is_system_auditor=dict(type='bool', default=False, aliases=['auditor']), + is_superuser=dict(type='bool', aliases=['superuser']), + is_system_auditor=dict(type='bool', aliases=['auditor']), password=dict(no_log=True), update_secrets=dict(type='bool', default=True, no_log=False), organization=dict(), diff --git a/awx_collection/plugins/modules/workflow_launch.py b/awx_collection/plugins/modules/workflow_launch.py index b3e5cb9bf6..1613e4fa8b 100644 --- a/awx_collection/plugins/modules/workflow_launch.py +++ b/awx_collection/plugins/modules/workflow_launch.py @@ -105,7 +105,7 @@ def main(): extra_vars=dict(type='dict'), wait=dict(required=False, default=True, type='bool'), interval=dict(required=False, default=2.0, type='float'), - timeout=dict(required=False, default=None, type='int'), + timeout=dict(required=False, type='int'), ) # Create a module for ourselves diff --git a/awx_collection/plugins/modules/workflow_node_wait.py b/awx_collection/plugins/modules/workflow_node_wait.py index 2a744c7526..e82602904e 100644 --- a/awx_collection/plugins/modules/workflow_node_wait.py +++ b/awx_collection/plugins/modules/workflow_node_wait.py @@ -20,7 +20,7 @@ DOCUMENTATION = """ --- module: workflow_node_wait author: "Sean Sullivan (@sean-m-sullivan)" -short_description: Approve an approval node in a workflow job. +short_description: Wait for a workflow node to finish. description: - Approve an approval node in a workflow job. See U(https://www.ansible.com/tower) for an overview. @@ -43,7 +43,7 @@ options: type: float timeout: description: - - Maximum time in seconds to wait for a workflow job to to reach approval node. + - Maximum time in seconds to wait for a workflow job to reach approval node. default: 10 type: int extends_documentation_fragment: awx.awx.auth diff --git a/awx_collection/test/awx/test_project.py b/awx_collection/test/awx/test_project.py index 8ec3e8816e..2f8724566a 100644 --- a/awx_collection/test/awx/test_project.py +++ b/awx_collection/test/awx/test_project.py @@ -28,7 +28,7 @@ def test_create_project(run_module, admin_user, organization, silence_warning): @pytest.mark.django_db def test_create_project_copy_from(run_module, admin_user, organization, silence_warning): - ''' Test the copy_from functionality''' + '''Test the copy_from functionality''' result = run_module( 'project', dict(name='foo', organization=organization.name, scm_type='git', scm_url='https://foo.invalid', wait=False, scm_update_cache_timeout=5),