Python3 Compatibility

Slight changes to ensure python3 compatibility, and tox running
with python3.

Change-Id: Ibe017a0f68e3779f199a56165d401cda876f710a
This commit is contained in:
Amelia Cordwell 2017-06-07 15:42:40 +12:00
parent f6ee662631
commit f7c62e5a87
13 changed files with 100 additions and 90 deletions

View File

@ -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):

View File

@ -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

View File

@ -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):

View File

@ -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):

View File

@ -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())

View File

@ -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

View File

@ -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)

View File

@ -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(

View File

@ -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 %}

View File

@ -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)

View File

@ -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")

View File

@ -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',
],

View File

@ -1,5 +1,5 @@
[tox]
envlist = py27,pep8,coverage
envlist = py27,py35,pep8,coverage
skipsdist = True
[testenv]