+++ /dev/null
-from pecan import expose, request, abort, response
-from webob import exc
-from pecan.rest import RestController
-from ceph_brag.model import db
-import sys, traceback
-
-class RootController(RestController):
- def fail(self, status_code=200, msg="OK"):
- response.status = status_code
- return msg
-
- @expose('json')
- def get(self, *args, **kwargs):
- if len(args) == 0:
- #return the list of uuids
- try:
- result = db.get_uuids()
- except Exception as e:
- return self.fail(500, msg="Internal Server Error")
- elif len(args) == 1 or len(args) == 2 and args[1] == '':
- #/uuid
- try:
- result = db.get_versions(args[0])
- except Exception as e:
- return self.fail(status_code=500, msg="Internal Server Error")
-
- if result is None:
- return self.fail(400, msg="Invalid UUID")
- elif len(args) == 2 or len(args) == 3 and args[2] == '':
- #/uuid/version_number
- try:
- result = db.get_brag(args[0], args[1])
- except Exception as e:
- return self.fail(status_code=500, msg="Internal Server Error")
-
- if result is None:
- return self.fail(status_code=400, msg="Invalid UUID,version combination")
- else:
- return self.fail(status_code=400, msg="Invalid args")
-
- return result
-
- @expose(content_type='application/json')
- def put(self, *args, **kwargs):
- try:
- db.put_new_version(request.body.decode('utf-8'))
- except ValueError as ve:
- return self.fail(status_code=422, msg="Improper payload : " + str(ve))
- except KeyError as ke:
- msg = "Payload not as expected, some keys are missing : " + str(ke)
- return self.fail(status_code=422, msg=msg)
- except Exception as e:
- return self.fail(status_code=500, msg="Internal Server Error : " + str(e))
-
- response.status = 201
- return "CREATED"
-
- @expose()
- def delete(self, *args, **kwargs):
- if 'uuid' not in kwargs:
- return self.fail(status_code=400, msg="Required uuid parameter")
-
- uuid = kwargs['uuid']
- try:
- status = db.delete_uuid(uuid)
- except Exception as e:
- return self.fail(status_code=500, msg="Internal Server Error")
-
- if status is not None:
- return self.fail(status_code=status['status'], msg=status['msg'])
-
- response.status=200
- return "DELETED"