docstr: Create a new dashboard's permanent link.
  ---
  post:
    summary: Create a new dashboard's permanent link
    parameters:
    - in: path
      schema:
        type: string
      name: pk
    requestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DashboardPermalinkStateSchema'
    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","dashboard","'s","permanent","link",".","--","-","post",":","summary",":","Create","a","new","dashboard","'s","permanent","link","parameters",":","-","in",":","path","schema",":","type",":","string","name",":","pk","requestBody",":","required",":","true","content",":","application\/json",":","schema",":","$","ref",":","'","#","\/components\/schemas\/DashboardPermalinkStateSchema'","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, pk: str) -> Response:
      """Create a new dashboard's permanent link.
      ---
      post:
        summary: Create a new dashboard's permanent link
        parameters:
        - in: path
          schema:
            type: string
          name: pk
        requestBody:
          required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DashboardPermalinkStateSchema'
        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 = CreateDashboardPermalinkCommand(
              dashboard_id=pk,
              state=state,
          ).run()
          http_origin = request.headers.environ.get("HTTP_ORIGIN")
          url = f"{http_origin}/superset/dashboard/p/{key}/"
          return self.response(201, key=key, url=url)
      except (
          ValidationError,
          DashboardPermalinkInvalidStateError,
      ) as ex:
          return self.response(400, message=str(ex))
      except (
          DashboardAccessDeniedError,
          KeyValueAccessDeniedError,
      ) as ex:
          return self.response(403, message=str(ex))
      except DashboardNotFoundError as ex:
          return self.response(404, message=str(ex))
  
file_path: superset/superset/dashboards/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.dashboard.exceptions import DashboardAccessDeniedError, DashboardNotFoundError
  from superset.commands.dashboard.permalink.create import CreateDashboardPermalinkCommand
  from superset.commands.dashboard.permalink.get import GetDashboardPermalinkCommand
  from superset.constants import MODEL_API_RW_METHOD_PERMISSION_MAP
  from superset.dashboards.permalink.exceptions import DashboardPermalinkInvalidStateError
  from superset.dashboards.permalink.schemas import DashboardPermalinkStateSchema
  from superset.extensions import event_logger
  from superset.key_value.exceptions import KeyValueAccessDeniedError
  from superset.views.base_api import BaseSupersetApi, requires_json
label_desc: Use image node_id 1 for calling the DashboardPermalinkRestApi obj's underlying member method code with example usage: obj.post(pk) and returns: self, self, self, self