diff --git a/README.md b/README.md index edef8a7..5c9691f 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Create a virtual environment and run it: The API exposes the following endpoints: - GET `/items` — return views and downloads for all items that Solr knows about¹. Accepts `limit` and `page` query parameters for pagination of results. - - GET `/item/id` — return views and downloads for a single item (*id* must be a positive integer). + - GET `/item/id` — return views and downloads for a single item (*id* must be a positive integer). Returns HTTP 404 if an item id is not found. ¹ We are querying the Solr statistics core, which technically only knows about items that have either views or downloads. @@ -24,7 +24,6 @@ The API exposes the following endpoints: - Add API documentation - Close up DB connection when gunicorn shuts down gracefully - Better logging -- Return HTTP 404 when item_id is nonexistent - Tests ## License diff --git a/app.py b/app.py index 32de53e..f3833c2 100644 --- a/app.py +++ b/app.py @@ -47,17 +47,24 @@ class ItemResource: cursor = db.cursor() cursor.execute('SELECT views, downloads FROM items WHERE id={}'.format(item_id)) - results = cursor.fetchone() + if cursor.rowcount == 0: + raise falcon.HTTPNotFound( + title='Item not found', + description='The item with id "{}" was not found.'.format(item_id) + ) + else: + results = cursor.fetchone() + + statistics = { + 'id': item_id, + 'views': results['views'], + 'downloads': results['downloads'] + } + + resp.media = statistics + cursor.close() - statistics = { - 'id': item_id, - 'views': results['views'], - 'downloads': results['downloads'] - } - - resp.media = statistics - api = falcon.API() api.add_route('/items', AllItemsResource()) api.add_route('/item/{item_id:int}', ItemResource())