summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--awx/__init__.py4
-rw-r--r--awx/main/management/commands/cleanup_activitystream.py7
-rw-r--r--awx/main/management/commands/cleanup_deleted.py4
-rw-r--r--awx/main/management/commands/cleanup_jobs.py6
-rw-r--r--awx/main/management/commands/inventory_import.py6
-rw-r--r--awx/main/management/commands/list_instances.py10
-rw-r--r--awx/main/management/commands/register_instance.py6
-rw-r--r--awx/main/management/commands/remove_instance.py7
-rw-r--r--awx/main/management/commands/run_callback_receiver.py14
-rw-r--r--awx/main/management/commands/run_socketio_service.py19
-rw-r--r--awx/main/management/commands/run_task_system.py19
-rw-r--r--awx/main/management/commands/stats.py10
-rw-r--r--awx/main/management/commands/update_instance.py9
-rw-r--r--awx/main/management/commands/user_info.py1
-rw-r--r--awx/main/models/__init__.py30
-rw-r--r--awx/main/models/activity_stream.py1
-rw-r--r--awx/main/models/base.py11
-rw-r--r--awx/main/models/credential.py4
-rw-r--r--awx/main/models/inventory.py26
-rw-r--r--awx/main/models/jobs.py25
-rw-r--r--awx/main/models/organization.py3
-rw-r--r--awx/main/models/projects.py15
-rw-r--r--awx/main/models/schedules.py2
-rw-r--r--awx/main/models/unified_jobs.py17
-rw-r--r--awx/main/tests/__init__.py26
-rw-r--r--awx/main/tests/activity_stream.py13
-rw-r--r--awx/main/tests/base.py4
-rw-r--r--awx/main/tests/commands.py9
-rw-r--r--awx/main/tests/inventory.py120
-rw-r--r--awx/main/tests/jobs.py29
-rw-r--r--awx/main/tests/licenses.py34
-rw-r--r--awx/main/tests/organizations.py32
-rw-r--r--awx/main/tests/projects.py43
-rw-r--r--awx/main/tests/schedules.py36
-rw-r--r--awx/main/tests/scripts.py8
-rw-r--r--awx/main/tests/tasks.py7
-rw-r--r--awx/main/tests/users.py40
-rw-r--r--setup.cfg2
38 files changed, 252 insertions, 407 deletions
diff --git a/awx/__init__.py b/awx/__init__.py
index 723c25e5fc..5896ff7c28 100644
--- a/awx/__init__.py
+++ b/awx/__init__.py
@@ -1,12 +1,12 @@
# Copyright (c) 2014 AnsibleWorks, Inc.
# All Rights Reserved.
-__version__ = '2.2.0'
-
import os
import sys
import warnings
+__version__ = '2.2.0'
+
__all__ = ['__version__']
# Check for the presence/absence of "devonly" module to determine if running
diff --git a/awx/main/management/commands/cleanup_activitystream.py b/awx/main/management/commands/cleanup_activitystream.py
index 7b8fb8cf82..68c489c06d 100644
--- a/awx/main/management/commands/cleanup_activitystream.py
+++ b/awx/main/management/commands/cleanup_activitystream.py
@@ -7,11 +7,8 @@ import logging
from optparse import make_option
# Django
-from django.core.management.base import NoArgsCommand, CommandError
-from django.db import transaction
-from django.contrib.auth.models import User
-from django.utils.dateparse import parse_datetime
-from django.utils.timezone import now, is_aware, make_aware
+from django.core.management.base import NoArgsCommand
+from django.utils.timezone import now
# AWX
from awx.main.models import ActivityStream
diff --git a/awx/main/management/commands/cleanup_deleted.py b/awx/main/management/commands/cleanup_deleted.py
index d794c0ac64..af0266a2be 100644
--- a/awx/main/management/commands/cleanup_deleted.py
+++ b/awx/main/management/commands/cleanup_deleted.py
@@ -7,14 +7,14 @@ import logging
from optparse import make_option
# Django
-from django.core.management.base import BaseCommand, CommandError
+from django.core.management.base import BaseCommand
from django.db import transaction
from django.contrib.auth.models import User
from django.utils.dateparse import parse_datetime
from django.utils.timezone import now, is_aware, make_aware
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
class Command(BaseCommand):
'''
diff --git a/awx/main/management/commands/cleanup_jobs.py b/awx/main/management/commands/cleanup_jobs.py
index 89221f7772..45e307ff9f 100644
--- a/awx/main/management/commands/cleanup_jobs.py
+++ b/awx/main/management/commands/cleanup_jobs.py
@@ -9,9 +9,7 @@ from optparse import make_option
# Django
from django.core.management.base import NoArgsCommand, CommandError
from django.db import transaction
-from django.contrib.auth.models import User
-from django.utils.dateparse import parse_datetime
-from django.utils.timezone import now, is_aware, make_aware
+from django.utils.timezone import now
# AWX
from awx.main.models import Job, ProjectUpdate, InventoryUpdate, SystemJob
@@ -131,7 +129,7 @@ class Command(NoArgsCommand):
self.dry_run = bool(options.get('dry_run', False))
try:
self.cutoff = now() - datetime.timedelta(days=self.days)
- except OverflowError as e:
+ except OverflowError:
raise CommandError('--days specified is too large. Try something less than 99999 (about 270 years).')
self.only_jobs = bool(options.get('only_jobs', False))
self.only_project_updates = bool(options.get('only_project_updates', False))
diff --git a/awx/main/management/commands/inventory_import.py b/awx/main/management/commands/inventory_import.py
index 515efc4ddd..4263c72ccb 100644
--- a/awx/main/management/commands/inventory_import.py
+++ b/awx/main/management/commands/inventory_import.py
@@ -22,12 +22,10 @@ import yaml
from django.conf import settings
from django.core.management.base import NoArgsCommand, CommandError
from django.db import connection, transaction
-from django.db.models import Q
-from django.contrib.auth.models import User
# AWX
-from awx.main.models import *
-from awx.main.utils import ignore_inventory_computed_fields, check_proot_installed, build_proot_temp_dir, wrap_args_with_proot
+from awx.main.models import * # noqa
+from awx.main.utils import ignore_inventory_computed_fields, check_proot_installed, wrap_args_with_proot
from awx.main.signals import disable_activity_stream
from awx.main.task_engine import TaskSerializer as LicenseReader
diff --git a/awx/main/management/commands/list_instances.py b/awx/main/management/commands/list_instances.py
index c2a52178c0..93fbc64414 100644
--- a/awx/main/management/commands/list_instances.py
+++ b/awx/main/management/commands/list_instances.py
@@ -1,22 +1,18 @@
# Copyright (c) 2014 Ansible, Inc.
# All Rights Reserved
-from optparse import make_option
-
-from django.conf import settings
-from django.core.management.base import BaseCommand, CommandError
from awx.main.management.commands._base_instance import BaseCommandInstance
-instance_str = BaseCommandInstance.instance_str
-
from awx.main.models import Instance
+instance_str = BaseCommandInstance.instance_str
+
class Command(BaseCommandInstance):
"""List instances from the Tower database
"""
def handle(self, **options):
super(Command, self).__init__()
-
+
for instance in Instance.objects.all():
print("uuid: %s; hostname: %s; primary: %s; created: %s; modified: %s" %
(instance.uuid, instance.hostname, instance.primary, instance.created, instance.modified))
diff --git a/awx/main/management/commands/register_instance.py b/awx/main/management/commands/register_instance.py
index adb07a9b79..a38181d622 100644
--- a/awx/main/management/commands/register_instance.py
+++ b/awx/main/management/commands/register_instance.py
@@ -1,14 +1,12 @@
# Copyright (c) 2014 Ansible, Inc.
# All Rights Reserved
-from django.conf import settings
-from django.core.management.base import BaseCommand, CommandError
+from django.core.management.base import CommandError
from awx.main.management.commands._base_instance import BaseCommandInstance
-instance_str = BaseCommandInstance.instance_str
-
from awx.main.models import Instance
+instance_str = BaseCommandInstance.instance_str
class Command(BaseCommandInstance):
"""Internal tower command.
diff --git a/awx/main/management/commands/remove_instance.py b/awx/main/management/commands/remove_instance.py
index 04dc832101..08a945e28a 100644
--- a/awx/main/management/commands/remove_instance.py
+++ b/awx/main/management/commands/remove_instance.py
@@ -1,15 +1,12 @@
# Copyright (c) 2014 Ansible, Inc.
# All Rights Reserved
-from optparse import make_option
-
-from django.conf import settings
-from django.core.management.base import BaseCommand, CommandError
+from django.core.management.base import CommandError
from awx.main.management.commands._base_instance import BaseCommandInstance
-instance_str = BaseCommandInstance.instance_str
from awx.main.models import Instance
+instance_str = BaseCommandInstance.instance_str
class Command(BaseCommandInstance):
"""Internal tower command.
diff --git a/awx/main/management/commands/run_callback_receiver.py b/awx/main/management/commands/run_callback_receiver.py
index a4863cf6ee..01994b0a95 100644
--- a/awx/main/management/commands/run_callback_receiver.py
+++ b/awx/main/management/commands/run_callback_receiver.py
@@ -6,25 +6,21 @@ import os
import sys
import datetime
import logging
-import json
import signal
import time
-from contextlib import closing
-from optparse import make_option
from multiprocessing import Process, Queue
# Django
from django.conf import settings
-from django.core.management.base import NoArgsCommand, CommandError
+from django.core.management.base import NoArgsCommand
from django.db import transaction, DatabaseError
-from django.contrib.auth.models import User
from django.utils.dateparse import parse_datetime
-from django.utils.timezone import now, is_aware, make_aware
+from django.utils.timezone import now
from django.utils.tzinfo import FixedOffset
from django.db import connection
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.socket import Socket
MAX_REQUESTS = 10000
@@ -46,7 +42,8 @@ class CallbackReceiver(object):
active_worker.terminate()
signal.signal(signum, signal.SIG_DFL)
os.kill(os.getpid(), signum) # Rethrow signal, this time without catching it
- except Exception, e:
+ except Exception:
+ # TODO: LOG
pass
return _handler
@@ -99,7 +96,6 @@ class CallbackReceiver(object):
time.sleep(0.1)
def callback_handler(self, use_workers, worker_queues):
- message_number = 0
total_messages = 0
last_parent_events = {}
diff --git a/awx/main/management/commands/run_socketio_service.py b/awx/main/management/commands/run_socketio_service.py
index 24f885db7c..625f4e70bc 100644
--- a/awx/main/management/commands/run_socketio_service.py
+++ b/awx/main/management/commands/run_socketio_service.py
@@ -3,31 +3,22 @@
# Python
import os
-import datetime
import logging
-import json
-import signal
-import time
import urllib
from optparse import make_option
from threading import Thread
# Django
from django.conf import settings
-from django.core.management.base import NoArgsCommand, CommandError
-from django.db import transaction, DatabaseError
-from django.contrib.auth.models import User
-from django.utils.dateparse import parse_datetime
-from django.utils.timezone import now, is_aware, make_aware
-from django.utils.tzinfo import FixedOffset
+from django.core.management.base import NoArgsCommand
+from django.utils.timezone import now
# AWX
import awx
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.socket import Socket
-# gevent & socketio
-import gevent
+# socketio
from socketio import socketio_manage
from socketio.server import SocketIOServer
from socketio.namespace import BaseNamespace
@@ -164,7 +155,6 @@ class Command(NoArgsCommand):
self.verbosity = int(options.get('verbosity', 1))
self.init_logging()
socketio_listen_port = settings.SOCKETIO_LISTEN_PORT
- socketio_notification_port = settings.SOCKETIO_NOTIFICATION_PORT
try:
if os.path.exists('/etc/tower/tower.cert') and os.path.exists('/etc/tower/tower.key'):
@@ -175,7 +165,6 @@ class Command(NoArgsCommand):
print 'Listening on port http://0.0.0.0:' + str(socketio_listen_port)
server = SocketIOServer(('0.0.0.0', socketio_listen_port), TowerSocket(), resource='socket.io')
- #gevent.spawn(notification_handler, socketio_notification_port, server)
handler_thread = Thread(target=notification_handler, args=(server,))
handler_thread.daemon = True
handler_thread.start()
diff --git a/awx/main/management/commands/run_task_system.py b/awx/main/management/commands/run_task_system.py
index 4cbe79345f..24721b1919 100644
--- a/awx/main/management/commands/run_task_system.py
+++ b/awx/main/management/commands/run_task_system.py
@@ -5,26 +5,19 @@
import os
import datetime
import logging
-import json
import signal
import time
-from optparse import make_option
-from multiprocessing import Process
# Django
from django.conf import settings
-from django.core.management.base import NoArgsCommand, CommandError
-from django.db import transaction, DatabaseError
-from django.contrib.auth.models import User
-from django.utils.dateparse import parse_datetime
-from django.utils.timezone import now, is_aware, make_aware
-from django.utils.tzinfo import FixedOffset
+from django.core.management.base import NoArgsCommand
+from django.utils.timezone import now
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.queue import FifoQueue
from awx.main.tasks import handle_work_error
-from awx.main.utils import get_system_task_capacity, decrypt_field
+from awx.main.utils import get_system_task_capacity
# Celery
from celery.task.control import inspect
@@ -260,9 +253,9 @@ def process_graph(graph, task_capacity):
print_log("Ready Nodes: %s" % str(ready_nodes))
for task_node in ready_nodes:
node_obj = task_node['node_object']
- node_args = task_node['metadata']
+ # NOTE: This could be used to pass metadata through the task system
+ # node_args = task_node['metadata']
impact = node_obj.task_impact
- node_is_job = graph.get_node_type(node_obj) == 'job'
if impact <= remaining_volume or running_impact == 0:
node_dependencies = graph.get_dependents(node_obj)
# Allow other tasks to continue if a job fails, even if they are
diff --git a/awx/main/management/commands/stats.py b/awx/main/management/commands/stats.py
index ff5415e600..1cfa9cccd9 100644
--- a/awx/main/management/commands/stats.py
+++ b/awx/main/management/commands/stats.py
@@ -4,16 +4,10 @@
from optparse import make_option
# Django
-from django.conf import settings
-from django.core.management.base import BaseCommand, CommandError
-from django.db import transaction, DatabaseError
-from django.contrib.auth.models import User
-from django.utils.dateparse import parse_datetime
-from django.utils.timezone import now, is_aware, make_aware
-from django.utils.tzinfo import FixedOffset
+from django.core.management.base import BaseCommand
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
class Command(BaseCommand):
'''
diff --git a/awx/main/management/commands/update_instance.py b/awx/main/management/commands/update_instance.py
index a0bb3fec51..d5c283641c 100644
--- a/awx/main/management/commands/update_instance.py
+++ b/awx/main/management/commands/update_instance.py
@@ -1,17 +1,15 @@
# Copyright (c) 2014 Ansible, Inc.
# All Rights Reserved
-from optparse import make_option
-
-from django.conf import settings
-from django.core.management.base import BaseCommand, CommandError
+from django.core.management.base import CommandError
from django.db import transaction
from awx.main.management.commands._base_instance import BaseCommandInstance
-instance_str = BaseCommandInstance.instance_str
from awx.main.models import Instance
+instance_str = BaseCommandInstance.instance_str
+
class Command(BaseCommandInstance):
"""Set an already registered instance to primary or secondary for HA
tracking.
@@ -38,7 +36,6 @@ class Command(BaseCommandInstance):
# Is there an existing record for this machine? If so, retrieve that record and look for issues.
try:
instance = Instance.objects.get(**self.get_unique_fields())
- existing = True
except Instance.DoesNotExist:
raise CommandError('No matching instance found to update.')
diff --git a/awx/main/management/commands/user_info.py b/awx/main/management/commands/user_info.py
index 3a92a2ee3c..3add3eb4e7 100644
--- a/awx/main/management/commands/user_info.py
+++ b/awx/main/management/commands/user_info.py
@@ -1,7 +1,6 @@
# Copyright (c) 2014 Ansible, Inc.
# All Rights Reserved
-import sys
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand, CommandError
diff --git a/awx/main/models/__init__.py b/awx/main/models/__init__.py
index 04bec08e7c..d6ba4de96e 100644
--- a/awx/main/models/__init__.py
+++ b/awx/main/models/__init__.py
@@ -2,19 +2,19 @@
# All Rights Reserved.
# Django
-from django.conf import settings
+from django.conf import settings # noqa
# AWX
-from awx.main.models.base import *
-from awx.main.models.unified_jobs import *
-from awx.main.models.organization import *
-from awx.main.models.credential import *
-from awx.main.models.projects import *
-from awx.main.models.inventory import *
-from awx.main.models.jobs import *
-from awx.main.models.schedules import *
-from awx.main.models.activity_stream import *
-from awx.main.models.ha import *
+from awx.main.models.base import * # noqa
+from awx.main.models.unified_jobs import * # noqa
+from awx.main.models.organization import * # noqa
+from awx.main.models.credential import * # noqa
+from awx.main.models.projects import * # noqa
+from awx.main.models.inventory import * # noqa
+from awx.main.models.jobs import * # noqa
+from awx.main.models.schedules import * # noqa
+from awx.main.models.activity_stream import * # noqa
+from awx.main.models.ha import * # noqa
# Monkeypatch Django serializer to ignore django-taggit fields (which break
# the dumpdata command; see https://github.com/alex/django-taggit/issues/155).
@@ -29,15 +29,15 @@ def _new_handle_m2m_field(self, obj, field):
_PythonSerializer.handle_m2m_field = _new_handle_m2m_field
# Add custom methods to User model for permissions checks.
-from django.contrib.auth.models import User
-from awx.main.access import *
+from django.contrib.auth.models import User # noqa
+from awx.main.access import * # noqa
User.add_to_class('get_queryset', get_user_queryset)
User.add_to_class('can_access', check_user_access)
# Import signal handlers only after models have been defined.
-import awx.main.signals
+import awx.main.signals # noqa
-from awx.main.registrar import activity_stream_registrar
+from awx.main.registrar import activity_stream_registrar # noqa
activity_stream_registrar.connect(Organization)
activity_stream_registrar.connect(Inventory)
activity_stream_registrar.connect(Host)
diff --git a/awx/main/models/activity_stream.py b/awx/main/models/activity_stream.py
index 4e1bef2610..780b3b4ea2 100644
--- a/awx/main/models/activity_stream.py
+++ b/awx/main/models/activity_stream.py
@@ -2,7 +2,6 @@
# All Rights Reserved.
# Django
-from django.conf import settings
from django.db import models
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
diff --git a/awx/main/models/base.py b/awx/main/models/base.py
index e5859abc3a..770f7cbc74 100644
--- a/awx/main/models/base.py
+++ b/awx/main/models/base.py
@@ -9,25 +9,14 @@ import shlex
import yaml
# Django
-from django.conf import settings
from django.db import models
-from django.db.models import signals
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
from django.utils.timezone import now
-# Django-JSONField
-from jsonfield import JSONField
-
-# Django-Polymorphic
-from polymorphic import PolymorphicModel
-
# Django-Taggit
from taggit.managers import TaggableManager
-# Django-Celery
-from djcelery.models import TaskMeta
-
# Django-CRUM
from crum import get_current_user
diff --git a/awx/main/models/credential.py b/awx/main/models/credential.py
index 4e6330936d..9712445ce1 100644
--- a/awx/main/models/credential.py
+++ b/awx/main/models/credential.py
@@ -6,17 +6,15 @@ import base64
import re
# Django
-from django.conf import settings
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
from django.core.urlresolvers import reverse
# AWX
-from awx.main import storage
from awx.main.constants import CLOUD_PROVIDERS
from awx.main.utils import decrypt_field
-from awx.main.models.base import *
+from awx.main.models.base import * # noqa
__all__ = ['Credential']
diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py
index 77a50ead30..9f9eb8bd61 100644
--- a/awx/main/models/inventory.py
+++ b/awx/main/models/inventory.py
@@ -3,37 +3,27 @@
# Python
import datetime
-import hashlib
-import hmac
-import json
import logging
-import os
import re
-import shlex
-import uuid
import copy
-import random
# Django
from django.conf import settings
-from django.db import models, connection
-from django.db.models import Q
+from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.db import transaction
-from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
+from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse
-from django.contrib.auth.models import User
-from django.utils.timezone import now, make_aware, get_default_timezone
-from django.core.cache import cache
+from django.utils.timezone import now
# AWX
from awx.main.constants import CLOUD_PROVIDERS
from awx.main.fields import AutoOneToOneField
from awx.main.managers import HostManager
-from awx.main.models.base import *
+from awx.main.models.base import * # noqa
from awx.main.models.jobs import Job
-from awx.main.models.unified_jobs import *
-from awx.main.utils import encrypt_field, ignore_inventory_computed_fields, _inventory_updates
+from awx.main.models.unified_jobs import * # noqa
+from awx.main.utils import ignore_inventory_computed_fields, _inventory_updates
__all__ = ['Inventory', 'Host', 'Group', 'InventorySource', 'InventoryUpdate', 'CustomInventoryScript']
@@ -220,7 +210,7 @@ class Inventory(CommonModel):
group_hosts_map = self.get_group_hosts_map(active=True)
active_host_pks = set(self.hosts.filter(active=True).values_list('pk', flat=True))
failed_host_pks = set(self.hosts.filter(active=True, last_job_host_summary__job__active=True, last_job_host_summary__failed=True).values_list('pk', flat=True))
- active_group_pks = set(self.groups.filter(active=True).values_list('pk', flat=True))
+ # active_group_pks = set(self.groups.filter(active=True).values_list('pk', flat=True))
failed_group_pks = set() # Update below as we check each group.
groups_with_cloud_pks = set(self.groups.filter(active=True, inventory_sources__active=True, inventory_sources__source__in=CLOUD_INVENTORY_SOURCES).values_list('pk', flat=True))
groups_to_update = {}
@@ -539,7 +529,7 @@ class Group(CommonModelNameNotUnique):
@transaction.atomic
def mark_inactive_recursive(self):
- from awx.main.tasks import update_inventory_computed_fields, bulk_inventory_element_delete
+ from awx.main.tasks import bulk_inventory_element_delete
from awx.main.utils import ignore_inventory_computed_fields
from awx.main.signals import disable_activity_stream
diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py
index 02a44ae636..0a33b19e34 100644
--- a/awx/main/models/jobs.py
+++ b/awx/main/models/jobs.py
@@ -2,43 +2,28 @@
# All Rights Reserved.
# Python
-import datetime
-import hashlib
import hmac
import json
import logging
-import os
-import re
-import shlex
-import uuid
# Django
from django.conf import settings
from django.db import models
from django.db.models import Q
-from django.db import transaction
from django.utils.translation import ugettext_lazy as _
-from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
+from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse
-from django.contrib.auth.models import User
-from django.utils.timezone import now, make_aware, get_default_timezone
# Django-JSONField
from jsonfield import JSONField
-# Django-Polymorphic
-from polymorphic import PolymorphicModel
-
# AWX
from awx.main.constants import CLOUD_PROVIDERS
-from awx.main.models.base import *
-from awx.main.models.unified_jobs import *
-from awx.main.utils import encrypt_field, decrypt_field, ignore_inventory_computed_fields
+from awx.main.models.base import * # noqa
+from awx.main.models.unified_jobs import * # noqa
+from awx.main.utils import decrypt_field, ignore_inventory_computed_fields
from awx.main.utils import emit_websocket_notification
-# Celery
-from celery import chain
-
logger = logging.getLogger('awx.main.models.jobs')
__all__ = ['JobTemplate', 'Job', 'JobHostSummary', 'JobEvent', 'SystemJobOptions', 'SystemJobTemplate', 'SystemJob']
@@ -434,7 +419,7 @@ class Job(UnifiedJob, JobOptions):
# running this job (via callback inventory refresh).
try:
start_args = json.loads(decrypt_field(self, 'start_args'))
- except Exception, e:
+ except Exception:
start_args = None
start_args = start_args or {}
inventory_sources_already_updated = start_args.get('inventory_sources_already_updated', [])
diff --git a/awx/main/models/organization.py b/awx/main/models/organization.py
index 4d05eb01f4..1f5a8f1a4c 100644
--- a/awx/main/models/organization.py
+++ b/awx/main/models/organization.py
@@ -10,14 +10,13 @@ import uuid
# Django
from django.conf import settings
from django.db import models
-from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.utils.timezone import now
# AWX
from awx.main.fields import AutoOneToOneField
-from awx.main.models.base import *
+from awx.main.models.base import * # noqa
__all__ = ['Organization', 'Team', 'Permission', 'Profile', 'AuthToken']
diff --git a/awx/main/models/projects.py b/awx/main/models/projects.py
index b00ec7c344..e78fd86dc0 100644
--- a/awx/main/models/projects.py
+++ b/awx/main/models/projects.py
@@ -3,34 +3,25 @@
# Python
import datetime
-import hashlib
-import hmac
-import json
-import logging
import os
import re
-import shlex
import urlparse
-import uuid
# Django
from django.conf import settings
from django.db import models
-from django.db.models import CASCADE, SET_NULL, PROTECT
from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import smart_str
-from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
+from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse
-from django.contrib.auth.models import User
from django.utils.timezone import now, make_aware, get_default_timezone
# AWX
from awx.lib.compat import slugify
-from awx.main.models.base import *
+from awx.main.models.base import * # noqa
from awx.main.models.jobs import Job
-from awx.main.models.unified_jobs import *
+from awx.main.models.unified_jobs import * # noqa
from awx.main.utils import update_scm_url
-from awx.main.utils import encrypt_field
__all__ = ['Project', 'ProjectUpdate']
diff --git a/awx/main/models/schedules.py b/awx/main/models/schedules.py
index 704847657a..2d463461bc 100644
--- a/awx/main/models/schedules.py
+++ b/awx/main/models/schedules.py
@@ -15,7 +15,7 @@ from django.utils.timezone import now, make_aware, get_default_timezone
from jsonfield import JSONField
# AWX
-from awx.main.models.base import *
+from awx.main.models.base import * # noqa
from awx.main.utils import ignore_inventory_computed_fields, emit_websocket_notification
from django.core.urlresolvers import reverse
diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py
index 616caab347..7e4978a7f3 100644
--- a/awx/main/models/unified_jobs.py
+++ b/awx/main/models/unified_jobs.py
@@ -6,7 +6,6 @@ import codecs
import json
import logging
import re
-import shlex
import os
import os.path
from StringIO import StringIO
@@ -14,9 +13,7 @@ from StringIO import StringIO
# Django
from django.conf import settings
from django.db import models
-from django.db import transaction
-from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
-from django.contrib.contenttypes.models import ContentType
+from django.core.exceptions import NON_FIELD_ERRORS
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext_lazy as _
from django.utils.timezone import now
@@ -31,9 +28,9 @@ from polymorphic import PolymorphicModel
from djcelery.models import TaskMeta
# AWX
-from awx.main.models.base import *
+from awx.main.models.base import * # noqa
from awx.main.models.schedules import Schedule
-from awx.main.utils import decrypt_field, get_type_for_model, emit_websocket_notification, _inventory_updates
+from awx.main.utils import decrypt_field, emit_websocket_notification, _inventory_updates
from awx.main.redact import UriCleaner
__all__ = ['UnifiedJobTemplate', 'UnifiedJob']
@@ -597,7 +594,7 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique
if self.result_stdout_file != "":
try:
os.remove(self.result_stdout_file)
- except Exception, e:
+ except Exception:
pass
super(UnifiedJob, self).delete()
@@ -713,7 +710,7 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique
needed = self.get_passwords_needed_to_start()
try:
start_args = json.loads(decrypt_field(self, 'start_args'))
- except Exception, e:
+ except Exception:
start_args = None
if start_args in (None, ''):
start_args = kwargs
@@ -756,10 +753,10 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique
# Each type of unified job has a different Task class; get the
# appropirate one.
- task_type = get_type_for_model(self)
+ # task_type = get_type_for_model(self)
# Actually tell the task runner to run this task.
- # NOTE: This will deadlock the task runner
+ # FIXME: This will deadlock the task runner
#from awx.main.tasks import notify_task_runner
#notify_task_runner.delay({'id': self.id, 'metadata': kwargs,
# 'task_type': task_type})
diff --git a/awx/main/tests/__init__.py b/awx/main/tests/__init__.py
index 0c29a3eeb4..7489dbd7b3 100644
--- a/awx/main/tests/__init__.py
+++ b/awx/main/tests/__init__.py
@@ -1,16 +1,16 @@
# Copyright (c) 2014 AnsibleWorks, Inc.
# All Rights Reserved.
-from awx.main.tests.organizations import OrganizationsTest
-from awx.main.tests.users import *
-from awx.main.tests.inventory import *
-from awx.main.tests.projects import ProjectsTest, ProjectUpdatesTest
-from awx.main.tests.commands import *
-from awx.main.tests.scripts import *
-from awx.main.tests.tasks import RunJobTest
-from awx.main.tests.licenses import LicenseTests
-from awx.main.tests.jobs import *
-from awx.main.tests.activity_stream import *
-from awx.main.tests.schedules import *
-from awx.main.tests.redact import *
-from awx.main.tests.views import *
+from awx.main.tests.organizations import OrganizationsTest # noqa
+from awx.main.tests.users import * # noqa
+from awx.main.tests.inventory import * # noqa
+from awx.main.tests.projects import ProjectsTest, ProjectUpdatesTest # noqa
+from awx.main.tests.commands import * # noqa
+from awx.main.tests.scripts import * # noqa
+from awx.main.tests.tasks import RunJobTest # noqa
+from awx.main.tests.licenses import LicenseTests # noqa
+from awx.main.tests.jobs import * # noqa
+from awx.main.tests.activity_stream import * # noqa
+from awx.main.tests.schedules import * # noqa
+from awx.main.tests.redact import * # noqa
+from awx.main.tests.views import * # noqa
diff --git a/awx/main/tests/activity_stream.py b/awx/main/tests/activity_stream.py
index 06d19ae9fe..8451671f51 100644
--- a/awx/main/tests/activity_stream.py
+++ b/awx/main/tests/activity_stream.py
@@ -2,21 +2,10 @@
# All Rights Reserved.
# Python
-import contextlib
-import datetime
-import json
-import os
-import shutil
-import tempfile
-
-
-from django.contrib.auth.models import User
-import django.test
-from django.test.client import Client
from django.core.urlresolvers import reverse
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.tests.base import BaseTest
class ActivityStreamTest(BaseTest):
diff --git a/awx/main/tests/base.py b/awx/main/tests/base.py
index cb167aaa17..9bc25b91f8 100644
--- a/awx/main/tests/base.py
+++ b/awx/main/tests/base.py
@@ -4,7 +4,6 @@
# Python
import base64
import contextlib
-import datetime
import json
import os
import random
@@ -23,10 +22,9 @@ from django.conf import settings, UserSettingsHolder
from django.contrib.auth.models import User
import django.test
from django.test.client import Client
-from django.test.utils import override_settings
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.backend import LDAPSettings
from awx.main.management.commands.run_callback_receiver import CallbackReceiver
from awx.main.management.commands.run_task_system import run_taskmanager
diff --git a/awx/main/tests/commands.py b/awx/main/tests/commands.py
index 14f6c2e8a6..3141e541a2 100644
--- a/awx/main/tests/commands.py
+++ b/awx/main/tests/commands.py
@@ -12,8 +12,6 @@ import tempfile
import time
import urlparse
import unittest
-if not hasattr(unittest, 'skipIf'):
- import unittest2 as unittest
# Django
import django
@@ -25,9 +23,12 @@ from django.utils.timezone import now
from django.test.utils import override_settings
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.tests.base import BaseTest, BaseLiveServerTest
+if not hasattr(unittest, 'skipIf'):
+ import unittest2 as unittest
+
__all__ = ['DumpDataTest', 'CleanupDeletedTest', 'CleanupJobsTest',
'InventoryImportTest']
@@ -186,7 +187,7 @@ class DumpDataTest(BaseCommandMixin, BaseTest):
def test_dumpdata(self):
result, stdout, stderr = self.run_command('dumpdata')
self.assertEqual(result, None)
- data = json.loads(stdout)
+ json.loads(stdout)
class CleanupDeletedTest(BaseCommandMixin, BaseTest):
'''
diff --git a/awx/main/tests/inventory.py b/awx/main/tests/inventory.py
index 5fb75bffd5..a24ac68859 100644
--- a/awx/main/tests/inventory.py
+++ b/awx/main/tests/inventory.py
@@ -11,13 +11,12 @@ import tempfile
# Django
from django.conf import settings
-from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.test.utils import override_settings
from django.utils.timezone import now
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.tests.base import BaseTest, BaseTransactionTest
__all__ = ['InventoryTest', 'InventoryUpdatesTest']
@@ -239,12 +238,12 @@ class InventoryTest(BaseTest):
# a user who is on a team who has read permissions on an inventory can
# see inventory records, but not delete.
with self.current_user(self.other_django_user):
- data = self.get(url_b, expect=200)
+ self.get(url_b, expect=200)
self.delete(url_b, expect=403)
# an org admin can delete inventory records for his orgs only.
with self.current_user(self.normal_django_user):
- data = self.get(url_a, expect=200)
+ self.get(url_a, expect=200)
self.delete(url_a, expect=204)
self.delete(url_b, expect=403)
@@ -273,7 +272,7 @@ class InventoryTest(BaseTest):
temp_org.users.add(self.other_django_user)
temp_org.users.add(self.normal_django_user)
temp_inv = temp_org.inventories.create(name='Delete Org Inventory')
- temp_group1 = temp_inv.groups.create(name='Delete Org Inventory Group')
+ temp_inv.groups.create(name='Delete Org Inventory Group')
temp_perm_read = Permission.objects.create(
inventory = temp_inv,
@@ -281,7 +280,7 @@ class InventoryTest(BaseTest):
permission_type = 'read'
)
- org_detail = reverse('api:organization_detail', args=(temp_org.pk,))
+ reverse('api:organization_detail', args=(temp_org.pk,))
inventory_detail = reverse('api:inventory_detail', args=(temp_inv.pk,))
permission_detail = reverse('api:permission_detail', args=(temp_perm_read.pk,))
@@ -292,7 +291,7 @@ class InventoryTest(BaseTest):
def test_create_inventory_script(self):
inventory_scripts = reverse('api:inventory_script_list')
new_script = dict(name="Test", description="Test Script", script=TEST_SIMPLE_INVENTORY_SCRIPT, organization=self.organizations[0].id)
- script_data = self.post(inventory_scripts, data=new_script, expect=201, auth=self.get_super_credentials())
+ self.post(inventory_scripts, data=new_script, expect=201, auth=self.get_super_credentials())
got = self.get(inventory_scripts, expect=200, auth=self.get_super_credentials())
self.assertEquals(got['count'], 1)
@@ -305,11 +304,10 @@ class InventoryTest(BaseTest):
self.post(inventory_scripts, data=failed_no_shebang, expect=400, auth=self.get_super_credentials())
def test_main_line(self):
-
- # some basic URLs...
- inventories = reverse('api:inventory_list')
- inventories_1 = reverse('api:inventory_detail', args=(self.inventory_a.pk,))
- inventories_2 = reverse('api:inventory_detail', args=(self.inventory_b.pk,))
+ # some basic URLs...
+ reverse('api:inventory_list')
+ reverse('api:inventory_detail', args=(self.inventory_a.pk,))
+ reverse('api:inventory_detail', args=(self.inventory_b.pk,))
hosts = reverse('api:host_list')
groups = reverse('api:group_list')
self.create_test_license_file()
@@ -328,22 +326,21 @@ class InventoryTest(BaseTest):
new_host_e = dict(name=u'asdf4.example.com:\u0162', inventory=inv.pk)
host_data0 = self.post(hosts, data=invalid, expect=400, auth=self.get_super_credentials())
host_data0 = self.post(hosts, data=new_host_a, expect=201, auth=self.get_super_credentials())
-
# Port should be split out into host variables.
host_a = Host.objects.get(pk=host_data0['id'])
self.assertEqual(host_a.name, u'asdf\u0162.example.com')
self.assertEqual(host_a.variables_dict, {'ansible_ssh_port': 1022})
-
+
# an org admin can add hosts (try first with invalid port #).
- host_data1 = self.post(hosts, data=new_host_e, expect=400, auth=self.get_normal_credentials())
+ self.post(hosts, data=new_host_e, expect=400, auth=self.get_normal_credentials())
new_host_e['name'] = u'asdf4.example.com'
- host_data1 = self.post(hosts, data=new_host_e, expect=201, auth=self.get_normal_credentials())
+ self.post(hosts, data=new_host_e, expect=201, auth=self.get_normal_credentials())
# a normal user cannot add hosts
- host_data2 = self.post(hosts, data=new_host_b, expect=403, auth=self.get_nobody_credentials())
+ self.post(hosts, data=new_host_b, expect=403, auth=self.get_nobody_credentials())
# a normal user with inventory edit permissions (on any inventory) can create hosts
- edit_perm = Permission.objects.create(
+ Permission.objects.create(
user = self.other_django_user,
inventory = Inventory.objects.get(pk=inv.pk),
permission_type = PERM_INVENTORY_WRITE)
@@ -355,7 +352,7 @@ class InventoryTest(BaseTest):
self.assertEqual(host_c.variables_dict, {'ansible_ssh_port': 2022, 'who': 'what?'})
# hostnames must be unique inside an organization
- host_data4 = self.post(hosts, data=new_host_c, expect=400, auth=self.get_other_credentials())
+ self.post(hosts, data=new_host_c, expect=400, auth=self.get_other_credentials())
# Verify we can update host via PUT.
host_url3 = host_data3['url']
@@ -363,7 +360,7 @@ class InventoryTest(BaseTest):
host_data3 = self.put(host_url3, data=host_data3, expect=200, auth=self.get_other_credentials())
self.assertEqual(Host.objects.get(id=host_data3['id']).variables, '')
self.assertEqual(Host.objects.get(id=host_data3['id']).variables_dict, {})
-
+
# Should reject invalid data.
host_data3['variables'] = 'foo: [bar'
self.put(host_url3, data=host_data3, expect=400, auth=self.get_other_credentials())
@@ -373,7 +370,7 @@ class InventoryTest(BaseTest):
self.put(host_url3, data=host_data3, expect=200, auth=self.get_other_credentials())
self.assertEqual(Host.objects.get(id=host_data3['id']).variables, host_data3['variables'])
self.assertEqual(Host.objects.get(id=host_data3['id']).variables_dict, {'bad': 'monkey'})
-
+
host_data3['variables'] = '{"angry": "penguin"}'
self.put(host_url3, data=host_data3, expect=200, auth=self.get_other_credentials())
self.assertEqual(Host.objects.get(id=host_data3['id']).variables, host_data3['variables'])
@@ -390,14 +387,14 @@ class InventoryTest(BaseTest):
new_group_e = dict(name='web6', inventory=inv.pk)
groups = reverse('api:group_list')
- data0 = self.post(groups, data=invalid, expect=400, auth=self.get_super_credentials())
- data0 = self.post(groups, data=new_group_a, expect=201, auth=self.get_super_credentials())
+ self.post(groups, data=invalid, expect=400, auth=self.get_super_credentials())
+ self.post(groups, data=new_group_a, expect=201, auth=self.get_super_credentials())
# an org admin can add groups
- group_data1 = self.post(groups, data=new_group_e, expect=201, auth=self.get_normal_credentials())
+ self.post(groups, data=new_group_e, expect=201, auth=self.get_normal_credentials())
# a normal user cannot add groups
- group_data2 = self.post(groups, data=new_group_b, expect=403, auth=self.get_nobody_credentials())
+ self.post(groups, data=new_group_b, expect=403, auth=self.get_nobody_credentials())
# a normal user with inventory edit permissions (on any inventory) can create groups
# already done!
@@ -405,23 +402,23 @@ class InventoryTest(BaseTest):
# user = self.other_django_user,
# inventory = Inventory.objects.get(pk=inv.pk),
# permission_type = PERM_INVENTORY_WRITE
- #)
- group_data3 = self.post(groups, data=new_group_c, expect=201, auth=self.get_other_credentials())
-
+ #)
+ self.post(groups, data=new_group_c, expect=201, auth=self.get_other_credentials())
+
# hostnames must be unique inside an organization
- group_data4 = self.post(groups, data=new_group_c, expect=400, auth=self.get_other_credentials())
+ self.post(groups, data=new_group_c, expect=400, auth=self.get_other_credentials())
# Check that we don't allow creating reserved group names.
data = dict(name='all', inventory=inv.pk)
with self.current_user(self.super_django_user):
- response = self.post(groups, data=data, expect=400)
+ self.post(groups, data=data, expect=400)
data = dict(name='_meta', inventory=inv.pk)
with self.current_user(self.super_django_user):
- response = self.post(groups, data=data, expect=400)
+ self.post(groups, data=data, expect=400)
# A new group should not be able to be added a removed group
del_group = inv.groups.create(name='del')
- undel_group = inv.groups.create(name='nondel')
+ inv.groups.create(name='nondel')
del_children_url = reverse('api:group_children_list', args=(del_group.pk,))
nondel_url = reverse('api:group_detail',
args=(Group.objects.get(name='nondel').pk,))
@@ -432,7 +429,6 @@ class InventoryTest(BaseTest):
#################################################
# HOSTS->inventories POST via subcollection
-
url = reverse('api:inventory_hosts_list', args=(self.inventory_a.pk,))
new_host_a = dict(name='web100.example.com')
new_host_b = dict(name='web101.example.com')
@@ -444,10 +440,10 @@ class InventoryTest(BaseTest):
added_by_collection_a = self.post(url, data=new_host_a, expect=201, auth=self.get_super_credentials())
# an org admin can associate hosts with inventories
- added_by_collection_b = self.post(url, data=new_host_b, expect=201, auth=self.get_normal_credentials())
+ self.post(url, data=new_host_b, expect=201, auth=self.get_normal_credentials())
# a normal user cannot associate hosts with inventories
- added_by_collection_c = self.post(url, data=new_host_c, expect=403, auth=self.get_nobody_credentials())
+ self.post(url, data=new_host_c, expect=403, auth=self.get_nobody_credentials())
# a normal user with edit permission on the inventory can associate hosts with inventories
url5 = reverse('api:inventory_hosts_list', args=(inv.pk,))
@@ -455,7 +451,7 @@ class InventoryTest(BaseTest):
got = self.get(url5, expect=200, auth=self.get_other_credentials())
self.assertEquals(got['count'], 4)
- # now remove the host from inventory (still keeps the record)
+ # now remove the host from inventory (still keeps the record)
added_by_collection_d['disassociate'] = 1
self.post(url5, data=added_by_collection_d, expect=204, auth=self.get_other_credentials())
got = self.get(url5, expect=200, auth=self.get_other_credentials())
@@ -464,7 +460,7 @@ class InventoryTest(BaseTest):
##################################################
# GROUPS->inventories POST via subcollection
-
+
root_groups = reverse('api:inventory_root_groups_list', args=(self.inventory_a.pk,))
url = reverse('api:inventory_groups_list', args=(self.inventory_a.pk,))
@@ -575,14 +571,14 @@ class InventoryTest(BaseTest):
# an org admin can associate variable objects with inventory
put = self.put(vdata_url, data=vars_b, expect=200, auth=self.get_normal_credentials())
-
+
# a normal user cannot associate variable objects with inventory
put = self.put(vdata_url, data=vars_b, expect=403, auth=self.get_nobody_credentials())
# a normal user with inventory edit permissions can associate variable objects with inventory
put = self.put(vdata_url, data=vars_c, expect=200, auth=self.get_normal_credentials())
self.assertEquals(put, vars_c)
-
+
# repeat but request variables in yaml
got = self.get(vdata_url, expect=200,
auth=self.get_normal_credentials(),
@@ -604,10 +600,10 @@ class InventoryTest(BaseTest):
host2 = hosts[1]
host3 = hosts[2]
groups[0].hosts.add(host1)
- groups[0].hosts.add(host3)
+ groups[0].hosts.add(host3)
groups[0].save()
- # access
+ # access
url1 = reverse('api:group_hosts_list', args=(groups[0].pk,))
alt_group_hosts = reverse('api:group_hosts_list', args=(groups[1].pk,))
other_alt_group_hosts = reverse('api:group_hosts_list', args=(groups[2].pk,))
@@ -621,15 +617,15 @@ class InventoryTest(BaseTest):
url = reverse('api:host_detail', args=(host2.pk,))
got = self.get(url, expect=200, auth=self.get_normal_credentials())
self.assertEquals(got['id'], host2.pk)
- posted = self.post(url1, data=got, expect=204, auth=self.get_normal_credentials())
+ self.post(url1, data=got, expect=204, auth=self.get_normal_credentials())
data = self.get(url1, expect=200, auth=self.get_normal_credentials())
self.assertEquals(data['count'], 3)
self.assertTrue(host2.pk in [x['id'] for x in data['results']])
# now add one new completely new host, to test creation+association in one go
new_host = dict(inventory=got['inventory'], name='completelynewhost.example.com', description='...')
- posted = self.post(url1, data=new_host, expect=201, auth=self.get_normal_credentials())
-
+ self.post(url1, data=new_host, expect=201, auth=self.get_normal_credentials())
+
data = self.get(url1, expect=200, auth=self.get_normal_credentials())
self.assertEquals(data['count'], 4)
@@ -643,7 +639,7 @@ class InventoryTest(BaseTest):
# removal
got['disassociate'] = 1
- posted = self.post(url1, data=got, expect=204, auth=self.get_normal_credentials())
+ self.post(url1, data=got, expect=204, auth=self.get_normal_credentials())
data = self.get(url1, expect=200, auth=self.get_normal_credentials())
self.assertEquals(data['count'], 3)
self.assertFalse(host2.pk in [x['id'] for x in data['results']])
@@ -687,8 +683,8 @@ class InventoryTest(BaseTest):
args=(Group.objects.get(name='web6').pk,))
subgroups_url3 = reverse('api:group_children_list',
args=(Group.objects.get(name='web100').pk,))
- subgroups_url4 = reverse('api:group_children_list',
- args=(Group.objects.get(name='web101').pk,))
+ reverse('api:group_children_list',
+ args=(Group.objects.get(name='web101').pk,))
got = self.get(child_url, expect=200, auth=self.get_super_credentials())
self.post(subgroups_url, data=got, expect=204, auth=self.get_super_credentials())
kids = Group.objects.get(name='web2').children.all()
@@ -697,7 +693,7 @@ class InventoryTest(BaseTest):
self.assertEquals(checked['count'], 1)
# an org admin can set subgroups
- posted = self.post(subgroups_url2, data=got, expect=204, auth=self.get_normal_credentials())
+ self.post(subgroups_url2, data=got, expect=204, auth=self.get_normal_credentials())
# see if we can post a completely new subgroup
new_data = dict(inventory=inv.pk, name='completely new', description='blarg?')
@@ -767,7 +763,7 @@ class InventoryTest(BaseTest):
'disassociate': 1,
}
with self.current_user(self.super_django_user):
- response = self.post(url, data, expect=204)
+ self.post(url, data, expect=204)
gx3 = Group.objects.get(pk=gx3.pk)
#self.assertFalse(gx3.active) # FIXME: Disabled for now....
self.assertFalse(gx3 in gx2.children.all())
@@ -778,13 +774,13 @@ class InventoryTest(BaseTest):
invalid_expect = 400 # hostname validation is disabled for now.
data = dict(name='', inventory=inv.pk)
with self.current_user(self.super_django_user):
- response = self.post(hosts, data=data, expect=400)
+ self.post(hosts, data=data, expect=400)
#data = dict(name='not a valid host name', inventory=inv.pk)
#with self.current_user(self.super_django_user):
# response = self.post(hosts, data=data, expect=invalid_expect)
data = dict(name='validhost:99999', inventory=inv.pk)
with self.current_user(self.super_django_user):
- response = self.post(hosts, data=data, expect=invalid_expect)
+ self.post(hosts, data=data, expect=invalid_expect)
#data = dict(name='123.234.345.456', inventory=inv.pk)
#with self.current_user(self.super_django_user):
# response = self.post(hosts, data=data, expect=invalid_expect)
@@ -834,7 +830,7 @@ class InventoryTest(BaseTest):
h_d = i_a.hosts.create(name='d', variables=json.dumps({'d-vars': 'ddd'}))
h_d.groups.add(g_d)
# Add another host not in any groups.
- h_z = i_a.hosts.create(name='z', variables=json.dumps({'z-vars': 'zzz'}))
+ i_a.hosts.create(name='z', variables=json.dumps({'z-vars': 'zzz'}))
# Old, slow 1.2 way.
url = reverse('api:inventory_script_view', args=(i_a.pk,))
@@ -858,7 +854,7 @@ class InventoryTest(BaseTest):
self.assertEqual(response, h.variables_dict)
# Now add localhost to the inventory.
- h_l = i_a.hosts.create(name='localhost', variables=json.dumps({'ansible_connection': 'local'}))
+ i_a.hosts.create(name='localhost', variables=json.dumps({'ansible_connection': 'local'}))
# New 1.3 way.
url = reverse('api:inventory_script_view', args=(i_a.pk,))
@@ -1857,16 +1853,16 @@ class InventoryUpdatesTest(BaseTransactionTest):
custom_group = custom_inv.groups.create(name="Custom Script Group")
custom_inv_src = reverse('api:inventory_source_detail',
args=(custom_group.inventory_source.pk,))
- custom_inv_update = reverse('api:inventory_source_update_view',
- args=(custom_group.inventory_source.pk,))
+ reverse('api:inventory_source_update_view',
+ args=(custom_group.inventory_source.pk,))
inv_src_opts = {'source': 'custom',
'source_script': script_data["id"],
'source_vars': json.dumps({'HOME': 'no-place-like', 'USER': 'notme', '_': 'nope', 'INVENTORY_SOURCE_ID': -1})
}
with self.current_user(self.super_django_user):
- response = self.put(custom_inv_src, inv_src_opts, expect=200)
+ self.put(custom_inv_src, inv_src_opts, expect=200)
self.check_inventory_source(custom_group.inventory_source)
-
+
# Delete script, verify that update fails.
inventory_source = InventorySource.objects.get(pk=custom_group.inventory_source.pk)
self.assertTrue(inventory_source.can_update)
@@ -1883,11 +1879,11 @@ class InventoryUpdatesTest(BaseTransactionTest):
custom_group = custom_inv.groups.create(name="Unicode Script Group")
custom_inv_src = reverse('api:inventory_source_detail',
args=(custom_group.inventory_source.pk,))
- custom_inv_update = reverse('api:inventory_source_update_view',
- args=(custom_group.inventory_source.pk,))
+ reverse('api:inventory_source_update_view',
+ args=(custom_group.inventory_source.pk,))
inv_src_opts = {'source': 'custom', 'source_script': script_data["id"]}
with self.current_user(self.super_django_user):
- response = self.put(custom_inv_src, inv_src_opts, expect=200)
+ self.put(custom_inv_src, inv_src_opts, expect=200)
self.check_inventory_source(custom_group.inventory_source)
# This shouldn't work because we are trying to use a custom script from one organization with
@@ -1897,8 +1893,8 @@ class InventoryUpdatesTest(BaseTransactionTest):
other_group = other_inv.groups.create(name='A Different Org Group')
other_inv_src = reverse('api:inventory_source_detail',
args=(other_group.inventory_source.pk,))
- other_inv_update = reverse('api:inventory_source_update_view',
- args=(other_group.inventory_source.pk,))
+ reverse('api:inventory_source_update_view',
+ args=(other_group.inventory_source.pk,))
other_inv_src_opts = {'source': 'custom', 'source_script': script_data['id']}
with self.current_user(self.super_django_user):
self.put(other_inv_src, other_inv_src_opts, expect=400)
diff --git a/awx/main/tests/jobs.py b/awx/main/tests/jobs.py
index a3cf642d86..3bab9a4603 100644
--- a/awx/main/tests/jobs.py
+++ b/awx/main/tests/jobs.py
@@ -13,12 +13,9 @@ import uuid
# Django
import django.test
-from django.contrib.auth.models import User as DjangoUser
from django.conf import settings
from django.core.urlresolvers import reverse
-from django.db import transaction
from django.db.models import Q
-from django.test.client import Client
from django.test.utils import override_settings
from django.utils.encoding import smart_str
@@ -26,7 +23,7 @@ from django.utils.encoding import smart_str
import requests
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.tests.base import BaseTestMixin
__all__ = ['JobTemplateTest', 'JobTest', 'JobStartCancelTest',
@@ -721,27 +718,27 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase):
# Sue's credentials (superuser) == 200, full list
self.check_get_list(url, self.user_sue, qs, fields)
-
+
# Alex's credentials (admin of all orgs) == 200, full list
self.check_get_list(url, self.user_alex, qs, fields)
# Bob's credentials (admin of eng, user of ops) == 200, all from
# engineering and operations.
- bob_qs = qs.filter(
+ qs.filter(
Q(project__organizations__admins__in=[self.user_bob]) |
Q(project__teams__users__in=[self.user_bob]),
)
#self.check_get_list(url, self.user_bob, bob_qs, fields)
# Chuck's credentials (admin of eng) == 200, all from engineering.
- chuck_qs = qs.filter(
+ qs.filter(
Q(project__organizations__admins__in=[self.user_chuck]) |
Q(project__teams__users__in=[self.user_chuck]),
)
#self.check_get_list(url, self.user_chuck, chuck_qs, fields)
# Doug's credentials (user of eng) == 200, none?.
- doug_qs = qs.filter(
+ qs.filter(
Q(project__organizations__admins__in=[self.user_doug]) |
Q(project__teams__users__in=[self.user_doug]),
)
@@ -898,9 +895,7 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase):
with self.current_user(self.user_sue):
data = self.get(url)
data['name'] = '%s-updated' % data['name']
- response = self.put(url, data)
- #patch_data = dict(name='%s-changed' % data['name'])
- #response = self.patch(url, patch_data)
+ self.put(url, data)
# FIXME: Check other credentials and optional fields.
@@ -934,7 +929,7 @@ class JobTemplateTest(BaseJobTestMixin, django.test.TestCase):
# sue can create a new job from the template.
with self.current_user(self.user_sue):
- response = self.post(url, data, expect=201)
+ self.post(url, data, expect=201)
# FIXME: Check other credentials and optional fields.
@@ -1155,11 +1150,11 @@ class JobTest(BaseJobTestMixin, django.test.TestCase):
# sue can create a new job without a template.
with self.current_user(self.user_sue):
- response = self.post(url, data, expect=201)
+ self.post(url, data, expect=201)
# alex can't create a job without a template, only super users can do that
with self.current_user(self.user_alex):
- response = self.post(url, data, expect=403)
+ self.post(url, data, expect=403)
# sue can also create a job here from a template.
jt = self.jt_ops_east_run
@@ -1168,7 +1163,7 @@ class JobTest(BaseJobTestMixin, django.test.TestCase):
job_template=jt.pk,
)
with self.current_user(self.user_sue):
- response = self.post(url, data, expect=201)
+ self.post(url, data, expect=201)
# sue can't create a job when it is hidden due to inactive team
@@ -1207,9 +1202,7 @@ class JobTest(BaseJobTestMixin, django.test.TestCase):
with self.current_user(self.user_sue):
data = self.get(url)
data['limit'] = '%s-updated' % data['limit']
- response = self.put(url, data)
- #patch_data = dict(limit='%s-changed' % data['limit'])
- #response = self.patch(url, patch_data)
+ self.put(url, data)
# sue cannot update the job detail if it is in any other state.
for status in ('pending', 'running', 'successful', 'failed', 'error',
diff --git a/awx/main/tests/licenses.py b/awx/main/tests/licenses.py
index f47d1037fc..770a8302b9 100644
--- a/awx/main/tests/licenses.py
+++ b/awx/main/tests/licenses.py
@@ -1,17 +1,11 @@
# Copyright (c) 2014 AnsibleWorks, Inc.
# All Rights Reserved.
-import datetime
import json
-from django.conf import settings
-from django.contrib.auth.models import User as DjangoUser
-import django.test
-from django.test.client import Client
-from django.core.urlresolvers import reverse
from awx.main.models import Host, Inventory, Organization
from awx.main.tests.base import BaseTest
-from awx.main.task_engine import *
+from awx.main.task_engine import * # noqa
class LicenseTests(BaseTest):
@@ -23,18 +17,18 @@ class LicenseTests(BaseTest):
u = self.super_django_user
org = Organization.objects.create(name='o1', created_by=u)
inventory = Inventory.objects.create(name='hi', organization=org, created_by=u)
- host = Host.objects.create(name='a1', inventory=inventory, created_by=u)
- host = Host.objects.create(name='a2', inventory=inventory, created_by=u)
- host = Host.objects.create(name='a3', inventory=inventory, created_by=u)
- host = Host.objects.create(name='a4', inventory=inventory, created_by=u)
- host = Host.objects.create(name='a5', inventory=inventory, created_by=u)
- host = Host.objects.create(name='a6', inventory=inventory, created_by=u)
- host = Host.objects.create(name='a7', inventory=inventory, created_by=u)
- host = Host.objects.create(name='a8', inventory=inventory, created_by=u)
- host = Host.objects.create(name='a9', inventory=inventory, created_by=u)
- host = Host.objects.create(name='a10', inventory=inventory, created_by=u)
- host = Host.objects.create(name='a11', inventory=inventory, created_by=u)
- host = Host.objects.create(name='a12', inventory=inventory, created_by=u)
+ Host.objects.create(name='a1', inventory=inventory, created_by=u)
+ Host.objects.create(name='a2', inventory=inventory, created_by=u)
+ Host.objects.create(name='a3', inventory=inventory, created_by=u)
+ Host.objects.create(name='a4', inventory=inventory, created_by=u)
+ Host.objects.create(name='a5', inventory=inventory, created_by=u)
+ Host.objects.create(name='a6', inventory=inventory, created_by=u)
+ Host.objects.create(name='a7', inventory=inventory, created_by=u)
+ Host.objects.create(name='a8', inventory=inventory, created_by=u)
+ Host.objects.create(name='a9', inventory=inventory, created_by=u)
+ Host.objects.create(name='a10', inventory=inventory, created_by=u)
+ Host.objects.create(name='a11', inventory=inventory, created_by=u)
+ Host.objects.create(name='a12', inventory=inventory, created_by=u)
def tearDown(self):
super(LicenseTests, self).tearDown()
@@ -62,7 +56,7 @@ class LicenseTests(BaseTest):
assert strdata_loaded == data
reader = TaskSerializer()
-
+
vdata = reader.from_string(strdata)
assert vdata['available_instances'] == 500
diff --git a/awx/main/tests/organizations.py b/awx/main/tests/organizations.py
index ff7a3cbcf0..0ee735a2ca 100644
--- a/awx/main/tests/organizations.py
+++ b/awx/main/tests/organizations.py
@@ -1,14 +1,8 @@
# Copyright (c) 2014 AnsibleWorks, Inc.
# All Rights Reserved.
-import datetime
-import json
-
-from django.contrib.auth.models import User as DjangoUser
from django.core.urlresolvers import reverse
-import django.test
-from django.test.client import Client
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.tests.base import BaseTest
class OrganizationsTest(BaseTest):
@@ -129,31 +123,31 @@ class OrganizationsTest(BaseTest):
# first get all the orgs
orgs = self.get(self.collection(), expect=200, auth=self.get_super_credentials())
-
+
# find projects attached to the first org
projects0_url = orgs['results'][0]['related']['projects']
projects1_url = orgs['results'][1]['related']['projects']
projects9_url = orgs['results'][9]['related']['projects']
-
+
self.get(projects0_url, expect=401, auth=None)
self.get(projects0_url, expect=401, auth=self.get_invalid_credentials())
-
+
# normal user is just a member of the first org, so can see all projects under the org
- projects0a = self.get(projects0_url, expect=200, auth=self.get_normal_credentials())
+ self.get(projects0_url, expect=200, auth=self.get_normal_credentials())
# however in the second org, he's an admin and should see all of them
projects1a = self.get(projects1_url, expect=200, auth=self.get_normal_credentials())
self.assertEquals(projects1a['count'], 5)
# but the non-admin cannot access the list of projects in the org. He should use /projects/ instead!
- projects1b = self.get(projects1_url, expect=200, auth=self.get_other_credentials())
-
+ self.get(projects1_url, expect=200, auth=self.get_other_credentials())
+
# superuser should be able to read anything
projects9a = self.get(projects9_url, expect=200, auth=self.get_super_credentials())
self.assertEquals(projects9a['count'], 1)
# nobody user is not a member of any org, so can't see projects...
- projects0a = self.get(projects0_url, expect=403, auth=self.get_nobody_credentials())
+ self.get(projects0_url, expect=403, auth=self.get_nobody_credentials())
projects1a = self.get(projects1_url, expect=403, auth=self.get_nobody_credentials())
def test_get_item_subobjects_users(self):
@@ -220,7 +214,7 @@ class OrganizationsTest(BaseTest):
data1 = self.post(self.collection(), new_org, expect=201, auth=self.get_super_credentials())
# duplicate post results in 400
- data2 = self.post(self.collection(), new_org, expect=400, auth=self.get_super_credentials())
+ self.post(self.collection(), new_org, expect=400, auth=self.get_super_credentials())
# look at what we got back from the post, make sure we added an org
last_org = Organization.objects.order_by('-pk')[0]
@@ -295,7 +289,7 @@ class OrganizationsTest(BaseTest):
new_user = dict(username='NewUser9000')
which_org = self.normal_django_user.admin_of_organizations.all()[0]
url = reverse('api:organization_users_list', args=(which_org.pk,))
- posted = self.post(url, new_user, expect=201, auth=self.get_normal_credentials())
+ self.post(url, new_user, expect=201, auth=self.get_normal_credentials())
all_users = self.get(url, expect=200, auth=self.get_normal_credentials())
self.assertEqual(all_users['count'], 3)
@@ -337,7 +331,7 @@ class OrganizationsTest(BaseTest):
# first get some urls and data to put back to them
urls = self.get_urls(self.collection(), auth=self.get_super_credentials())
- data0 = self.get(urls[0], expect=200, auth=self.get_super_credentials())
+ self.get(urls[0], expect=200, auth=self.get_super_credentials())
data1 = self.get(urls[1], expect=200, auth=self.get_super_credentials())
# test that an unauthenticated user cannot do a put
@@ -346,9 +340,9 @@ class OrganizationsTest(BaseTest):
self.put(urls[0], new_data1, expect=401, auth=None)
self.put(urls[0], new_data1, expect=401, auth=self.get_invalid_credentials())
- # user normal is an admin of org 0 and a member of org 1 so should be able to put only org 1
+ # user normal is an admin of org 0 and a member of org 1 so should be able to put only org 1
self.put(urls[0], new_data1, expect=403, auth=self.get_normal_credentials())
- put_result = self.put(urls[1], new_data1, expect=200, auth=self.get_normal_credentials())
+ self.put(urls[1], new_data1, expect=200, auth=self.get_normal_credentials())
# get back org 1 and see if it changed
get_result = self.get(urls[1], expect=200, auth=self.get_normal_credentials())
diff --git a/awx/main/tests/projects.py b/awx/main/tests/projects.py
index f71562180f..20dae18704 100644
--- a/awx/main/tests/projects.py
+++ b/awx/main/tests/projects.py
@@ -2,7 +2,6 @@
# All Rights Reserved.
# Python
-import datetime
import getpass
import json
import os
@@ -15,15 +14,13 @@ import urlparse
# Django
from django.conf import settings
from django.contrib.auth.models import User
-import django.test
-from django.test.client import Client
from django.core.urlresolvers import reverse
from django.test.utils import override_settings
from django.utils.timezone import now
# AWX
-from awx.main.models import *
-from awx.main.tests.base import BaseTest, BaseTransactionTest
+from awx.main.models import * # noqa
+from awx.main.tests.base import BaseTransactionTest
from awx.main.tests.tasks import TEST_SSH_KEY_DATA, TEST_SSH_KEY_DATA_LOCKED, TEST_SSH_KEY_DATA_UNLOCK
from awx.main.utils import decrypt_field, update_scm_url
@@ -187,11 +184,11 @@ class ProjectsTest(BaseTransactionTest):
def test_dashboard(self):
url = reverse('api:dashboard_view')
# superuser can read dashboard.
- response = self.get(url, expect=200, auth=self.get_super_credentials())
+ self.get(url, expect=200, auth=self.get_super_credentials())
# org admin can read dashboard.
- response = self.get(url, expect=200, auth=self.get_normal_credentials())
+ self.get(url, expect=200, auth=self.get_normal_credentials())
# regular user can read dashboard.
- response = self.get(url, expect=200, auth=self.get_nobody_credentials())
+ self.get(url, expect=200, auth=self.get_nobody_credentials())
# anonymous/invalid user can't access dashboard.
self.get(url, expect=401)
self.get(url, expect=401, auth=self.get_invalid_credentials())
@@ -330,16 +327,16 @@ class ProjectsTest(BaseTransactionTest):
# can add teams
posted1 = self.post(all_teams, data=new_team, expect=201, auth=self.get_super_credentials())
- posted2 = self.post(all_teams, data=new_team, expect=400, auth=self.get_super_credentials())
+ self.post(all_teams, data=new_team, expect=400, auth=self.get_super_credentials())
# normal user is not an admin of organizations[0], but is for [1].
posted3 = self.post(all_teams, data=new_team2, expect=403, auth=self.get_normal_credentials())
new_team2['organization'] = self.organizations[1].pk
posted3 = self.post(all_teams, data=new_team2, expect=201, auth=self.get_normal_credentials())
- posted4 = self.post(all_teams, data=new_team2, expect=400, auth=self.get_normal_credentials())
- posted5 = self.post(all_teams, data=new_team3, expect=403, auth=self.get_other_credentials())
- url1 = posted1['url']
+ self.post(all_teams, data=new_team2, expect=400, auth=self.get_normal_credentials())
+ self.post(all_teams, data=new_team3, expect=403, auth=self.get_other_credentials())
+ posted1['url']
url3 = posted3['url']
- url5 = posted1['url']
+ posted1['url']
new_team = Team.objects.create(name='newTeam4', organization=self.organizations[1])
url = reverse('api:team_detail', args=(new_team.pk,))
@@ -356,11 +353,11 @@ class ProjectsTest(BaseTransactionTest):
# can list organization teams (filtered by user) -- this is an org admin function
org_teams = reverse('api:organization_teams_list', args=(self.organizations[1].pk,))
- data1 = self.get(org_teams, expect=401)
+ self.get(org_teams, expect=401)
data2 = self.get(org_teams, expect=403, auth=self.get_nobody_credentials())
- data3 = self.get(org_teams, expect=403, auth=self.get_other_credentials())
- data4 = self.get(org_teams, expect=200, auth=self.get_normal_credentials())
- data5 = self.get(org_teams, expect=200, auth=self.get_super_credentials())
+ self.get(org_teams, expect=403, auth=self.get_other_credentials())
+ self.get(org_teams, expect=200, auth=self.get_normal_credentials())
+ self.get(org_teams, expect=200, auth=self.get_super_credentials())
# can add teams to organizations
new_team1 = dict(name='super new team A')
@@ -368,16 +365,16 @@ class ProjectsTest(BaseTransactionTest):
new_team2 = dict(name='super new team B', organization=34567)
new_team3 = dict(name='super new team C')
- data1 = self.post(org_teams, new_team1, expect=401)
- data1 = self.post(org_teams, new_team1, expect=403, auth=self.get_nobody_credentials())
- data1 = self.post(org_teams, new_team1, expect=403, auth=self.get_other_credentials())
+ self.post(org_teams, new_team1, expect=401)
+ self.post(org_teams, new_team1, expect=403, auth=self.get_nobody_credentials())
+ self.post(org_teams, new_team1, expect=403, auth=self.get_other_credentials())
data2 = self.post(org_teams, new_team2, expect=201, auth=self.get_normal_credentials())
- data3 = self.post(org_teams, new_team3, expect=201, auth=self.get_super_credentials())
+ self.post(org_teams, new_team3, expect=201, auth=self.get_super_credentials())
# can remove teams from organizations
data2['disassociate'] = 1
url = data2['url']
- deleted = self.post(org_teams, data2, expect=204, auth=self.get_normal_credentials())
+ self.post(org_teams, data2, expect=204, auth=self.get_normal_credentials())
got = self.get(url, expect=404, auth=self.get_normal_credentials())
@@ -1320,7 +1317,7 @@ class ProjectUpdatesTest(BaseTransactionTest):
scm_username=scm_username,
scm_password=scm_password,
)
- should_error = bool('github.com' in scm_url and scm_username != 'git')
+ bool('github.com' in scm_url and scm_username != 'git')
self.check_project_update(project2, should_fail=None) # , should_error=should_error)
def test_scm_key_unlock_on_project_update(self):
diff --git a/awx/main/tests/schedules.py b/awx/main/tests/schedules.py
index 131a0c27f6..d0097a167e 100644
--- a/awx/main/tests/schedules.py
+++ b/awx/main/tests/schedules.py
@@ -3,20 +3,14 @@
# Python
import datetime
-import json
-import os
-import re
# Django
-from django.conf import settings
-from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
-from django.test.utils import override_settings
from django.utils.timezone import now
# AWX
-from awx.main.models import *
-from awx.main.tests.base import BaseTest, BaseTransactionTest
+from awx.main.models import * # noqa
+from awx.main.tests.base import BaseTest
__all__ = ['ScheduleTest']
@@ -76,7 +70,7 @@ class ScheduleTest(BaseTest):
self.first_inventory_source.source = 'ec2'
self.first_inventory_source.save()
- inv_read = Permission.objects.create(
+ Permission.objects.create(
inventory = self.first_inventory,
user = self.other_django_user,
permission_type = 'read'
@@ -123,7 +117,7 @@ class ScheduleTest(BaseTest):
def test_post_new_schedule(self):
first_url = reverse('api:inventory_source_schedules_list', args=(self.first_inventory_source.pk,))
- second_url = reverse('api:inventory_source_schedules_list', args=(self.second_inventory_source.pk,))
+ reverse('api:inventory_source_schedules_list', args=(self.second_inventory_source.pk,))
new_schedule = dict(name='newsched_1', description='newsched', enabled=True, rrule=GOOD_SCHEDULES[0])
@@ -132,31 +126,31 @@ class ScheduleTest(BaseTest):
# Super user can post a new schedule
with self.current_user(self.super_django_user):
- data = self.post(first_url, data=new_schedule, expect=201)
+ self.post(first_url, data=new_schedule, expect=201)
- # #admin can post
+ # #admin can post
admin_schedule = dict(name='newsched_2', description='newsched', enabled=True, rrule=GOOD_SCHEDULES[0])
- data = self.post(first_url, data=admin_schedule, expect=201, auth=self.get_normal_credentials())
+ self.post(first_url, data=admin_schedule, expect=201, auth=self.get_normal_credentials())
#normal user without write access can't post
unauth_schedule = dict(name='newsched_3', description='newsched', enabled=True, rrule=GOOD_SCHEDULES[0])
with self.current_user(self.other_django_user):
- data = self.post(first_url, data=unauth_schedule, expect=403)
+ self.post(first_url, data=unauth_schedule, expect=403)
#give normal user write access and then they can post
- inv_write = Permission.objects.create(
+ Permission.objects.create(
user = self.other_django_user,
inventory = self.first_inventory,
permission_type = PERM_INVENTORY_WRITE
)
auth_schedule = unauth_schedule
with self.current_user(self.other_django_user):
- data = self.post(first_url, data=auth_schedule, expect=201)
+ self.post(first_url, data=auth_schedule, expect=201)
# another org user shouldn't be able to post a schedule to this org's schedule
diff_user_schedule = dict(name='newsched_4', description='newsched', enabled=True, rrule=GOOD_SCHEDULES[0])
with self.current_user(self.diff_org_user):
- data = self.post(first_url, data=diff_user_schedule, expect=403)
+ self.post(first_url, data=diff_user_schedule, expect=403)
def test_post_schedule_to_non_cloud_source(self):
invalid_inv_url = reverse('api:inventory_source_schedules_list', args=(self.without_valid_source_inventory_source.pk,))
@@ -190,9 +184,9 @@ class ScheduleTest(BaseTest):
long_schedule = dict(name='long_schedule', description='going for a long time', enabled=True, rrule=UNTIL_SCHEDULE)
with self.current_user(self.normal_django_user):
- data = self.post(first_url, long_schedule, expect=201)
+ self.post(first_url, long_schedule, expect=201)
self.assertNotEquals(data['dtend'], None)
-
+
def test_schedule_filtering(self):
first_url = reverse('api:inventory_source_schedules_list', args=(self.first_inventory_source.pk,))
@@ -200,14 +194,14 @@ class ScheduleTest(BaseTest):
dtstart_str = start_time.strftime("%Y%m%dT%H%M%SZ")
new_schedule = dict(name="filter_schedule_1", enabled=True, rrule="DTSTART:%s RRULE:FREQ=MINUTELY;INTERVAL=10;COUNT=5" % dtstart_str)
with self.current_user(self.normal_django_user):
- data = self.post(first_url, new_schedule, expect=201)
+ self.post(first_url, new_schedule, expect=201)
self.assertTrue(Schedule.objects.enabled().between(now(), now() + datetime.timedelta(minutes=10)).count(), 1)
start_time = now()
dtstart_str = start_time.strftime("%Y%m%dT%H%M%SZ")
new_schedule_middle = dict(name="runnable_schedule", enabled=True, rrule="DTSTART:%s RRULE:FREQ=MINUTELY;INTERVAL=10;COUNT=5" % dtstart_str)
with self.current_user(self.normal_django_user):
- data = self.post(first_url, new_schedule_middle, expect=201)
+ self.post(first_url, new_schedule_middle, expect=201)
self.assertTrue(Schedule.objects.enabled().between(now() - datetime.timedelta(minutes=10), now() + datetime.timedelta(minutes=10)).count(), 1)
def test_rrule_validation(self):
diff --git a/awx/main/tests/scripts.py b/awx/main/tests/scripts.py
index 7b8bc63370..25a1cb07a0 100644
--- a/awx/main/tests/scripts.py
+++ b/awx/main/tests/scripts.py
@@ -4,18 +4,12 @@
# Python
import json
import os
-import StringIO
import subprocess
import sys
-import tempfile
import urlparse
-# Django
-from django.conf import settings
-from django.utils.timezone import now
-
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.tests.base import BaseLiveServerTest
__all__ = ['InventoryScriptTest']
diff --git a/awx/main/tests/tasks.py b/awx/main/tests/tasks.py
index 5967d1a9e3..831a98d18a 100644
--- a/awx/main/tests/tasks.py
+++ b/awx/main/tests/tasks.py
@@ -20,9 +20,8 @@ from django.utils.timezone import now
from crum import impersonate
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.tests.base import BaseLiveServerTest
-from awx.main.tasks import RunJob
TEST_PLAYBOOK = u'''
- name: test success
@@ -724,7 +723,7 @@ class RunJobTest(BaseCeleryTest):
self.assertEqual(job.processed_hosts.count(), 1)
def test_update_has_active_failures_when_inventory_changes(self):
- job = self.test_run_job_that_fails()
+ self.test_run_job_that_fails()
# Add host to new group (should set has_active_failures)
new_group = self.inventory.groups.create(name='new group')
self.assertFalse(new_group.has_active_failures)
@@ -1363,7 +1362,7 @@ class RunJobTest(BaseCeleryTest):
try:
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
- result = proc.communicate()
+ proc.communicate()
has_proot = bool(proc.returncode == 0)
except (OSError, ValueError):
has_proot = False
diff --git a/awx/main/tests/users.py b/awx/main/tests/users.py
index 9b32a4155a..ac980c525f 100644
--- a/awx/main/tests/users.py
+++ b/awx/main/tests/users.py
@@ -3,19 +3,16 @@
# Python
import datetime
-import json
import urllib
# Django
from django.conf import settings
from django.contrib.auth.models import User, Group
from django.db.models import Q
-import django.test
-from django.test.client import Client
from django.core.urlresolvers import reverse
# AWX
-from awx.main.models import *
+from awx.main.models import * # noqa
from awx.main.tests.base import BaseTest
__all__ = ['AuthTokenProxyTest', 'UsersTest', 'LdapTest']
@@ -95,7 +92,7 @@ class AuthTokenProxyTest(BaseTest):
# Verify we can access our own user information, from the remote address specified via HTTP_X_FORWARDED_FOR
client_kwargs = {'HTTP_X_FORWARDED_FOR': remote_addr_diff}
- response = self._get_me(expect=401, auth=auth_token, remote_addr=remote_addr, client_kwargs=client_kwargs)
+ self._get_me(expect=401, auth=auth_token, remote_addr=remote_addr, client_kwargs=client_kwargs)
self._get_me(expect=401, auth=auth_token, remote_addr=remote_addr_diff)
# should use ip address from other headers when HTTP_X_FORARDED_FOR is blank
@@ -142,7 +139,6 @@ class UsersTest(BaseTest):
def test_only_super_user_can_use_superuser_flag(self):
url = reverse('api:user_list')
new_super_user = dict(username='nommy', is_superuser=True)
- patch_new_super_user = dict(is_superuser=True)
self.post(url, expect=401, data=new_super_user, auth=self.get_invalid_credentials())
self.post(url, expect=403, data=new_super_user, auth=self.get_other_credentials())
self.post(url, expect=403, data=new_super_user, auth=self.get_normal_credentials())
@@ -274,7 +270,7 @@ class UsersTest(BaseTest):
# if superuser, CAN change lastname and username and such
self.put(detail_url, data, expect=200, auth=self.get_super_credentials())
-
+
# and user can still login
creds = self.get_other_credentials()
creds = ('newUsername', creds[1])
@@ -284,18 +280,18 @@ class UsersTest(BaseTest):
# and password is not stored as plaintext
data['password'] = 'newPassWord1234Changed'
- changed = self.put(detail_url, data, expect=200, auth=creds)
+ self.put(detail_url, data, expect=200, auth=creds)
creds = (creds[0], data['password'])
self.get(detail_url, expect=200, auth=creds)
-
+
# make another nobody user, and make sure they can't send any edits
obj = User.objects.create(username='new_user')
obj.set_password('new_user')
obj.save()
hacked = dict(password='asdf')
- changed = self.put(detail_url, hacked, expect=403, auth=('new_user', 'new_user'))
+ self.put(detail_url, hacked, expect=403, auth=('new_user', 'new_user'))
hacked = dict(username='asdf')
- changed = self.put(detail_url, hacked, expect=403, auth=('new_user', 'new_user'))
+ self.put(detail_url, hacked, expect=403, auth=('new_user', 'new_user'))
# password is not stored in plaintext
self.assertTrue(User.objects.get(pk=self.normal_django_user.pk).password != data['password'])
@@ -311,10 +307,10 @@ class UsersTest(BaseTest):
# verify that the login works...
self.get(url, expect=200, auth=('username', 'password'))
- # but a regular user cannot
+ # but a regular user cannot
data = self.post(url, expect=403, data=data2, auth=self.get_other_credentials())
-
- # a super user can also create new users
+
+ # a super user can also create new users
data = self.post(url, expect=201, data=data2, auth=self.get_super_credentials())
# verify that the login works
@@ -325,7 +321,7 @@ class UsersTest(BaseTest):
data = self.post(url, expect=201, data=mod, auth=self.get_super_credentials())
orig = User.objects.get(pk=self.super_django_user.pk)
self.assertTrue(orig.username != 'change')
-
+
def test_password_not_shown_in_get_operations_for_list_or_detail(self):
url = reverse('api:user_detail', args=(self.super_django_user.pk,))
data = self.get(url, expect=200, auth=self.get_super_credentials())
@@ -360,8 +356,8 @@ class UsersTest(BaseTest):
def test_super_user_can_delete_a_user_but_only_marked_inactive(self):
user_pk = self.normal_django_user.pk
url = reverse('api:user_detail', args=(user_pk,))
- data = self.delete(url, expect=204, auth=self.get_super_credentials())
- data = self.get(url, expect=404, auth=self.get_super_credentials())
+ self.delete(url, expect=204, auth=self.get_super_credentials())
+ self.get(url, expect=404, auth=self.get_super_credentials())
obj = User.objects.get(pk=user_pk)
self.assertEquals(obj.is_active, False)
@@ -369,9 +365,9 @@ class UsersTest(BaseTest):
url1 = reverse('api:user_detail', args=(self.super_django_user.pk,))
url2 = reverse('api:user_detail', args=(self.normal_django_user.pk,))
url3 = reverse('api:user_detail', args=(self.other_django_user.pk,))
- data = self.delete(url1, expect=403, auth=self.get_other_credentials())
- data = self.delete(url2, expect=403, auth=self.get_other_credentials())
- data = self.delete(url3, expect=403, auth=self.get_other_credentials())
+ self.delete(url1, expect=403, auth=self.get_other_credentials())
+ self.delete(url2, expect=403, auth=self.get_other_credentials())
+ self.delete(url3, expect=403, auth=self.get_other_credentials())
def test_there_exists_an_obvious_url_where_a_user_may_find_his_user_record(self):
url = reverse('api:user_me_list')
@@ -393,8 +389,8 @@ class UsersTest(BaseTest):
data['username'] += '2'
data['first_name'] += ' Awesome'
data['last_name'] += ', Jr.'
- response = self.put(url, data, expect=200,
- auth=self.get_super_credentials())
+ self.put(url, data, expect=200,
+ auth=self.get_super_credentials())
# FIXME: Test if super user mark himself as no longer a super user, or
# delete himself.
diff --git a/setup.cfg b/setup.cfg
index 60a00cde1e..b8dfcba657 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -17,5 +17,5 @@ ignore=E201,E203,E221,E225,E231,E241,E251,E261,E265,E302,E303,E501,W291,W391,W29
exclude=awx/lib/site-packages,awx/ui,awx/api/urls.py,awx/main/migrations,awx/main/tests/data
[flake8]
-ignore=E201,E203,E221,E225,E231,E241,E251,E261,E265,E302,E303,E501,W291,W391,W293
+ignore=E201,E203,E221,E225,E231,E241,E251,E261,E265,E302,E303,E501,W291,W391,W293,E731
exclude=awx/lib/site-packages,awx/ui,awx/api/urls.py,awx/main/migrations,awx/main/tests/data