Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit a41a07fa0699d0dcfa1c1471b4e9fedaeaadce1d
Author: Valentin Gologuzov <vgologuz(a)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