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 get(self, collection): """ Route : GET /<collection>/ Description : Gets the list of documents in the given collection filtered with the given filters Returns a list of documents with etag. """ if not self.app.config['COLLECTION_GET']: abort(405) if collection not in self.app.DOMAINS: abort(404) args = request.values.to_dict() if args: args, opts = format_args(args) cursor = self.mongo.db[collection].find(args, **opts) else: cursor = self.mongo.db[collection].find(limit=20) base_url = request.base_url #: Building response response = {'links': [], 'title': '', 'description': ''} if 'title' in self.app.DOMAINS[collection]: response['title'] = self.app.DOMAINS[collection]['title'] if 'description' in self.app.DOMAINS[collection]: response['description'] = self.app.DOMAINS[collection][ 'description'] response['links'].append( get_self_link(title=response['title'], base_url=base_url, description='You are here.', methods=["GET", "POST", "DELETE"])) response['links'].append(get_parent_link(base_url)) for document in cursor: response['links'].append(get_document_link(document, base_url)) return send_response(response)
def get(self, collection): """ Route : GET /<collection>/ Description : Gets the list of documents in the given collection filtered with the given filters Returns a list of documents with etag. """ if not self.app.config['COLLECTION_GET']: abort(405) if collection not in self.app.DOMAINS: abort(404) args = request.values.to_dict() if args: args, opts = format_args(args) cursor = self.mongo.db[collection].find(args, **opts) else: cursor = self.mongo.db[collection].find(limit=20) base_url = request.base_url #: Building response response = {'links' : [], 'title' :'', 'description' : ''} if 'title' in self.app.DOMAINS[collection]: response['title'] = self.app.DOMAINS[collection]['title'] if 'description' in self.app.DOMAINS[collection]: response['description'] = self.app.DOMAINS[collection]['description'] response['links'].append(get_self_link( title=response['title'], base_url=base_url, description='You are here.', methods=["GET", "POST", "DELETE"] )) response['links'].append(get_parent_link(base_url)) for document in cursor: response['links'].append(get_document_link(document, base_url)) return send_response(response)