Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
commit a41a07fa0699d0dcfa1c1471b4e9fedaeaadce1d Author: Valentin Gologuzov vgologuz@redhat.com Date: Wed Sep 2 18:50:23 2015 +0200
[frontend][API] fix handling bad json; Updating documentation: PUT /projects/<id>
frontend/coprs_frontend/coprs/rest_api/util.py | 7 +++- .../tests/test_api/test_project_r.py | 8 ++++ frontend/docs/api_2/source/Resources/project.rst | 39 +++++++++++++++++++- 3 files changed, 52 insertions(+), 2 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/rest_api/util.py b/frontend/coprs_frontend/coprs/rest_api/util.py index a7e77b6..eec3085 100644 --- a/frontend/coprs_frontend/coprs/rest_api/util.py +++ b/frontend/coprs_frontend/coprs/rest_api/util.py @@ -35,7 +35,12 @@ def json_loads_safe(raw, data_on_error=None):
def mm_deserialize(schema, json_string): - result = schema.loads(json_string) + try: + result = schema.loads(json_string) + except ValueError as err: + raise MalformedRequest(data="Failed to parse request: {}" + .format(err)) + if result.errors: raise MalformedRequest(data="Failed to parse request: {}" .format(result.errors)) diff --git a/frontend/coprs_frontend/tests/test_api/test_project_r.py b/frontend/coprs_frontend/tests/test_api/test_project_r.py index 9a3fa0b..b73489c 100644 --- a/frontend/coprs_frontend/tests/test_api/test_project_r.py +++ b/frontend/coprs_frontend/tests/test_api/test_project_r.py @@ -144,6 +144,14 @@ class TestProjectResource(CoprsTestCase): assert len(copr_chroots_dict["chroots"]) == 1 assert copr_chroots_dict["chroots"][0]["chroot"]["name"] == chroot_name
+ def test_project_create_bad_json(self, f_users, f_mock_chroots, f_users_api, f_db): + r = self.request_rest_api_with_auth( + "/api_2/projects", + data="fdf{fsd", + method="post") + + assert r.status_code == 400 + def test_project_create_bad_values( self, f_users, f_mock_chroots, f_users_api, f_db): diff --git a/frontend/docs/api_2/source/Resources/project.rst b/frontend/docs/api_2/source/Resources/project.rst index 944a51a..450e8f6 100644 --- a/frontend/docs/api_2/source/Resources/project.rst +++ b/frontend/docs/api_2/source/Resources/project.rst @@ -236,12 +236,13 @@ Delete project
**REQUIRE AUTH**
- Deletes copr project + Deletes Copr project
:param project_id: a unique identifier of the Copr project.
:statuscode 204: project was removed :statuscode 400: could not delete build right now, most probably due to unfinished builds + :statuscode 403: authorization failed :statuscode 404: project not found
**Example request**: @@ -260,3 +261,39 @@ Delete project
Modify project -------------- +.. http:put:: /api_2/projects/(int:project_id) + + **REQUIRE AUTH** + + Updates Copr project. + + .. note:: You couldn't add or remove project chroots here, use ProjectChroots_ resource. + + :param project_id: a unique identifier of the Copr project. + + :statuscode 201: project was updated + :statuscode 400: malformed request, see response content for details + :statuscode 403: authorization failed + :statuscode 404: project not found + + **Example request**: + + .. sourcecode:: http + + PUT /api_2/projects/1 HTTP/1.1 + Host: copr.fedoraproject.org + Authorization: Basic base64=encoded=string + Accept: application/json + + { + "disable_createrepo": true, + "build_enable_net": false, + "instructions": "foobar" + } + + **Response** + + .. sourcecode:: http + + HTTP/1.1 201 NO CONTENT + Location: /api_2/projects/1