code: def url(self) -> str:
      title = re.sub(r"\W", "-", self.title)
      title = re.sub(r"-+", "-", title)
      title = urllib.parse.quote(title)
      id = self.id.replace("=", "")
      app_url = self._api.client.app_url
      if not app_url.endswith("/"):
          app_url = app_url + "/"
      return (
          f"{app_url}{self.entity}/{self.project}/reports/{title}--{id}"
      )
  
imports: import base64
  import inspect
  import json
  import re
  import urllib
  from copy import deepcopy
  from typing import List
  from ...None import __version__
  from ...None import termlog, termwarn
  from ...sdk.lib import ipython
  from ..public import Api
  from ..public import RetryingClient
  from ._blocks import P, PanelGrid, UnknownBlock, WeaveBlock, block_mapping, weave_blocks
  from .mutations import UPSERT_VIEW, VIEW_REPORT
  from .runset import Runset
  from .util import Attr, Base, Block, coalesce, generate_name, nested_get, nested_set
  from .validators import OneOf, TypeValidator
label_desc: Use image node_id 16 for calling the Report obj's underlying member method code with example usage: obj.url() and returns: app_url, self, str, self, str, title, str, id