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"