示例#1
0
 def thumbnail(self, pk: int, digest: str,
               **kwargs: Dict[str, bool]) -> WerkzeugResponse:
     """Get Chart thumbnail
     ---
     get:
       description: Compute or get already computed chart thumbnail from cache.
       parameters:
       - in: path
         schema:
           type: integer
         name: pk
       - in: path
         schema:
           type: string
         name: sha
       responses:
         200:
           description: Chart thumbnail image
           content:
            image/*:
              schema:
                type: string
                format: binary
         302:
           description: Redirects to the current digest
         400:
           $ref: '#/components/responses/400'
         401:
           $ref: '#/components/responses/401'
         404:
           $ref: '#/components/responses/404'
         500:
           $ref: '#/components/responses/500'
     """
     chart = self.datamodel.get(pk, self._base_filters)
     if not chart:
         return self.response_404()
     if kwargs["rison"].get("force", False):
         cache_chart_thumbnail.delay(chart.id, force=True)
         return self.response(202, message="OK Async")
     # fetch the chart screenshot using the current user and cache if set
     screenshot = ChartScreenshot(pk).get_from_cache(cache=thumbnail_cache)
     # If not screenshot then send request to compute thumb to celery
     if not screenshot:
         cache_chart_thumbnail.delay(chart.id, force=True)
         return self.response(202, message="OK Async")
     # If digests
     if chart.digest != digest:
         return redirect(
             url_for(f"{self.__class__.__name__}.thumbnail",
                     pk=pk,
                     digest=chart.digest))
     return Response(FileWrapper(screenshot),
                     mimetype="image/png",
                     direct_passthrough=True)
示例#2
0
 def trigger_celery() -> WerkzeugResponse:
     logger.info("Triggering screenshot ASYNC")
     kwargs = {
         "url": chart_url,
         "digest": chart.digest,
         "force": True,
         "window_size": window_size,
         "thumb_size": thumb_size,
     }
     cache_chart_thumbnail.delay(**kwargs)
     return self.response(
         202, cache_key=cache_key, chart_url=chart_url, image_url=image_url
     )
示例#3
0
def event_after_chart_changed(_mapper: Mapper, _connection: Connection,
                              target: Slice) -> None:
    url = get_url_path("Superset.slice", slice_id=target.id, standalone="true")
    cache_chart_thumbnail.delay(url, target.digest, force=True)
示例#4
0
def event_after_chart_changed(  # pylint: disable=unused-argument
        mapper: Mapper, connection: Connection, target: Slice) -> None:
    cache_chart_thumbnail.delay(target.id, force=True)