Skip to content

Commit 5a2a5cc

Browse files
committed
Merge branch 'dev' into add_client_certs
2 parents c2bd9f3 + 49bb303 commit 5a2a5cc

2 files changed

Lines changed: 148 additions & 0 deletions

File tree

maproulette/api/project.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,96 @@ def create_project(self, data):
8484
body=data)
8585
return response
8686

87+
def add_challenge_to_project(self, project_id, challenge_id):
88+
"""
89+
Method to add a challenge to a virtual project.
90+
91+
:param project_id: the id of the virtual project
92+
:param challenge_id: the id of the challenge being added
93+
:return: the API response from the POST request
94+
"""
95+
response = self.post(
96+
endpoint=f"/project/{project_id}/challenge/{challenge_id}/add"
97+
)
98+
return response
99+
100+
def remove_challenge_from_project(self, project_id, challenge_id):
101+
"""
102+
Method to remove a challenge from a virtual project.
103+
104+
:param project_id: the id of the virtual project
105+
:param challenge_id: the id of the challenge being removed
106+
:return: the API response from the POST request
107+
"""
108+
response = self.post(
109+
endpoint=f"/project/{project_id}/challenge/{challenge_id}/remove"
110+
)
111+
return response
112+
113+
def delete_project(self, project_id):
114+
"""
115+
Method to delete a project.
116+
117+
:param project_id: the id of the project being deleted
118+
:return: the API response form the DELETE request
119+
"""
120+
response = self.delete(
121+
endpoint=f"/project/{project_id}"
122+
)
123+
return response
124+
125+
def update_project(self, project_id, data):
126+
"""
127+
Method to update an existing project
128+
129+
:param project_id: the id of the project being updated
130+
:param data: the data to use to update the project
131+
:return: the API response from the PUT request
132+
"""
133+
if self.is_project_model(data):
134+
data = ProjectModel.to_dict(data)
135+
response = self.put(
136+
endpoint=f"/project/{project_id}",
137+
body=data)
138+
return response
139+
140+
def get_projects_by_ids(self, project_ids):
141+
"""
142+
Method to retrieve projects from comma separated list of ids
143+
144+
:param project_ids: comma separated list of project ids to be retrieved
145+
:return: the API response from the GET request
146+
"""
147+
query_params = {
148+
"projectIds": project_ids
149+
}
150+
response = self.get(
151+
endpoint=f"/projectsById",
152+
params=query_params
153+
)
154+
return response
155+
156+
def get_random_tasks(self, project_id, limit=1, proximity=-1, search=''):
157+
"""
158+
Method to retrieve random tasks from a project.
159+
160+
:param project_id: the id of the parent project of tasks
161+
:param limit: limit amount of results returned
162+
:param proximity: task to find based on proximity of that task
163+
:param search: a search parameter object stored in a cookie
164+
:return: the API response form the GET request
165+
"""
166+
query_params = {
167+
"limit": str(limit),
168+
"proximity": str(proximity),
169+
"search": str(search)
170+
}
171+
response = self.get(
172+
endpoint=f"/project/{project_id}/tasks",
173+
params=query_params
174+
)
175+
return response
176+
87177
@staticmethod
88178
def is_project_model(input_object):
89179
"""Method to determine whether user input is a valid project model

tests/test_project_api.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,61 @@ def test_create_project(self, mock_request, api_instance=api):
4444
mock_request.return_value.status_code = '200'
4545
response = api_instance.create_project(test_project_model)
4646
self.assertEqual(response['status'], '200')
47+
48+
@patch('maproulette.api.maproulette_server.requests.Session.post')
49+
def test_add_challenge_to_project(self, mock_request, api_instance=api):
50+
test_virtual_project_model = maproulette.ProjectModel(name='Test Virtual Project Name',
51+
id=1234,
52+
is_virtual=True)
53+
test_challenge_model = maproulette.ChallengeModel(name='Test Challenge Name',
54+
id=246)
55+
test_virtual_project_id = test_virtual_project_model.id
56+
test_challenge_id = test_challenge_model.id
57+
mock_request.return_value.status_code = '200'
58+
response = api_instance.add_challenge_to_project(test_virtual_project_id, test_challenge_id)
59+
self.assertEqual(response['status'], '200')
60+
61+
@patch('maproulette.api.maproulette_server.requests.Session.post')
62+
def test_remove_challenge_from_project(self, mock_request, api_instance=api):
63+
test_virtual_project_model = maproulette.ProjectModel(name='Test Virtual Project Name',
64+
id=1234,
65+
is_virtual=True)
66+
test_challenge_model = maproulette.ChallengeModel(name='Test Challenge Name', id=246)
67+
test_virtual_project_id = test_virtual_project_model.id
68+
test_challenge_id = test_challenge_model.id
69+
mock_request.return_value.status_code = '200'
70+
response = api_instance.remove_challenge_from_project(test_virtual_project_id, test_challenge_id)
71+
self.assertEqual(response['status'], '200')
72+
73+
@patch('maproulette.api.maproulette_server.requests.Session.delete')
74+
def test_delete_project(self, mock_request, api_instance=api):
75+
test_project_model = maproulette.ProjectModel(name='Test Project Name', id=1234)
76+
test_project_id = test_project_model.id
77+
mock_request.return_value.status_code = '200'
78+
response = api_instance.delete_project(test_project_id)
79+
self.assertEqual(response['status'], '200')
80+
81+
@patch('maproulette.api.maproulette_server.requests.Session.put')
82+
def test_update_project(self, mock_request, api_instance=api):
83+
test_project_model = maproulette.ProjectModel(name='Test Project Name', id=1234)
84+
test_updated_project_model = maproulette.ProjectModel(name='Test Updated Project Name')
85+
test_project_model_id = test_project_model.id
86+
mock_request.return_value.status_code = '200'
87+
response = api_instance.update_project(test_project_model_id, test_updated_project_model)
88+
self.assertEqual(response['status'], '200')
89+
90+
@patch('maproulette.api.maproulette_server.requests.Session.get')
91+
def test_get_project_by_ids(self, mock_request, api_instance=api):
92+
test_project_ids = '1234,2468,1356'
93+
mock_request.return_value.status_code = '200'
94+
response = api_instance.get_projects_by_ids(test_project_ids)
95+
self.assertEqual(response['status'], '200')
96+
97+
@patch('maproulette.api.maproulette_server.requests.Session.get')
98+
def test_get_random_tasks(self, mock_request, api_instance=api):
99+
test_project_model = maproulette.ProjectModel(name='Test Project Name',
100+
id=1234)
101+
test_project_id = test_project_model.id
102+
mock_request.return_value.status_code = '200'
103+
response = api_instance.get_random_tasks(test_project_id)
104+
self.assertEqual(response['status'], '200')

0 commit comments

Comments
 (0)