Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
 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")