def post(self): """ Route : POST / Description : Creates a collection in the database. Returns status """ if not self.app.config['ROOT_POST']: abort(405) if request.mimetype != 'application/json': return send_error(415, "JSON_NEEDED", "Accepted media type : application/json") data = request.data if isinstance(data, str) or isinstance(data, unicode): try: data = json.loads(data) except JSONDecodeError: return send_error(400, "BAD_JSON_FORMAT") domain, content = data.popitem() if domain in self.app.DOMAINS: return send_error(400, message="ALREADY_EXISTS") else: self.app.DOMAINS[domain] = content return send_response(status=201)
def post(self, collection): """ Route : POST /<collection>/ Description : Creates a list of documents in the database. Returns status and _id for each document. """ if not self.app.config['COLLECTION_POST']: abort(405) if collection not in self.app.DOMAINS: abort(404) if request.mimetype != 'application/json': return send_error(415, "JSON_NEEDED", "Accepted media type : application/json") data = request.data if not data: return send_error(400, "EMPTY_DATA") if isinstance(data, str) or isinstance(data, unicode): try: data = json.loads(data) except JSONDecodeError: return send_error(400, "BAD_JSON_FORMAT") if isinstance(data, dict): status = self.validate(data, collection) if status['created']: base_url = request.base_url response = {'title': "Document created", 'links': []} response['links'].append( get_self_link(title=self.app.DOMAINS[collection]['title'], base_url=base_url, description='You are here.', methods=["GET", "POST", "DELETE"])) response['links'].append( get_document_link(status['document'], base_url)) return send_response(response, 201, get_etag(status['document'])) else: return send_error(400, "VALIDATION_ERROR", status['issues']) return send_error(400, "BAD_DATA_FORMAT")
def post(self, collection): """ Route : POST /<collection>/ Description : Creates a list of documents in the database. Returns status and _id for each document. """ if not self.app.config['COLLECTION_POST']: abort(405) if collection not in self.app.DOMAINS: abort(404) if request.mimetype != 'application/json': return send_error(415, "JSON_NEEDED", "Accepted media type : application/json") data = request.data if not data: return send_error(400, "EMPTY_DATA") if isinstance(data, str) or isinstance(data, unicode): try: data = json.loads(data) except JSONDecodeError: return send_error(400, "BAD_JSON_FORMAT") if isinstance(data, dict): status = self.validate(data, collection) if status['created']: base_url = request.base_url response = {'title': "Document created", 'links': []} response['links'].append(get_self_link( title=self.app.DOMAINS[collection]['title'], base_url=base_url, description='You are here.', methods=["GET", "POST", "DELETE"] )) response['links'].append(get_document_link(status['document'], base_url)) return send_response(response, 201, get_etag(status['document'])) else: return send_error(400, "VALIDATION_ERROR", status['issues']) return send_error(400, "BAD_DATA_FORMAT")
def put(self, collection, id): """ Route : PUT /<collection>/<id> Description : Updates the document. Returns the status. """ if not self.app.config['ITEM_PUT']: abort(405) if collection not in self.app.DOMAINS: abort(404) document = self.mongo.db[collection].find_one_or_404({"_id": id}) date_utc = datetime.utcnow() if request.mimetype != 'application/json': return send_error(415, "JSON_NEEDED", "Accepted media type : application/json") data = request.data if isinstance(data, str) or isinstance(data, unicode): try: data = json.loads(data) except JSONDecodeError: return send_error(400, "BAD_JSON_FORMAT") for key in data: document[key] = data[key] copy = {} for key in document: if key == "created": continue if key == "updated": continue if key == "_id": continue copy[key] = document[key] v = Validator() if v.validate(copy, self.app.DOMAINS[collection]['schema']): document['updated'] = date_utc self.mongo.db[collection].save(document) return send_response(status=200) return send_error(400, "VALIDATION_ERROR", v.error)
def put(self, collection, id): """ Route : PUT /<collection>/<id> Description : Updates the document. Returns the status. """ if not self.app.config['ITEM_PUT']: abort(405) if collection not in self.app.DOMAINS: abort(404) document = self.mongo.db[collection].find_one_or_404({"_id" : id}) date_utc = datetime.utcnow() if request.mimetype != 'application/json': return send_error(415, "JSON_NEEDED", "Accepted media type : application/json") data = request.data if isinstance(data, str) or isinstance(data, unicode): try: data = json.loads(data) except JSONDecodeError: return send_error(400, "BAD_JSON_FORMAT") for key in data: document[key] = data[key] copy = {} for key in document: if key == "created": continue if key == "updated": continue if key == "_id": continue copy[key] = document[key] v = Validator() if v.validate(copy, self.app.DOMAINS[collection]['schema']): document['updated'] = date_utc self.mongo.db[collection].save(document) return send_response(status=200) return send_error(400, "VALIDATION_ERROR", v.error)