def all_schemas(self, **kwargs: Any) -> FlaskResponse: """Get all schemas --- get: parameters: - in: query name: q content: application/json: schema: $ref: '#/components/schemas/get_schemas_schema' responses: 200: description: Related column data content: application/json: schema: $ref: "#/components/schemas/DatabaseSchemaResponseSchema" 400: $ref: '#/components/responses/400' 401: $ref: '#/components/responses/401' 404: $ref: '#/components/responses/404' 422: $ref: '#/components/responses/422' 500: $ref: '#/components/responses/500' """ args = kwargs.get("rison", {}) # handle pagination page, page_size = self._handle_page_args(args) filter_ = args.get("filter", "") _, databases = self.datamodel.query(page=page, page_size=page_size) result = [] count = 0 if databases: for database in databases: try: schemas = database.get_all_schema_names( cache=database.schema_cache_enabled, cache_timeout=database.schema_cache_timeout, force=False, ) except SQLAlchemyError: self.incr_stats("error", self.schemas.__name__) continue schemas = security_manager.get_schemas_accessible_by_user( database, schemas) count += len(schemas) for schema in schemas: if filter_: if schema.startswith(filter_): result.append({"text": schema, "value": schema}) else: result.append({"text": schema, "value": schema}) return self.response(200, count=count, result=result)
def schemas(self, pk: int, **kwargs: Any) -> FlaskResponse: """Get all schemas from a database --- get: description: Get all schemas from a database parameters: - in: path schema: type: integer name: pk description: The database id - in: query name: q content: application/json: schema: $ref: '#/components/schemas/database_schemas_query_schema' responses: 200: description: A List of all schemas from the database content: application/json: schema: $ref: "#/components/schemas/SchemasResponseSchema" 400: $ref: '#/components/responses/400' 401: $ref: '#/components/responses/401' 404: $ref: '#/components/responses/404' 500: $ref: '#/components/responses/500' """ database = self.datamodel.get(pk, self._base_filters) if not database: return self.response_404() try: schemas = database.get_all_schema_names( cache=database.schema_cache_enabled, cache_timeout=database.schema_cache_timeout, force=kwargs["rison"].get("force", False), ) schemas = security_manager.get_schemas_accessible_by_user( database, schemas) return self.response(200, result=schemas) except OperationalError: return self.response( 500, message="There was an error connecting to the database")