Skip to content

Commit 4bc0b06

Browse files
committed
added project delete functions
1 parent 49a6664 commit 4bc0b06

File tree

4 files changed

+69
-0
lines changed

4 files changed

+69
-0
lines changed

CmixAPIClient/api.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,22 @@ def api_get(self, endpoint, error=''):
155155
)
156156
return response.json()
157157

158+
def api_delete(self, endpoint, error=''):
159+
self.check_auth_headers()
160+
url = '{}/{}'.format(CMIX_SERVICES['survey'][self.url_type], endpoint)
161+
response = requests.delete(url, headers=self._authentication_headers)
162+
if response.status_code != 200:
163+
if '' == error:
164+
error = 'CMIX returned a non-200 response code'
165+
raise CmixError(
166+
'{}: {} and error {}'.format(
167+
error,
168+
response.status_code,
169+
response.text
170+
)
171+
)
172+
return response.json()
173+
158174
def get_surveys(self, status, *args, **kwargs):
159175
'''kwargs:
160176

CmixAPIClient/project.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,18 @@ def __init__(self, client, project_id):
1111
self.client = client
1212
self.project_id = project_id
1313

14+
def delete_project(self):
15+
project_endpoint = 'projects/{}'.format(self.project_id)
16+
project_error = 'CMIX returned a non-200 response code while deleting project'
17+
project_response = self.client.api_delete(project_endpoint, project_error)
18+
return project_response
19+
20+
def delete_group(self, group_id):
21+
project_endpoint = 'projects/{}/groups/{}'.format(self.project_id, group_id)
22+
project_error = 'CMIX returned a non-200 response code while deleting group'
23+
project_response = self.client.api_delete(project_endpoint, project_error)
24+
return project_response
25+
1426
def get_project(self):
1527
project_endpoint = 'projects/{}'.format(self.project_id)
1628
project_error = 'CMIX returned a non-200 response code while getting project'

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ A Python client library for the [Dynata Cmix API](https://wiki2.criticalmix.net/
5050

5151
### CmixProject
5252

53+
delete_group(group_id)
54+
delete_project()
5355
get_full_links()
5456
get_groups()
5557
get_links()

tests/test_project.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,45 @@ def helper_get(self, function_name, endpoint):
4343
with self.assertRaises(CmixError):
4444
func()
4545

46+
def helper_delete(self, function_name, endpoint, group_id=None):
47+
project = CmixProject(self.cmix_api, self.project_id)
48+
func = getattr(project, function_name)
49+
50+
# success case
51+
with mock.patch('CmixAPIClient.api.requests') as mock_request:
52+
mock_delete = mock.Mock()
53+
mock_delete.status_code = 200
54+
mock_delete.json.return_value = {}
55+
mock_request.delete.return_value = mock_delete
56+
57+
if group_id is not None:
58+
func(group_id)
59+
else:
60+
func()
61+
62+
base_url = CMIX_SERVICES['survey']['BASE_URL']
63+
project_url = '{}/projects{}'.format(base_url, endpoint)
64+
mock_request.delete.assert_any_call(project_url, headers=self.cmix_api._authentication_headers)
65+
66+
# error case (survey not found)
67+
with mock.patch('CmixAPIClient.api.requests') as mock_request:
68+
mock_delete = mock.Mock()
69+
mock_delete.status_code = 404
70+
mock_delete.json.return_value = {}
71+
mock_request.delete.return_value = mock_delete
72+
73+
with self.assertRaises(CmixError):
74+
if group_id is not None:
75+
func(group_id)
76+
else:
77+
func()
78+
79+
def test_delete_group(self):
80+
self.helper_delete('delete_group', '/{}/groups/{}'.format(self.project_id, 13), 13)
81+
82+
def test_delete_project(self):
83+
self.helper_delete('delete_project', '/{}'.format(self.project_id))
84+
4685
def test_get_project(self):
4786
self.helper_get('get_project', '/{}'.format(self.project_id))
4887

0 commit comments

Comments
 (0)