code: def _get_module_class_registry(
      module_filepath: str, class_extras: dict[str, Any]
  ) -> dict[str, dict[str, Any]]:
      """Extracts classes and its information from a Python module file.
  
      The function parses the specified module file and registers all classes.
      The registry for each class includes the module filename, methods, base classes
      and any additional class extras provided.
  
      :param module_filepath: The file path of the module.
      :param class_extras: Additional information to include in each class's registry.
  
      :return: A dictionary with class names as keys and their corresponding information.
      """
      with open(module_filepath) as file:
          ast_obj = ast.parse(file.read())
  
      module_class_registry = {
          node.name: {
              "module_filepath": module_filepath,
              "methods": {
                  n.name
                  for n in ast.walk(node)
                  if isinstance(n, ast.FunctionDef)
              },
              "base_classes": [
                  b.id for b in node.bases if isinstance(b, ast.Name)
              ],
              **class_extras,
          }
          for node in ast_obj.body
          if isinstance(node, ast.ClassDef)
      }
      return module_class_registry
  
file_path: airflow/docs/exts/providers_extensions.py
imports: from __future__ import annotations
  import ast
  import os
  from pathlib import Path
  from typing import Any, Iterable
  import yaml
  from provider_yaml_utils import get_provider_yaml_paths
  from docs.exts.operators_and_hooks_ref import DEFAULT_HEADER_SEPARATOR, BaseJinjaReferenceDirective, _render_template
label_desc: Use image node_id 1 for calling a global function with example usage: _get_module_class_registry(module_filepath, class_extras) and returns: module_class_registry