Skip to content

Commit b594eab

Browse files
committed
remove old hack for http create method
1 parent afc75c7 commit b594eab

File tree

4 files changed

+9
-17
lines changed

4 files changed

+9
-17
lines changed

redminelib/managers.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -176,17 +176,8 @@ def create(self, **fields):
176176
for index, attachment in enumerate(data['attachments']):
177177
data['attachments'][index]['token'] = self.redmine.upload(attachment.get('path', ''))
178178

179-
# Almost all resources are created via POST method, but some
180-
# resources are created via PUT, so we should check for this
181-
try:
182-
response = self.redmine.engine.request('post', url, data=data)
183-
except exceptions.ResourceNotFoundError:
184-
response = self.redmine.engine.request('put', url, data=data)
185-
186-
try:
187-
resource = self.to_resource(response[self.container])
188-
except TypeError:
189-
raise exceptions.ValidationError('Resource already exists') # fix for repeated PUT requests
179+
response = self.redmine.engine.request(self.resource_class.http_method_create, url, data=data)
180+
resource = self.to_resource(response[self.container])
190181

191182
self.params = formatter.used_kwargs
192183
self.url = self.redmine.url + self.resource_class.query_one.format(resource.internal_id, **fields)
@@ -227,7 +218,7 @@ def update(self, resource_id, **fields):
227218
for index, attachment in enumerate(data['attachments']):
228219
data['attachments'][index]['token'] = self.redmine.upload(attachment.get('path', ''))
229220

230-
return self.redmine.engine.request('put', url, data=data)
221+
return self.redmine.engine.request(self.resource_class.http_method_update, url, data=data)
231222

232223
def delete(self, resource_id, **params):
233224
"""
@@ -245,7 +236,8 @@ def delete(self, resource_id, **params):
245236
except KeyError as exception:
246237
raise exceptions.ValidationError('{0} argument is required'.format(exception))
247238

248-
return self.redmine.engine.request('delete', url, params=self.resource_class.bulk_decode(params, self))
239+
return self.redmine.engine.request(
240+
self.resource_class.http_method_delete, url, params=self.resource_class.bulk_decode(params, self))
249241

250242
def search(self, query, **options):
251243
"""

redminelib/resources/base.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ class BaseResource(utilities.with_metaclass(Registrar)):
9494
query_update = None
9595
query_delete = None
9696
search_hints = None
97+
http_method_create = 'post'
98+
http_method_update = 'put'
99+
http_method_delete = 'delete'
97100

98101
_repr = [['id', 'name']]
99102
_includes = []

redminelib/resources/standard.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ class WikiPage(BaseResource):
229229
query_update = '/projects/{project_id}/wiki/{0}.json'
230230
query_delete = '/projects/{project_id}/wiki/{0}.json'
231231
search_hints = ['wiki-page']
232+
http_method_create = 'put'
232233

233234
_repr = [['title']]
234235
_includes = ['attachments']

tests/test_managers.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,6 @@ def test_manager_is_picklable(self):
181181
self.assertEqual(project.url, unpickled_project.url)
182182
self.assertEqual(project.params['foo'], unpickled_project.params['foo'])
183183

184-
def test_create_validation_exception_via_put(self):
185-
self.set_patch_side_effect([mock.Mock(status_code=404, history=[]), mock.Mock(status_code=200, history=[])])
186-
self.assertRaises(exceptions.ValidationError, lambda: self.redmine.user.create(firstname='J', lastname='Smith'))
187-
188184
def test_reraises_not_found_exception(self):
189185
self.response.status_code = 404
190186
self.assertRaises(exceptions.ResourceNotFoundError, lambda: self.redmine.project.get('non-existent-project'))

0 commit comments

Comments
 (0)