docstr: Create a new permanent link.
  ---
  post:
    summary: Create a new permanent link
    requestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ExplorePermalinkStateSchema'
    responses:
      201:
        description: The permanent link was stored successfully.
        content:
          application/json:
            schema:
              type: object
              properties:
                key:
                  type: string
                  description: The key to retrieve the permanent link data.
                url:
                  type: string
                  description: permanent link.
      400:
        $ref: '#/components/responses/400'
      401:
        $ref: '#/components/responses/401'
      422:
        $ref: '#/components/responses/422'
      500:
        $ref: '#/components/responses/500'
docstr_tok: ["Create","a","new","permanent","link",".","--","-","post",":","summary",":","Create","a","new","permanent","link","requestBody",":","required",":","true","content",":","application\/json",":","schema",":","$","ref",":","'","#","\/components\/schemas\/ExplorePermalinkStateSchema'","responses",":","201",":","description",":","The","permanent","link","was","stored","successfully",".","content",":","application\/json",":","schema",":","type",":","object","properties",":","key",":","type",":","string","description",":","The","key","to","retrieve","the","permanent","link","data",".","url",":","type",":","string","description",":","permanent","link",".","400",":","$","ref",":","'","#","\/components\/responses\/400'","401",":","$","ref",":","'","#","\/components\/responses\/401'","422",":","$","ref",":","'","#","\/components\/responses\/422'","500",":","$","ref",":","'","#","\/components\/responses\/500","'"]
code: def post(self) -> Response:
      """Create a new permanent link.
      ---
      post:
        summary: Create a new permanent link
        requestBody:
          required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExplorePermalinkStateSchema'
        responses:
          201:
            description: The permanent link was stored successfully.
            content:
              application/json:
                schema:
                  type: object
                  properties:
                    key:
                      type: string
                      description: The key to retrieve the permanent link data.
                    url:
                      type: string
                      description: permanent link.
          400:
            $ref: '#/components/responses/400'
          401:
            $ref: '#/components/responses/401'
          422:
            $ref: '#/components/responses/422'
          500:
            $ref: '#/components/responses/500'
      """
      try:
          state = self.add_model_schema.load(request.json)
          key = CreateExplorePermalinkCommand(state=state).run()
          http_origin = request.headers.environ.get("HTTP_ORIGIN")
          url = f"{http_origin}/superset/explore/p/{key}/"
          return self.response(201, key=key, url=url)
      except ValidationError as ex:
          return self.response(400, message=ex.messages)
      except (
          ChartAccessDeniedError,
          DatasetAccessDeniedError,
          KeyValueAccessDeniedError,
      ) as ex:
          return self.response(403, message=str(ex))
      except (ChartNotFoundError, DatasetNotFoundError) as ex:
          return self.response(404, message=str(ex))
  
file_path: superset/superset/explore/permalink/api.py
imports: import logging
  from flask import request, Response
  from flask_appbuilder.api import expose, protect, safe
  from marshmallow import ValidationError
  from superset.commands.chart.exceptions import ChartAccessDeniedError, ChartNotFoundError
  from superset.commands.dataset.exceptions import DatasetAccessDeniedError, DatasetNotFoundError
  from superset.commands.explore.permalink.create import CreateExplorePermalinkCommand
  from superset.commands.explore.permalink.get import GetExplorePermalinkCommand
  from superset.constants import MODEL_API_RW_METHOD_PERMISSION_MAP
  from superset.explore.permalink.exceptions import ExplorePermalinkInvalidStateError
  from superset.explore.permalink.schemas import ExplorePermalinkStateSchema
  from superset.extensions import event_logger
  from superset.key_value.exceptions import KeyValueAccessDeniedError
  from superset.views.base_api import BaseSupersetApi, requires_json, statsd_metrics
label_desc: Use image node_id 1 for calling the ExplorePermalinkRestApi obj's underlying member method code with example usage: obj.post() and returns: self, self, self, self