def get(self, type): """ --- summary: Count objects description: | Returns number of objects matching provided query. security: - bearerAuth: [] tags: - object parameters: - in: path name: type schema: type: string enum: [file, config, blob, object] description: Type of objects - in: query name: query schema: type: string description: Filter objects using Lucene query required: false responses: 200: description: Number of objects content: application/json: schema: ObjectCountResponseSchema 400: description: | When wrong parameters were provided or syntax error occurred in Lucene query 503: description: | Request canceled due to database statement timeout. """ schema = ObjectCountRequestSchema() obj = load_schema(request.args, schema) query = obj["query"] if query: try: db_query = SQLQueryBuilder().build_query( query, queried_type=get_type_from_str(type)) except SQLQueryBuilderBaseException as e: raise BadRequest(str(e)) except ParseError as e: raise BadRequest(str(e)) else: db_query = db.session.query(get_type_from_str(type)) db_query = db_query.filter(g.auth_user.has_access_to_object(Object.id)) result = db_query.count() schema = ObjectCountResponseSchema() return schema.dump({"count": result})
def post(self): """ --- summary: Search for objects (deprecated) description: | Returns objects found by Lucene query. Hard-limited to 10000 records. Use `query` argument in object get methods instead. security: - bearerAuth: [] tags: - deprecated requestBody: description: Search query content: application/json: schema: SearchRequestSchema responses: 200: description: Resulting objects content: application/json: schema: type: array items: $ref: '#/components/schemas/ObjectListItemResponse' 400: description: When request body or query syntax is invalid """ schema = SearchRequestSchema() obj = loads_schema(request.get_data(as_text=True), schema) query = obj["query"] try: result = ( SQLQueryBuilder() .build_query(query) .filter(g.auth_user.has_access_to_object(Object.id)) .order_by(Object.id.desc()) .limit(10000) ).all() except SQLQueryBuilderBaseException as e: raise BadRequest(str(e)) except ParseError as e: raise BadRequest(str(e)) schema = ObjectListItemResponseSchema(many=True) return schema.dump(result)
def get(self): """ --- summary: Search or list objects description: | Returns list of objects matching provided query, ordered from the latest one. Limited to 10 objects, use `older_than` parameter to fetch more. Don't rely on maximum count of returned objects because it can be changed/parametrized in future. security: - bearerAuth: [] tags: - object parameters: - in: query name: older_than schema: type: string description: | Fetch objects which are older than the object specified by identifier. Used for pagination required: false - in: query name: query schema: type: string description: Filter results using Lucene query required: false responses: 200: description: List of objects content: application/json: schema: ObjectListResponseSchema 400: description: | When wrong parameters were provided or syntax error occurred in Lucene query 404: description: When user doesn't have access to the `older_than` object 503: description: | Request canceled due to database statement timeout. """ if "page" in request.args: logger.warning("'%s' used legacy 'page' parameter", g.auth_user.login) obj = load_schema(request.args, ObjectListRequestSchema()) pivot_obj = None if obj["older_than"]: pivot_obj = Object.access(obj["older_than"]) if pivot_obj is None: raise NotFound( "Object specified in 'older_than' parameter not found") query = obj["query"] if query: try: db_query = SQLQueryBuilder().build_query( query, queried_type=self.ObjectType) except SQLQueryBuilderBaseException as e: raise BadRequest(str(e)) except ParseError as e: raise BadRequest(str(e)) else: db_query = db.session.query(self.ObjectType) db_query = db_query.filter(g.auth_user.has_access_to_object( Object.id)).order_by(Object.id.desc()) if pivot_obj: db_query = db_query.filter(Object.id < pivot_obj.id) # Legacy parameter - to be removed in the future elif obj["page"] is not None and obj["page"] > 1: db_query = db_query.offset((obj["page"] - 1) * 10) objects = db_query.limit(10).all() schema = self.ListResponseSchema() return schema.dump(objects, many=True)