class_docstr: Engine spec for clickhouse-connect connector
code: def get_parameters_from_uri(
      cls, uri: str, encrypted_extra: dict[str, Any] | None = None
  ) -> BasicParametersType:
      url = make_url_safe(uri)
      query = url.query
      if "secure" in query:
          encryption = url.query.get("secure") == "true"
          query.pop("secure")
      else:
          encryption = False
      return BasicParametersType(
          username=url.username,
          password=url.password,
          host=url.host,
          port=url.port,
          database=""
          if url.database == "__default__"
          else cast(str, url.database),
          query=dict(query),
          encryption=encryption,
      )
  
imports: from __future__ import annotations
  import logging
  import re
  from datetime import datetime
  from typing import Any, cast, TYPE_CHECKING
  from flask import current_app
  from flask_babel import gettext
  from marshmallow import fields, Schema
  from marshmallow.validate import Range
  from sqlalchemy import types
  from sqlalchemy.engine.url import URL
  from urllib3.exceptions import NewConnectionError
  from superset.databases.utils import make_url_safe
  from superset.db_engine_specs.base import BaseEngineSpec, BasicParametersMixin, BasicParametersType, BasicPropertiesType
  from superset.db_engine_specs.exceptions import SupersetDBAPIDatabaseError
  from superset.errors import ErrorLevel, SupersetError, SupersetErrorType
  from superset.extensions import cache_manager
  from superset.utils.core import GenericDataType
  from superset.utils.hashing import md5_sha_from_str
  from superset.utils.network import is_hostname_valid, is_port_open
label_desc: Use image node_id 6 for calling the ClickHouseConnectEngineSpec obj's underlying member method code with example usage: obj.get_parameters_from_uri(cls, uri, encrypted_extra) and returns: BasicParametersType