def on_post(self, req: falcon.Request, resp: falcon.Response): if req.content_length: data = json.load(req.bounded_stream.read().decode("utf-8")) if User.authenticate(data): resp.status_code = 200 else: resp.status_code = 400
def on_get(self, req: falcon.Request, resp: falcon.Response): if req.content_length: data = json.load(req.bounded_stream.read().decode("utf-8")) votes_dict = Post.get_votecount(data) if votes_dict is not None: resp.body = json.dumps(votes_dict) resp.status_code = 200 else: resp.status_code = 400
def on_post(self, req: falcon.Request, resp: falcon.Response): if req.content_length: data = json.load(req.bounded_stream.read().decode("utf-8")) if data["vote"] == "up": Post.downvote(data) resp.status_code = 200 elif data["vote"] == "down": Post.upvote(data) resp.status_code = 200 else: resp.status_code = 400
def on_delete(self, req: falcon.Request, resp: falcon.Response): if req.content_length: data = json.load(req.bounded_stream.read().decode("utf-8")) User.delete_user(data) resp.status_code = 200
def on_post(self, req: falcon.Request, resp: falcon.Response): if req.content_length: data = json.load(req.bounded_stream.read().decode("utf-8")) Post.add_to_DB(data) resp.status_code = 200
def on_put_user(self, req: falcon.Request, resp: falcon.Response, user_id: str): # parse inputs - get data try: path_data = schema.UserPathParamSchema().load({"user_id": user_id}) except marshmallow.ValidationError as err: resp.media = {"error": dict(err.messages)} resp.status = falcon.HTTP_400 return # parse inputs - json data try: body_data = schema.UserSchema().load(req.params) except marshmallow.ValidationError as err: resp.media = {"error": dict(err.messages)} resp.status = falcon.HTTP_400 return # do business logic try: output = self.controller.update_user(path_data, body_data) except errors.ErrorWithStatus as err: output = {"error": str(err)} resp.status_code = err.status_code # format and return output resp.media = output
def on_get( self, req: falcon.Request, resp: falcon.Response, ): """Support GET method.""" key = req.get_param('key') try: resp.body = self.memcache_client.get(key) # pylint: disable=no-member resp.status_code = falcon.HTTP_OK except ConnectionRefusedError: raise falcon.HTTPInternalServerError( code=1234, description='Unexpected error occurred while retrieving data.', title='Internal Server Error', )
def on_post( self, req: falcon.Request, resp: falcon.Response, ): """Support POST method.""" key: str = req.get_param('key') value: str = req.get_param('value') try: resp.body = str(self.redis_client.set(key, value)) # pylint: disable=no-member resp.status_code = falcon.HTTP_OK except redis.exceptions.RedisError: raise falcon.HTTPInternalServerError( code=1234, description='Unexpected error occurred while retrieving data.', title='Internal Server Error', )
def on_get_users(self, req: falcon.Request, resp: falcon.Response): # parse inputs try: data = schema.UserQueryParamSchema().load(req.params) except marshmallow.ValidationError as err: resp.media = {"error": dict(err.messages)} resp.status = falcon.HTTP_400 return # do business logic try: output = self.controller.get_users(data) except errors.ErrorWithStatus as err: output = {"error": str(err)} resp.status_code = err.status_code # format and return output resp.media = output
def on_post(self, req: falcon.Request, resp: falcon.Response, rtype: str = None): """ Handles POST requests. """ # Check URL parameters if not rtype: raise falcon.HTTPBadRequest( title='Missing URL Parameters', description='Resource type identifier is required in the URL.') try: # Retrieve body parameters rname, rdata, ttl = req.media['rname'], req.media['rdata'], \ req.media.get('ttl', Config.get('default-record-ttl', 3600)) # Validate record RecordValidator.validate(rname, rtype, rdata) # Create record entity record = Record(rname=rname, rtype=rtype, ttl=ttl, rdata=rdata) # Add and commit database transaction req.context.dbconn.add(record) req.context.dbconn.commit() except KeyError as e: raise falcon.HTTPBadRequest( title='Missing Body Parameters', description=f'Missing \'{str(e)}\' in the request body.') except (InvalidDNSRecord, InvalidDNSRecordType) as e: raise falcon.HTTPConflict(title='Conflict', description=str(e)) except IntegrityError: # Rollback transaction req.context.dbconn.rollback() # Raise 409 conflict raise falcon.HTTPConflict(title='Conflict', description='Record already exists.') except SQLAlchemyError as e: # Rollback transaction req.context.dbconn.rollback() # Raise 500 internal server error raise falcon.HTTPInternalServerError( title='Internal Server Error', description=f'Message: {str(e)}') resp.status_code, resp.media = falcon.HTTP_201, { 'rname': record.rname, 'rtype': record.rtype, 'rdata': record.rdata, 'ttl': record.ttl, }
def on_put(self, req: falcon.Request, resp: falcon.Response, rtype: str = None, rname: str = None): """ Handles PUT requests. """ # Check URL parameters if not rtype: raise falcon.HTTPBadRequest( title='Missing URL Parameters', description='Resource type identifier is required in the URL.') if not rname: raise falcon.HTTPBadRequest( title='Missing URL Parameters', description='Resource name identifier is required in the URL.') # Save update statement where parameters where = {'rtype': rtype, 'rname': rname} try: # Retrieve body parameters values = { p: req.media.get(p) for p in ('rname', 'rdata', 'ttl') if req.media.get(p) } # Validate record RecordValidator.validate(values.get('rname', rname), rtype, values['rdata']) # Add and commit database transaction updated = req.context.dbconn.query(Record).filter_by( **where).update(values, synchronize_session=False) req.context.dbconn.commit() # If no rows were updated, insert if updated == 0: # Add and commit database transaction req.context.dbconn.add( Record(rname=values.get('rname', rname), rtype=rtype, rdata=values['rdata'], ttl=values.get('ttl'))) req.context.dbconn.commit() except KeyError as e: raise falcon.HTTPBadRequest( title='Missing Body Parameters', description=f'Missing \'{str(e)}\' in the request body.') except (InvalidDNSRecord, InvalidDNSRecordType) as e: raise falcon.HTTPConflict(title='Conflict', description=str(e)) except IntegrityError: # Rollback transaction req.context.dbconn.rollback() # Raise 409 conflict raise falcon.HTTPConflict(title='Conflict', description='Record already exists.') except SQLAlchemyError as e: # Rollback transaction req.context.dbconn.rollback() # Raise 500 internal server error raise falcon.HTTPInternalServerError( title='Internal Server Error', description=f'Message: {str(e)}') resp.status_code, resp.media = falcon.HTTP_200, { 'rname': values.get('rname', rname), 'rtype': rtype, 'rdata': values.get('rdata'), }