Python3 Compatibility
Slight changes to ensure python3 compatibility, and tox running with python3. Change-Id: Ibe017a0f68e3779f199a56165d401cda876f710a
This commit is contained in:
parent
f6ee662631
commit
f7c62e5a87
|
@ -18,7 +18,7 @@ from django.conf import settings
|
|||
|
||||
from keystoneclient import exceptions as ks_exceptions
|
||||
|
||||
from openstack_clients import get_keystoneclient
|
||||
from adjutant.actions.openstack_clients import get_keystoneclient
|
||||
|
||||
|
||||
def get_managable_roles(user_roles):
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
from adjutant.actions.v1.base import BaseAction, ProjectMixin
|
||||
from django.conf import settings
|
||||
from adjutant.actions import openstack_clients, user_store
|
||||
|
||||
import six
|
||||
|
||||
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
from django.conf import settings
|
||||
from django.db import models
|
||||
|
||||
import six
|
||||
|
||||
from adjutant.actions import user_store
|
||||
from adjutant.actions.v1.base import (
|
||||
UserNameAction, UserIdAction, UserMixin, ProjectMixin)
|
||||
|
@ -175,7 +177,7 @@ class ResetUserPasswordAction(UserNameAction, UserMixin):
|
|||
roles = id_manager.get_all_roles(self.user)
|
||||
|
||||
user_roles = []
|
||||
for roles in roles.itervalues():
|
||||
for roles in six.itervalues(roles):
|
||||
user_roles.extend(role.name for role in roles)
|
||||
|
||||
if set(self.blacklist) & set(user_roles):
|
||||
|
|
|
@ -14,8 +14,8 @@
|
|||
|
||||
|
||||
import mock
|
||||
import six
|
||||
import copy
|
||||
import six
|
||||
|
||||
from django.conf import settings
|
||||
from django.test.utils import override_settings
|
||||
|
@ -110,7 +110,7 @@ class FakeManager(object):
|
|||
roles = temp_cache['projects'][project.name].roles
|
||||
users = []
|
||||
|
||||
for user_id, user_roles in roles.iteritems():
|
||||
for user_id, user_roles in six.iteritems(roles):
|
||||
user = self.get_user(user_id)
|
||||
user.roles = []
|
||||
|
||||
|
@ -318,7 +318,7 @@ class modify_dict_settings(override_settings):
|
|||
self.operations = args[0]
|
||||
else:
|
||||
assert not args
|
||||
self.operations = list(kwargs.items())
|
||||
self.operations = list(six.iteritems(kwargs))
|
||||
super(override_settings, self).__init__()
|
||||
|
||||
def save_options(self, test_func):
|
||||
|
|
|
@ -46,7 +46,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.get(url, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'errors': ['This token does not exist or has expired.']})
|
||||
|
||||
def test_no_token_post(self):
|
||||
|
@ -57,7 +57,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'errors': ['This token does not exist or has expired.']})
|
||||
|
||||
def test_task_get(self):
|
||||
|
@ -100,7 +100,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.get(url, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
||||
self.assertEqual(
|
||||
response.data, {'errors': ['No task with this id.']})
|
||||
response.json(), {'errors': ['No task with this id.']})
|
||||
|
||||
def test_no_task_post(self):
|
||||
"""
|
||||
|
@ -118,7 +118,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
||||
self.assertEqual(
|
||||
response.data, {'errors': ['No task with this id.']})
|
||||
response.json(), {'errors': ['No task with this id.']})
|
||||
|
||||
def test_token_expired_post(self):
|
||||
"""
|
||||
|
@ -139,7 +139,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
|
||||
new_token = Token.objects.all()[0]
|
||||
|
@ -150,7 +150,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'errors': ['This token does not exist or has expired.']})
|
||||
self.assertEqual(0, Token.objects.count())
|
||||
|
||||
|
@ -173,7 +173,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
|
||||
new_token = Token.objects.all()[0]
|
||||
|
@ -183,7 +183,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'errors': ['This token does not exist or has expired.']})
|
||||
self.assertEqual(0, Token.objects.count())
|
||||
|
||||
|
@ -214,7 +214,7 @@ class AdminAPITests(APITestCase):
|
|||
headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'errors': ['This task has already been completed.']})
|
||||
|
||||
def test_task_update(self):
|
||||
|
@ -261,14 +261,14 @@ class AdminAPITests(APITestCase):
|
|||
headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'notes': ['Task successfully updated.']})
|
||||
|
||||
response = self.client.post(url, {'approved': True}, format='json',
|
||||
headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'notes': ['created token']})
|
||||
|
||||
def test_notification_acknowledge(self):
|
||||
|
@ -297,14 +297,14 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.get(url, headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data["notifications"][0]['task'],
|
||||
response.json()["notifications"][0]['task'],
|
||||
new_task.uuid)
|
||||
|
||||
url = ("/v1/notifications/%s/" %
|
||||
response.data["notifications"][0]['uuid'])
|
||||
response.json()["notifications"][0]['uuid'])
|
||||
data = {'acknowledged': True}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.data,
|
||||
self.assertEqual(response.json(),
|
||||
{'notes': ['Notification acknowledged.']})
|
||||
|
||||
url = "/v1/notifications"
|
||||
|
@ -316,7 +316,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.get(
|
||||
url, params, format='json', headers=headers
|
||||
)
|
||||
self.assertEqual(response.data, {'notifications': []})
|
||||
self.assertEqual(response.json(), {'notifications': []})
|
||||
|
||||
def test_notification_acknowledge_list(self):
|
||||
"""
|
||||
|
@ -346,10 +346,10 @@ class AdminAPITests(APITestCase):
|
|||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
|
||||
url = "/v1/notifications"
|
||||
notifications = response.data["notifications"]
|
||||
notifications = response.json()["notifications"]
|
||||
data = {'notifications': [note['uuid'] for note in notifications]}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.data,
|
||||
self.assertEqual(response.json(),
|
||||
{'notes': ['Notifications acknowledged.']})
|
||||
|
||||
url = "/v1/notifications"
|
||||
|
@ -361,7 +361,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.get(
|
||||
url, params, format='json', headers=headers
|
||||
)
|
||||
self.assertEqual(response.data, {'notifications': []})
|
||||
self.assertEqual(response.json(), {'notifications': []})
|
||||
|
||||
def test_token_expired_delete(self):
|
||||
"""
|
||||
|
@ -389,7 +389,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
|
||||
url = "/v1/actions/ResetPassword"
|
||||
|
@ -397,7 +397,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
|
||||
tokens = Token.objects.all()
|
||||
|
@ -419,7 +419,7 @@ class AdminAPITests(APITestCase):
|
|||
url = "/v1/tokens/"
|
||||
response = self.client.delete(url, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data,
|
||||
self.assertEqual(response.json(),
|
||||
{'notes': ['Deleted all expired tokens.']})
|
||||
self.assertEqual(Token.objects.count(), 1)
|
||||
|
||||
|
@ -442,7 +442,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
|
||||
task = Task.objects.all()[0]
|
||||
|
@ -463,7 +463,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, data, format='json',
|
||||
headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data,
|
||||
self.assertEqual(response.json(),
|
||||
{'notes': ['Token reissued.']})
|
||||
self.assertEqual(Token.objects.count(), 1)
|
||||
new_token = Token.objects.all()[0]
|
||||
|
@ -495,7 +495,7 @@ class AdminAPITests(APITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
task = Task.objects.all()[0]
|
||||
new_token = Token.objects.all()[0]
|
||||
|
@ -507,7 +507,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, data, format='json',
|
||||
headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data,
|
||||
self.assertEqual(response.json(),
|
||||
{'notes': ['Token reissued.']})
|
||||
self.assertEqual(Token.objects.count(), 1)
|
||||
new_token = Token.objects.all()[0]
|
||||
|
@ -518,7 +518,7 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, data, format='json',
|
||||
headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
|
||||
self.assertEqual(response.data,
|
||||
self.assertEqual(response.json(),
|
||||
{'errors': ['No task with this id.']})
|
||||
|
||||
def test_cancel_task(self):
|
||||
|
@ -657,7 +657,7 @@ class AdminAPITests(APITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
new_task = Task.objects.all()[0]
|
||||
url = "/v1/tasks/" + new_task.uuid
|
||||
|
@ -700,7 +700,7 @@ class AdminAPITests(APITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
new_task = Task.objects.all()[0]
|
||||
url = "/v1/tasks/" + new_task.uuid
|
||||
|
@ -753,7 +753,7 @@ class AdminAPITests(APITestCase):
|
|||
url = "/v1/tasks"
|
||||
response = self.client.get(url, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data['tasks']), 3)
|
||||
self.assertEqual(len(response.json()['tasks']), 3)
|
||||
|
||||
def test_task_list_ordering(self):
|
||||
"""
|
||||
|
@ -802,12 +802,12 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.get(url, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
sorted_list = sorted(
|
||||
response.data['tasks'],
|
||||
response.json()['tasks'],
|
||||
key=lambda k: k['created_on'],
|
||||
reverse=True)
|
||||
|
||||
for i, task in enumerate(sorted_list):
|
||||
self.assertEqual(task, response.data['tasks'][i])
|
||||
self.assertEqual(task, response.json()['tasks'][i])
|
||||
|
||||
def test_task_list_filter(self):
|
||||
"""
|
||||
|
@ -862,7 +862,7 @@ class AdminAPITests(APITestCase):
|
|||
url, params, format='json', headers=headers
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data['tasks']), 1)
|
||||
self.assertEqual(len(response.json()['tasks']), 1)
|
||||
|
||||
params = {
|
||||
"filters": json.dumps({
|
||||
|
@ -873,7 +873,7 @@ class AdminAPITests(APITestCase):
|
|||
url, params, format='json', headers=headers
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data['tasks']), 2)
|
||||
self.assertEqual(len(response.json()['tasks']), 2)
|
||||
|
||||
# TODO(adriant): enable this test again when filters are properly
|
||||
# blacklisted.
|
||||
|
@ -933,7 +933,7 @@ class AdminAPITests(APITestCase):
|
|||
url, params, format='json', headers=headers
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data['tasks']), 0)
|
||||
self.assertEqual(len(response.json()['tasks']), 0)
|
||||
|
||||
def test_task_list_filter_formating(self):
|
||||
"""
|
||||
|
@ -1055,6 +1055,6 @@ class AdminAPITests(APITestCase):
|
|||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
self.assertEqual(0, Token.objects.count())
|
||||
|
|
|
@ -59,7 +59,7 @@ class OpenstackAPITests(APITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
new_token = Token.objects.all()[0]
|
||||
url = "/v1/tokens/" + new_token.token
|
||||
|
@ -92,7 +92,7 @@ class OpenstackAPITests(APITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
new_token = Token.objects.all()[0]
|
||||
url = "/v1/tokens/" + new_token.token
|
||||
|
@ -105,11 +105,11 @@ class OpenstackAPITests(APITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
response = self.client.get(url, headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data['users']), 2)
|
||||
self.assertEqual(len(response.json()['users']), 2)
|
||||
|
||||
def test_user_list_managable(self):
|
||||
"""
|
||||
|
@ -152,9 +152,9 @@ class OpenstackAPITests(APITestCase):
|
|||
url = "/v1/openstack/users"
|
||||
response = self.client.get(url, headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data['users']), 2)
|
||||
self.assertEqual(len(response.json()['users']), 2)
|
||||
|
||||
for st_user in response.data['users']:
|
||||
for st_user in response.json()['users']:
|
||||
if st_user['id'] == user.id:
|
||||
self.assertFalse(st_user['manageable'])
|
||||
if st_user['id'] == user2.id:
|
||||
|
@ -196,7 +196,7 @@ class OpenstackAPITests(APITestCase):
|
|||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
|
||||
new_token = Token.objects.all()[0]
|
||||
|
@ -239,7 +239,7 @@ class OpenstackAPITests(APITestCase):
|
|||
response = self.client.delete(url, data,
|
||||
format='json', headers=admin_headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data,
|
||||
self.assertEqual(response.json(),
|
||||
{'notes': ['Task completed successfully.']})
|
||||
|
||||
@override_settings(USERNAME_IS_EMAIL=False)
|
||||
|
@ -269,7 +269,7 @@ class OpenstackAPITests(APITestCase):
|
|||
'project_id': 'test_project_id', 'username': 'user_name'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
new_token = Token.objects.all()[0]
|
||||
url = "/v1/tokens/" + new_token.token
|
||||
|
|
|
@ -60,14 +60,15 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertEqual(response.data, {'email': ['This field is required.']})
|
||||
self.assertEqual(response.json(),
|
||||
{'email': ['This field is required.']})
|
||||
|
||||
data = {'email': "not_a_valid_email", 'roles': ["not_a_valid_role"],
|
||||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertEqual(
|
||||
response.data, {
|
||||
response.json(), {
|
||||
'email': ['Enter a valid email address.'],
|
||||
'roles': ['"not_a_valid_role" is not a valid choice.']})
|
||||
|
||||
|
@ -97,7 +98,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertEqual(mail.outbox[0].subject, 'invite_user')
|
||||
|
@ -131,7 +132,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertEqual(response.data, {'errors': ['actions invalid']})
|
||||
self.assertEqual(response.json(), {'errors': ['actions invalid']})
|
||||
|
||||
def test_new_user_not_my_project(self):
|
||||
"""
|
||||
|
@ -167,7 +168,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'errors': ["Credentials incorrect or none given."]}
|
||||
)
|
||||
|
||||
|
@ -202,7 +203,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
new_token = Token.objects.all()[0]
|
||||
url = "/v1/tokens/" + new_token.token
|
||||
|
@ -244,7 +245,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'notes': ['Task completed successfully.']})
|
||||
|
||||
def test_new_project(self):
|
||||
|
@ -273,7 +274,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'notes': ['created token']}
|
||||
)
|
||||
|
||||
|
@ -316,7 +317,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'errors': ['Cannot approve an invalid task. ' +
|
||||
'Update data and rerun pre_approve.']})
|
||||
|
||||
|
@ -358,7 +359,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'notes': ['Task completed successfully.']}
|
||||
)
|
||||
|
||||
|
@ -394,7 +395,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'notes': ['created token']}
|
||||
)
|
||||
|
||||
|
@ -405,7 +406,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertEqual(
|
||||
response.data,
|
||||
response.json(),
|
||||
{'errors': ['actions invalid']}
|
||||
)
|
||||
|
||||
|
@ -429,7 +430,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
|
||||
new_token = Token.objects.all()[0]
|
||||
|
@ -461,14 +462,14 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
|
||||
# Submit password reset again
|
||||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
|
||||
# Verify the first token doesn't work
|
||||
|
@ -499,7 +500,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
|
||||
def test_notification_createproject(self):
|
||||
|
@ -529,7 +530,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.get(url, headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notifications'][0]['task'],
|
||||
response.json()['notifications'][0]['task'],
|
||||
new_task.uuid)
|
||||
|
||||
def test_duplicate_tasks_new_project(self):
|
||||
|
@ -581,7 +582,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_409_CONFLICT)
|
||||
|
||||
|
@ -589,7 +590,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_409_CONFLICT)
|
||||
|
||||
|
@ -622,7 +623,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
|
||||
new_task = Task.objects.all()[0]
|
||||
self.assertEqual(
|
||||
response.data['task'],
|
||||
response.json()['task'],
|
||||
new_task.uuid)
|
||||
|
||||
def test_return_task_id_if_admin_fail(self):
|
||||
|
@ -652,7 +653,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
|
||||
self.assertFalse(response.data.get('task'))
|
||||
self.assertFalse(response.json().get('task'))
|
||||
|
||||
def test_update_email_task(self):
|
||||
"""
|
||||
|
@ -682,7 +683,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
new_token = Token.objects.all()[0]
|
||||
url = "/v1/tokens/" + new_token.token
|
||||
|
@ -716,7 +717,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertEqual(response.data,
|
||||
self.assertEqual(response.json(),
|
||||
{'new_email': [u'Enter a valid email address.']})
|
||||
|
||||
@override_settings(USERNAME_IS_EMAIL=True)
|
||||
|
@ -751,7 +752,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertEqual(response.data, ['actions invalid'])
|
||||
self.assertEqual(response.json(), ['actions invalid'])
|
||||
self.assertEqual(len(Token.objects.all()), 0)
|
||||
|
||||
self.assertEqual(len(mail.outbox), 0)
|
||||
|
@ -787,7 +788,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
|
||||
|
@ -846,7 +847,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
new_token = Token.objects.all()[0]
|
||||
url = "/v1/tokens/" + new_token.token
|
||||
|
@ -884,7 +885,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
'roles': ["_member_"], 'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
self.assertEquals(mail.outbox[0].subject, 'invite_user')
|
||||
|
@ -930,7 +931,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(
|
||||
response.data['notes'],
|
||||
response.json()['notes'],
|
||||
['If user with email exists, reset token will be issued.'])
|
||||
|
||||
self.assertEqual(len(mail.outbox), 1)
|
||||
|
@ -959,7 +960,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
'project_name': 'new_project'}
|
||||
response = self.client.post(url, data, format='json')
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['task created']})
|
||||
self.assertEqual(response.json(), {'notes': ['task created']})
|
||||
|
||||
new_task = Task.objects.all()[0]
|
||||
url = "/v1/tasks/" + new_task.uuid
|
||||
|
@ -1054,7 +1055,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
'roles': ['_member_']}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
self.assertEqual(len(mail.outbox), 2)
|
||||
|
||||
|
@ -1123,7 +1124,7 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(response.data, {'notes': ['created token']})
|
||||
self.assertEqual(response.json(), {'notes': ['created token']})
|
||||
|
||||
self.assertEqual(len(mail.outbox), 2)
|
||||
|
||||
|
@ -1177,5 +1178,5 @@ class TaskViewTests(AdjutantAPITestCase):
|
|||
'project_id': 'test_project_id'}
|
||||
response = self.client.post(url, data, format='json', headers=headers)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertEqual(response.data, {'errors': ['actions invalid']})
|
||||
self.assertEqual(response.json(), {'errors': ['actions invalid']})
|
||||
self.assertEqual(len(mail.outbox), 0)
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
|
||||
import hashlib
|
||||
import json
|
||||
import six
|
||||
|
||||
from datetime import timedelta
|
||||
from smtplib import SMTPException
|
||||
from uuid import uuid4
|
||||
|
@ -160,7 +162,8 @@ def create_notification(task, notes, error=False, engines=True):
|
|||
class_conf = settings.TASK_SETTINGS.get(
|
||||
task.task_type, settings.DEFAULT_TASK_SETTINGS)
|
||||
|
||||
for note_engine, conf in class_conf.get('notifications', {}).iteritems():
|
||||
for note_engine, conf in six.iteritems(
|
||||
class_conf.get('notifications', {})):
|
||||
if error:
|
||||
conf = conf.get('error', {})
|
||||
else:
|
||||
|
@ -192,7 +195,7 @@ def create_task_hash(task_type, action_list):
|
|||
else:
|
||||
raise
|
||||
|
||||
return hashlib.sha256(str(hashable_list)).hexdigest()
|
||||
return hashlib.sha256(str(hashable_list).encode('utf-8')).hexdigest()
|
||||
|
||||
|
||||
# "{'filters': {'fieldname': { 'operation': 'value'}}
|
||||
|
@ -212,8 +215,8 @@ def parse_filters(func, *args, **kwargs):
|
|||
cleaned_filters = {}
|
||||
try:
|
||||
filters = json.loads(filters)
|
||||
for field, operations in filters.iteritems():
|
||||
for operation, value in operations.iteritems():
|
||||
for field, operations in six.iteritems(filters):
|
||||
for operation, value in six.iteritems(operations):
|
||||
cleaned_filters['%s__%s' % (field, operation)] = value
|
||||
except (ValueError, AttributeError):
|
||||
return Response(
|
||||
|
|
|
@ -17,7 +17,7 @@ created_on: {{ task.created_on }}
|
|||
approved_on: {{ task.approved_on }}
|
||||
completed_on: {{ task.completed_on }}
|
||||
action_notes:
|
||||
{% for action, notes in task.action_notes.iteritems %}- {{ action }}
|
||||
{% for action, notes in task.action_notes.items %}- {{ action }}
|
||||
{% for note in notes %} - {{ note }}
|
||||
{% endfor %}{% endfor %}
|
||||
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import six
|
||||
|
||||
from copy import deepcopy
|
||||
|
||||
|
||||
|
@ -25,7 +27,7 @@ def dict_merge(a, b):
|
|||
if not isinstance(b, dict):
|
||||
return b
|
||||
result = deepcopy(a)
|
||||
for k, v in b.iteritems():
|
||||
for k, v in six.iteritems(b):
|
||||
if k in result and isinstance(result[k], dict):
|
||||
result[k] = dict_merge(result[k], v)
|
||||
else:
|
||||
|
@ -39,7 +41,7 @@ def setup_task_settings(task_defaults, action_defaults, task_settings):
|
|||
settings for each task_type.
|
||||
"""
|
||||
new_task_settings = {}
|
||||
for task, settings in task_settings.iteritems():
|
||||
for task, settings in six.iteritems(task_settings):
|
||||
task_setting = deepcopy(task_defaults)
|
||||
task_setting['action_settings'] = deepcopy(action_defaults)
|
||||
new_task_settings[task] = dict_merge(task_setting, settings)
|
||||
|
|
|
@ -24,7 +24,7 @@ https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
|
|||
import os
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
from django.conf import settings
|
||||
from urlparse import urlparse
|
||||
from six.moves.urllib.parse import urlparse
|
||||
from keystonemiddleware.auth_token import AuthProtocol
|
||||
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "adjutant.settings")
|
||||
|
|
1
setup.py
1
setup.py
|
@ -23,6 +23,7 @@ setup(
|
|||
'License :: OSI Approved :: Apache Software License',
|
||||
'Framework :: Django :: 1.11',
|
||||
'Programming Language :: Python :: 2.7',
|
||||
'Programming Language :: Python :: 3.5',
|
||||
'Environment :: OpenStack',
|
||||
],
|
||||
|
||||
|
|
Loading…
Reference in New Issue